diff --git a/openrtx/include/cps.h b/openrtx/include/cps.h index da86eb22..b06f6ab7 100644 --- a/openrtx/include/cps.h +++ b/openrtx/include/cps.h @@ -43,8 +43,10 @@ enum admit_t */ typedef struct { - uint16_t ctcDcs_rx; /**< RX CTCSS or DCS code, squelch opens on match */ - uint16_t ctcDcs_tx; /**< TX CTCSS or DCS code, sent alongside voice */ + uint16_t rxToneEn : 1, /**< RX CTC/DCS tone enable */ + rxTone : 15; /**< RX CTC/DCS tone, squelch opens on match */ + uint16_t txToneEn : 1, /**< TX CTC/DCS tone enable */ + txTone : 15; /**< TX CTC/DCS tonem sent alongside voidce */ } fmInfo_t; /** diff --git a/openrtx/src/state.c b/openrtx/src/state.c index c44d91d1..71c9d97b 100644 --- a/openrtx/src/state.c +++ b/openrtx/src/state.c @@ -43,8 +43,10 @@ void state_init() state.channel.power = 1.0; state.channel.rx_frequency = 430000000; state.channel.tx_frequency = 430000000; - state.channel.fm.ctcDcs_rx = 0; - state.channel.fm.ctcDcs_tx = 719; + state.channel.fm.rxToneEn = 0; + state.channel.fm.rxTone = 719; + state.channel.fm.txToneEn = 1; + state.channel.fm.txTone = 719; state.rtxStatus = RTX_OFF; state.sqlLevel = 3; diff --git a/openrtx/src/threads.c b/openrtx/src/threads.c index a64efc89..5904d787 100644 --- a/openrtx/src/threads.c +++ b/openrtx/src/threads.c @@ -118,8 +118,10 @@ static void ui_task(void *arg) rtx_cfg.txFrequency = state.channel.tx_frequency; rtx_cfg.txPower = state.channel.power; rtx_cfg.sqlLevel = state.channel.squelch; - rtx_cfg.rxTone = state.channel.fm.ctcDcs_rx; - rtx_cfg.txTone = state.channel.fm.ctcDcs_tx; + rtx_cfg.rxToneEn = state.channel.fm.rxToneEn; + rtx_cfg.rxTone = state.channel.fm.rxTone; + rtx_cfg.txToneEn = state.channel.fm.txToneEn; + rtx_cfg.txTone = state.channel.fm.txTone; OSMutexPost(&rtx_mutex, OS_OPT_POST_NONE, &os_err); rtx_configure(&rtx_cfg); diff --git a/openrtx/src/ui.c b/openrtx/src/ui.c index 11a11b44..16ce1d80 100644 --- a/openrtx/src/ui.c +++ b/openrtx/src/ui.c @@ -708,20 +708,22 @@ bool _ui_drawMenuMacro(state_t* last_state) { gfx_print(layout.line1_left, "1", layout.top_font, TEXT_ALIGN_LEFT, yellow_fab413); char code_str[9] = { 0 }; - snprintf(code_str, 9, " %3.1f", last_state->channel.fm.ctcDcs_tx/10.0f); + snprintf(code_str, 9, " %3.1f", last_state->channel.fm.txTone/10.0f); gfx_print(layout.line1_left, code_str, layout.top_font, TEXT_ALIGN_LEFT, color_white); gfx_print(layout.line1_left, "2 ", layout.top_font, TEXT_ALIGN_CENTER, yellow_fab413); char encdec_str[9] = { 0 }; - if (last_state->channel.fm.ctcDcs_tx != 0 && last_state->channel.fm.ctcDcs_rx != 0) - snprintf(encdec_str, 9, " E+D", last_state->channel.fm.ctcDcs_tx/10); - else if (last_state->channel.fm.ctcDcs_tx != 0 && last_state->channel.fm.ctcDcs_rx == 0) - snprintf(encdec_str, 9, " E ", last_state->channel.fm.ctcDcs_tx/10); - else if (last_state->channel.fm.ctcDcs_tx == 0 && last_state->channel.fm.ctcDcs_rx != 0) - snprintf(encdec_str, 9, " D ", last_state->channel.fm.ctcDcs_tx/10); + bool tone_tx_enable = last_state->channel.fm.txToneEn; + bool tone_rx_enable = last_state->channel.fm.rxToneEn; + if (tone_tx_enable && tone_rx_enable) + snprintf(encdec_str, 9, " E+D"); + else if (tone_tx_enable && !tone_rx_enable) + snprintf(encdec_str, 9, " E "); + else if (!tone_tx_enable && tone_rx_enable) + snprintf(encdec_str, 9, " D "); else - snprintf(encdec_str, 9, " ", last_state->channel.fm.ctcDcs_tx/10); + snprintf(encdec_str, 9, " "); gfx_print(layout.line1_left, encdec_str, layout.top_font, TEXT_ALIGN_CENTER, color_white); gfx_print(layout.line1_right, "3 ", layout.top_font, TEXT_ALIGN_RIGHT, diff --git a/platform/drivers/NVM/nvmem_MD3x0.c b/platform/drivers/NVM/nvmem_MD3x0.c index c36e8e46..2b343107 100644 --- a/platform/drivers/NVM/nvmem_MD3x0.c +++ b/platform/drivers/NVM/nvmem_MD3x0.c @@ -230,8 +230,10 @@ int nvm_readChannelData(channel_t *channel, uint16_t pos) /* Load mode-specific parameters */ if(channel->mode == FM) { - channel->fm.ctcDcs_rx = chData.ctcss_dcs_receive; - channel->fm.ctcDcs_tx = chData.ctcss_dcs_transmit; + channel->fm.rxToneEn = chData.ctcss_dcs_receive != 0; + channel->fm.rxTone = chData.ctcss_dcs_receive; + channel->fm.txToneEn = chData.ctcss_dcs_transmit != 0; + channel->fm.txTone = chData.ctcss_dcs_transmit; } else if(channel->mode == DMR) { diff --git a/platform/drivers/NVM/nvmem_MDUV3x0.c b/platform/drivers/NVM/nvmem_MDUV3x0.c index 9165cb68..3e318875 100644 --- a/platform/drivers/NVM/nvmem_MDUV3x0.c +++ b/platform/drivers/NVM/nvmem_MDUV3x0.c @@ -263,8 +263,10 @@ int nvm_readChannelData(channel_t *channel, uint16_t pos) /* Load mode-specific parameters */ if(channel->mode == FM) { - channel->fm.ctcDcs_rx = chData.ctcss_dcs_receive; - channel->fm.ctcDcs_tx = chData.ctcss_dcs_transmit; + channel->fm.rxToneEn = chData.ctcss_dcs_receive != 0; + channel->fm.rxTone = chData.ctcss_dcs_receive; + channel->fm.txToneEn = chData.ctcss_dcs_transmit != 0; + channel->fm.txTone = chData.ctcss_dcs_transmit; } else if(channel->mode == DMR) {