diff --git a/README.md b/README.md index 6605113..51f26f5 100644 --- a/README.md +++ b/README.md @@ -26,11 +26,11 @@ ENABLE_CHAN_NAME_FREQ := 1 show channel frequency below channel na ENABLE_WIDE_RX := 1 full 18MHz to 1300MHz RX (though frontend not tuned over full range) ENABLE_TX_WHEN_AM := 0 allow TX (always FM) when RX is set to AM ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 standard CTCSS tail phase shift rather than QS's own 55Hz tone method -ENABLE_MAIN_KEY_HOLD := 1 initial F-key press not needed, instead hold down keys 0-9 +ENABLE_MAIN_KEY_HOLD := 1 initial F-key press not needed, instead hold down keys 0-9 to access the functions ENABLE_BOOT_BEEPS := 0 give user audio feedback on volume knob position at boot-up -ENABLE_COMPANDER := 1 compander option - setting not yet saved +ENABLE_COMPANDER := 1 compander option - setting not yet saved (per channel) ENABLE_SHOW_CHARGE_LEVEL := 1 show the charge level when the radio is on charge -ENABLE_REVERSE_BAT_SYMBOL := 1 reverse the battery symbol on the status bar +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 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 diff --git a/app/menu.c b/app/menu.c index d4843b7..e170330 100644 --- a/app/menu.c +++ b/app/menu.c @@ -48,79 +48,79 @@ #ifdef ENABLE_VOICE static const VOICE_ID_t MenuVoices[] = { - VOICE_ID_SQUELCH, - VOICE_ID_FREQUENCY_STEP, - VOICE_ID_POWER, - VOICE_ID_DCS, - VOICE_ID_CTCSS, - VOICE_ID_DCS, - VOICE_ID_CTCSS, - VOICE_ID_TX_OFFSET_FREQUENCY_DIRECTION, - VOICE_ID_TX_OFFSET_FREQUENCY, - VOICE_ID_CHANNEL_BANDWIDTH, - VOICE_ID_SCRAMBLER_ON, - VOICE_ID_BUSY_LOCKOUT, - VOICE_ID_MEMORY_CHANNEL, - VOICE_ID_SAVE_MODE, - VOICE_ID_VOX, - VOICE_ID_INVALID, - VOICE_ID_DUAL_STANDBY, - VOICE_ID_INVALID, - VOICE_ID_BEEP_PROMPT, - VOICE_ID_TRANSMIT_OVER_TIME, - #ifdef ENABLE_VOICE - VOICE_ID_VOICE_PROMPT, - #endif - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, + VOICE_ID_SQUELCH, // SQL + VOICE_ID_FREQUENCY_STEP, // STEP + VOICE_ID_POWER, // T-PWR + VOICE_ID_DCS, // R-DCS + VOICE_ID_CTCSS, // R-CTCS + VOICE_ID_DCS, // T-DCS + VOICE_ID_CTCSS, // T-CTCS + VOICE_ID_TX_OFFSET_FREQUENCY_DIRECTION, // T-DIR + VOICE_ID_TX_OFFSET_FREQUENCY, // T-OFFS + VOICE_ID_INVALID, // T-VFO + VOICE_ID_TRANSMIT_OVER_TIME, // T-TOUT + VOICE_ID_CHANNEL_BANDWIDTH, // W/N + VOICE_ID_SCRAMBLER_ON, // SCRAM + VOICE_ID_BUSY_LOCKOUT, // BUSYCL + VOICE_ID_MEMORY_CHANNEL, // CH-SAV + VOICE_ID_DELETE_CHANNEL, // CH-DEL + VOICE_ID_INVALID, // CH-DIS + VOICE_ID_SAVE_MODE, // BATSAV + VOICE_ID_VOX, // VOX + VOICE_ID_INVALID, // BACKLT + VOICE_ID_DUAL_STANDBY, // DUALRX + VOICE_ID_BEEP_PROMPT, // BEEP + #ifdef ENABLE_VOICE + VOICE_ID_VOICE_PROMPT, // VOICE + #endif + VOICE_ID_INVALID, // SC-REV + VOICE_ID_INVALID, // KEYLOC + VOICE_ID_INVALID, // S-ADD1 + VOICE_ID_INVALID, // S-ADD2 + VOICE_ID_INVALID, // STE + VOICE_ID_INVALID, // RP-STE + VOICE_ID_INVALID, // MIC #ifdef ENABLE_COMPANDER - VOICE_ID_INVALID, + VOICE_ID_INVALID, // COMPND #endif - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, + VOICE_ID_INVALID, // 1-CALL + VOICE_ID_INVALID, // SLIST + VOICE_ID_INVALID, // SLIST1 + VOICE_ID_INVALID, // SLIST2 #ifdef ENABLE_ALARM - VOICE_ID_INVALID, + VOICE_ID_INVALID, // AL-MOD #endif - VOICE_ID_ANI_CODE, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, + VOICE_ID_ANI_CODE, // ANI-ID + VOICE_ID_INVALID, // UPCODE + VOICE_ID_INVALID, // DWCODE + VOICE_ID_INVALID, // D-ST + VOICE_ID_INVALID, // D-RSP + VOICE_ID_INVALID, // D-HOLD + VOICE_ID_INVALID, // D-PRE + VOICE_ID_INVALID, // PTT-ID + VOICE_ID_INVALID, // D-DCD + VOICE_ID_INVALID, // D-LIST + VOICE_ID_INVALID, // D-LIVE + VOICE_ID_INVALID, // PONMSG + VOICE_ID_INVALID, // ROGER + VOICE_ID_INVALID, // BATVOL + VOICE_ID_INVALID, // MODE #ifdef ENABLE_NOAA - VOICE_ID_INVALID, + VOICE_ID_INVALID, // NOAA-S #endif - VOICE_ID_DELETE_CHANNEL, - VOICE_ID_INITIALISATION, + VOICE_ID_INITIALISATION, // RESET // hidden items - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, - VOICE_ID_INVALID, + VOICE_ID_INVALID, // F-LOCK + VOICE_ID_INVALID, // TX-200 + VOICE_ID_INVALID, // TX-350 + VOICE_ID_INVALID, // TX-500 + VOICE_ID_INVALID, // 350-EN + VOICE_ID_INVALID, // SCR-EN - VOICE_ID_INVALID, - VOICE_ID_INVALID + VOICE_ID_INVALID, // TX-EN + VOICE_ID_INVALID // F-CALI }; #endif diff --git a/bitmaps.c b/bitmaps.c index 02991ce..6063924 100644 --- a/bitmaps.c +++ b/bitmaps.c @@ -290,14 +290,12 @@ const uint8_t BITMAP_VOX[18] = 0b01000000, 0b00100000, 0b00011111, - 0b00000000, 0b00111110, 0b01000001, 0b01000001, 0b01000001, 0b00111110, - 0b00000000, 0b01100011, 0b00010100, @@ -315,7 +313,6 @@ const uint8_t BITMAP_VOX[18] = 0b00011000, 0b00100000, 0b01111111, - 0b00000000, 0b01100011, 0b00010100, @@ -324,7 +321,7 @@ const uint8_t BITMAP_VOX[18] = 0b01100011 }; #else - // 'XB' (cross-band) + // 'XB' (cross-band/cross-VFO) const uint8_t BITMAP_XB[12] = { // "XB" 0b00000000, @@ -333,7 +330,6 @@ const uint8_t BITMAP_VOX[18] = 0b00001000, 0b00010100, 0b01100011, - 0b00000000, 0b01111111, 0b01001001, @@ -351,7 +347,6 @@ const uint8_t BITMAP_TDR1[12] = 0b01000001, 0b01000001, 0b00111110, - 0b00000000, 0b01111111, 0b00100000, @@ -361,20 +356,19 @@ const uint8_t BITMAP_TDR1[12] = }; const uint8_t BITMAP_TDR2[12] = -{ // "--" +{ // "><" .. DW on hold 0b00000000, - 0b00010000, - 0b00010000, - 0b00010000, - 0b00010000, - 0b00010000, - - 0b00010000, - 0b00010000, - 0b00010000, - 0b00010000, - 0b00010000, - 0b00010000, + 0b00000000, + 0b00100010, + 0b00110110, + 0b00011100, + 0b00001000, + 0b00000000, + 0b00001000, + 0b00011100, + 0b00110110, + 0b00100010, + 0b00000000 }; #ifdef ENABLE_VOICE diff --git a/firmware b/firmware index 3616c90..f076d82 100644 Binary files a/firmware and b/firmware differ diff --git a/firmware.bin b/firmware.bin index 4df1516..06ca925 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index 60c213b..4ddb2fa 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/ui/main.c b/ui/main.c index ea1c599..57d32b3 100644 --- a/ui/main.c +++ b/ui/main.c @@ -143,7 +143,7 @@ void UI_DisplayMain(void) memmove(pLine0 + 0, BITMAP_VFO_NotDefault, sizeof(BITMAP_VFO_NotDefault)); } - uint32_t SomeValue = 0; + uint32_t duff_beer = 0; if (gCurrentFunction == FUNCTION_TRANSMIT) { // transmitting @@ -151,7 +151,7 @@ void UI_DisplayMain(void) #ifdef ENABLE_ALARM if (gAlarmState == ALARM_STATE_ALARM) { - SomeValue = 2; + duff_beer = 2; } else #endif @@ -159,14 +159,14 @@ void UI_DisplayMain(void) Channel = (gEeprom.CROSS_BAND_RX_TX == CROSS_BAND_OFF) ? gEeprom.RX_CHANNEL : gEeprom.TX_CHANNEL; if (Channel == vfo_num) { // show the TX symbol - SomeValue = 1; + duff_beer = 1; UI_PrintStringSmall("TX", 14, 0, Line); } } } else { // receiving .. show the RX symbol - SomeValue = 2; + duff_beer = 2; if ((gCurrentFunction == FUNCTION_RECEIVE || gCurrentFunction == FUNCTION_MONITOR) && gEeprom.RX_CHANNEL == vfo_num) UI_PrintStringSmall("RX", 14, 0, Line); } @@ -319,7 +319,7 @@ void UI_DisplayMain(void) #else // show the frequency in the main font sprintf(String, "%03u.%05u", frequency / 100000, frequency % 100000); - UI_PrintString(String, 38, 112, Line, 8); + UI_PrintString(String, 31, 112, Line, 8); #endif } } @@ -329,7 +329,7 @@ void UI_DisplayMain(void) { // show the TX/RX level uint8_t Level = 0; - if (SomeValue == 1) + if (duff_beer == 1) { // TX power level switch (gRxVfo->OUTPUT_POWER) { @@ -339,7 +339,7 @@ void UI_DisplayMain(void) } } else - if (SomeValue == 2) + if (duff_beer == 2) { // RX signal level #ifdef ENABLE_DBM // dBm @@ -387,7 +387,7 @@ void UI_DisplayMain(void) } else { // or show the CTCSS/DCS symbol - const FREQ_Config_t *pConfig = (SomeValue == 1) ? gEeprom.VfoInfo[vfo_num].pTX : gEeprom.VfoInfo[vfo_num].pRX; + const FREQ_Config_t *pConfig = (duff_beer == 1) ? gEeprom.VfoInfo[vfo_num].pTX : gEeprom.VfoInfo[vfo_num].pRX; const unsigned int code_type = pConfig->CodeType; const char *code_list[] = {"", "CT", "DCS", "DCR"}; if (code_type >= 0 && code_type < ARRAY_SIZE(code_list)) @@ -448,15 +448,9 @@ void UI_DisplayMain(void) if (gChargingWithTypeC) { // charging .. show the battery state #ifdef ENABLE_SHOW_CHARGE_LEVEL - const uint16_t volts = (gBatteryVoltageAverage < gMin_bat_v) ? gMin_bat_v : - (gBatteryVoltageAverage > gMax_bat_v) ? gMax_bat_v : - gBatteryVoltageAverage; - - sprintf(String, "Charge %u.%02uV %u%%", - gBatteryVoltageAverage / 100, - gBatteryVoltageAverage % 100, - (100 * (volts - gMin_bat_v)) / (gMax_bat_v - gMin_bat_v)); - + const uint16_t volts = (gBatteryVoltageAverage < gMin_bat_v) ? gMin_bat_v : gBatteryVoltageAverage; + const uint16_t percent = (100 * (volts - gMin_bat_v)) / (gMax_bat_v - gMin_bat_v); + sprintf(String, "Charge %u.%02uV %u%%", gBatteryVoltageAverage / 100, gBatteryVoltageAverage % 100, percent); UI_PrintStringSmall(String, 2, 0, 3); #endif } diff --git a/ui/menu.c b/ui/menu.c index d5c3221..718101f 100644 --- a/ui/menu.c +++ b/ui/menu.c @@ -48,22 +48,23 @@ const char MenuList[][7] = "T-CTCS", // was "T_CTCS" "T-DIR", // was "SFT_D" "T-OFFS", // was "OFFSET" + "T-VFO", // was "WX" + "T-TOUT", // was "TOT" "W/N", "SCRAM", // was "SCR" "BUSYCL", // was "BCL" - "MEMSAV", // was "MEM-CH" + "CH-SAV", // was "MEM-CH" + "CH-DEL", // was "DEL-CH" + "CH-DIS", // was "MDF" "BATSAV", // was "SAVE" "VOX", "BACKLT", // was "ABR" "DUALRX", // was "TDR" - "T-VFO", // was "WX" "BEEP", - "T-TOUT", // was "TOT" #ifdef ENABLE_VOICE "VOICE", #endif "SC-REV", - "CHDISP", // was "MDF" "KEYLOC", // was "AUTOLk" "S-ADD1", "S-ADD2", @@ -98,11 +99,10 @@ const char MenuList[][7] = #ifdef ENABLE_NOAA "NOAA-S", #endif - "MEMDEL", // was "Del-CH" - "RESET", + "RESET", // might be better to move this to the hidden menu items ? - // hidden menu items from here on. - // enabled if pressing PTT and upper side button at power-on. + // hidden menu items from here on + // enabled if pressing both the PTT and upper side button at power-on "F-LOCK", "TX-200", // was "200TX" @@ -114,7 +114,7 @@ const char MenuList[][7] = "TX-EN", // enable TX "F-CALI", // reference xtal calibration - "" // end of list - DO NOT DELETE THIS ! + "" // end of list - DO NOT DELETE THIS ! .. I use this to compute this list size }; const char gSubMenu_TXP[3][5] = @@ -555,8 +555,9 @@ void UI_DisplayMenu(void) { // 2nd text line .. percentage UI_PrintString(String, 50, 127, 1, 8); - const uint16_t volts = (gBatteryVoltageAverage < gMin_bat_v) ? gMin_bat_v : gBatteryVoltageAverage; - sprintf(String, "%u%%", (100 * (volts - gMin_bat_v)) / (gMax_bat_v - gMin_bat_v)); + const uint16_t volts = (gBatteryVoltageAverage < gMin_bat_v) ? gMin_bat_v : gBatteryVoltageAverage; + const uint16_t percent = (100 * (volts - gMin_bat_v)) / (gMax_bat_v - gMin_bat_v); + sprintf(String, "%u%%", percent); UI_PrintString(String, 50, 127, 3, 8); #if 0 sprintf(String, "Curr %u", gBatteryCurrent); // needs scaling into mA diff --git a/ui/menu.h b/ui/menu.h index e130b31..914cee2 100644 --- a/ui/menu.h +++ b/ui/menu.h @@ -31,22 +31,23 @@ enum MENU_T_CTCS, MENU_SFT_D, MENU_OFFSET, + MENU_XB, + MENU_TOT, MENU_W_N, MENU_SCR, MENU_BCL, MENU_MEM_CH, + MENU_DEL_CH, + MENU_MDF, MENU_SAVE, MENU_VOX, MENU_ABR, MENU_TDR, - MENU_XB, MENU_BEEP, - MENU_TOT, #ifdef ENABLE_VOICE MENU_VOICE, #endif MENU_SC_REV, - MENU_MDF, MENU_AUTOLK, MENU_S_ADD1, MENU_S_ADD2, @@ -81,7 +82,6 @@ enum #ifdef ENABLE_NOAA MENU_NOAA_S, #endif - MENU_DEL_CH, MENU_RESET, // items after here are normally hidden diff --git a/ui/status.c b/ui/status.c index 5f13423..4b4ebb8 100644 --- a/ui/status.c +++ b/ui/status.c @@ -122,17 +122,21 @@ void UI_DisplayStatus(const bool test_display) UI_PrintStringSmallBuffer(s, line); //line += 8 * 4; #elif defined(ENABLE_STATUSBAR_PERCENTAGE) - char s[6]; - const uint16_t volts = (gBatteryVoltageAverage < gMin_bat_v) ? gMin_bat_v : gBatteryVoltageAverage; - sprintf(s, "%u%%", (100 * (volts - gMin_bat_v)) / (gMax_bat_v - gMin_bat_v)); - UI_PrintStringSmallBuffer(s, line); + const uint16_t volts = (gBatteryVoltageAverage < gMin_bat_v) ? gMin_bat_v : gBatteryVoltageAverage; + 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 + char s[8]; + sprintf(s, "%u%%", percent); + UI_PrintStringSmallBuffer(s, line + x); //line += 8 * 4; #endif } -// else -// line += sizeof(BITMAP_F_Key); - line = gStatusLine + LCD_WIDTH - sizeof(BITMAP_BatteryLevel5) - sizeof(BITMAP_USB_C); // point to right side of the screen + + + + // move to right side of the screen + line = gStatusLine + LCD_WIDTH - sizeof(BITMAP_BatteryLevel5) - sizeof(BITMAP_USB_C); // USB-C charge indicator if (gChargingWithTypeC || test_display)