From 739c3208952a8ef2f360f1ddacdeb0aae64efc22 Mon Sep 17 00:00:00 2001 From: KubaPro010 Date: Sat, 22 Mar 2025 17:52:00 +0100 Subject: [PATCH] add rt2 --- src/ascii_cmd.c | 26 ++++++++++++++++++++++++++ src/rds.c | 12 +++++++++++- src/rds.h | 2 ++ supported_cmds.txt | 30 +++++++++++++++--------------- 4 files changed, 54 insertions(+), 16 deletions(-) diff --git a/src/ascii_cmd.c b/src/ascii_cmd.c index 7ae35cd..d843d12 100644 --- a/src/ascii_cmd.c +++ b/src/ascii_cmd.c @@ -74,6 +74,12 @@ static void handle_rt1(char *arg, RDSModulator* mod, char* output) { strcpy(output, "+\0"); } +static void handle_rt2(char *arg, RDSModulator* mod, char* output) { + arg[RT_LENGTH * 2] = 0; + set_rds_rt2(mod->enc, xlat(arg)); + strcpy(output, "+\0"); +} + static void handle_dps1(char *arg, RDSModulator* mod, char* output) { arg[DPS_LENGTH * 2] = 0; set_rds_dps1(mod->enc, xlat(arg)); @@ -239,6 +245,17 @@ static void handle_rt1en(char *arg, RDSModulator* mod, char* output) { strcpy(output, "+\0"); } +static void handle_rt2en(char *arg, RDSModulator* mod, char* output) { + mod->enc->data[mod->enc->program].rt2_enabled = atoi(arg); + strcpy(output, "+\0"); +} + +static void handle_rtper(char *arg, RDSModulator* mod, char* output) { + mod->enc->data[mod->enc->program].rt_switching_period = atoi(arg); + mod->enc->data[mod->enc->program].orignal_rt_switching_period = atoi(arg); + strcpy(output, "+\0"); +} + static void handle_dps1en(char *arg, RDSModulator* mod, char* output) { mod->enc->data[mod->enc->program].dps1_enabled = atoi(arg); mod->enc->state[mod->enc->program].ps_update = 1; @@ -389,6 +406,11 @@ static void handle_udg2(char *arg, RDSModulator* mod, char* output) { else strcpy(output, "/\0"); } +static void handle_rttype(char *arg, RDSModulator* mod, char* output) { + mod->enc->data[mod->enc->program].rt_type = atoi(arg); + strcpy(output, "+\0"); +} + static void handle_init(char *arg, RDSModulator* mod, char* output) { (void)arg; set_rds_defaults(mod->enc, mod->enc->program); @@ -556,6 +578,7 @@ static const command_handler_t commands_eq3[] = { static const command_handler_t commands_eq4[] = { {"TPS", handle_tps, 3}, {"RT1", handle_rt1, 3}, + {"RT2", handle_rt2, 3}, {"PTY", handle_pty, 3}, {"ECC", handle_ecc, 3}, {"LIC", handle_lic, 3}, @@ -581,6 +604,8 @@ static const command_handler_t commands_eq2[] = { static const command_handler_t commands_eq6[] = { {"PINEN", handle_pinen, 5}, {"RT1EN", handle_rt1en, 5}, + {"RT2EN", handle_rt2en, 5}, + {"RTPER", handle_rtper, 5}, {"ECCEN", handle_eccen, 5}, {"LEVEL", handle_level, 5}, {"RESET", handle_reset, 5}, @@ -594,6 +619,7 @@ static const command_handler_t commands_eq7[] = { {"DPS1EN", handle_dps1en, 6}, {"LABPER", handle_labper, 6}, {"SPSPER", handle_spsper, 6}, + {"RTTYPE", handle_rttype, 6}, }; static const command_handler_t commands_eq8[] = { diff --git a/src/rds.c b/src/rds.c index 0a02b43..7075a34 100644 --- a/src/rds.c +++ b/src/rds.c @@ -308,11 +308,19 @@ encode: } static void get_rds_rt_group(RDSEncoder* enc, uint16_t *blocks) { - if (enc->state[enc->program].rt_update) { + if (enc->state[enc->program].rt_update && enc->data[enc->program].rt1_enabled) { memcpy(enc->state[enc->program].rt_text, enc->data[enc->program].rt1, RT_LENGTH); enc->state[enc->program].rt_ab ^= 1; enc->state[enc->program].rt_update = 0; enc->state[enc->program].rt_state = 0; + enc->state[enc->program].current_rt = 0; + } + if(enc->state[enc->program].rt2_update && enc->data[enc->program].rt2_enabled && !enc->data[enc->program].rt1_enabled) { + memcpy(enc->state[enc->program].rt_text, enc->data[enc->program].rt2, RT_LENGTH); + enc->state[enc->program].rt_ab ^= 1; + enc->state[enc->program].rt2_update = 0; + enc->state[enc->program].rt_state = 0; + enc->state[enc->program].current_rt = 1; } uint8_t ab = enc->state[enc->program].rt_ab; @@ -831,6 +839,8 @@ void set_rds_rt1(RDSEncoder* enc, char *rt1) { void set_rds_rt2(RDSEncoder* enc, char *rt2) { uint8_t i = 0, len = 0; + enc->state[enc->program].rt2_update = 1; + memset(enc->data[enc->program].rt2, ' ', RT_LENGTH); while (*rt2 != 0 && len < RT_LENGTH) enc->data[enc->program].rt2[len++] = *rt2++; diff --git a/src/rds.h b/src/rds.h index 2af76e6..4cbcb72 100644 --- a/src/rds.h +++ b/src/rds.h @@ -175,6 +175,7 @@ typedef struct { char rt_text[RT_LENGTH]; uint8_t rt_state : 5; uint8_t rt_update : 1; + uint8_t rt2_update : 1; uint8_t rt_ab : 1; uint8_t rt_segments : 5; uint8_t rt2_segments : 5; @@ -332,6 +333,7 @@ void set_rds_defaults(RDSEncoder* enc, uint8_t program); void init_rds_encoder(RDSEncoder* enc); void get_rds_bits(RDSEncoder* enc, uint8_t *bits); void set_rds_rt1(RDSEncoder* enc, char *rt1); +void set_rds_rt2(RDSEncoder* enc, char *rt2); void set_rds_dps1(RDSEncoder* enc, char *dps1); void set_rds_next_dps1(RDSEncoder* enc, char *dps1); void set_rds_ps(RDSEncoder* enc, char *ps); diff --git a/supported_cmds.txt b/supported_cmds.txt index dfaabad..787649f 100644 --- a/supported_cmds.txt +++ b/supported_cmds.txt @@ -21,10 +21,10 @@ PTYN PTYNEN RT1 | TEXT RT1EN -- RT2 -- RT2EN -- RTPER -- RTTYPE +RT2 +RT2EN +RTPER +RTTYPE - RSTDPS SCRLSPD SPSPER @@ -42,21 +42,21 @@ EON* - SLIST - SEN - Sxx* -(COMSPD) +(COMSPD) - No COM CT -(DATE) +(DATE) - Date is taken from system time - ECHO -(EXTSYNC) +(EXTSYNC) - No Sync LEVEL -(LTO) -(PHASE) -(MJD) -(PILOT) +(LTO) - Time is taken from system +(PHASE) - No phase control +(MJD) - Data is taken... +(PILOT) - No info RDSGEN -(RESET) -(SPEED) +RESET +(SPEED) - No COM - STATUS, ?? -(TIME) +(TIME) - Time is taken... VER - ADR *ADR - CC @@ -70,7 +70,7 @@ PIN PINEN PROGRAM PSN* -(PSW) +(PSW) - Could be RTP RTPRUN SHORTRT