diff --git a/Makefile b/Makefile index 6662458..24c0845 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,7 @@ ENABLE_TX_WHEN_AM := 0 ENABLE_F_CAL_MENU := 0 ENABLE_TX_UNLOCK := 0 ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 -ENABLE_CONTRAST := 1 +ENABLE_CONTRAST := 0 ENABLE_BOOT_BEEPS := 0 ENABLE_DTMF_CALL_FLASH_LIGHT := 1 ENABLE_FLASH_LIGHT_SOS_TONE := 1 diff --git a/app/app.c b/app/app.c index 0e08f57..5222058 100644 --- a/app/app.c +++ b/app/app.c @@ -1233,6 +1233,11 @@ void APP_check_keys(void) // ***************** // PTT is treated completely separately from all the other buttons + #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) +// if (g_input_box_index > 0) +// UART_printf("1 index %u %u\r\n", g_input_box_index, g_flash_light_blink_tick_10ms); + #endif + if (ptt_pressed) { // PTT pressed @@ -1262,24 +1267,28 @@ void APP_check_keys(void) else { // PTT released - #ifdef ENABLE_KILL_REVIVE - if (g_ptt_is_pressed || g_serial_config_tick_500ms > 0 || !g_eeprom.config.setting.tx_enable || g_eeprom.config.setting.radio_disabled) - #else - if (g_ptt_is_pressed || g_serial_config_tick_500ms > 0 || !g_eeprom.config.setting.tx_enable) - #endif + if (g_ptt_is_pressed || g_serial_config_tick_500ms > 0) { - if (--g_ptt_debounce <= 0) - { // stop TX'ing - - g_ptt_is_pressed = false; - g_ptt_was_released = true; - g_ptt_debounce = 0; - - APP_process_key(KEY_PTT, false, false); +// if (g_ptt_debounce > 0) + { + if (--g_ptt_debounce <= 0) + { // stop TX'ing + + g_ptt_is_pressed = false; + g_ptt_was_released = true; + g_ptt_debounce = 0; + + APP_process_key(KEY_PTT, false, false); + } } } } + #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) +// if (g_input_box_index > 0) +// UART_printf("2 index %u %u\r\n", g_input_box_index, g_flash_light_blink_tick_10ms); + #endif + // ***************** // button processing (non-PTT) @@ -1326,6 +1335,7 @@ void APP_check_keys(void) // g_update_display = true; } } + if (g_key_debounce_repeat > 0) g_key_debounce_repeat--; } @@ -2503,9 +2513,9 @@ static void APP_process_key(const key_code_t Key, const bool key_pressed, const g_schedule_power_save_tick_10ms = battery_save_count_10ms; #ifdef ENABLE_KEYLOCK - // keep the auto keylock at bay - if (g_eeprom.config.setting.auto_key_lock != 0) - g_key_lock_tick_500ms = key_lock_timeout_500ms; + // keep the auto keylock at bay + if (g_eeprom.config.setting.auto_key_lock != 0) + g_key_lock_tick_500ms = key_lock_timeout_500ms; #endif if (g_fkey_pressed && (Key == KEY_PTT || Key == KEY_EXIT || Key == KEY_SIDE1 || Key == KEY_SIDE2)) @@ -2561,10 +2571,6 @@ static void APP_process_key(const key_code_t Key, const bool key_pressed, const } #endif - // key beep -// if (Key != KEY_PTT && !key_held && key_pressed) -// g_beep_to_play = BEEP_1KHZ_60MS_OPTIONAL; - // ******************** if (Key == KEY_EXIT && key_held && key_pressed) diff --git a/app/main.c b/app/main.c index d300700..5217852 100644 --- a/app/main.c +++ b/app/main.c @@ -444,6 +444,10 @@ void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) g_key_input_count_down = key_input_timeout_500ms; + #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) + UART_printf("key0 %u\r\n", Key); + #endif + if (key_held) { // key held down @@ -483,7 +487,10 @@ void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) return; } - if (g_scan_state_dir != SCAN_STATE_DIR_OFF || g_current_function == FUNCTION_TRANSMIT) + if (g_current_function == FUNCTION_TRANSMIT) + return; + + if (g_scan_state_dir != SCAN_STATE_DIR_OFF) { g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; @@ -493,16 +500,20 @@ void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) INPUTBOX_append(Key); - UI_DisplayMain(); +// UI_DisplayMain(); -// g_request_display_screen = DISPLAY_MAIN; + g_request_display_screen = DISPLAY_MAIN; if (IS_USER_CHANNEL(g_tx_vfo->channel_save)) { // user is entering channel number - uint16_t Channel; + const unsigned int chan = ((g_input_box[0] * 100) + (g_input_box[1] * 10) + g_input_box[2]) - 1; - if (g_input_box_index != 3) + #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) + UART_printf("key2 %u %u\r\n", chan, g_input_box_index); + #endif + + if (g_input_box_index < 3) { #ifdef ENABLE_VOICE g_another_voice_id = (voice_id_t)Key; @@ -512,9 +523,7 @@ void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) g_input_box_index = 0; - Channel = ((g_input_box[0] * 100) + (g_input_box[1] * 10) + g_input_box[2]) - 1; - - if (!RADIO_CheckValidChannel(Channel, false, 0)) + if (!RADIO_CheckValidChannel(chan, false, 0)) { g_beep_to_play = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; @@ -524,8 +533,8 @@ void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) g_another_voice_id = (voice_id_t)Key; #endif - g_eeprom.config.setting.indices.vfo[vfo].user = (uint8_t)Channel; - g_eeprom.config.setting.indices.vfo[vfo].screen = (uint8_t)Channel; + g_eeprom.config.setting.indices.vfo[vfo].user = chan; + g_eeprom.config.setting.indices.vfo[vfo].screen = chan; g_request_save_vfo = true; g_vfo_configure_mode = VFO_CONFIGURE_RELOAD; @@ -536,7 +545,13 @@ void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) if (IS_FREQ_CHANNEL(g_tx_vfo->channel_save)) { // user is entering a frequency - uint32_t Frequency; + uint32_t freq; + + NUMBER_Get(g_input_box, &freq); + + #if defined(ENABLE_UART) && defined(ENABLE_UART_DEBUG) + UART_printf("key2 %u %u\r\n", freq, g_input_box_index); + #endif if (g_input_box_index < 6) { @@ -548,23 +563,21 @@ void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) g_input_box_index = 0; - NUMBER_Get(g_input_box, &Frequency); - // clamp the frequency entered to some valid value - if (Frequency < FREQ_BAND_TABLE[0].lower) - Frequency = FREQ_BAND_TABLE[0].lower; + if (freq < FREQ_BAND_TABLE[0].lower) + freq = FREQ_BAND_TABLE[0].lower; else - if (Frequency >= BX4819_BAND1.upper && Frequency < BX4819_BAND2.lower) + if (freq >= BX4819_BAND1.upper && freq < BX4819_BAND2.lower) { const uint32_t center = (BX4819_BAND1.upper + BX4819_BAND2.lower) / 2; - Frequency = (Frequency < center) ? BX4819_BAND1.upper : BX4819_BAND2.lower; + freq = (freq < center) ? BX4819_BAND1.upper : BX4819_BAND2.lower; } else - if (Frequency > FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper) - Frequency = FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper; + if (freq > FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper) + freq = FREQ_BAND_TABLE[ARRAY_SIZE(FREQ_BAND_TABLE) - 1].upper; { - const frequency_band_t band = FREQUENCY_GetBand(Frequency); + const frequency_band_t band = FREQUENCY_GetBand(freq); #ifdef ENABLE_VOICE g_another_voice_id = (voice_id_t)Key; @@ -582,21 +595,21 @@ void MAIN_Key_DIGITS(key_code_t Key, bool key_pressed, bool key_held) } #if 0 - Frequency += g_tx_vfo->step_freq / 2; // for rounding to nearest step size - Frequency = FREQUENCY_floor_to_step(Frequency, g_tx_vfo->step_freq, FREQ_BAND_TABLE[g_tx_vfo->channel_attributes.band].lower, FREQ_BAND_TABLE[g_tx_vfo->channel_attributes.band].upper); + freq += g_tx_vfo->step_freq / 2; // for rounding to nearest step size + freq = FREQUENCY_floor_to_step(freq, g_tx_vfo->step_freq, FREQ_BAND_TABLE[g_tx_vfo->channel_attributes.band].lower, FREQ_BAND_TABLE[g_tx_vfo->channel_attributes.band].upper); #endif - if (Frequency >= BX4819_BAND1.upper && Frequency < BX4819_BAND2.lower) + if (freq >= BX4819_BAND1.upper && freq < BX4819_BAND2.lower) { // clamp the frequency to the limit const uint32_t center = (BX4819_BAND1.upper + BX4819_BAND2.lower) / 2; - Frequency = (Frequency < center) ? BX4819_BAND1.upper - g_tx_vfo->step_freq : BX4819_BAND2.lower; + freq = (freq < center) ? BX4819_BAND1.upper - g_tx_vfo->step_freq : BX4819_BAND2.lower; } - g_tx_vfo->freq_config_rx.frequency = Frequency; - g_tx_vfo->freq_config_tx.frequency = Frequency; + g_tx_vfo->freq_config_rx.frequency = freq; + g_tx_vfo->freq_config_tx.frequency = freq; // find the first channel that contains this frequency - g_tx_vfo->freq_in_channel = SETTINGS_find_channel(Frequency); + g_tx_vfo->freq_in_channel = SETTINGS_find_channel(freq); g_request_save_channel = 1; g_vfo_configure_mode = VFO_CONFIGURE; diff --git a/firmware.bin b/firmware.bin index debdc45..074804c 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index e875900..a773f83 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/ui/inputbox.c b/ui/inputbox.c index 1429640..10b8735 100644 --- a/ui/inputbox.c +++ b/ui/inputbox.c @@ -17,8 +17,8 @@ #include "misc.h" #include "ui/inputbox.h" -char g_input_box[8]; -uint8_t g_input_box_index; +unsigned int g_input_box_index; +char g_input_box[8]; uint32_t INPUTBOX_value(void) { @@ -56,4 +56,3 @@ void INPUTBOX_append(const key_code_t Digit) #pragma GCC diagnostic pop } - diff --git a/ui/inputbox.h b/ui/inputbox.h index 014121b..fadfd67 100644 --- a/ui/inputbox.h +++ b/ui/inputbox.h @@ -21,8 +21,8 @@ #include "driver/keyboard.h" -extern char g_input_box[8]; -extern uint8_t g_input_box_index; +extern unsigned int g_input_box_index; +extern char g_input_box[8]; uint32_t INPUTBOX_value(void); void INPUTBOX_append(const key_code_t Digit); diff --git a/ui/main.c b/ui/main.c index 0eac516..40b00eb 100644 --- a/ui/main.c +++ b/ui/main.c @@ -44,6 +44,12 @@ //#define SHOW_RX_TEST_VALUES +//const int rssi_offset_band_123 = 0; +//const int rssi_offset_band_4567 = 0; + +const int rssi_offset_band_123 = -16; +const int rssi_offset_band_4567 = 24; + center_line_t g_center_line = CENTER_LINE_NONE; // *************************************************************************** @@ -170,14 +176,13 @@ void UI_drawBars(uint8_t *p, const unsigned int level) #endif #ifdef ENABLE_RX_SIGNAL_BAR - bool UI_DisplayRSSIBar(const int16_t rssi, const uint16_t glitch, const uint16_t noise, const bool now) + bool UI_DisplayRSSIBar(const int rssi, const unsigned int glitch, const unsigned int noise, const bool now) { if (g_eeprom.config.setting.enable_rssi_bar) { #ifdef SHOW_RX_TEST_VALUES - const unsigned int line = 3; - uint8_t *p_line = g_frame_buffer[line]; + const unsigned int line = 3; char str[22]; #ifdef ENABLE_KEYLOCK @@ -189,9 +194,9 @@ void UI_drawBars(uint8_t *p, const unsigned int level) return false; // display is in use if (now) - memset(p_line, 0, LCD_WIDTH); + memset(g_frame_buffer[line], 0, LCD_WIDTH); - sprintf(str, "r %3u g %3u n %3u", (uint16_t )rssi, glitch, noise); + sprintf(str, "r %3d g %3u n %3u", rssi, glitch, noise); UI_PrintStringSmall(str, 2, 0, line); if (now) @@ -204,13 +209,13 @@ void UI_drawBars(uint8_t *p, const unsigned int level) (void)glitch; // TODO: (void)noise; -// const int16_t s0_dBm = -127; // S0 .. base level - const int16_t s0_dBm = -147; // S0 .. base level +// const int s0_dBm = -127; // S0 .. base level + const int s0_dBm = -147; // S0 .. base level - const int16_t s9_dBm = s0_dBm + (6 * 9); // S9 .. 6dB/S-Point - const int16_t bar_max_dBm = s9_dBm + 60; // S9+60dB -// const int16_t bar_min_dBm = s0_dBm + (6 * 0); // S0 - const int16_t bar_min_dBm = s0_dBm + (6 * 4); // S4 + const int s9_dBm = s0_dBm + (6 * 9); // S9 .. 6dB/S-Point + const int bar_max_dBm = s9_dBm + 60; // S9+60dB +// const int bar_min_dBm = s0_dBm + (6 * 0); // S0 + const int bar_min_dBm = s0_dBm + (6 * 4); // S4 // ************ @@ -218,13 +223,12 @@ void UI_drawBars(uint8_t *p, const unsigned int level) const unsigned int bar_x = 2 + txt_width + 4; // X coord of bar graph const unsigned int bar_width = LCD_WIDTH - 1 - bar_x; - const int16_t rssi_dBm = (rssi / 2) - 160; - const int16_t clamped_dBm = (rssi_dBm <= bar_min_dBm) ? bar_min_dBm : (rssi_dBm >= bar_max_dBm) ? bar_max_dBm : rssi_dBm; + const int rssi_dBm = (rssi / 2) - 160; + const int clamped_dBm = (rssi_dBm <= bar_min_dBm) ? bar_min_dBm : (rssi_dBm >= bar_max_dBm) ? bar_max_dBm : rssi_dBm; const unsigned int bar_range_dB = bar_max_dBm - bar_min_dBm; const unsigned int len = ((clamped_dBm - bar_min_dBm) * bar_width) / bar_range_dB; const unsigned int line = 3; - uint8_t *p_line = g_frame_buffer[line]; char s[16]; @@ -239,7 +243,7 @@ void UI_drawBars(uint8_t *p, const unsigned int level) return false; // display is in use if (now) - memset(p_line, 0, LCD_WIDTH); + memset(g_frame_buffer[line], 0, LCD_WIDTH); if (rssi_dBm >= (s9_dBm + 6)) { // S9+XXdB, 1dB increment @@ -254,7 +258,7 @@ void UI_drawBars(uint8_t *p, const unsigned int level) } UI_PrintStringSmall(s, 2, 0, line); - draw_bar(p_line + bar_x, len, bar_width); + draw_bar(g_frame_buffer[line] + bar_x, len, bar_width); if (now) ST7565_BlitFullScreen(); @@ -268,27 +272,31 @@ void UI_drawBars(uint8_t *p, const unsigned int level) } #endif -void UI_update_rssi(const int16_t rssi, const uint16_t glitch, const uint16_t noise, const int vfo) +void UI_update_rssi(const int rssi, const unsigned int glitch, const unsigned int noise, const unsigned int vfo) { #ifdef ENABLE_RX_SIGNAL_BAR + if (g_center_line == CENTER_LINE_RSSI) - { // optional larger RSSI dBm, S-point and bar level + { // large RSSI dBm, S-point, bar level + + const int rssi_level = (g_tx_vfo->channel_attributes.band < 3) ? rssi + rssi_offset_band_123 : rssi + rssi_offset_band_4567; + //if (g_current_function == FUNCTION_RECEIVE && g_squelch_open) if (g_current_function == FUNCTION_RECEIVE) - UI_DisplayRSSIBar(rssi, glitch, noise, true); + UI_DisplayRSSIBar(rssi_level, glitch, noise, true); } + #else (void)glitch; (void)noise; #endif - { // original little RS bars + { // original little RSSI bars -// const int16_t dBm = (rssi / 2) - 160; - const uint8_t line = (vfo == 0) ? 3 : 7; - uint8_t *pline = g_frame_buffer[line - 1]; - unsigned int rssi_level = 0; - int16_t rssi_cal[7]; + const unsigned int line = (vfo == 0) ? 3 : 7; + uint8_t *pline = g_frame_buffer[line - 1]; + unsigned int rssi_level = 0; + int rssi_cal[7]; #if 1 if (g_tx_vfo->channel_attributes.band < 3) @@ -306,10 +314,10 @@ void UI_update_rssi(const int16_t rssi, const uint16_t glitch, const uint16_t no rssi_cal[6] = g_eeprom.calib.rssi_cal.band_4567[3]; } #else - rssi_cal[0] = (-110 + 160) * 2; // -110 dBm - rssi_cal[2] = ( -90 + 160) * 2; // -90 dBm - rssi_cal[4] = ( -70 + 160) * 2; // -70 dBm - rssi_cal[6] = ( -50 + 160) * 2; // -50 dBm + rssi_cal[0] = (-110 + rssi_dBm_offset) * 2; // -110 dBm + rssi_cal[2] = ( -90 + rssi_dBm_offset) * 2; // -90 dBm + rssi_cal[4] = ( -70 + rssi_dBm_offset) * 2; // -70 dBm + rssi_cal[6] = ( -50 + rssi_dBm_offset) * 2; // -50 dBm #endif // linear interpolate the 4 values into 7 rssi_cal[1] = (rssi_cal[0] + rssi_cal[2]) / 2; @@ -339,9 +347,6 @@ void UI_update_rssi(const int16_t rssi, const uint16_t glitch, const uint16_t no if (rssi >= rssi_cal[0] || g_current_function == FUNCTION_NEW_RECEIVE) rssi_level = 1; -// if (g_vfo_rssi_bar_level[vfo] == rssi_level) -// return; - g_vfo_rssi_bar_level[vfo] = rssi_level; // ********************************************************** @@ -354,12 +359,8 @@ void UI_update_rssi(const int16_t rssi, const uint16_t glitch, const uint16_t no if (g_current_function == FUNCTION_TRANSMIT || g_current_display_screen != DISPLAY_MAIN) return; // display is in use - pline = g_frame_buffer[line - 1]; - memset(pline, 0, 23); - // untested !!! - if (rssi_level == 0) pline = NULL; else @@ -946,8 +947,9 @@ void UI_DisplayMain(void) // show the RX RSSI dBm, S-point and signal strength bar graph if (rx && g_eeprom.config.setting.enable_rssi_bar) { + const int rssi_level = (g_tx_vfo->channel_attributes.band < 3) ? g_current_rssi[g_rx_vfo_num] + rssi_offset_band_123 : g_current_rssi[g_rx_vfo_num] + rssi_offset_band_4567; g_center_line = CENTER_LINE_RSSI; - UI_DisplayRSSIBar(g_current_rssi[g_rx_vfo_num], g_current_glitch[g_rx_vfo_num], g_current_noise[g_rx_vfo_num], false); + UI_DisplayRSSIBar(rssi_level, g_current_glitch[g_rx_vfo_num], g_current_noise[g_rx_vfo_num], false); } else #endif diff --git a/ui/main.h b/ui/main.h index fc51365..875bc79 100644 --- a/ui/main.h +++ b/ui/main.h @@ -34,7 +34,7 @@ extern center_line_t g_center_line; #ifdef ENABLE_TX_AUDIO_BAR bool UI_DisplayAudioBar(const bool now); #endif -void UI_update_rssi(const int16_t rssi, const uint16_t glitch, const uint16_t noise, const int vfo); +void UI_update_rssi(const int rssi, const unsigned int glitch, const unsigned int noise, const unsigned int vfo); void UI_DisplayMain(void); #endif