diff --git a/src/ascii_cmd.c b/src/ascii_cmd.c index 9dd8b5e..fec573b 100644 --- a/src/ascii_cmd.c +++ b/src/ascii_cmd.c @@ -223,13 +223,20 @@ static void handle_af(char *arg, RDSModulator* mod, char* output) { static void handle_g(char *arg, RDSModulator* mod, char* output) { uint16_t blocks[3]; - int count = sscanf((char *)arg, "%4hx%4hx%4hx", &blocks[0], &blocks[1], &blocks[2]); + int count = sscanf((char *)arg, "%4hx%4hx%4hx%4hx", &blocks[0], &blocks[1], &blocks[2], &blocks[3]); if (count == 3) { mod->enc->state[mod->enc->program].custom_group[0] = 1; mod->enc->state[mod->enc->program].custom_group[1] = blocks[0]; mod->enc->state[mod->enc->program].custom_group[2] = blocks[1]; mod->enc->state[mod->enc->program].custom_group[3] = blocks[2]; strcpy(output, "+\0"); + } else if(count == 4) { + mod->enc->state[mod->enc->program].custom_group2[0] = 1; + mod->enc->state[mod->enc->program].custom_group2[1] = blocks[0]; + mod->enc->state[mod->enc->program].custom_group2[2] = blocks[1]; + mod->enc->state[mod->enc->program].custom_group2[3] = blocks[2]; + mod->enc->state[mod->enc->program].custom_group2[4] = blocks[3]; + strcpy(output, "+\0"); } else { strcpy(output, "-\0"); } diff --git a/src/rds.c b/src/rds.c index 6bae8d1..459695b 100644 --- a/src/rds.c +++ b/src/rds.c @@ -545,10 +545,27 @@ static uint8_t get_rds_custom_groups(RDSEncoder* enc, uint16_t *blocks) { } return 0; } +static uint8_t get_rds_custom_groups2(RDSEncoder* enc, uint16_t *blocks) { + if(enc->state[enc->program].custom_group2[0] == 1) { + enc->state[enc->program].custom_group2[0] = 0; + blocks[0] = enc->state[enc->program].custom_group[1]; + blocks[1] = enc->state[enc->program].custom_group[2]; + blocks[2] = enc->state[enc->program].custom_group[3]; + blocks[3] = enc->state[enc->program].custom_group[4]; + return 1; + } + return 0; +} static void get_rds_group(RDSEncoder* enc, uint16_t *blocks, uint8_t stream) { blocks[0] = enc->data[enc->program].pi; - if(stream != 0) blocks[0] = 0; + if(stream != 0) { + blocks[0] = 0; + if(get_rds_custom_groups2(enc, blocks)) { + goto group_coded; + } + return; + } blocks[1] = 0; blocks[2] = 0; blocks[3] = 0; diff --git a/src/rds.h b/src/rds.h index 8d347c9..6ebf375 100644 --- a/src/rds.h +++ b/src/rds.h @@ -189,6 +189,7 @@ typedef struct { uint8_t lps_segments : 5; uint16_t custom_group[GROUP_LENGTH]; + uint16_t custom_group2[GROUP_LENGTH + 1]; uint8_t rtp_oda : 1; uint8_t grp_seq_idx[3];