0
mirror of https://github.com/OneOfEleven/uv-k5-firmware-custom.git synced 2025-04-28 14:21:25 +03:00

Battery volt/percent now has menu setting instead of compile option

This commit is contained in:
OneOfEleven 2023-09-19 20:04:02 +01:00
parent 93f6866c87
commit 0b676d29e3
16 changed files with 181 additions and 118 deletions

View File

@ -19,8 +19,6 @@ ENABLE_BOOT_BEEPS := 0
ENABLE_COMPANDER := 1 ENABLE_COMPANDER := 1
ENABLE_SHOW_CHARGE_LEVEL := 0 ENABLE_SHOW_CHARGE_LEVEL := 0
ENABLE_REVERSE_BAT_SYMBOL := 1 ENABLE_REVERSE_BAT_SYMBOL := 1
ENABLE_STATUSBAR_VOLTAGE := 1
ENABLE_STATUSBAR_PERCENTAGE := 1
#ENABLE_SINGLE_VFO_CHAN := 1 #ENABLE_SINGLE_VFO_CHAN := 1
#ENABLE_BAND_SCOPE := 1 #ENABLE_BAND_SCOPE := 1
@ -194,12 +192,6 @@ endif
ifeq ($(ENABLE_REVERSE_BAT_SYMBOL),1) ifeq ($(ENABLE_REVERSE_BAT_SYMBOL),1)
CFLAGS += -DENABLE_REVERSE_BAT_SYMBOL CFLAGS += -DENABLE_REVERSE_BAT_SYMBOL
endif endif
ifeq ($(ENABLE_STATUSBAR_VOLTAGE),1)
CFLAGS += -DENABLE_STATUSBAR_VOLTAGE
endif
ifeq ($(ENABLE_STATUSBAR_PERCENTAGE),1)
CFLAGS += -DENABLE_STATUSBAR_PERCENTAGE
endif
ifeq ($(ENABLE_SINGLE_VFO_CHAN),1) ifeq ($(ENABLE_SINGLE_VFO_CHAN),1)
CFLAGS += -DENABLE_SINGLE_VFO_CHAN CFLAGS += -DENABLE_SINGLE_VFO_CHAN
endif endif

View File

@ -30,8 +30,6 @@ ENABLE_BOOT_BEEPS := 0 give user audio feedback on volume knob
ENABLE_COMPANDER := 1 compander option (per channel) ENABLE_COMPANDER := 1 compander option (per channel)
ENABLE_SHOW_CHARGE_LEVEL := 1 show the charge level when the radio is on charge ENABLE_SHOW_CHARGE_LEVEL := 1 show the charge level when the radio is on charge
ENABLE_REVERSE_BAT_SYMBOL := 1 mirror the battery symbol on the status bar (+ pole on the right) ENABLE_REVERSE_BAT_SYMBOL := 1 mirror the battery symbol on the status bar (+ pole on the right)
ENABLE_STATUSBAR_VOLTAGE := 0 show the battery voltage on the top status bar - when possible
ENABLE_STATUSBAR_PERCENTAGE := 1 or show the battery percentage on the top status bar - when possible
#ENABLE_SINGLE_VFO_CHAN := 1 not yet implemented - single VFO on display when possible #ENABLE_SINGLE_VFO_CHAN := 1 not yet implemented - single VFO on display when possible
#ENABLE_BAND_SCOPE := 1 not yet implemented - spectrum/pan-adapter #ENABLE_BAND_SCOPE := 1 not yet implemented - spectrum/pan-adapter
``` ```

View File

@ -654,6 +654,7 @@ void APP_StartListening(FUNCTION_Type_t Function)
uint16_t lna; uint16_t lna;
uint16_t mixer; uint16_t mixer;
uint16_t pga; uint16_t pga;
// seems the RX gain abrutly reduces above this frequency, why ? // seems the RX gain abrutly reduces above this frequency, why ?
if (rx_frequency <= 22640000) if (rx_frequency <= 22640000)
{ {
@ -663,7 +664,7 @@ void APP_StartListening(FUNCTION_Type_t Function)
pga = 3; // reduced - seems to help reduce the AM demodulation distortion pga = 3; // reduced - seems to help reduce the AM demodulation distortion
} }
else else
{ { // increasing the front ends gain decreases the dynamic range
lna_short = 3; // original lna_short = 3; // original
lna = 4; // increased lna = 4; // increased
mixer = 3; // original mixer = 3; // original
@ -679,16 +680,32 @@ void APP_StartListening(FUNCTION_Type_t Function)
//BK4819_WriteRegister(BK4819_REG_10, 0x007A); // 000000 00 011 11 010 //BK4819_WriteRegister(BK4819_REG_10, 0x007A); // 000000 00 011 11 010
//BK4819_WriteRegister(BK4819_REG_14, 0x0019); // 000000 00 000 11 001 //BK4819_WriteRegister(BK4819_REG_14, 0x0019); // 000000 00 000 11 001
} }
BK4819_WriteRegister(BK4819_REG_48, BK4819_WriteRegister(BK4819_REG_48,
// max RX AF gain // max RX AF gain
(11u << 12) | // ??? (11u << 12) | // ???
( 0u << 10) | // AF Rx Gain-1 ( 0u << 10) | // AF Rx Gain-1
(63u << 4) | // AF Rx Gain-2 (63u << 4) | // AF Rx Gain-2
(15u << 0)); // AF DAC Gain (after Gain-1 and Gain-2) (15u << 0)); // AF DAC Gain (after Gain-1 and Gain-2)
gNeverUsed = 0; gNeverUsed = 0;
} }
else else
{ // FM { // FM
uint16_t lna_short; // whats "LNA SHORT" mean ?
uint16_t lna;
uint16_t mixer;
uint16_t pga;
// original
lna_short = 3;
lna = 2;
mixer = 3;
pga = 6;
BK4819_WriteRegister(BK4819_REG_13, (lna_short << 8) | (lna << 5) | (mixer << 3) | (pga << 0));
BK4819_WriteRegister(BK4819_REG_48, BK4819_WriteRegister(BK4819_REG_48,
(11u << 12) | // ??? (11u << 12) | // ???
( 0u << 10) | // AF Rx Gain-1 ( 0u << 10) | // AF Rx Gain-1
@ -1788,16 +1805,13 @@ void APP_TimeSlice500ms(void)
gBatteryVoltageIndex = 0; gBatteryVoltageIndex = 0;
BATTERY_GetReadings(true); BATTERY_GetReadings(true);
#if defined(ENABLE_STATUSBAR_VOLTAGE) || defined(ENABLE_STATUSBAR_PERCENTAGE)
// regular statusbar updates (once per sec) if battery voltage or percentage is enabled
gUpdateStatus = true;
#else
if (gChargingWithTypeC)
gUpdateDisplay = true;
#endif
} }
// regular statusbar updates (once every 2 sec) if need be
if ((gBatteryCheckCounter & 3) == 0)
if (gChargingWithTypeC || gSetting_battery_text > 0)
gUpdateStatus = true;
if (gCurrentFunction != FUNCTION_POWER_SAVE) if (gCurrentFunction != FUNCTION_POWER_SAVE)
{ {
gCurrentRSSI = BK4819_GetRSSI(); gCurrentRSSI = BK4819_GetRSSI();

View File

@ -104,6 +104,7 @@
VOICE_ID_INVALID, // PONMSG VOICE_ID_INVALID, // PONMSG
VOICE_ID_INVALID, // ROGER VOICE_ID_INVALID, // ROGER
VOICE_ID_INVALID, // BATVOL VOICE_ID_INVALID, // BATVOL
VOICE_ID_INVALID, // BATTXT
VOICE_ID_INVALID, // MODE VOICE_ID_INVALID, // MODE
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
VOICE_ID_INVALID, // NOAA-S VOICE_ID_INVALID, // NOAA-S
@ -322,6 +323,11 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax)
*pMax = ARRAY_SIZE(gSubMenu_PTT_ID) - 1; *pMax = ARRAY_SIZE(gSubMenu_PTT_ID) - 1;
break; break;
case MENU_BAT_TXT:
*pMin = 0;
*pMax = ARRAY_SIZE(gSubMenu_BAT_TXT) - 1;
break;
case MENU_D_HOLD: case MENU_D_HOLD:
*pMin = 5; *pMin = 5;
*pMax = 60; *pMax = 60;
@ -365,11 +371,13 @@ void MENU_AcceptSetting(void)
switch (gMenuCursor) switch (gMenuCursor)
{ {
default:
return;
case MENU_SQL: case MENU_SQL:
gEeprom.SQUELCH_LEVEL = gSubMenuSelection; gEeprom.SQUELCH_LEVEL = gSubMenuSelection;
gRequestSaveSettings = true;
gVfoConfigureMode = VFO_CONFIGURE_1; gVfoConfigureMode = VFO_CONFIGURE_1;
return; break;
case MENU_STEP: case MENU_STEP:
if (IS_FREQ_CHANNEL(gTxVfo->CHANNEL_SAVE)) if (IS_FREQ_CHANNEL(gTxVfo->CHANNEL_SAVE))
@ -484,9 +492,8 @@ void MENU_AcceptSetting(void)
gEeprom.VOX_LEVEL = gSubMenuSelection - 1; gEeprom.VOX_LEVEL = gSubMenuSelection - 1;
BOARD_EEPROM_LoadMoreSettings(); BOARD_EEPROM_LoadMoreSettings();
gFlagReconfigureVfos = true; gFlagReconfigureVfos = true;
gRequestSaveSettings = true;
gUpdateStatus = true; gUpdateStatus = true;
return; break;
case MENU_ABR: case MENU_ABR:
gEeprom.BACKLIGHT = gSubMenuSelection; gEeprom.BACKLIGHT = gSubMenuSelection;
@ -499,9 +506,8 @@ void MENU_AcceptSetting(void)
case MENU_TDR: case MENU_TDR:
gEeprom.DUAL_WATCH = gSubMenuSelection; gEeprom.DUAL_WATCH = gSubMenuSelection;
gFlagReconfigureVfos = true; gFlagReconfigureVfos = true;
gRequestSaveSettings = true;
gUpdateStatus = true; gUpdateStatus = true;
return; break;
case MENU_XB: case MENU_XB:
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
@ -513,9 +519,8 @@ void MENU_AcceptSetting(void)
gEeprom.CROSS_BAND_RX_TX = gSubMenuSelection; gEeprom.CROSS_BAND_RX_TX = gSubMenuSelection;
gFlagReconfigureVfos = true; gFlagReconfigureVfos = true;
gRequestSaveSettings = true;
gUpdateStatus = true; gUpdateStatus = true;
return; break;
case MENU_BEEP: case MENU_BEEP:
gEeprom.BEEP_CONTROL = gSubMenuSelection; gEeprom.BEEP_CONTROL = gSubMenuSelection;
@ -528,9 +533,8 @@ void MENU_AcceptSetting(void)
#ifdef ENABLE_VOICE #ifdef ENABLE_VOICE
case MENU_VOICE: case MENU_VOICE:
gEeprom.VOICE_PROMPT = gSubMenuSelection; gEeprom.VOICE_PROMPT = gSubMenuSelection;
gRequestSaveSettings = true;
gUpdateStatus = true; gUpdateStatus = true;
return; break;
#endif #endif
case MENU_SC_REV: case MENU_SC_REV:
@ -571,9 +575,8 @@ void MENU_AcceptSetting(void)
case MENU_MIC: case MENU_MIC:
gEeprom.MIC_SENSITIVITY = gSubMenuSelection; gEeprom.MIC_SENSITIVITY = gSubMenuSelection;
BOARD_EEPROM_LoadMoreSettings(); BOARD_EEPROM_LoadMoreSettings();
gRequestSaveSettings = true;
gFlagReconfigureVfos = true; gFlagReconfigureVfos = true;
return; break;
#ifdef ENABLE_COMPANDER #ifdef ENABLE_COMPANDER
case MENU_COMPAND: case MENU_COMPAND:
@ -617,6 +620,10 @@ void MENU_AcceptSetting(void)
gRequestSaveChannel = 1; gRequestSaveChannel = 1;
return; return;
case MENU_BAT_TXT:
gSetting_battery_text = gSubMenuSelection;
break;
case MENU_D_DCD: case MENU_D_DCD:
gTxVfo->DTMF_DECODING_ENABLE = gSubMenuSelection; gTxVfo->DTMF_DECODING_ENABLE = gSubMenuSelection;
gRequestSaveChannel = 1; gRequestSaveChannel = 1;
@ -624,8 +631,7 @@ void MENU_AcceptSetting(void)
case MENU_D_LIVE_DEC: case MENU_D_LIVE_DEC:
gSetting_live_DTMF_decoder = gSubMenuSelection; gSetting_live_DTMF_decoder = gSubMenuSelection;
gRequestSaveSettings = true; break;
return;
case MENU_D_LIST: case MENU_D_LIST:
gDTMFChosenContact = gSubMenuSelection - 1; gDTMFChosenContact = gSubMenuSelection - 1;
@ -655,9 +661,8 @@ void MENU_AcceptSetting(void)
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
case MENU_NOAA_S: case MENU_NOAA_S:
gEeprom.NOAA_AUTO_SCAN = gSubMenuSelection; gEeprom.NOAA_AUTO_SCAN = gSubMenuSelection;
gRequestSaveSettings = true;
gFlagReconfigureVfos = true; gFlagReconfigureVfos = true;
return; break;
#endif #endif
case MENU_DEL_CH: case MENU_DEL_CH:
@ -688,21 +693,18 @@ void MENU_AcceptSetting(void)
case MENU_350EN: case MENU_350EN:
gSetting_350EN = gSubMenuSelection; gSetting_350EN = gSubMenuSelection;
gRequestSaveSettings = true;
gVfoConfigureMode = VFO_CONFIGURE_RELOAD; gVfoConfigureMode = VFO_CONFIGURE_RELOAD;
gFlagResetVfos = true; gFlagResetVfos = true;
return; break;
case MENU_SCREN: case MENU_SCREN:
gSetting_ScrambleEnable = gSubMenuSelection; gSetting_ScrambleEnable = gSubMenuSelection;
gRequestSaveSettings = true;
gFlagReconfigureVfos = true; gFlagReconfigureVfos = true;
return; break;
case MENU_TX_EN: case MENU_TX_EN:
gSetting_TX_EN = gSubMenuSelection; gSetting_TX_EN = gSubMenuSelection;
gRequestSaveSettings = true; break;
return;
case MENU_F_CALI: case MENU_F_CALI:
gEeprom.BK4819_XTAL_FREQ_LOW = gSubMenuSelection; gEeprom.BK4819_XTAL_FREQ_LOW = gSubMenuSelection;
@ -724,9 +726,6 @@ void MENU_AcceptSetting(void)
EEPROM_WriteBuffer(0x1F88, &Misc); EEPROM_WriteBuffer(0x1F88, &Misc);
} }
return; return;
default:
return;
} }
gRequestSaveSettings = true; gRequestSaveSettings = true;
@ -988,6 +987,10 @@ void MENU_ShowCurrentSetting(void)
gSubMenuSelection = gTxVfo->DTMF_PTT_ID_TX_MODE; gSubMenuSelection = gTxVfo->DTMF_PTT_ID_TX_MODE;
break; break;
case MENU_BAT_TXT:
gSubMenuSelection = gSetting_battery_text;
return;
case MENU_D_DCD: case MENU_D_DCD:
gSubMenuSelection = gTxVfo->DTMF_DECODING_ENABLE; gSubMenuSelection = gTxVfo->DTMF_DECODING_ENABLE;
break; break;

View File

@ -256,30 +256,24 @@ const uint8_t BITMAP_USB_C[9] =
0b00011100 0b00011100
}; };
const uint8_t BITMAP_KeyLock[9] = const uint8_t BITMAP_KeyLock[6] =
{ // padlock symbol { // teeny padlock symbol
0b00000000, 0b00000000,
0b01111100, 0b01111100,
0b01000110, 0b01000110,
0b01000101, 0b01000101,
0b01000101,
0b01000101,
0b01000101,
0b01000110, 0b01000110,
0b01111100 0b01111100
}; };
const uint8_t BITMAP_F_Key[9] = const uint8_t BITMAP_F_Key[6] =
{ // F-Key symbol { // F-Key symbol
0b11111111, 0b00000000,
0b10000001, 0b01011111,
0b10111101, 0b01000101,
0b10010101, 0b01000101,
0b10010101, 0b01000101,
0b10010101, 0b01000001
0b10000101,
0b10000001,
0b11111111
}; };
const uint8_t BITMAP_VOX[18] = const uint8_t BITMAP_VOX[18] =

View File

@ -14,9 +14,9 @@ extern const uint8_t BITMAP_BatteryLevel5[17];
extern const uint8_t BITMAP_USB_C[9]; extern const uint8_t BITMAP_USB_C[9];
extern const uint8_t BITMAP_KeyLock[9]; extern const uint8_t BITMAP_KeyLock[6];
extern const uint8_t BITMAP_F_Key[9]; extern const uint8_t BITMAP_F_Key[6];
extern const uint8_t BITMAP_VOX[18]; extern const uint8_t BITMAP_VOX[18];

View File

@ -711,6 +711,7 @@ void BOARD_EEPROM_Init(void)
gSetting_ScrambleEnable = (Data[6] < 2) ? Data[6] : true; gSetting_ScrambleEnable = (Data[6] < 2) ? Data[6] : true;
gSetting_TX_EN = (Data[7] & (1u << 0)) ? true : false; gSetting_TX_EN = (Data[7] & (1u << 0)) ? true : false;
gSetting_live_DTMF_decoder = (Data[7] & (1u << 1)) ? true : false; gSetting_live_DTMF_decoder = (Data[7] & (1u << 1)) ? true : false;
gSetting_battery_text = (((Data[7] >> 2) & 3u) <= 2) ? (Data[7] >> 2) & 3: 2;
if (!gEeprom.VFO_OPEN) if (!gEeprom.VFO_OPEN)
{ {

BIN
firmware

Binary file not shown.

Binary file not shown.

Binary file not shown.

1
misc.c
View File

@ -66,6 +66,7 @@ uint8_t gSetting_F_LOCK;
bool gSetting_ScrambleEnable; bool gSetting_ScrambleEnable;
bool gSetting_live_DTMF_decoder; bool gSetting_live_DTMF_decoder;
uint8_t gSetting_battery_text;
uint32_t gCustomAesKey[4]; uint32_t gCustomAesKey[4];
bool bHasCustomAesKey; bool bHasCustomAesKey;

1
misc.h
View File

@ -123,6 +123,7 @@ extern uint8_t gSetting_F_LOCK;
extern bool gSetting_ScrambleEnable; extern bool gSetting_ScrambleEnable;
extern bool gSetting_live_DTMF_decoder; extern bool gSetting_live_DTMF_decoder;
extern uint8_t gSetting_battery_text;
extern const uint32_t gDefaultAesKey[4]; extern const uint32_t gDefaultAesKey[4];
extern uint32_t gCustomAesKey[4]; extern uint32_t gCustomAesKey[4];

View File

@ -172,6 +172,7 @@ void SETTINGS_SaveSettings(void)
State[6] = gSetting_ScrambleEnable; State[6] = gSetting_ScrambleEnable;
if (!gSetting_TX_EN) State[7] &= ~(1u << 0); if (!gSetting_TX_EN) State[7] &= ~(1u << 0);
if (!gSetting_live_DTMF_decoder) State[7] &= ~(1u << 1); if (!gSetting_live_DTMF_decoder) State[7] &= ~(1u << 1);
State[7] = (State[7] & ~(3u << 2)) | ((gSetting_battery_text & 3u) << 2);
EEPROM_WriteBuffer(0x0F40, State); EEPROM_WriteBuffer(0x0F40, State);
} }

View File

@ -95,6 +95,7 @@ const char MenuList[][7] =
"PONMSG", "PONMSG",
"ROGER", "ROGER",
"BATVOL", // was "VOL" "BATVOL", // was "VOL"
"BATTXT",
"MODE", // was "AM" "MODE", // was "AM"
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
"NOAA-S", "NOAA-S",
@ -248,6 +249,13 @@ const char gSubMenu_F_LOCK[6][4] =
}; };
#endif #endif
const char gSubMenu_BAT_TXT[3][8] =
{
"NONE",
"VOLTAGE",
"PERCENT"
};
bool gIsInSubMenu; bool gIsInSubMenu;
uint8_t gMenuCursor; uint8_t gMenuCursor;
int8_t gMenuScrollDirection; int8_t gMenuScrollDirection;
@ -523,6 +531,10 @@ void UI_DisplayMenu(void)
strcpy(String, gSubMenu_PTT_ID[gSubMenuSelection]); strcpy(String, gSubMenu_PTT_ID[gSubMenuSelection]);
break; break;
case MENU_BAT_TXT:
strcpy(String, gSubMenu_BAT_TXT[gSubMenuSelection]);
break;
case MENU_D_LIST: case MENU_D_LIST:
gIsDtmfContactValid = DTMF_GetContact((int)gSubMenuSelection - 1, Contact); gIsDtmfContactValid = DTMF_GetContact((int)gSubMenuSelection - 1, Contact);
if (!gIsDtmfContactValid) if (!gIsDtmfContactValid)

View File

@ -78,6 +78,7 @@ enum
MENU_PONMSG, MENU_PONMSG,
MENU_ROGER, MENU_ROGER,
MENU_VOL, MENU_VOL,
MENU_BAT_TXT,
MENU_AM, MENU_AM,
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
MENU_NOAA_S, MENU_NOAA_S,
@ -122,6 +123,7 @@ extern const char gSubMenu_F_LOCK[6][4];
#ifdef ENABLE_COMPANDER #ifdef ENABLE_COMPANDER
extern const char gSubMenu_Compand[4][6]; extern const char gSubMenu_Compand[4][6];
#endif #endif
extern const char gSubMenu_BAT_TXT[3][8];
extern bool gIsInSubMenu; extern bool gIsInSubMenu;

View File

@ -34,133 +34,177 @@
void UI_DisplayStatus(const bool test_display) void UI_DisplayStatus(const bool test_display)
{ {
uint8_t *line = gStatusLine; uint8_t *line = gStatusLine;
unsigned int x = 0;
unsigned int x1 = 0;
gUpdateStatus = false; gUpdateStatus = false;
memset(gStatusLine, 0, sizeof(gStatusLine)); memset(gStatusLine, 0, sizeof(gStatusLine));
// line += 2; // **************
// POWER-SAVE indicator // POWER-SAVE indicator
if (gCurrentFunction == FUNCTION_POWER_SAVE || test_display) if (gCurrentFunction == FUNCTION_POWER_SAVE || test_display)
memmove(line, BITMAP_PowerSave, sizeof(BITMAP_PowerSave)); {
line += sizeof(BITMAP_PowerSave); memmove(line + x, BITMAP_PowerSave, sizeof(BITMAP_PowerSave));
x1 = x + sizeof(BITMAP_PowerSave);
}
x += sizeof(BITMAP_PowerSave);
#ifdef ENABLE_NOAA #ifdef ENABLE_NOAA
// NOASS SCAN indicator // NOASS SCAN indicator
if (gIsNoaaMode || test_display) if (gIsNoaaMode || test_display)
memmove(line, BITMAP_NOAA, sizeof(BITMAP_NOAA)); {
line += sizeof(BITMAP_NOAA); memmove(line + x, BITMAP_NOAA, sizeof(BITMAP_NOAA));
x1 = x + sizeof(BITMAP_NOAA);
}
x += sizeof(BITMAP_NOAA);
#else #else
line += 12; // hmmm, what to put in it's place
#endif #endif
if (gSetting_KILLED) if (gSetting_KILLED)
memset(line, 0xFF, 10); {
memset(line + x, 0xFF, 10);
x1 = x + 10;
}
else else
#ifdef ENABLE_FMRADIO #ifdef ENABLE_FMRADIO
// FM indicator // FM indicator
if (gFmRadioMode || test_display) if (gFmRadioMode || test_display)
memmove(line, BITMAP_FM, sizeof(BITMAP_FM)); {
memmove(line + x, BITMAP_FM, sizeof(BITMAP_FM));
x1 = x + sizeof(BITMAP_FM);
}
else else
#endif #endif
// SCAN indicator // SCAN indicator
if (gScanState != SCAN_OFF || gScreenToDisplay == DISPLAY_SCANNER || test_display) if (gScanState != SCAN_OFF || gScreenToDisplay == DISPLAY_SCANNER || test_display)
memmove(line, BITMAP_SC, sizeof(BITMAP_SC)); {
line += sizeof(BITMAP_SC); memmove(line + x, BITMAP_SC, sizeof(BITMAP_SC));
x1 = x + sizeof(BITMAP_SC);
}
x += sizeof(BITMAP_SC);
#ifdef ENABLE_VOICE #ifdef ENABLE_VOICE
// VOICE indicator // VOICE indicator
if (gEeprom.VOICE_PROMPT != VOICE_PROMPT_OFF || test_display) if (gEeprom.VOICE_PROMPT != VOICE_PROMPT_OFF || test_display)
memmove(line, BITMAP_VoicePrompt, sizeof(BITMAP_VoicePrompt)); {
memmove(line + x, BITMAP_VoicePrompt, sizeof(BITMAP_VoicePrompt));
x1 = x + sizeof(BITMAP_VoicePrompt);
}
x += sizeof(BITMAP_VoicePrompt);
#else #else
if (test_display) // hmmm, what to put in it's place
memset(line, 0xFF, 8);
#endif #endif
line += 9;
// DUAL-WATCH indicator // DUAL-WATCH indicator
if (gEeprom.DUAL_WATCH != DUAL_WATCH_OFF || test_display) if (gEeprom.DUAL_WATCH != DUAL_WATCH_OFF || test_display)
{ {
if (gDualWatchActive || test_display) if (gDualWatchActive || test_display)
memmove(line, BITMAP_TDR1, sizeof(BITMAP_TDR1)); memmove(line + x, BITMAP_TDR1, sizeof(BITMAP_TDR1));
else else
memmove(line, BITMAP_TDR2, sizeof(BITMAP_TDR2)); memmove(line + x, BITMAP_TDR2, sizeof(BITMAP_TDR2));
} }
line += sizeof(BITMAP_TDR1); x += sizeof(BITMAP_TDR1);
// CROSS-VFO indicator // CROSS-VFO indicator
if (gEeprom.CROSS_BAND_RX_TX != CROSS_BAND_OFF || test_display) if (gEeprom.CROSS_BAND_RX_TX != CROSS_BAND_OFF || test_display)
memmove(line, BITMAP_XB, sizeof(BITMAP_XB)); {
line += sizeof(BITMAP_XB); memmove(line + x, BITMAP_XB, sizeof(BITMAP_XB));
x1 = x + sizeof(BITMAP_XB);
}
x += sizeof(BITMAP_XB);
// VOX indicator // VOX indicator
if (gEeprom.VOX_SWITCH || test_display) if (gEeprom.VOX_SWITCH || test_display)
memmove(line, BITMAP_VOX, sizeof(BITMAP_VOX)); {
line += sizeof(BITMAP_VOX); memmove(line + x, BITMAP_VOX, sizeof(BITMAP_VOX));
x1 = x + sizeof(BITMAP_VOX);
}
x += sizeof(BITMAP_VOX);
// KEY-LOCK indicator // KEY-LOCK indicator
if (gEeprom.KEY_LOCK || test_display) if (gEeprom.KEY_LOCK || test_display)
{ {
memmove(line, BITMAP_KeyLock, sizeof(BITMAP_KeyLock)); memmove(line + x, BITMAP_KeyLock, sizeof(BITMAP_KeyLock));
line += sizeof(BITMAP_KeyLock); x += sizeof(BITMAP_KeyLock);
x1 = x;
} }
else else
if (gWasFKeyPressed) if (gWasFKeyPressed)
{ {
memmove(line, BITMAP_F_Key, sizeof(BITMAP_F_Key)); memmove(line + x, BITMAP_F_Key, sizeof(BITMAP_F_Key));
line += sizeof(BITMAP_F_Key); x += sizeof(BITMAP_F_Key);
x1 = x;
} }
else
if (!gChargingWithTypeC)
{ // battery voltage or percentage { // battery voltage or percentage
char s[8]; char s[8];
unsigned int space_needed;
#ifdef ENABLE_STATUSBAR_VOLTAGE unsigned int x2 = LCD_WIDTH - sizeof(BITMAP_BatteryLevel5) - 3;
const char *fmt[] = {"%u.%02u", "%2u.%02uV"}; if (gChargingWithTypeC)
unsigned int i = gEeprom.VOX_SWITCH ? 0 : 1; // add a 'V' and shift the text left a bit if the VOX is not showing x2 -= sizeof(BITMAP_USB_C); // the radio is on charge
sprintf(s, fmt[i], gBatteryVoltageAverage / 100, gBatteryVoltageAverage % 100);
UI_PrintStringSmallBuffer(s, line - (i ? 20 : 0));
#elif defined(ENABLE_STATUSBAR_PERCENTAGE) switch (gSetting_battery_text)
{
default:
case 0:
break;
const uint16_t volts = (gBatteryVoltageAverage < gMin_bat_v) ? gMin_bat_v : gBatteryVoltageAverage; case 1: // voltage
const uint16_t percent = (100 * (volts - gMin_bat_v)) / (gMax_bat_v - gMin_bat_v); {
const unsigned int x = (percent >= 100) ? 0 : 4; // move to the right a bit const uint16_t voltage = (gBatteryVoltageAverage <= 999) ? gBatteryVoltageAverage : 999; // limit to 9.99V
sprintf(s, "%u%%", percent); sprintf(s, "%u.%02uV", voltage / 100, voltage % 100);
UI_PrintStringSmallBuffer(s, line + x); space_needed = (7 * strlen(s));
if (x2 >= (x1 + space_needed))
{
UI_PrintStringSmallBuffer(s, line + x2 - space_needed);
}
break;
}
#endif case 2: // percentage
{
const uint16_t voltage = (gBatteryVoltageAverage < gMin_bat_v) ? gMin_bat_v : gBatteryVoltageAverage;
const uint16_t percent = (100 * (voltage - gMin_bat_v)) / (gMax_bat_v - gMin_bat_v);
sprintf(s, "%u%%", percent);
space_needed = (7 * strlen(s));
if (x2 >= (x1 + space_needed))
UI_PrintStringSmallBuffer(s, line + x2 - space_needed);
break;
}
}
} }
// move to right side of the screen // move to right side of the screen
line = gStatusLine + LCD_WIDTH - sizeof(BITMAP_BatteryLevel5) - sizeof(BITMAP_USB_C); x = LCD_WIDTH - sizeof(BITMAP_BatteryLevel5) - sizeof(BITMAP_USB_C);
// USB-C charge indicator // USB-C charge indicator
if (gChargingWithTypeC || test_display) if (gChargingWithTypeC || test_display)
memmove(line, BITMAP_USB_C, sizeof(BITMAP_USB_C)); memmove(line + x, BITMAP_USB_C, sizeof(BITMAP_USB_C));
line += sizeof(BITMAP_USB_C); x += sizeof(BITMAP_USB_C);
// BATTERY LEVEL indicator // BATTERY LEVEL indicator
if (gBatteryDisplayLevel >= 5 || test_display) if (gBatteryDisplayLevel >= 5 || test_display)
memmove(line, BITMAP_BatteryLevel5, sizeof(BITMAP_BatteryLevel5)); memmove(line + x, BITMAP_BatteryLevel5, sizeof(BITMAP_BatteryLevel5));
else else
if (gBatteryDisplayLevel >= 4) if (gBatteryDisplayLevel >= 4)
memmove(line, BITMAP_BatteryLevel4, sizeof(BITMAP_BatteryLevel4)); memmove(line + x, BITMAP_BatteryLevel4, sizeof(BITMAP_BatteryLevel4));
else else
if (gBatteryDisplayLevel >= 3) if (gBatteryDisplayLevel >= 3)
memmove(line, BITMAP_BatteryLevel3, sizeof(BITMAP_BatteryLevel3)); memmove(line + x, BITMAP_BatteryLevel3, sizeof(BITMAP_BatteryLevel3));
else else
if (gBatteryDisplayLevel >= 2) if (gBatteryDisplayLevel >= 2)
memmove(line, BITMAP_BatteryLevel2, sizeof(BITMAP_BatteryLevel2)); memmove(line + x, BITMAP_BatteryLevel2, sizeof(BITMAP_BatteryLevel2));
else else
if (gLowBatteryBlink == 1) if (gLowBatteryBlink == 1)
memmove(line, BITMAP_BatteryLevel1, sizeof(BITMAP_BatteryLevel1)); memmove(line + x, BITMAP_BatteryLevel1, sizeof(BITMAP_BatteryLevel1));
// **************
ST7565_BlitStatusLine(); ST7565_BlitStatusLine();
} }