mirror of
https://github.com/OneOfEleven/uv-k5-firmware-custom.git
synced 2025-04-28 22:31:25 +03:00
Fix "CALL FRM" on-screen bug
This commit is contained in:
parent
08f89b1252
commit
0449314a00
4
Makefile
4
Makefile
@ -11,6 +11,7 @@ ENABLE_UART := 1
|
|||||||
ENABLE_UART_DEBUG := 1
|
ENABLE_UART_DEBUG := 1
|
||||||
ENABLE_AIRCOPY := 1
|
ENABLE_AIRCOPY := 1
|
||||||
ENABLE_AIRCOPY_FREQ := 1
|
ENABLE_AIRCOPY_FREQ := 1
|
||||||
|
ENABLE_AIRCOPY_RX_REBOOT := 0
|
||||||
ENABLE_FMRADIO := 1
|
ENABLE_FMRADIO := 1
|
||||||
ENABLE_NOAA := 0
|
ENABLE_NOAA := 0
|
||||||
ENABLE_VOICE := 0
|
ENABLE_VOICE := 0
|
||||||
@ -247,6 +248,9 @@ endif
|
|||||||
ifeq ($(ENABLE_AIRCOPY_FREQ),1)
|
ifeq ($(ENABLE_AIRCOPY_FREQ),1)
|
||||||
CFLAGS += -DENABLE_AIRCOPY_FREQ
|
CFLAGS += -DENABLE_AIRCOPY_FREQ
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(ENABLE_AIRCOPY_RX_REBOOT),1)
|
||||||
|
CFLAGS += -DENABLE_AIRCOPY_RX_REBOOT
|
||||||
|
endif
|
||||||
ifeq ($(ENABLE_FMRADIO),1)
|
ifeq ($(ENABLE_FMRADIO),1)
|
||||||
CFLAGS += -DENABLE_FMRADIO
|
CFLAGS += -DENABLE_FMRADIO
|
||||||
endif
|
endif
|
||||||
|
@ -42,6 +42,7 @@ ENABLE_UART := 1 without this you can't configure radi
|
|||||||
ENABLE_UART_DEBUG := 0 just for code debugging, it sends debug info along the USB serial connection (programming lead)
|
ENABLE_UART_DEBUG := 0 just for code debugging, it sends debug info along the USB serial connection (programming lead)
|
||||||
ENABLE_AIRCOPY := 1 clone radio-to-radio via RF
|
ENABLE_AIRCOPY := 1 clone radio-to-radio via RF
|
||||||
ENABLE_AIRCOPY_FREQ := 1 remember what you use for the aircopy frequency
|
ENABLE_AIRCOPY_FREQ := 1 remember what you use for the aircopy frequency
|
||||||
|
ENABLE_AIRCOPY_RX_REBOOT := 0 auto reboot on an aircopy successful RX completion
|
||||||
ENABLE_FMRADIO := 1 WBFM VHF broadcast band receiver
|
ENABLE_FMRADIO := 1 WBFM VHF broadcast band receiver
|
||||||
ENABLE_NOAA := 1 everything NOAA (only of any use in the USA)
|
ENABLE_NOAA := 1 everything NOAA (only of any use in the USA)
|
||||||
ENABLE_VOICE := 0 want to hear voices ?
|
ENABLE_VOICE := 0 want to hear voices ?
|
||||||
|
@ -556,6 +556,14 @@ void AIRCOPY_process_fsk_rx_10ms(void)
|
|||||||
{ // transfer is complete
|
{ // transfer is complete
|
||||||
g_aircopy_state = AIRCOPY_RX_COMPLETE;
|
g_aircopy_state = AIRCOPY_RX_COMPLETE;
|
||||||
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
|
AUDIO_PlayBeep(BEEP_880HZ_60MS_TRIPLE_BEEP);
|
||||||
|
|
||||||
|
#ifdef ENABLE_AIRCOPY_RX_REBOOT
|
||||||
|
#if defined(ENABLE_OVERLAY)
|
||||||
|
overlay_FLASH_RebootToBootloader();
|
||||||
|
#else
|
||||||
|
NVIC_SystemReset();
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
BIN
firmware.bin
BIN
firmware.bin
Binary file not shown.
Binary file not shown.
61
settings.h
61
settings.h
@ -190,7 +190,7 @@ typedef struct {
|
|||||||
|
|
||||||
uint8_t close_glitch_thresh[10];
|
uint8_t close_glitch_thresh[10];
|
||||||
uint8_t unused6[6];
|
uint8_t unused6[6];
|
||||||
} __attribute__((packed)) uhf_squelch[6];
|
} __attribute__((packed)) squelch_band_4567[6];
|
||||||
|
|
||||||
// 0x1E60
|
// 0x1E60
|
||||||
struct {
|
struct {
|
||||||
@ -211,20 +211,20 @@ typedef struct {
|
|||||||
|
|
||||||
uint8_t close_glitch_thresh[10];
|
uint8_t close_glitch_thresh[10];
|
||||||
uint8_t unused6[6];
|
uint8_t unused6[6];
|
||||||
} __attribute__((packed)) vhf_squelch[6];
|
} __attribute__((packed)) squelch_band_123[6];
|
||||||
|
|
||||||
// 0x1EC0
|
// 0x1EC0
|
||||||
uint16_t rssi_band_4567[4];
|
uint16_t rssi_band_4567[4];
|
||||||
uint16_t rssi_band_123[4];
|
uint16_t rssi_band_123[4];
|
||||||
|
|
||||||
// 0x1ED0
|
// 0x1ED0
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint8_t low_tx_pwr[3];
|
uint8_t low[3];
|
||||||
uint8_t mid_tx_pwr[3];
|
uint8_t mid[3];
|
||||||
uint8_t high_tx_pwr[3];
|
uint8_t high[3];
|
||||||
uint8_t unused[7];
|
uint8_t unused[7];
|
||||||
} band_setting[7];
|
} tx_band_power[7];
|
||||||
|
|
||||||
// 0x1F40
|
// 0x1F40
|
||||||
uint16_t battery[6];
|
uint16_t battery[6];
|
||||||
@ -250,7 +250,7 @@ typedef struct {
|
|||||||
|
|
||||||
} __attribute__((packed)) t_calibration;
|
} __attribute__((packed)) t_calibration;
|
||||||
|
|
||||||
// entire eeprom
|
// user configuration
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
||||||
// 0x0000
|
// 0x0000
|
||||||
@ -268,7 +268,7 @@ typedef struct {
|
|||||||
} __attribute__((packed)) vfo_band[7];
|
} __attribute__((packed)) vfo_band[7];
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// 0x0D60
|
// 0x0D60
|
||||||
struct { // these channel attribute settings could have been in the t_channel structure !
|
struct { // these channel attribute settings could have been in the t_channel structure !
|
||||||
uint8_t band:4; // why do QS have these 4 bits ? .. band can/is computed from the frequency
|
uint8_t band:4; // why do QS have these 4 bits ? .. band can/is computed from the frequency
|
||||||
@ -278,6 +278,8 @@ typedef struct {
|
|||||||
} __attribute__((packed)) channel_attr[200];
|
} __attribute__((packed)) channel_attr[200];
|
||||||
|
|
||||||
uint8_t unused1[8];
|
uint8_t unused1[8];
|
||||||
|
|
||||||
|
// 0x0E30
|
||||||
uint8_t unused2[16];
|
uint8_t unused2[16];
|
||||||
|
|
||||||
// 0x0E40
|
// 0x0E40
|
||||||
@ -333,7 +335,7 @@ typedef struct {
|
|||||||
uint8_t unused7[7];
|
uint8_t unused7[7];
|
||||||
uint8_t alarm_mode;
|
uint8_t alarm_mode;
|
||||||
uint8_t roger_mode;
|
uint8_t roger_mode;
|
||||||
uint8_t repeater_tail_tone_elimination; // rp_ste
|
uint8_t repeater_tail_tone_elimination; // rp_ste
|
||||||
uint8_t tx_channel;
|
uint8_t tx_channel;
|
||||||
uint8_t air_copy_freq; // 1of11
|
uint8_t air_copy_freq; // 1of11
|
||||||
|
|
||||||
@ -361,6 +363,8 @@ typedef struct {
|
|||||||
uint8_t dtmf_revive_code[8];
|
uint8_t dtmf_revive_code[8];
|
||||||
uint8_t dtmf_key_up_code[16];
|
uint8_t dtmf_key_up_code[16];
|
||||||
uint8_t dtmf_key_down_code[16];
|
uint8_t dtmf_key_down_code[16];
|
||||||
|
|
||||||
|
// 0x0F18
|
||||||
uint8_t s_list_default;
|
uint8_t s_list_default;
|
||||||
uint8_t priority1_enable;
|
uint8_t priority1_enable;
|
||||||
uint8_t priority1_channel1;
|
uint8_t priority1_channel1;
|
||||||
@ -374,10 +378,10 @@ typedef struct {
|
|||||||
uint8_t unused11[8];
|
uint8_t unused11[8];
|
||||||
|
|
||||||
// 0x0F30
|
// 0x0F30
|
||||||
uint8_t aes_key[16]; // disabled = all 0xff
|
uint8_t aes_key[16]; // disabled = all 0xff
|
||||||
|
|
||||||
// 0x0F40
|
// 0x0F40
|
||||||
uint8_t freq_lock; //
|
uint8_t freq_lock; //
|
||||||
uint8_t enable_tx_350; // 350MHz ~ 400MHz
|
uint8_t enable_tx_350; // 350MHz ~ 400MHz
|
||||||
uint8_t killed; //
|
uint8_t killed; //
|
||||||
uint8_t enable_tx_200; //
|
uint8_t enable_tx_200; //
|
||||||
@ -386,9 +390,9 @@ typedef struct {
|
|||||||
uint8_t enable_scrambler; //
|
uint8_t enable_scrambler; //
|
||||||
#if 0
|
#if 0
|
||||||
// QS
|
// QS
|
||||||
uint8_t unused12[9];
|
uint8_t unused12[9]; //
|
||||||
#else
|
#else
|
||||||
// 1of11 .. some of my additional settings
|
// 1of11
|
||||||
uint8_t tx_enable:1; // 0 = completely disable TX, 1 = allow TX
|
uint8_t tx_enable:1; // 0 = completely disable TX, 1 = allow TX
|
||||||
uint8_t dtmf_live_decoder:1; // 1 = enable on-screen live DTMF decoder
|
uint8_t dtmf_live_decoder:1; // 1 = enable on-screen live DTMF decoder
|
||||||
uint8_t battery_text:2; // 0 = no battery text, 1 = voltage, 2 = percent .. on the status bar
|
uint8_t battery_text:2; // 0 = no battery text, 1 = voltage, 2 = percent .. on the status bar
|
||||||
@ -396,27 +400,36 @@ typedef struct {
|
|||||||
uint8_t am_fix:1; // 1 = RX AM fix
|
uint8_t am_fix:1; // 1 = RX AM fix
|
||||||
uint8_t backlight_on_tx_rx:2; // 0 = no backlight when TX/RX, 1 = when TX, 2 = when RX, 3 = both RX/TX
|
uint8_t backlight_on_tx_rx:2; // 0 = no backlight when TX/RX, 1 = when TX, 2 = when RX, 3 = both RX/TX
|
||||||
|
|
||||||
uint8_t unused12[8];
|
uint8_t unused12[8]; //
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// 0x0F50
|
// 0x0F50
|
||||||
char channel_name[200][16]; // each channels name text
|
char channel_name[200][16]; // each channels name text (max 10 chars used per channel)
|
||||||
|
|
||||||
// 0x1BD0
|
// 0x1BD0
|
||||||
uint8_t unused13[16];
|
uint8_t unused13[16 * 3]; // free to use
|
||||||
uint8_t unused14[16];
|
|
||||||
uint8_t unused15[16];
|
|
||||||
|
|
||||||
// 0x1C00
|
// 0x1C00
|
||||||
uint8_t dtmf_contact[16][16];
|
struct {
|
||||||
|
char name[8];
|
||||||
|
uint8_t number[8];
|
||||||
|
} __attribute__((packed)) dtmf_contact[16];
|
||||||
|
|
||||||
|
} __attribute__((packed)) t_config;
|
||||||
|
|
||||||
|
// entire eeprom
|
||||||
|
typedef struct {
|
||||||
|
|
||||||
|
// 0x0000
|
||||||
|
t_config config; // radios user config
|
||||||
|
|
||||||
// 0x1D00
|
// 0x1D00
|
||||||
uint8_t unused16[256]; // lots of unused area we could make use of
|
uint8_t unused14[256]; // does this belong to the config, or the calibration, or neither ?
|
||||||
|
|
||||||
// 0x1E00
|
// 0x1E00
|
||||||
t_calibration calibration; // the radios calibration/general settings
|
t_calibration calibration; // calibration settings .. we DO NOT pass this through aircopy, it's radio specific
|
||||||
|
|
||||||
} __attribute__((packed)) t_eeprom;
|
} __attribute__((packed)) t_eeprom; // 8192 bytes of eeprom
|
||||||
|
|
||||||
// ************************************************
|
// ************************************************
|
||||||
// this and all the other variables are going to be replaced with the above t_eeprom
|
// this and all the other variables are going to be replaced with the above t_eeprom
|
||||||
|
34
ui/main.c
34
ui/main.c
@ -450,19 +450,27 @@ void UI_DisplayMain(void)
|
|||||||
if (g_dtmf_call_state != DTMF_CALL_STATE_NONE || g_dtmf_is_tx || g_dtmf_input_mode)
|
if (g_dtmf_call_state != DTMF_CALL_STATE_NONE || g_dtmf_is_tx || g_dtmf_input_mode)
|
||||||
{ // show DTMF stuff
|
{ // show DTMF stuff
|
||||||
|
|
||||||
char Contact[16];
|
char contact[17];
|
||||||
|
|
||||||
if (!g_dtmf_input_mode)
|
if (!g_dtmf_input_mode)
|
||||||
{
|
{
|
||||||
memset(Contact, 0, sizeof(Contact));
|
memset(contact, 0, sizeof(contact));
|
||||||
if (g_dtmf_call_state == DTMF_CALL_STATE_CALL_OUT)
|
if (g_dtmf_call_state == DTMF_CALL_STATE_CALL_OUT)
|
||||||
strcpy(String, (g_dtmf_state == DTMF_STATE_CALL_OUT_RSP) ? "CALL OUT(RSP)" : "CALL OUT");
|
{
|
||||||
|
strcpy(String, (g_dtmf_state == DTMF_STATE_CALL_OUT_RSP) ? "CALL OUT RESP" : "CALL OUT");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
if (g_dtmf_call_state == DTMF_CALL_STATE_RECEIVED || g_dtmf_call_state == DTMF_CALL_STATE_RECEIVED_STAY)
|
if (g_dtmf_call_state == DTMF_CALL_STATE_RECEIVED || g_dtmf_call_state == DTMF_CALL_STATE_RECEIVED_STAY)
|
||||||
sprintf(String, "CALL FRM:%s", (DTMF_FindContact(g_dtmf_caller, Contact)) ? Contact : g_dtmf_caller);
|
{
|
||||||
|
const bool found = DTMF_FindContact(g_dtmf_caller, contact);
|
||||||
|
contact[8] = 0;
|
||||||
|
sprintf(String, "FROM %s", found ? contact : g_dtmf_caller);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
if (g_dtmf_is_tx)
|
if (g_dtmf_is_tx)
|
||||||
strcpy(String, (g_dtmf_state == DTMF_STATE_TX_SUCC) ? "DTMF TX(SUCC)" : "DTMF TX");
|
{
|
||||||
|
strcpy(String, (g_dtmf_state == DTMF_STATE_TX_SUCC) ? "DTMF TX SUCC" : "DTMF TX");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -473,15 +481,25 @@ void UI_DisplayMain(void)
|
|||||||
memset(String, 0, sizeof(String));
|
memset(String, 0, sizeof(String));
|
||||||
if (!g_dtmf_input_mode)
|
if (!g_dtmf_input_mode)
|
||||||
{
|
{
|
||||||
memset(Contact, 0, sizeof(Contact));
|
memset(contact, 0, sizeof(contact));
|
||||||
if (g_dtmf_call_state == DTMF_CALL_STATE_CALL_OUT)
|
if (g_dtmf_call_state == DTMF_CALL_STATE_CALL_OUT)
|
||||||
sprintf(String, ">%s", (DTMF_FindContact(g_dtmf_string, Contact)) ? Contact : g_dtmf_string);
|
{
|
||||||
|
const bool found = DTMF_FindContact(g_dtmf_string, contact);
|
||||||
|
contact[15] = 0;
|
||||||
|
sprintf(String, ">%s", found ? contact : g_dtmf_string);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
if (g_dtmf_call_state == DTMF_CALL_STATE_RECEIVED || g_dtmf_call_state == DTMF_CALL_STATE_RECEIVED_STAY)
|
if (g_dtmf_call_state == DTMF_CALL_STATE_RECEIVED || g_dtmf_call_state == DTMF_CALL_STATE_RECEIVED_STAY)
|
||||||
sprintf(String, ">%s", (DTMF_FindContact(g_dtmf_callee, Contact)) ? Contact : g_dtmf_callee);
|
{
|
||||||
|
const bool found = DTMF_FindContact(g_dtmf_callee, contact);
|
||||||
|
contact[15] = 0;
|
||||||
|
sprintf(String, ">%s", found ? contact : g_dtmf_callee);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
if (g_dtmf_is_tx)
|
if (g_dtmf_is_tx)
|
||||||
|
{
|
||||||
sprintf(String, ">%s", g_dtmf_string);
|
sprintf(String, ">%s", g_dtmf_string);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
UI_PrintString(String, 2, 0, 2 + (vfo_num * 3), 8);
|
UI_PrintString(String, 2, 0, 2 + (vfo_num * 3), 8);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user