0
1
mirror of https://github.com/radio95-rnt/rds95.git synced 2026-02-27 04:43:52 +01:00

some changes

This commit is contained in:
2025-03-17 17:16:47 +01:00
parent b7f0aef0cd
commit a93a3cf597

View File

@@ -112,8 +112,6 @@ void saveToFile(RDSEncoder *emp, const char *option) {
tempEncoder.program = emp->program; tempEncoder.program = emp->program;
} }
memcpy(&(tempEncoder.state[emp->program]), &(emp->state[emp->program]), sizeof(RDSState));
file = fopen(encoderPath, "wb"); file = fopen(encoderPath, "wb");
if (file == NULL) { if (file == NULL) {
perror("Error opening file"); perror("Error opening file");
@@ -212,6 +210,9 @@ static void get_rds_ps_group(RDSEncoder* enc, uint16_t *blocks) {
} }
} else { } else {
if(enc->data[enc->program].dps1_len > PS_LENGTH) { if(enc->data[enc->program].dps1_len > PS_LENGTH) {
uint8_t scroll_threshold = enc->data[enc->program].dps_speed ? 4 : 6;
if (enc->state[enc->program].dynamic_ps_period >= scroll_threshold) {
switch(enc->data[enc->program].dps1_mode) { switch(enc->data[enc->program].dps1_mode) {
case 0: case 0:
memcpy(enc->state[enc->program].ps_text, &(enc->state[enc->program].dps1_text[enc->state[enc->program].dynamic_ps_position]), PS_LENGTH); memcpy(enc->state[enc->program].ps_text, &(enc->state[enc->program].dps1_text[enc->state[enc->program].dynamic_ps_position]), PS_LENGTH);
@@ -223,6 +224,8 @@ static void get_rds_ps_group(RDSEncoder* enc, uint16_t *blocks) {
break; break;
} }
enc->state[enc->program].dynamic_ps_period = 0;
if(enc->state[enc->program].dynamic_ps_position >= enc->data[enc->program].dps1_len) { if(enc->state[enc->program].dynamic_ps_position >= enc->data[enc->program].dps1_len) {
enc->state[enc->program].dynamic_ps_position = 0; enc->state[enc->program].dynamic_ps_position = 0;
enc->state[enc->program].dps1_repeat_count++; enc->state[enc->program].dps1_repeat_count++;
@@ -233,11 +236,11 @@ static void get_rds_ps_group(RDSEncoder* enc, uint16_t *blocks) {
enc->state[enc->program].dps1_repeat_count = 0; enc->state[enc->program].dps1_repeat_count = 0;
} }
} }
}
} else { } else {
memcpy(enc->state[enc->program].ps_text, enc->state[enc->program].dps1_text, PS_LENGTH); memcpy(enc->state[enc->program].ps_text, enc->state[enc->program].dps1_text, PS_LENGTH);
enc->state[enc->program].dynamic_ps_period++; enc->state[enc->program].dynamic_ps_period++;
// For short messages, use the period to determine how many times to repeat
if(enc->state[enc->program].dynamic_ps_period >= enc->data[enc->program].dps_label_period) { if(enc->state[enc->program].dynamic_ps_period >= enc->data[enc->program].dps_label_period) {
enc->state[enc->program].dynamic_ps_state = 0; enc->state[enc->program].dynamic_ps_state = 0;
enc->state[enc->program].dynamic_ps_period = 0; enc->state[enc->program].dynamic_ps_period = 0;
@@ -259,7 +262,13 @@ static void get_rds_ps_group(RDSEncoder* enc, uint16_t *blocks) {
} }
enc->state[enc->program].ps_csegment++; enc->state[enc->program].ps_csegment++;
if (enc->state[enc->program].ps_csegment >= 4) enc->state[enc->program].ps_csegment = 0; if (enc->state[enc->program].ps_csegment >= 4) {
enc->state[enc->program].ps_csegment = 0;
// Increment the dynamic PS period counter when we've completed a full PS transmission
if (enc->state[enc->program].dynamic_ps_state == 1) {
enc->state[enc->program].dynamic_ps_period++;
}
}
} }
static uint8_t get_rds_rt_group(RDSEncoder* enc, uint16_t *blocks) { static uint8_t get_rds_rt_group(RDSEncoder* enc, uint16_t *blocks) {
@@ -556,9 +565,21 @@ static void init_rtplus(RDSEncoder* enc, uint8_t group, uint8_t program) {
enc->rtpData[program].enabled = 0; enc->rtpData[program].enabled = 0;
} }
void reset_rds_state(RDSEncoder* enc, uint8_t program) {
memset(&(enc->state[program]), 0, sizeof(RDSState));
enc->state[program].rt_ab = 1;
enc->state[program].ptyn_ab = 1;
enc->state[program].rt_update = 1;
enc->state[program].ps_update = 1;
enc->state[program].dps1_update = 1;
enc->state[program].tps_update = 1;
enc->state[program].ptyn_update = 1;
enc->state[program].lps_update = 1;
}
void set_rds_defaults(RDSEncoder* enc, uint8_t program) { void set_rds_defaults(RDSEncoder* enc, uint8_t program) {
memset(&(enc->data[program]), 0, sizeof(RDSData)); memset(&(enc->data[program]), 0, sizeof(RDSData));
memset(&(enc->state[program]), 0, sizeof(RDSState));
memset(&(enc->oda_state[program]), 0, sizeof(RDSODAState)); memset(&(enc->oda_state[program]), 0, sizeof(RDSODAState));
memset(&(enc->odas[program]), 0, sizeof(RDSODA)*MAX_ODAS); memset(&(enc->odas[program]), 0, sizeof(RDSODA)*MAX_ODAS);
memset(&(enc->rtpData[program]), 0, sizeof(RDSRTPlusData)); memset(&(enc->rtpData[program]), 0, sizeof(RDSRTPlusData));
@@ -580,18 +601,11 @@ void set_rds_defaults(RDSEncoder* enc, uint8_t program) {
memset(enc->data[program].rt1, ' ', 64); memset(enc->data[program].rt1, ' ', 64);
enc->data[program].rt1[0] = '\r'; enc->data[program].rt1[0] = '\r';
enc->data[program].static_ps_period = 6; enc->data[program].static_ps_period = 10;
enc->data[program].dps_label_period = 4; enc->data[program].dps_label_period = 8;
enc->data[program].dps1_numberofrepeats = 1; enc->data[program].dps1_numberofrepeats = 1;
enc->state[program].rt_ab = 1; reset_rds_state(enc, program);
enc->state[program].ptyn_ab = 1;
enc->state[program].rt_update = 1;
enc->state[program].ps_update = 1;
enc->state[program].tps_update = 1;
enc->state[program].ptyn_update = 1;
enc->state[program].lps_update = 1;
init_rtplus(enc, GROUP_11A, program); init_rtplus(enc, GROUP_11A, program);
} }
@@ -606,6 +620,10 @@ void init_rds_encoder(RDSEncoder* enc) {
} else { } else {
saveToFile(enc, "ALL"); saveToFile(enc, "ALL");
} }
for(int i = 0; i < PROGRAMS; i++) {
reset_rds_state(enc, i);
}
} }
void set_rds_rt1(RDSEncoder* enc, char *rt1) { void set_rds_rt1(RDSEncoder* enc, char *rt1) {