6
Makefile
6
Makefile
@@ -41,6 +41,7 @@ ENABLE_BYP_RAW_DEMODULATORS ?= 0
|
|||||||
ENABLE_BLMIN_TMP_OFF ?= 0
|
ENABLE_BLMIN_TMP_OFF ?= 0
|
||||||
ENABLE_SCAN_RANGES ?= 1
|
ENABLE_SCAN_RANGES ?= 1
|
||||||
ENABLE_FEAT_F4HWN ?= 1
|
ENABLE_FEAT_F4HWN ?= 1
|
||||||
|
ENABLE_FEAT_F4HWN_FIXED_PWR ?= 0
|
||||||
|
|
||||||
# ---- DEBUGGING ----
|
# ---- DEBUGGING ----
|
||||||
ENABLE_AM_FIX_SHOW_DATA ?= 0
|
ENABLE_AM_FIX_SHOW_DATA ?= 0
|
||||||
@@ -210,7 +211,7 @@ ifeq ($(ENABLE_FEAT_F4HWN),1)
|
|||||||
VERSION_STRING_1 ?= v0.22
|
VERSION_STRING_1 ?= v0.22
|
||||||
|
|
||||||
AUTHOR_STRING_2 ?= F4HWN
|
AUTHOR_STRING_2 ?= F4HWN
|
||||||
VERSION_STRING_2 ?= v2.4
|
VERSION_STRING_2 ?= v2.5
|
||||||
|
|
||||||
AUTHOR_STRING ?= $(AUTHOR_STRING_1)+$(AUTHOR_STRING_2)
|
AUTHOR_STRING ?= $(AUTHOR_STRING_1)+$(AUTHOR_STRING_2)
|
||||||
VERSION_STRING ?= $(VERSION_STRING_2)
|
VERSION_STRING ?= $(VERSION_STRING_2)
|
||||||
@@ -399,6 +400,9 @@ ifeq ($(ENABLE_FEAT_F4HWN),1)
|
|||||||
CFLAGS += -DAUTHOR_STRING_1=\"$(AUTHOR_STRING_1)\" -DVERSION_STRING_1=\"$(VERSION_STRING_1)\"
|
CFLAGS += -DAUTHOR_STRING_1=\"$(AUTHOR_STRING_1)\" -DVERSION_STRING_1=\"$(VERSION_STRING_1)\"
|
||||||
CFLAGS += -DAUTHOR_STRING_2=\"$(AUTHOR_STRING_2)\" -DVERSION_STRING_2=\"$(VERSION_STRING_2)\"
|
CFLAGS += -DAUTHOR_STRING_2=\"$(AUTHOR_STRING_2)\" -DVERSION_STRING_2=\"$(VERSION_STRING_2)\"
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(ENABLE_FEAT_F4HWN_FIXED_PWR),1)
|
||||||
|
CFLAGS += -DENABLE_FEAT_F4HWN_FIXED_PWR
|
||||||
|
endif
|
||||||
|
|
||||||
LDFLAGS =
|
LDFLAGS =
|
||||||
LDFLAGS += -z noexecstack -mcpu=cortex-m0 -nostartfiles -Wl,-T,firmware.ld -Wl,--gc-sections
|
LDFLAGS += -z noexecstack -mcpu=cortex-m0 -nostartfiles -Wl,-T,firmware.ld -Wl,--gc-sections
|
||||||
|
@@ -504,7 +504,7 @@ void ACTION_BackLightOnDemand(void)
|
|||||||
if(gBackLight == false)
|
if(gBackLight == false)
|
||||||
{
|
{
|
||||||
gBacklightTimeOriginal = gEeprom.BACKLIGHT_TIME;
|
gBacklightTimeOriginal = gEeprom.BACKLIGHT_TIME;
|
||||||
gEeprom.BACKLIGHT_TIME = 7;
|
gEeprom.BACKLIGHT_TIME = 61;
|
||||||
gBackLight = true;
|
gBackLight = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -515,7 +515,7 @@ void ACTION_BackLightOnDemand(void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gEeprom.BACKLIGHT_TIME = 7;
|
gEeprom.BACKLIGHT_TIME = 61;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
app/app.c
10
app/app.c
@@ -894,7 +894,7 @@ void APP_Update(void)
|
|||||||
|
|
||||||
APP_EndTransmission();
|
APP_EndTransmission();
|
||||||
|
|
||||||
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
|
AUDIO_PlayBeep(BEEP_880HZ_60MS_DOUBLE_BEEP);
|
||||||
|
|
||||||
RADIO_SetVfoState(VFO_STATE_TIMEOUT);
|
RADIO_SetVfoState(VFO_STATE_TIMEOUT);
|
||||||
|
|
||||||
@@ -1253,12 +1253,6 @@ void APP_TimeSlice10ms(void)
|
|||||||
gNextTimeslice = false;
|
gNextTimeslice = false;
|
||||||
gFlashLightBlinkCounter++;
|
gFlashLightBlinkCounter++;
|
||||||
|
|
||||||
#ifdef ENABLE_BOOT_BEEPS
|
|
||||||
if (boot_counter_10ms > 0 && (boot_counter_10ms % 25) == 0) {
|
|
||||||
AUDIO_PlayBeep(BEEP_880HZ_40MS_OPTIONAL);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ENABLE_AM_FIX
|
#ifdef ENABLE_AM_FIX
|
||||||
if (gRxVfo->Modulation == MODULATION_AM) {
|
if (gRxVfo->Modulation == MODULATION_AM) {
|
||||||
AM_fix_10ms(gEeprom.RX_VFO);
|
AM_fix_10ms(gEeprom.RX_VFO);
|
||||||
@@ -1489,7 +1483,7 @@ void APP_TimeSlice500ms(void)
|
|||||||
// don't turn off backlight if user is in backlight menu option
|
// don't turn off backlight if user is in backlight menu option
|
||||||
&& !(gScreenToDisplay == DISPLAY_MENU && (UI_MENU_GetCurrentMenuId() == MENU_ABR || UI_MENU_GetCurrentMenuId() == MENU_ABR_MAX))
|
&& !(gScreenToDisplay == DISPLAY_MENU && (UI_MENU_GetCurrentMenuId() == MENU_ABR || UI_MENU_GetCurrentMenuId() == MENU_ABR_MAX))
|
||||||
&& --gBacklightCountdown_500ms == 0
|
&& --gBacklightCountdown_500ms == 0
|
||||||
&& gEeprom.BACKLIGHT_TIME < (ARRAY_SIZE(gSubMenu_BACKLIGHT) - 1)
|
&& gEeprom.BACKLIGHT_TIME < 61
|
||||||
) {
|
) {
|
||||||
BACKLIGHT_TurnOff();
|
BACKLIGHT_TurnOff();
|
||||||
}
|
}
|
||||||
|
@@ -129,7 +129,7 @@ int MENU_GetLimits(uint8_t menu_id, int32_t *pMin, int32_t *pMax)
|
|||||||
|
|
||||||
case MENU_ABR:
|
case MENU_ABR:
|
||||||
//*pMin = 0;
|
//*pMin = 0;
|
||||||
*pMax = ARRAY_SIZE(gSubMenu_BACKLIGHT) - 1;
|
*pMax = 61;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MENU_ABR_MIN:
|
case MENU_ABR_MIN:
|
||||||
@@ -269,7 +269,8 @@ int MENU_GetLimits(uint8_t menu_id, int32_t *pMin, int32_t *pMax)
|
|||||||
|
|
||||||
case MENU_TOT:
|
case MENU_TOT:
|
||||||
//*pMin = 0;
|
//*pMin = 0;
|
||||||
*pMax = ARRAY_SIZE(gSubMenu_TOT) - 1;
|
*pMin = 5;
|
||||||
|
*pMax = 179;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef ENABLE_VOX
|
#ifdef ENABLE_VOX
|
||||||
|
@@ -248,6 +248,10 @@ static void RestoreRegisters() {
|
|||||||
for (uint32_t i = 0; i < ARRAY_SIZE(registers_to_save); i++){
|
for (uint32_t i = 0; i < ARRAY_SIZE(registers_to_save); i++){
|
||||||
BK4819_WriteRegister(registers_to_save[i], registers_stack[i]);
|
BK4819_WriteRegister(registers_to_save[i], registers_stack[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
|
gVfoConfigureMode = VFO_CONFIGURE;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ToggleAFDAC(bool on) {
|
static void ToggleAFDAC(bool on) {
|
||||||
|
BIN
archive/f4hwn.fixed.packed.v2.4.bin
Normal file
BIN
archive/f4hwn.fixed.packed.v2.4.bin
Normal file
Binary file not shown.
BIN
archive/f4hwn.unfixed.packed.v2.4.bin
Normal file
BIN
archive/f4hwn.unfixed.packed.v2.4.bin
Normal file
Binary file not shown.
33
audio.c
33
audio.c
@@ -37,11 +37,11 @@ BEEP_Type_t gBeepToPlay = BEEP_NONE;
|
|||||||
void AUDIO_PlayBeep(BEEP_Type_t Beep)
|
void AUDIO_PlayBeep(BEEP_Type_t Beep)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (Beep != BEEP_880HZ_60MS_TRIPLE_BEEP &&
|
if (Beep != BEEP_880HZ_60MS_DOUBLE_BEEP &&
|
||||||
Beep != BEEP_500HZ_60MS_DOUBLE_BEEP &&
|
Beep != BEEP_500HZ_60MS_DOUBLE_BEEP &&
|
||||||
Beep != BEEP_440HZ_500MS &&
|
Beep != BEEP_440HZ_500MS &&
|
||||||
Beep != BEEP_880HZ_200MS &&
|
|
||||||
#ifndef ENABLE_FEAT_F4HWN
|
#ifndef ENABLE_FEAT_F4HWN
|
||||||
|
Beep != BEEP_880HZ_200MS &&
|
||||||
Beep != BEEP_880HZ_500MS &&
|
Beep != BEEP_880HZ_500MS &&
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
@@ -91,14 +91,12 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep)
|
|||||||
case BEEP_500HZ_60MS_DOUBLE_BEEP:
|
case BEEP_500HZ_60MS_DOUBLE_BEEP:
|
||||||
ToneFrequency = 500;
|
ToneFrequency = 500;
|
||||||
break;
|
break;
|
||||||
case BEEP_440HZ_40MS_OPTIONAL:
|
|
||||||
case BEEP_440HZ_500MS:
|
case BEEP_440HZ_500MS:
|
||||||
ToneFrequency = 440;
|
ToneFrequency = 440;
|
||||||
break;
|
break;
|
||||||
case BEEP_880HZ_40MS_OPTIONAL:
|
case BEEP_880HZ_60MS_DOUBLE_BEEP:
|
||||||
case BEEP_880HZ_60MS_TRIPLE_BEEP:
|
|
||||||
case BEEP_880HZ_200MS:
|
|
||||||
#ifndef ENABLE_FEAT_F4HWN
|
#ifndef ENABLE_FEAT_F4HWN
|
||||||
|
case BEEP_880HZ_200MS:
|
||||||
case BEEP_880HZ_500MS:
|
case BEEP_880HZ_500MS:
|
||||||
#endif
|
#endif
|
||||||
ToneFrequency = 880;
|
ToneFrequency = 880;
|
||||||
@@ -106,19 +104,21 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep)
|
|||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
case BEEP_400HZ_30MS:
|
case BEEP_400HZ_30MS:
|
||||||
ToneFrequency = 400;
|
ToneFrequency = 400;
|
||||||
BK4819_WriteRegister(BK4819_REG_70, BK4819_REG_70_ENABLE_TONE1 | ((1 & 0x7f) << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN));
|
|
||||||
break;
|
break;
|
||||||
case BEEP_500HZ_30MS:
|
case BEEP_500HZ_30MS:
|
||||||
ToneFrequency = 500;
|
ToneFrequency = 500;
|
||||||
BK4819_WriteRegister(BK4819_REG_70, BK4819_REG_70_ENABLE_TONE1 | ((1 & 0x7f) << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN));
|
|
||||||
break;
|
break;
|
||||||
case BEEP_600HZ_30MS:
|
case BEEP_600HZ_30MS:
|
||||||
ToneFrequency = 600;
|
ToneFrequency = 600;
|
||||||
BK4819_WriteRegister(BK4819_REG_70, BK4819_REG_70_ENABLE_TONE1 | ((1 & 0x7f) << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN));
|
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(Beep == BEEP_400HZ_30MS || Beep == BEEP_500HZ_30MS || Beep == BEEP_600HZ_30MS)
|
||||||
|
{
|
||||||
|
BK4819_WriteRegister(BK4819_REG_70, BK4819_REG_70_ENABLE_TONE1 | ((1 & 0x7f) << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN));
|
||||||
|
}
|
||||||
|
|
||||||
BK4819_PlayTone(ToneFrequency, true);
|
BK4819_PlayTone(ToneFrequency, true);
|
||||||
|
|
||||||
SYSTEM_DelayMs(2);
|
SYSTEM_DelayMs(2);
|
||||||
@@ -130,7 +130,7 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep)
|
|||||||
uint16_t Duration;
|
uint16_t Duration;
|
||||||
switch (Beep)
|
switch (Beep)
|
||||||
{
|
{
|
||||||
case BEEP_880HZ_60MS_TRIPLE_BEEP:
|
case BEEP_880HZ_60MS_DOUBLE_BEEP:
|
||||||
BK4819_ExitTxMute();
|
BK4819_ExitTxMute();
|
||||||
SYSTEM_DelayMs(60);
|
SYSTEM_DelayMs(60);
|
||||||
BK4819_EnterTxMute();
|
BK4819_EnterTxMute();
|
||||||
@@ -147,15 +147,6 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep)
|
|||||||
BK4819_ExitTxMute();
|
BK4819_ExitTxMute();
|
||||||
Duration = 60;
|
Duration = 60;
|
||||||
break;
|
break;
|
||||||
case BEEP_880HZ_40MS_OPTIONAL:
|
|
||||||
case BEEP_440HZ_40MS_OPTIONAL:
|
|
||||||
BK4819_ExitTxMute();
|
|
||||||
Duration = 40;
|
|
||||||
break;
|
|
||||||
case BEEP_880HZ_200MS:
|
|
||||||
BK4819_ExitTxMute();
|
|
||||||
Duration = 200;
|
|
||||||
break;
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
case BEEP_400HZ_30MS:
|
case BEEP_400HZ_30MS:
|
||||||
case BEEP_500HZ_30MS:
|
case BEEP_500HZ_30MS:
|
||||||
@@ -166,6 +157,10 @@ void AUDIO_PlayBeep(BEEP_Type_t Beep)
|
|||||||
#endif
|
#endif
|
||||||
case BEEP_440HZ_500MS:
|
case BEEP_440HZ_500MS:
|
||||||
#ifndef ENABLE_FEAT_F4HWN
|
#ifndef ENABLE_FEAT_F4HWN
|
||||||
|
case BEEP_880HZ_200MS:
|
||||||
|
BK4819_ExitTxMute();
|
||||||
|
Duration = 200;
|
||||||
|
break;
|
||||||
case BEEP_880HZ_500MS:
|
case BEEP_880HZ_500MS:
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
|
40
audio.h
40
audio.h
@@ -29,19 +29,17 @@ enum BEEP_Type_t
|
|||||||
BEEP_1KHZ_60MS_OPTIONAL,
|
BEEP_1KHZ_60MS_OPTIONAL,
|
||||||
BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL,
|
BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL,
|
||||||
BEEP_440HZ_500MS,
|
BEEP_440HZ_500MS,
|
||||||
BEEP_880HZ_200MS,
|
|
||||||
#ifndef ENABLE_FEAT_F4HWN
|
#ifndef ENABLE_FEAT_F4HWN
|
||||||
|
BEEP_880HZ_200MS,
|
||||||
BEEP_880HZ_500MS,
|
BEEP_880HZ_500MS,
|
||||||
#endif
|
#endif
|
||||||
BEEP_500HZ_60MS_DOUBLE_BEEP,
|
BEEP_500HZ_60MS_DOUBLE_BEEP,
|
||||||
BEEP_440HZ_40MS_OPTIONAL,
|
|
||||||
BEEP_880HZ_40MS_OPTIONAL,
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
BEEP_400HZ_30MS,
|
BEEP_400HZ_30MS,
|
||||||
BEEP_500HZ_30MS,
|
BEEP_500HZ_30MS,
|
||||||
BEEP_600HZ_30MS,
|
BEEP_600HZ_30MS,
|
||||||
#endif
|
#endif
|
||||||
BEEP_880HZ_60MS_TRIPLE_BEEP
|
BEEP_880HZ_60MS_DOUBLE_BEEP
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum BEEP_Type_t BEEP_Type_t;
|
typedef enum BEEP_Type_t BEEP_Type_t;
|
||||||
@@ -50,14 +48,25 @@ extern BEEP_Type_t gBeepToPlay;
|
|||||||
|
|
||||||
void AUDIO_PlayBeep(BEEP_Type_t Beep);
|
void AUDIO_PlayBeep(BEEP_Type_t Beep);
|
||||||
|
|
||||||
enum
|
static inline void AUDIO_AudioPathOn(void) {
|
||||||
{
|
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void AUDIO_AudioPathOff(void) {
|
||||||
|
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef ENABLE_VOICE
|
||||||
|
typedef enum VOICE_ID_t VOICE_ID_t;
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
VOICE_ID_CHI_BASE = 0x10U,
|
VOICE_ID_CHI_BASE = 0x10U,
|
||||||
VOICE_ID_ENG_BASE = 0x60U,
|
VOICE_ID_ENG_BASE = 0x60U,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum VOICE_ID_t
|
enum VOICE_ID_t
|
||||||
{
|
{
|
||||||
VOICE_ID_0 = 0x00U,
|
VOICE_ID_0 = 0x00U,
|
||||||
VOICE_ID_1 = 0x01U,
|
VOICE_ID_1 = 0x01U,
|
||||||
VOICE_ID_2 = 0x02U,
|
VOICE_ID_2 = 0x02U,
|
||||||
@@ -136,19 +145,8 @@ enum VOICE_ID_t
|
|||||||
VOICE_ID_END = 0x4BU,
|
VOICE_ID_END = 0x4BU,
|
||||||
|
|
||||||
VOICE_ID_INVALID = 0xFFU,
|
VOICE_ID_INVALID = 0xFFU,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum VOICE_ID_t VOICE_ID_t;
|
|
||||||
|
|
||||||
static inline void AUDIO_AudioPathOn(void) {
|
|
||||||
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void AUDIO_AudioPathOff(void) {
|
|
||||||
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_AUDIO_PATH);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef ENABLE_VOICE
|
|
||||||
extern VOICE_ID_t gVoiceID[8];
|
extern VOICE_ID_t gVoiceID[8];
|
||||||
extern uint8_t gVoiceReadIndex;
|
extern uint8_t gVoiceReadIndex;
|
||||||
extern uint8_t gVoiceWriteIndex;
|
extern uint8_t gVoiceWriteIndex;
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
@echo off
|
@echo off
|
||||||
docker build -t uvk5 .
|
docker build -t uvk5 .
|
||||||
docker run --rm -v %CD%\compiled-firmware:/app/compiled-firmware uvk5 /bin/bash -c "cd /app && make clean && make && cp firmware* compiled-firmware/"
|
docker run --rm -v %CD%\compiled-firmware:/app/compiled-firmware uvk5 /bin/bash -c "cd /app && make clean && make && cp f4hwn* compiled-firmware/"
|
||||||
pause
|
pause
|
@@ -62,8 +62,8 @@ static void BACKLIGHT_Sound(void)
|
|||||||
{
|
{
|
||||||
if (gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_SOUND || gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_ALL)
|
if (gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_SOUND || gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_ALL)
|
||||||
{
|
{
|
||||||
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
|
AUDIO_PlayBeep(BEEP_880HZ_60MS_DOUBLE_BEEP);
|
||||||
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
|
AUDIO_PlayBeep(BEEP_880HZ_60MS_DOUBLE_BEEP);
|
||||||
gK5startup = false;
|
gK5startup = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -110,17 +110,10 @@ void BACKLIGHT_TurnOn(void)
|
|||||||
|
|
||||||
switch (gEeprom.BACKLIGHT_TIME) {
|
switch (gEeprom.BACKLIGHT_TIME) {
|
||||||
default:
|
default:
|
||||||
case 1: // 5 sec
|
case 1 ... 60: // 5 sec * value
|
||||||
case 2: // 10 sec
|
gBacklightCountdown_500ms = 1 + (gEeprom.BACKLIGHT_TIME * 5) * 2;
|
||||||
case 3: // 20 sec
|
|
||||||
gBacklightCountdown_500ms = 1 + (2 << (gEeprom.BACKLIGHT_TIME - 1)) * 5;
|
|
||||||
break;
|
break;
|
||||||
case 4: // 1 min
|
case 61: // always on
|
||||||
case 5: // 2 min
|
|
||||||
case 6: // 4 min
|
|
||||||
gBacklightCountdown_500ms = 1 + (2 << (gEeprom.BACKLIGHT_TIME - 4)) * 60;
|
|
||||||
break;
|
|
||||||
case 7: // always on
|
|
||||||
gBacklightCountdown_500ms = 0;
|
gBacklightCountdown_500ms = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -46,31 +46,79 @@ void ST7565_DrawLine(const unsigned int Column, const unsigned int Line, const u
|
|||||||
SPI_ToggleMasterMode(&SPI0->CR, true);
|
SPI_ToggleMasterMode(&SPI0->CR, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ST7565_BlitFullScreen(void)
|
|
||||||
{
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
|
// Optimization
|
||||||
|
//
|
||||||
|
// ST7565_BlitScreen(0) = ST7565_BlitStatusLine()
|
||||||
|
// ST7565_BlitScreen(1..7) = ST7565_BlitLine()
|
||||||
|
// ST7565_BlitScreen(8) = ST7565_BlitFullScreen()
|
||||||
|
//
|
||||||
|
|
||||||
|
static void ST7565_BlitScreen(uint8_t line)
|
||||||
|
{
|
||||||
|
SPI_ToggleMasterMode(&SPI0->CR, false);
|
||||||
|
ST7565_WriteByte(0x40);
|
||||||
|
|
||||||
|
if(line == 0)
|
||||||
|
{
|
||||||
|
DrawLine(0, 0, gStatusLine, LCD_WIDTH);
|
||||||
|
}
|
||||||
|
else if(line <= FRAME_LINES)
|
||||||
|
{
|
||||||
|
DrawLine(0, line, gFrameBuffer[line - 1], LCD_WIDTH);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (line = 1; line <= FRAME_LINES; line++) {
|
||||||
|
DrawLine(0, line, gFrameBuffer[line - 1], LCD_WIDTH);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SPI_ToggleMasterMode(&SPI0->CR, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ST7565_BlitFullScreen(void)
|
||||||
|
{
|
||||||
|
ST7565_BlitScreen(8);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ST7565_BlitLine(unsigned line)
|
||||||
|
{
|
||||||
|
ST7565_BlitScreen(line + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ST7565_BlitStatusLine(void)
|
||||||
|
{
|
||||||
|
ST7565_BlitScreen(0);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void ST7565_BlitFullScreen(void)
|
||||||
|
{
|
||||||
SPI_ToggleMasterMode(&SPI0->CR, false);
|
SPI_ToggleMasterMode(&SPI0->CR, false);
|
||||||
ST7565_WriteByte(0x40);
|
ST7565_WriteByte(0x40);
|
||||||
for (unsigned line = 0; line < FRAME_LINES; line++) {
|
for (unsigned line = 0; line < FRAME_LINES; line++) {
|
||||||
DrawLine(0, line+1, gFrameBuffer[line], LCD_WIDTH);
|
DrawLine(0, line+1, gFrameBuffer[line], LCD_WIDTH);
|
||||||
}
|
}
|
||||||
SPI_ToggleMasterMode(&SPI0->CR, true);
|
SPI_ToggleMasterMode(&SPI0->CR, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ST7565_BlitLine(unsigned line)
|
void ST7565_BlitLine(unsigned line)
|
||||||
{
|
{
|
||||||
SPI_ToggleMasterMode(&SPI0->CR, false);
|
SPI_ToggleMasterMode(&SPI0->CR, false);
|
||||||
ST7565_WriteByte(0x40); // start line ?
|
ST7565_WriteByte(0x40); // start line ?
|
||||||
DrawLine(0, line+1, gFrameBuffer[line], LCD_WIDTH);
|
DrawLine(0, line+1, gFrameBuffer[line], LCD_WIDTH);
|
||||||
SPI_ToggleMasterMode(&SPI0->CR, true);
|
SPI_ToggleMasterMode(&SPI0->CR, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ST7565_BlitStatusLine(void)
|
void ST7565_BlitStatusLine(void)
|
||||||
{ // the top small text line on the display
|
{ // the top small text line on the display
|
||||||
SPI_ToggleMasterMode(&SPI0->CR, false);
|
SPI_ToggleMasterMode(&SPI0->CR, false);
|
||||||
ST7565_WriteByte(0x40); // start line ?
|
ST7565_WriteByte(0x40); // start line ?
|
||||||
DrawLine(0, 0, gStatusLine, LCD_WIDTH);
|
DrawLine(0, 0, gStatusLine, LCD_WIDTH);
|
||||||
SPI_ToggleMasterMode(&SPI0->CR, true);
|
SPI_ToggleMasterMode(&SPI0->CR, true);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void ST7565_FillScreen(uint8_t value)
|
void ST7565_FillScreen(uint8_t value)
|
||||||
{
|
{
|
||||||
|
4
font.c
4
font.c
@@ -133,7 +133,7 @@ const uint8_t gFontBig[95 - 1][16 - 2] =
|
|||||||
{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '-'
|
{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /*0x00,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '-'
|
||||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00}, // '.'
|
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*0x00,*/ 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00}, // '.'
|
||||||
{0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x30, /*0x00,*/ 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00}, // '/'
|
{0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x30, /*0x00,*/ 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00}, // '/'
|
||||||
{0xF8, 0xFC, 0x84, 0xC4, 0x64, 0xFC, 0xF8, /*0x00,*/ 0x07, 0x0F, 0x09, 0x08, 0x08, 0x0F, 0x07}, // '0'
|
{0xF8, 0xFC, 0x04, 0x04, 0x04, 0xFC, 0xF8, /*0x00,*/ 0x07, 0x0F, 0x08, 0x08, 0x08, 0x0F, 0x07}, // '0'
|
||||||
{0x00, 0x10, 0x18, 0xFC, 0xFC, 0x00, 0x00, /*0x00,*/ 0x00, 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08}, // '1'
|
{0x00, 0x10, 0x18, 0xFC, 0xFC, 0x00, 0x00, /*0x00,*/ 0x00, 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08}, // '1'
|
||||||
{0x18, 0x1C, 0x04, 0x84, 0xC4, 0x7C, 0x38, /*0x00,*/ 0x0C, 0x0E, 0x0B, 0x09, 0x08, 0x08, 0x08}, // '2'
|
{0x18, 0x1C, 0x04, 0x84, 0xC4, 0x7C, 0x38, /*0x00,*/ 0x0C, 0x0E, 0x0B, 0x09, 0x08, 0x08, 0x08}, // '2'
|
||||||
{0x18, 0x1C, 0x44, 0x44, 0x44, 0xFC, 0xB8, /*0x00,*/ 0x06, 0x0E, 0x08, 0x08, 0x08, 0x0F, 0x07}, // '3'
|
{0x18, 0x1C, 0x44, 0x44, 0x44, 0xFC, 0xB8, /*0x00,*/ 0x06, 0x0E, 0x08, 0x08, 0x08, 0x0F, 0x07}, // '3'
|
||||||
@@ -254,7 +254,7 @@ const uint8_t gFontBig[95 - 1][16 - 2] =
|
|||||||
|
|
||||||
const uint8_t gFontBigDigits[11][26 - 6] =
|
const uint8_t gFontBigDigits[11][26 - 6] =
|
||||||
{
|
{
|
||||||
{/*0x00, 0x00,*/ 0xFC, 0xFE, 0xFE, 0x06, 0x86, 0xC6, 0xE6, 0xFE, 0xFE, 0xFC, /*0x00,*/ /*0x00, 0x00,*/ 0x3F, 0x7F, 0x7F, 0x67, 0x63, 0x61, 0x60, 0x7F, 0x7F, 0x3F, /*0x00*/},
|
{/*0x00, 0x00,*/ 0xFC, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x06, 0xFE, 0xFE, 0xFC, /*0x00,*/ /*0x00, 0x00,*/ 0x3F, 0x7F, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x7F, 0x7F, 0x3F, /*0x00*/},
|
||||||
{/*0x00, 0x00,*/ 0x00, 0x00, 0x18, 0x1C, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, /*0x00,*/ /*0x00, 0x00,*/ 0x00, 0x00, 0x60, 0x60, 0x7F, 0x7F, 0x7F, 0x60, 0x60, 0x00, /*0x00*/},
|
{/*0x00, 0x00,*/ 0x00, 0x00, 0x18, 0x1C, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, /*0x00,*/ /*0x00, 0x00,*/ 0x00, 0x00, 0x60, 0x60, 0x7F, 0x7F, 0x7F, 0x60, 0x60, 0x00, /*0x00*/},
|
||||||
{/*0x00, 0x00,*/ 0x1C, 0x1E, 0x1E, 0x06, 0x06, 0x06, 0x86, 0xFE, 0xFE, 0x7C, /*0x00,*/ /*0x00, 0x00,*/ 0x60, 0x70, 0x78, 0x7C, 0x6E, 0x67, 0x63, 0x61, 0x60, 0x60, /*0x00*/},
|
{/*0x00, 0x00,*/ 0x1C, 0x1E, 0x1E, 0x06, 0x06, 0x06, 0x86, 0xFE, 0xFE, 0x7C, /*0x00,*/ /*0x00, 0x00,*/ 0x60, 0x70, 0x78, 0x7C, 0x6E, 0x67, 0x63, 0x61, 0x60, 0x60, /*0x00*/},
|
||||||
{/*0x00, 0x00,*/ 0x0C, 0x0E, 0x0E, 0x86, 0x86, 0x86, 0x86, 0xFE, 0xFE, 0x7C, /*0x00,*/ /*0x00, 0x00,*/ 0x30, 0x70, 0x70, 0x61, 0x61, 0x61, 0x61, 0x7F, 0x7F, 0x3E, /*0x00*/},
|
{/*0x00, 0x00,*/ 0x0C, 0x0E, 0x0E, 0x86, 0x86, 0x86, 0x86, 0xFE, 0xFE, 0x7C, /*0x00,*/ /*0x00, 0x00,*/ 0x30, 0x70, 0x70, 0x61, 0x61, 0x61, 0x61, 0x7F, 0x7F, 0x3E, /*0x00*/},
|
||||||
|
@@ -222,6 +222,13 @@ int32_t TX_freq_check(const uint32_t Frequency)
|
|||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
|
case F_LOCK_PMR:
|
||||||
|
if (Frequency >= 44600625 && Frequency <= 44619375)
|
||||||
|
return 0;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case F_LOCK_ALL:
|
case F_LOCK_ALL:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@@ -219,7 +219,7 @@ void BATTERY_TimeSlice500ms(void)
|
|||||||
|
|
||||||
ST7565_HardwareReset();
|
ST7565_HardwareReset();
|
||||||
|
|
||||||
if (gEeprom.BACKLIGHT_TIME < (ARRAY_SIZE(gSubMenu_BACKLIGHT) - 1)) {
|
if (gEeprom.BACKLIGHT_TIME < 61) {
|
||||||
BACKLIGHT_TurnOff();
|
BACKLIGHT_TurnOff();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
7
main.c
7
main.c
@@ -151,7 +151,7 @@ void Main(void)
|
|||||||
{
|
{
|
||||||
FUNCTION_Select(FUNCTION_POWER_SAVE);
|
FUNCTION_Select(FUNCTION_POWER_SAVE);
|
||||||
|
|
||||||
if (gEeprom.BACKLIGHT_TIME < (ARRAY_SIZE(gSubMenu_BACKLIGHT) - 1)) // backlight is not set to be always on
|
if (gEeprom.BACKLIGHT_TIME < 61) // backlight is not set to be always on
|
||||||
BACKLIGHT_TurnOff(); // turn the backlight OFF
|
BACKLIGHT_TurnOff(); // turn the backlight OFF
|
||||||
else
|
else
|
||||||
BACKLIGHT_TurnOn(); // turn the backlight ON
|
BACKLIGHT_TurnOn(); // turn the backlight ON
|
||||||
@@ -177,11 +177,8 @@ void Main(void)
|
|||||||
boot_counter_10ms = 0;
|
boot_counter_10ms = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifdef ENABLE_BOOT_BEEPS
|
|
||||||
if ((boot_counter_10ms % 25) == 0)
|
|
||||||
AUDIO_PlayBeep(BEEP_880HZ_40MS_OPTIONAL);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
RADIO_SetupRegisters(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_PWRON_PASSWORD
|
#ifdef ENABLE_PWRON_PASSWORD
|
||||||
|
99
radio.c
99
radio.c
@@ -473,6 +473,7 @@ void RADIO_ConfigureSquelchAndOutputPower(VFO_Info_t *pInfo)
|
|||||||
EEPROM_ReadBuffer(0x1ED0 + (Band * 16) + (pInfo->OUTPUT_POWER * 3), Txp, 3);
|
EEPROM_ReadBuffer(0x1ED0 + (Band * 16) + (pInfo->OUTPUT_POWER * 3), Txp, 3);
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
|
#ifdef ENABLE_FEAT_F4HWN_FIXED_PWR
|
||||||
// make low and mid even lower
|
// make low and mid even lower
|
||||||
// and fix values
|
// and fix values
|
||||||
// because of toxic fucking closed firmwares
|
// because of toxic fucking closed firmwares
|
||||||
@@ -524,54 +525,59 @@ void RADIO_ConfigureSquelchAndOutputPower(VFO_Info_t *pInfo)
|
|||||||
Txp[1] = 165 + shift[6];
|
Txp[1] = 165 + shift[6];
|
||||||
Txp[2] = 165 + shift[6];
|
Txp[2] = 165 + shift[6];
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
// make low and mid even lower
|
||||||
|
// and use calibration values
|
||||||
|
// be aware with toxic fucking closed firmwares
|
||||||
|
|
||||||
// uint8_t shift[] = {0, 0, 0, 0, 0};
|
uint8_t shift[] = {0, 0, 0, 0, 0};
|
||||||
|
|
||||||
// /*
|
/*
|
||||||
// if(Band == 5)
|
if(Band == 5) // UHF
|
||||||
// {
|
{
|
||||||
// shift[0] = 3;
|
shift[0] = 0;
|
||||||
// shift[1] = 3;
|
shift[1] = 0;
|
||||||
// shift[2] = 4;
|
shift[2] = 0;
|
||||||
// shift[3] = 7;
|
shift[3] = 0;
|
||||||
// shift[4] = 8;
|
shift[4] = 0;
|
||||||
// }
|
}
|
||||||
// */
|
*/
|
||||||
|
|
||||||
// if (pInfo->OUTPUT_POWER == OUTPUT_POWER_LOW) {
|
if (pInfo->OUTPUT_POWER == OUTPUT_POWER_LOW) {
|
||||||
// for(uint8_t p = 0; p < 3; p++ )
|
for(uint8_t p = 0; p < 3; p++ )
|
||||||
// {
|
{
|
||||||
// switch (gSetting_set_low) {
|
switch (gSetting_set_low) {
|
||||||
// case 0:
|
case 0:
|
||||||
// Txp[p] = (Txp[p] * 4) / 25 + shift[gSetting_set_low];
|
Txp[p] = (Txp[p] * 4) / 25 + shift[gSetting_set_low];
|
||||||
// break;
|
break;
|
||||||
// case 1:
|
case 1:
|
||||||
// Txp[p] = (Txp[p] * 4) / 19 + shift[gSetting_set_low];
|
Txp[p] = (Txp[p] * 4) / 19 + shift[gSetting_set_low];
|
||||||
// break;
|
break;
|
||||||
// case 2:
|
case 2:
|
||||||
// Txp[p] = (Txp[p] * 4) / 13 + shift[gSetting_set_low];
|
Txp[p] = (Txp[p] * 4) / 13 + shift[gSetting_set_low];
|
||||||
// break;
|
break;
|
||||||
// case 3:
|
case 3:
|
||||||
// Txp[p] = (Txp[p] * 4) / 10 + shift[gSetting_set_low];
|
Txp[p] = (Txp[p] * 4) / 10 + shift[gSetting_set_low];
|
||||||
// break;
|
break;
|
||||||
// case 4:
|
case 4:
|
||||||
// Txp[p] = (Txp[p] * 4) / 7 + shift[gSetting_set_low];
|
Txp[p] = (Txp[p] * 4) / 7 + shift[gSetting_set_low];
|
||||||
// break;
|
break;
|
||||||
// }
|
}
|
||||||
|
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// else if (pInfo->OUTPUT_POWER == OUTPUT_POWER_MID){
|
else if (pInfo->OUTPUT_POWER == OUTPUT_POWER_MID){
|
||||||
// Txp[0] = (Txp[0] * 3) / 4;
|
Txp[0] = (Txp[0] * 3) / 4;
|
||||||
// Txp[1] = (Txp[1] * 3) / 4;
|
Txp[1] = (Txp[1] * 3) / 4;
|
||||||
// Txp[2] = (Txp[2] * 3) / 4;
|
Txp[2] = (Txp[2] * 3) / 4;
|
||||||
// }
|
}
|
||||||
// // increase high
|
// increase high
|
||||||
// else if (pInfo->OUTPUT_POWER == OUTPUT_POWER_HIGH){
|
else if (pInfo->OUTPUT_POWER == OUTPUT_POWER_HIGH){
|
||||||
// Txp[0] = Txp[0] + 30;
|
Txp[0] = Txp[0] + 30;
|
||||||
// Txp[1] = Txp[1] + 30;
|
Txp[1] = Txp[1] + 30;
|
||||||
// Txp[2] = Txp[2] + 30;
|
Txp[2] = Txp[2] + 30;
|
||||||
// }
|
}
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#ifdef ENABLE_REDUCE_LOW_MID_TX_POWER
|
#ifdef ENABLE_REDUCE_LOW_MID_TX_POWER
|
||||||
// make low and mid even lower
|
// make low and mid even lower
|
||||||
@@ -1107,12 +1113,17 @@ void RADIO_PrepareTX(void)
|
|||||||
if (gAlarmState == ALARM_STATE_OFF)
|
if (gAlarmState == ALARM_STATE_OFF)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
|
||||||
|
gTxTimerCountdown_500ms = ((gEeprom.TX_TIMEOUT_TIMER + 1) * 5) * 2;
|
||||||
|
|
||||||
|
/*
|
||||||
if (gEeprom.TX_TIMEOUT_TIMER == 0)
|
if (gEeprom.TX_TIMEOUT_TIMER == 0)
|
||||||
gTxTimerCountdown_500ms = 60; // 30 sec
|
gTxTimerCountdown_500ms = 60; // 30 sec
|
||||||
else if (gEeprom.TX_TIMEOUT_TIMER < (ARRAY_SIZE(gSubMenu_TOT) - 1))
|
else if (gEeprom.TX_TIMEOUT_TIMER < (ARRAY_SIZE(gSubMenu_TOT) - 1))
|
||||||
gTxTimerCountdown_500ms = 120 * gEeprom.TX_TIMEOUT_TIMER; // minutes
|
gTxTimerCountdown_500ms = 120 * gEeprom.TX_TIMEOUT_TIMER; // minutes
|
||||||
else
|
else
|
||||||
gTxTimerCountdown_500ms = 120 * 15; // 15 minutes
|
gTxTimerCountdown_500ms = 120 * 15; // 15 minutes
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
gTxTimerCountdownAlert_500ms = gTxTimerCountdown_500ms;
|
gTxTimerCountdownAlert_500ms = gTxTimerCountdown_500ms;
|
||||||
|
@@ -45,7 +45,7 @@ void SETTINGS_InitEEPROM(void)
|
|||||||
EEPROM_ReadBuffer(0x0E70, Data, 8);
|
EEPROM_ReadBuffer(0x0E70, Data, 8);
|
||||||
gEeprom.CHAN_1_CALL = IS_MR_CHANNEL(Data[0]) ? Data[0] : MR_CHANNEL_FIRST;
|
gEeprom.CHAN_1_CALL = IS_MR_CHANNEL(Data[0]) ? Data[0] : MR_CHANNEL_FIRST;
|
||||||
gEeprom.SQUELCH_LEVEL = (Data[1] < 10) ? Data[1] : 1;
|
gEeprom.SQUELCH_LEVEL = (Data[1] < 10) ? Data[1] : 1;
|
||||||
gEeprom.TX_TIMEOUT_TIMER = (Data[2] < 11) ? Data[2] : 1;
|
gEeprom.TX_TIMEOUT_TIMER = (Data[2] > 4 && Data[2] < 180) ? Data[2] : 11;
|
||||||
#ifdef ENABLE_NOAA
|
#ifdef ENABLE_NOAA
|
||||||
gEeprom.NOAA_AUTO_SCAN = (Data[3] < 2) ? Data[3] : false;
|
gEeprom.NOAA_AUTO_SCAN = (Data[3] < 2) ? Data[3] : false;
|
||||||
#endif
|
#endif
|
||||||
@@ -67,7 +67,7 @@ void SETTINGS_InitEEPROM(void)
|
|||||||
gEeprom.CROSS_BAND_RX_TX = (Data[2] < 3) ? Data[2] : CROSS_BAND_OFF;
|
gEeprom.CROSS_BAND_RX_TX = (Data[2] < 3) ? Data[2] : CROSS_BAND_OFF;
|
||||||
gEeprom.BATTERY_SAVE = (Data[3] < 5) ? Data[3] : 4;
|
gEeprom.BATTERY_SAVE = (Data[3] < 5) ? Data[3] : 4;
|
||||||
gEeprom.DUAL_WATCH = (Data[4] < 3) ? Data[4] : DUAL_WATCH_CHAN_A;
|
gEeprom.DUAL_WATCH = (Data[4] < 3) ? Data[4] : DUAL_WATCH_CHAN_A;
|
||||||
gEeprom.BACKLIGHT_TIME = (Data[5] < ARRAY_SIZE(gSubMenu_BACKLIGHT)) ? Data[5] : 3;
|
gEeprom.BACKLIGHT_TIME = (Data[5] < 62) ? Data[5] : 12;
|
||||||
gEeprom.TAIL_TONE_ELIMINATION = (Data[6] < 2) ? Data[6] : false;
|
gEeprom.TAIL_TONE_ELIMINATION = (Data[6] < 2) ? Data[6] : false;
|
||||||
gEeprom.VFO_OPEN = (Data[7] < 2) ? Data[7] : true;
|
gEeprom.VFO_OPEN = (Data[7] < 2) ? Data[7] : true;
|
||||||
|
|
||||||
|
@@ -45,6 +45,9 @@ enum TxLockModes_t {
|
|||||||
F_LOCK_GB,
|
F_LOCK_GB,
|
||||||
F_LOCK_430,
|
F_LOCK_430,
|
||||||
F_LOCK_438,
|
F_LOCK_438,
|
||||||
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
|
F_LOCK_PMR,
|
||||||
|
#endif
|
||||||
F_LOCK_ALL, // disable TX on all frequencies
|
F_LOCK_ALL, // disable TX on all frequencies
|
||||||
F_LOCK_NONE, // enable TX on all frequencies
|
F_LOCK_NONE, // enable TX on all frequencies
|
||||||
F_LOCK_LEN
|
F_LOCK_LEN
|
||||||
|
219
ui/menu.c
219
ui/menu.c
@@ -39,125 +39,125 @@
|
|||||||
|
|
||||||
const t_menu_item MenuList[] =
|
const t_menu_item MenuList[] =
|
||||||
{
|
{
|
||||||
// text, voice ID, menu ID
|
// text, menu ID
|
||||||
{"Step", VOICE_ID_FREQUENCY_STEP, MENU_STEP },
|
{"Step", MENU_STEP },
|
||||||
{"TxPwr", VOICE_ID_POWER, MENU_TXP }, // was "TXP"
|
{"TxPwr", MENU_TXP }, // was "TXP"
|
||||||
{"RxDCS", VOICE_ID_DCS, MENU_R_DCS }, // was "R_DCS"
|
{"RxDCS", MENU_R_DCS }, // was "R_DCS"
|
||||||
{"RxCTCS", VOICE_ID_CTCSS, MENU_R_CTCS }, // was "R_CTCS"
|
{"RxCTCS", MENU_R_CTCS }, // was "R_CTCS"
|
||||||
{"TxDCS", VOICE_ID_DCS, MENU_T_DCS }, // was "T_DCS"
|
{"TxDCS", MENU_T_DCS }, // was "T_DCS"
|
||||||
{"TxCTCS", VOICE_ID_CTCSS, MENU_T_CTCS }, // was "T_CTCS"
|
{"TxCTCS", MENU_T_CTCS }, // was "T_CTCS"
|
||||||
{"TxODir", VOICE_ID_TX_OFFSET_FREQUENCY_DIRECTION, MENU_SFT_D }, // was "SFT_D"
|
{"TxODir", MENU_SFT_D }, // was "SFT_D"
|
||||||
{"TxOffs", VOICE_ID_TX_OFFSET_FREQUENCY, MENU_OFFSET }, // was "OFFSET"
|
{"TxOffs", MENU_OFFSET }, // was "OFFSET"
|
||||||
{"W/N", VOICE_ID_CHANNEL_BANDWIDTH, MENU_W_N },
|
{"W/N", MENU_W_N },
|
||||||
#ifndef ENABLE_FEAT_F4HWN
|
#ifndef ENABLE_FEAT_F4HWN
|
||||||
{"Scramb", VOICE_ID_SCRAMBLER_ON, MENU_SCR }, // was "SCR"
|
{"Scramb", MENU_SCR }, // was "SCR"
|
||||||
#endif
|
#endif
|
||||||
{"BusyCL", VOICE_ID_BUSY_LOCKOUT, MENU_BCL }, // was "BCL"
|
{"BusyCL", MENU_BCL }, // was "BCL"
|
||||||
{"Compnd", VOICE_ID_INVALID, MENU_COMPAND },
|
{"Compnd", MENU_COMPAND },
|
||||||
{"Demodu", VOICE_ID_INVALID, MENU_AM }, // was "AM"
|
{"Demodu", MENU_AM }, // was "AM"
|
||||||
{"ScAdd1", VOICE_ID_INVALID, MENU_S_ADD1 },
|
{"ScAdd1", MENU_S_ADD1 },
|
||||||
{"ScAdd2", VOICE_ID_INVALID, MENU_S_ADD2 },
|
{"ScAdd2", MENU_S_ADD2 },
|
||||||
{"ChSave", VOICE_ID_MEMORY_CHANNEL, MENU_MEM_CH }, // was "MEM-CH"
|
{"ChSave", MENU_MEM_CH }, // was "MEM-CH"
|
||||||
{"ChDele", VOICE_ID_DELETE_CHANNEL, MENU_DEL_CH }, // was "DEL-CH"
|
{"ChDele", MENU_DEL_CH }, // was "DEL-CH"
|
||||||
{"ChName", VOICE_ID_INVALID, MENU_MEM_NAME },
|
{"ChName", MENU_MEM_NAME },
|
||||||
|
|
||||||
{"SList", VOICE_ID_INVALID, MENU_S_LIST },
|
{"SList", MENU_S_LIST },
|
||||||
{"SList1", VOICE_ID_INVALID, MENU_SLIST1 },
|
{"SList1", MENU_SLIST1 },
|
||||||
{"SList2", VOICE_ID_INVALID, MENU_SLIST2 },
|
{"SList2", MENU_SLIST2 },
|
||||||
{"ScnRev", VOICE_ID_INVALID, MENU_SC_REV },
|
{"ScnRev", MENU_SC_REV },
|
||||||
#ifdef ENABLE_NOAA
|
#ifdef ENABLE_NOAA
|
||||||
{"NOAA-S", VOICE_ID_INVALID, MENU_NOAA_S },
|
{"NOAA-S", MENU_NOAA_S },
|
||||||
#endif
|
#endif
|
||||||
{"F1Shrt", VOICE_ID_INVALID, MENU_F1SHRT },
|
{"F1Shrt", MENU_F1SHRT },
|
||||||
{"F1Long", VOICE_ID_INVALID, MENU_F1LONG },
|
{"F1Long", MENU_F1LONG },
|
||||||
{"F2Shrt", VOICE_ID_INVALID, MENU_F2SHRT },
|
{"F2Shrt", MENU_F2SHRT },
|
||||||
{"F2Long", VOICE_ID_INVALID, MENU_F2LONG },
|
{"F2Long", MENU_F2LONG },
|
||||||
{"M Long", VOICE_ID_INVALID, MENU_MLONG },
|
{"M Long", MENU_MLONG },
|
||||||
|
|
||||||
{"KeyLck", VOICE_ID_INVALID, MENU_AUTOLK }, // was "AUTOLk"
|
{"KeyLck", MENU_AUTOLK }, // was "AUTOLk"
|
||||||
{"TxTOut", VOICE_ID_TRANSMIT_OVER_TIME, MENU_TOT }, // was "TOT"
|
{"TxTOut", MENU_TOT }, // was "TOT"
|
||||||
{"BatSav", VOICE_ID_SAVE_MODE, MENU_SAVE }, // was "SAVE"
|
{"BatSav", MENU_SAVE }, // was "SAVE"
|
||||||
{"Mic", VOICE_ID_INVALID, MENU_MIC },
|
{"Mic", MENU_MIC },
|
||||||
#ifdef ENABLE_AUDIO_BAR
|
#ifdef ENABLE_AUDIO_BAR
|
||||||
{"MicBar", VOICE_ID_INVALID, MENU_MIC_BAR },
|
{"MicBar", MENU_MIC_BAR },
|
||||||
#endif
|
#endif
|
||||||
{"ChDisp", VOICE_ID_INVALID, MENU_MDF }, // was "MDF"
|
{"ChDisp", MENU_MDF }, // was "MDF"
|
||||||
{"POnMsg", VOICE_ID_INVALID, MENU_PONMSG },
|
{"POnMsg", MENU_PONMSG },
|
||||||
{"BatTxt", VOICE_ID_INVALID, MENU_BAT_TXT },
|
{"BatTxt", MENU_BAT_TXT },
|
||||||
{"BackLt", VOICE_ID_INVALID, MENU_ABR }, // was "ABR"
|
{"BackLt", MENU_ABR }, // was "ABR"
|
||||||
{"BLMin", VOICE_ID_INVALID, MENU_ABR_MIN },
|
{"BLMin", MENU_ABR_MIN },
|
||||||
{"BLMax", VOICE_ID_INVALID, MENU_ABR_MAX },
|
{"BLMax", MENU_ABR_MAX },
|
||||||
{"BltTRX", VOICE_ID_INVALID, MENU_ABR_ON_TX_RX },
|
{"BltTRX", MENU_ABR_ON_TX_RX },
|
||||||
{"Beep", VOICE_ID_BEEP_PROMPT, MENU_BEEP },
|
{"Beep", MENU_BEEP },
|
||||||
#ifdef ENABLE_VOICE
|
#ifdef ENABLE_VOICE
|
||||||
{"Voice", VOICE_ID_VOICE_PROMPT, MENU_VOICE },
|
{"Voice", MENU_VOICE },
|
||||||
#endif
|
#endif
|
||||||
{"Roger", VOICE_ID_INVALID, MENU_ROGER },
|
{"Roger", MENU_ROGER },
|
||||||
{"STE", VOICE_ID_INVALID, MENU_STE },
|
{"STE", MENU_STE },
|
||||||
{"RP STE", VOICE_ID_INVALID, MENU_RP_STE },
|
{"RP STE", MENU_RP_STE },
|
||||||
{"1 Call", VOICE_ID_INVALID, MENU_1_CALL },
|
{"1 Call", MENU_1_CALL },
|
||||||
#ifdef ENABLE_ALARM
|
#ifdef ENABLE_ALARM
|
||||||
{"AlarmT", VOICE_ID_INVALID, MENU_AL_MOD },
|
{"AlarmT", MENU_AL_MOD },
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
{"ANI ID", VOICE_ID_ANI_CODE, MENU_ANI_ID },
|
{"ANI ID", MENU_ANI_ID },
|
||||||
#endif
|
#endif
|
||||||
{"UPCode", VOICE_ID_INVALID, MENU_UPCODE },
|
{"UPCode", MENU_UPCODE },
|
||||||
{"DWCode", VOICE_ID_INVALID, MENU_DWCODE },
|
{"DWCode", MENU_DWCODE },
|
||||||
{"PTT ID", VOICE_ID_INVALID, MENU_PTT_ID },
|
{"PTT ID", MENU_PTT_ID },
|
||||||
{"D ST", VOICE_ID_INVALID, MENU_D_ST },
|
{"D ST", MENU_D_ST },
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
{"D Resp", VOICE_ID_INVALID, MENU_D_RSP },
|
{"D Resp", MENU_D_RSP },
|
||||||
{"D Hold", VOICE_ID_INVALID, MENU_D_HOLD },
|
{"D Hold", MENU_D_HOLD },
|
||||||
#endif
|
#endif
|
||||||
{"D Prel", VOICE_ID_INVALID, MENU_D_PRE },
|
{"D Prel", MENU_D_PRE },
|
||||||
#ifdef ENABLE_DTMF_CALLING
|
#ifdef ENABLE_DTMF_CALLING
|
||||||
{"D Decd", VOICE_ID_INVALID, MENU_D_DCD },
|
{"D Decd", MENU_D_DCD },
|
||||||
{"D List", VOICE_ID_INVALID, MENU_D_LIST },
|
{"D List", MENU_D_LIST },
|
||||||
#endif
|
#endif
|
||||||
{"D Live", VOICE_ID_INVALID, MENU_D_LIVE_DEC }, // live DTMF decoder
|
{"D Live", MENU_D_LIVE_DEC }, // live DTMF decoder
|
||||||
#ifdef ENABLE_AM_FIX
|
#ifdef ENABLE_AM_FIX
|
||||||
{"AM Fix", VOICE_ID_INVALID, MENU_AM_FIX },
|
{"AM Fix", MENU_AM_FIX },
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_VOX
|
#ifdef ENABLE_VOX
|
||||||
{"VOX", VOICE_ID_VOX, MENU_VOX },
|
{"VOX", MENU_VOX },
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
{"SysInf", VOICE_ID_INVALID, MENU_VOL }, // was "VOL"
|
{"SysInf", MENU_VOL }, // was "VOL"
|
||||||
#else
|
#else
|
||||||
{"BatVol", VOICE_ID_INVALID, MENU_VOL }, // was "VOL"
|
{"BatVol", MENU_VOL }, // was "VOL"
|
||||||
#endif
|
#endif
|
||||||
{"RxMode", VOICE_ID_DUAL_STANDBY, MENU_TDR },
|
{"RxMode", MENU_TDR },
|
||||||
{"Sql", VOICE_ID_SQUELCH, MENU_SQL },
|
{"Sql", MENU_SQL },
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
{"SetLow", VOICE_ID_INVALID, MENU_SET_LOW },
|
{"SetLow", MENU_SET_LOW },
|
||||||
{"SetPtt", VOICE_ID_INVALID, MENU_SET_PTT },
|
{"SetPtt", MENU_SET_PTT },
|
||||||
{"SetTot", VOICE_ID_INVALID, MENU_SET_TOT },
|
{"SetTot", MENU_SET_TOT },
|
||||||
{"SetEot", VOICE_ID_INVALID, MENU_SET_EOT },
|
{"SetEot", MENU_SET_EOT },
|
||||||
{"SetCtr", VOICE_ID_INVALID, MENU_SET_CTR },
|
{"SetCtr", MENU_SET_CTR },
|
||||||
{"SetInv", VOICE_ID_INVALID, MENU_SET_INV },
|
{"SetInv", MENU_SET_INV },
|
||||||
{"SetLck", VOICE_ID_INVALID, MENU_SET_LCK },
|
{"SetLck", MENU_SET_LCK },
|
||||||
{"SetMet", VOICE_ID_INVALID, MENU_SET_MET },
|
{"SetMet", MENU_SET_MET },
|
||||||
{"SetGui", VOICE_ID_INVALID, MENU_SET_GUI },
|
{"SetGui", MENU_SET_GUI },
|
||||||
#endif
|
#endif
|
||||||
// hidden menu items from here on
|
// hidden menu items from here on
|
||||||
// enabled if pressing both the PTT and upper side button at power-on
|
// enabled if pressing both the PTT and upper side button at power-on
|
||||||
{"F Lock", VOICE_ID_INVALID, MENU_F_LOCK },
|
{"F Lock", MENU_F_LOCK },
|
||||||
{"Tx 200", VOICE_ID_INVALID, MENU_200TX }, // was "200TX"
|
{"Tx 200", MENU_200TX }, // was "200TX"
|
||||||
{"Tx 350", VOICE_ID_INVALID, MENU_350TX }, // was "350TX"
|
{"Tx 350", MENU_350TX }, // was "350TX"
|
||||||
{"Tx 500", VOICE_ID_INVALID, MENU_500TX }, // was "500TX"
|
{"Tx 500", MENU_500TX }, // was "500TX"
|
||||||
{"350 En", VOICE_ID_INVALID, MENU_350EN }, // was "350EN"
|
{"350 En", MENU_350EN }, // was "350EN"
|
||||||
#ifndef ENABLE_FEAT_F4HWN
|
#ifndef ENABLE_FEAT_F4HWN
|
||||||
{"ScraEn", VOICE_ID_INVALID, MENU_SCREN }, // was "SCREN"
|
{"ScraEn", MENU_SCREN }, // was "SCREN"
|
||||||
#endif
|
#endif
|
||||||
#ifdef ENABLE_F_CAL_MENU
|
#ifdef ENABLE_F_CAL_MENU
|
||||||
{"FrCali", VOICE_ID_INVALID, MENU_F_CALI }, // reference xtal calibration
|
{"FrCali", MENU_F_CALI }, // reference xtal calibration
|
||||||
#endif
|
#endif
|
||||||
{"BatCal", VOICE_ID_INVALID, MENU_BATCAL }, // battery voltage calibration
|
{"BatCal", MENU_BATCAL }, // battery voltage calibration
|
||||||
{"BatTyp", VOICE_ID_INVALID, MENU_BATTYP }, // battery type 1600/2200mAh
|
{"BatTyp", MENU_BATTYP }, // battery type 1600/2200mAh
|
||||||
{"Reset", VOICE_ID_INITIALISATION, MENU_RESET }, // might be better to move this to the hidden menu items ?
|
{"Reset", MENU_RESET }, // might be better to move this to the hidden menu items ?
|
||||||
|
|
||||||
{"", VOICE_ID_INVALID, 0xff } // end of list - DO NOT delete or move this this
|
{"", 0xff } // end of list - DO NOT delete or move this this
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint8_t FIRST_HIDDEN_MENU_ITEM = MENU_F_LOCK;
|
const uint8_t FIRST_HIDDEN_MENU_ITEM = MENU_F_LOCK;
|
||||||
@@ -197,21 +197,6 @@ const char gSubMenu_SAVE[][4] =
|
|||||||
"1:4"
|
"1:4"
|
||||||
};
|
};
|
||||||
|
|
||||||
const char gSubMenu_TOT[][7] =
|
|
||||||
{
|
|
||||||
"30 sec",
|
|
||||||
"1 min",
|
|
||||||
"2 min",
|
|
||||||
"3 min",
|
|
||||||
"4 min",
|
|
||||||
"5 min",
|
|
||||||
"6 min",
|
|
||||||
"7 min",
|
|
||||||
"8 min",
|
|
||||||
"9 min",
|
|
||||||
"15 min"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char* const gSubMenu_RXMode[] =
|
const char* const gSubMenu_RXMode[] =
|
||||||
{
|
{
|
||||||
"MAIN\nONLY", // TX and RX on main only
|
"MAIN\nONLY", // TX and RX on main only
|
||||||
@@ -305,22 +290,13 @@ const char * const gSubMenu_F_LOCK[] =
|
|||||||
"GB HAM\n144-148\n430-440",
|
"GB HAM\n144-148\n430-440",
|
||||||
"137-174\n400-430",
|
"137-174\n400-430",
|
||||||
"137-174\n400-438",
|
"137-174\n400-438",
|
||||||
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
|
"PMR 446",
|
||||||
|
#endif
|
||||||
"DISABLE\nALL",
|
"DISABLE\nALL",
|
||||||
"UNLOCK\nALL",
|
"UNLOCK\nALL",
|
||||||
};
|
};
|
||||||
|
|
||||||
const char gSubMenu_BACKLIGHT[][7] =
|
|
||||||
{
|
|
||||||
"OFF",
|
|
||||||
"5 sec",
|
|
||||||
"10 sec",
|
|
||||||
"20 sec",
|
|
||||||
"1 min",
|
|
||||||
"2 min",
|
|
||||||
"4 min",
|
|
||||||
"ON"
|
|
||||||
};
|
|
||||||
|
|
||||||
const char gSubMenu_RX_TX[][6] =
|
const char gSubMenu_RX_TX[][6] =
|
||||||
{
|
{
|
||||||
"OFF",
|
"OFF",
|
||||||
@@ -542,10 +518,11 @@ void UI_DisplayMenu(void)
|
|||||||
// draw the menu index number/count
|
// draw the menu index number/count
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
#ifdef ENABLE_FEAT_F4HWN
|
||||||
sprintf(String, "%02u/%u", 1 + gMenuCursor, gMenuListCount);
|
sprintf(String, "%02u/%u", 1 + gMenuCursor, gMenuListCount);
|
||||||
|
UI_PrintStringSmallNormal(String, 6, 0, 6);
|
||||||
#else
|
#else
|
||||||
sprintf(String, "%2u.%u", 1 + gMenuCursor, gMenuListCount);
|
sprintf(String, "%2u.%u", 1 + gMenuCursor, gMenuListCount);
|
||||||
#endif
|
|
||||||
UI_PrintStringSmallNormal(String, 2, 0, 6);
|
UI_PrintStringSmallNormal(String, 2, 0, 6);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else if (menu_index >= 0 && menu_index < (int)gMenuListCount)
|
else if (menu_index >= 0 && menu_index < (int)gMenuListCount)
|
||||||
{ // current menu item
|
{ // current menu item
|
||||||
@@ -665,7 +642,19 @@ void UI_DisplayMenu(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
case MENU_ABR:
|
case MENU_ABR:
|
||||||
strcpy(String, gSubMenu_BACKLIGHT[gSubMenuSelection]);
|
if(gSubMenuSelection == 0)
|
||||||
|
{
|
||||||
|
sprintf(String, "%s", "OFF");
|
||||||
|
}
|
||||||
|
else if(gSubMenuSelection < 61)
|
||||||
|
{
|
||||||
|
sprintf(String, "%02dm:%02ds", (((gSubMenuSelection) * 5) / 60), (((gSubMenuSelection) * 5) % 60));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprintf(String, "%s", "ON");
|
||||||
|
}
|
||||||
|
|
||||||
if(BACKLIGHT_GetBrightness() < 4)
|
if(BACKLIGHT_GetBrightness() < 4)
|
||||||
BACKLIGHT_SetBrightness(4);
|
BACKLIGHT_SetBrightness(4);
|
||||||
break;
|
break;
|
||||||
@@ -784,7 +773,7 @@ void UI_DisplayMenu(void)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case MENU_TOT:
|
case MENU_TOT:
|
||||||
strcpy(String, gSubMenu_TOT[gSubMenuSelection]);
|
sprintf(String, "%02dm:%02ds", (((gSubMenuSelection + 1) * 5) / 60), (((gSubMenuSelection + 1) * 5) % 60));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef ENABLE_VOICE
|
#ifdef ENABLE_VOICE
|
||||||
|
@@ -25,7 +25,6 @@
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char name[7]; // menu display area only has room for 6 characters
|
const char name[7]; // menu display area only has room for 6 characters
|
||||||
VOICE_ID_t voice_id;
|
|
||||||
uint8_t menu_id;
|
uint8_t menu_id;
|
||||||
} t_menu_item;
|
} t_menu_item;
|
||||||
|
|
||||||
@@ -181,7 +180,6 @@ extern const char* const gSubMenu_PTT_ID[5];
|
|||||||
extern const char gSubMenu_ROGER[3][6];
|
extern const char gSubMenu_ROGER[3][6];
|
||||||
extern const char gSubMenu_RESET[2][4];
|
extern const char gSubMenu_RESET[2][4];
|
||||||
extern const char* const gSubMenu_F_LOCK[F_LOCK_LEN];
|
extern const char* const gSubMenu_F_LOCK[F_LOCK_LEN];
|
||||||
extern const char gSubMenu_BACKLIGHT[8][7];
|
|
||||||
extern const char gSubMenu_RX_TX[4][6];
|
extern const char gSubMenu_RX_TX[4][6];
|
||||||
extern const char gSubMenu_BAT_TXT[3][8];
|
extern const char gSubMenu_BAT_TXT[3][8];
|
||||||
extern const char gSubMenu_BATTYP[2][9];
|
extern const char gSubMenu_BATTYP[2][9];
|
||||||
|
@@ -181,7 +181,7 @@ void UI_DisplayStatus()
|
|||||||
|
|
||||||
for (uint8_t i = 71; i < 79; i++)
|
for (uint8_t i = 71; i < 79; i++)
|
||||||
{
|
{
|
||||||
gFrameBuffer[-1][i] ^= 0x7F;
|
gStatusLine[i] ^= 0x7F;
|
||||||
}
|
}
|
||||||
x1 = x;
|
x1 = x;
|
||||||
}
|
}
|
||||||
|
31
ui/welcome.c
31
ui/welcome.c
@@ -68,35 +68,28 @@ void UI_DisplayWelcome(void)
|
|||||||
memset(WelcomeString0, 0, sizeof(WelcomeString0));
|
memset(WelcomeString0, 0, sizeof(WelcomeString0));
|
||||||
memset(WelcomeString1, 0, sizeof(WelcomeString1));
|
memset(WelcomeString1, 0, sizeof(WelcomeString1));
|
||||||
|
|
||||||
if (gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_VOLTAGE)
|
|
||||||
{
|
|
||||||
strcpy(WelcomeString0, "VOLTAGE");
|
|
||||||
sprintf(WelcomeString1, "%u.%02uV %u%%",
|
sprintf(WelcomeString1, "%u.%02uV %u%%",
|
||||||
gBatteryVoltageAverage / 100,
|
gBatteryVoltageAverage / 100,
|
||||||
gBatteryVoltageAverage % 100,
|
gBatteryVoltageAverage % 100,
|
||||||
BATTERY_VoltsToPercent(gBatteryVoltageAverage));
|
BATTERY_VoltsToPercent(gBatteryVoltageAverage));
|
||||||
|
|
||||||
|
if (gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_VOLTAGE)
|
||||||
|
{
|
||||||
|
strcpy(WelcomeString0, "VOLTAGE");
|
||||||
}
|
}
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
else if(gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_ALL)
|
||||||
else if (gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_MESSAGE || gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_ALL)
|
{
|
||||||
#else
|
EEPROM_ReadBuffer(0x0EB0, WelcomeString0, 16);
|
||||||
else
|
}
|
||||||
#endif
|
else if(gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_MESSAGE)
|
||||||
{
|
{
|
||||||
EEPROM_ReadBuffer(0x0EB0, WelcomeString0, 16);
|
EEPROM_ReadBuffer(0x0EB0, WelcomeString0, 16);
|
||||||
EEPROM_ReadBuffer(0x0EC0, WelcomeString1, 16);
|
EEPROM_ReadBuffer(0x0EC0, WelcomeString1, 16);
|
||||||
|
|
||||||
#ifdef ENABLE_FEAT_F4HWN
|
if(strlen(WelcomeString1) == 0)
|
||||||
if(gEeprom.POWER_ON_DISPLAY_MODE == POWER_ON_DISPLAY_MODE_ALL)
|
|
||||||
{
|
{
|
||||||
sprintf(WelcomeString1, "%u.%02uV %u%%",
|
strcpy(WelcomeString1, "BIENVENUE");
|
||||||
gBatteryVoltageAverage / 100,
|
|
||||||
gBatteryVoltageAverage % 100,
|
|
||||||
BATTERY_VoltsToPercent(gBatteryVoltageAverage));
|
|
||||||
}
|
}
|
||||||
else if(strlen(WelcomeString1) == 0) {
|
|
||||||
UI_PrintString("BIENVENUE", 0, 127, 2, 10);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UI_PrintString(WelcomeString0, 0, 127, 0, 10);
|
UI_PrintString(WelcomeString0, 0, 127, 0, 10);
|
||||||
@@ -121,7 +114,7 @@ void UI_DisplayWelcome(void)
|
|||||||
UI_PrintStringSmallNormal(Version, 0, 127, 6);
|
UI_PrintStringSmallNormal(Version, 0, 127, 6);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ST7565_BlitStatusLine(); // blank status line
|
//ST7565_BlitStatusLine(); // blank status line : I think it's useless
|
||||||
ST7565_BlitFullScreen();
|
ST7565_BlitFullScreen();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user