diff --git a/.vscode/.server-controller-port.log b/.vscode/.server-controller-port.log index 218417b..f97b24d 100644 --- a/.vscode/.server-controller-port.log +++ b/.vscode/.server-controller-port.log @@ -1,5 +1,5 @@ { "port": 13452, - "time": 1742674632085, + "time": 1742722294785, "version": "0.0.3" } \ No newline at end of file diff --git a/src/rds.c b/src/rds.c index 7067987..87e656f 100644 --- a/src/rds.c +++ b/src/rds.c @@ -18,9 +18,7 @@ void saveToFile(RDSEncoder *emp, const char *option) { memcpy(&tempEncoder, emp, sizeof(RDSEncoder)); } - if (strcmp(option, "MS") == 0) { - tempEncoder.data[emp->program].ms = emp->data[emp->program].ms; - } else if (strcmp(option, "PS") == 0) { + if (strcmp(option, "PS") == 0) { memcpy(tempEncoder.data[emp->program].ps, emp->data[emp->program].ps, PS_LENGTH); } else if (strcmp(option, "PI") == 0) { tempEncoder.data[emp->program].pi = emp->data[emp->program].pi; @@ -46,10 +44,6 @@ void saveToFile(RDSEncoder *emp, const char *option) { memcpy(&(tempEncoder.data[emp->program].af), &(emp->data[emp->program].af), sizeof(emp->data[emp->program].af)); } else if (strcmp(option, "ECC") == 0) { tempEncoder.data[emp->program].ecc = emp->data[emp->program].ecc; - } else if (strcmp(option, "LIC") == 0) { - tempEncoder.data[emp->program].lic = emp->data[emp->program].lic; - } else if (strcmp(option, "ECCEN") == 0) { - tempEncoder.data[emp->program].ecclic_enabled = emp->data[emp->program].ecclic_enabled; } else if (strcmp(option, "TPS") == 0) { memcpy(tempEncoder.data[emp->program].tps, emp->data[emp->program].tps, PS_LENGTH); } else if (strcmp(option, "DPS1") == 0) { @@ -68,8 +62,6 @@ void saveToFile(RDSEncoder *emp, const char *option) { memcpy(tempEncoder.data[emp->program].lps, emp->data[emp->program].lps, LPS_LENGTH); } else if (strcmp(option, "SHORTRT") == 0) { tempEncoder.data[emp->program].shortrt = emp->data[emp->program].shortrt; - } else if (strcmp(option, "PIN") == 0 || strcmp(option, "PINEN") == 0) { - memcpy(tempEncoder.data[emp->program].pin, emp->data[emp->program].pin, sizeof(emp->data[emp->program].pin)); } else if (strcmp(option, "GRPSEQ") == 0) { memcpy(tempEncoder.data[emp->program].grp_sqc, emp->data[emp->program].grp_sqc, sizeof(emp->data[emp->program].grp_sqc)); } else if (strcmp(option, "RTP") == 0) { @@ -92,8 +84,6 @@ void saveToFile(RDSEncoder *emp, const char *option) { memcpy(&(tempEncoder.oda_state[emp->program]), &(emp->oda_state[emp->program]), sizeof(RDSODAState)); } else if(strcmp(option, "PTYNEN") == 0) { tempEncoder.data[emp->program].ptyn_enabled = emp->data[emp->program].ptyn_enabled; - } else if(strcmp(option, "ECCEN") == 0) { - tempEncoder.data[emp->program].ecclic_enabled = emp->data[emp->program].ecclic_enabled; } else if(strcmp(option, "RT1EN") == 0) { tempEncoder.data[emp->program].rt1_enabled = emp->data[emp->program].rt1_enabled; } else if(strcmp(option, "RT2EN") == 0) { @@ -101,8 +91,6 @@ void saveToFile(RDSEncoder *emp, const char *option) { } else if(strcmp(option, "RTPER") == 0) { tempEncoder.data[emp->program].rt_switching_period = emp->data[emp->program].rt_switching_period; tempEncoder.data[emp->program].orignal_rt_switching_period = emp->data[emp->program].orignal_rt_switching_period; - } else if(strcmp(option, "PINEN") == 0) { - tempEncoder.data[emp->program].pin[0] = emp->data[emp->program].pin[0]; } else if(strcmp(option, "PROGRAM") == 0) { tempEncoder.program = emp->program; } else if(strcmp(option, "EON") == 0) { @@ -298,7 +286,7 @@ get_ps: encode: blocks[1] |= enc->data[enc->program].ta << 4; - blocks[1] |= enc->data[enc->program].ms << 3; + blocks[1] |= 1 << 3; // MS was removed from the standard, this is to keep compatibility with old receivers blocks[1] |= ((enc->data[enc->program].di >> (3 - enc->state[enc->program].ps_csegment)) & 1) << 2; blocks[1] |= enc->state[enc->program].ps_csegment; blocks[2] = get_next_af(enc); @@ -441,23 +429,6 @@ static void get_rds_lps_group(RDSEncoder* enc, uint16_t *blocks) { static void get_rds_ecc_group(RDSEncoder* enc, uint16_t *blocks) { blocks[1] |= 1 << 12; blocks[2] = enc->data[enc->program].ecc; - - if(enc->data[enc->program].pin[0]) { - blocks[3] = enc->data[enc->program].pin[1] << 11; - blocks[3] |= enc->data[enc->program].pin[2] << 6; - blocks[3] |= enc->data[enc->program].pin[3]; - } -} - -static void get_rds_lic_group(RDSEncoder* enc, uint16_t *blocks) { - blocks[1] |= 1 << 12; - blocks[2] = 0x3000 | enc->data[enc->program].lic; - - if(enc->data[enc->program].pin[0]) { - blocks[3] = enc->data[enc->program].pin[1] << 11; // day - blocks[3] |= enc->data[enc->program].pin[2] << 6; // hour - blocks[3] |= enc->data[enc->program].pin[3]; // minute - } } static void get_rds_rtplus_group(RDSEncoder* enc, uint16_t *blocks) { @@ -495,28 +466,18 @@ get_eon: break; case 4: // 13 if(eon.pty == 0 && eon.tp == 0) { - enc->state[enc->program].eon_state++; - goto get_eon; + break; } blocks[2] = eon.pty << 11; if(eon.tp) blocks[2] |= eon.ta; blocks[1] |= 13; break; - case 5: // 14 - if(eon.pin[0] == 0) { - break; - } - blocks[2] = eon.pin[1] << 11; - blocks[2] |= eon.pin[2] << 6; - blocks[2] |= eon.pin[3]; - blocks[1] |= 14; - break; // TODO: Add AF } blocks[3] = eon.pi; - if(enc->state[enc->program].eon_state == 5) { + if(enc->state[enc->program].eon_state == 4) { enc->state[enc->program].eon_index++; uint8_t i = 0; @@ -610,12 +571,18 @@ static void get_rds_group(RDSEncoder* enc, uint16_t *blocks, uint8_t stream) { if(stream != 0) { blocks[0] = 0; if(get_rds_custom_groups2(enc, blocks)) { + if (blocks[0] == 0 && IS_TYPE_B(blocks)) { + blocks[2] = enc->data[enc->program].pi; + } return; } if(enc->encoder_data.rds2_mode == 0) { // tunneling blocks[1] = enc->state->last_stream0_group[0]; blocks[2] = enc->state->last_stream0_group[1]; blocks[3] = enc->state->last_stream0_group[2]; + if (IS_TYPE_B(blocks)) { + blocks[2] = enc->data[enc->program].pi; + } return; } else { // TODO: add store command @@ -639,7 +606,7 @@ static void get_rds_group(RDSEncoder* enc, uint16_t *blocks, uint8_t stream) { grp = enc->data[enc->program].grp_sqc[grp_sqc_idx]; if(grp == '0') good_group = 1; - if(grp == '1' && enc->data[enc->program].ecclic_enabled) good_group = 1; + if(grp == '1' && enc->data[enc->program].ecc != 0) good_group = 1; if(grp == '2' && (enc->data[enc->program].rt1_enabled || enc->data[enc->program].rt2_enabled)) good_group = 1; if(grp == 'A' && enc->data[enc->program].ptyn_enabled) good_group = 1; if(grp == 'E') { @@ -694,18 +661,7 @@ static void get_rds_group(RDSEncoder* enc, uint16_t *blocks, uint8_t stream) { get_rds_ps_group(enc, blocks); goto group_coded; case '1': - if(enc->data[enc->program].ecc && enc->data[enc->program].lic) { - if(enc->state[enc->program].ecc_or_lic == 0) { - get_rds_ecc_group(enc, blocks); - } else { - get_rds_lic_group(enc, blocks); - } - enc->state[enc->program].ecc_or_lic ^= 1; - } else if(enc->data[enc->program].lic) { - get_rds_lic_group(enc, blocks); - } else { - get_rds_ecc_group(enc, blocks); - } + get_rds_ecc_group(enc, blocks); goto group_coded; case '2': get_rds_rt_group(enc, blocks); @@ -814,9 +770,7 @@ void set_rds_defaults(RDSEncoder* enc, uint8_t program) { enc->data[program].ct = 1; enc->data[program].di = 1; - enc->data[program].ecclic_enabled = 1; strcpy((char *)enc->data[program].grp_sqc, DEFAULT_GRPSQC); - enc->data[program].ms = 1; enc->data[program].tp = 1; enc->data[program].pi = 0xFFFF; strcpy((char *)enc->data[program].ps, "* RDS * "); diff --git a/src/rds.h b/src/rds.h index d4b8c29..e98b387 100644 --- a/src/rds.h +++ b/src/rds.h @@ -47,7 +47,6 @@ typedef struct { uint8_t ta : 1; uint8_t tp : 1; uint8_t pty : 5; - uint8_t pin[4]; char ps[8]; RDSAFs af; } RDSEON; @@ -84,14 +83,11 @@ typedef struct { uint8_t dsn; uint8_t psn; - uint8_t ecclic_enabled : 1; - uint16_t lic : 12; uint8_t ecc; uint8_t ta : 1; uint8_t pty : 5; uint8_t tp : 1; - uint8_t ms : 1; uint8_t di : 4; char tps[PS_LENGTH]; @@ -130,8 +126,6 @@ typedef struct { char lps[LPS_LENGTH]; - uint8_t pin[4]; - char grp_sqc[24]; uint8_t udg1_len : 4; @@ -143,8 +137,6 @@ typedef struct { RDSEON eon[EONS]; } RDSData; typedef struct { - uint8_t ecc_or_lic : 1; - uint8_t ps_update : 1; uint8_t tps_update : 1; char ps_text[PS_LENGTH];