0
1
mirror of https://github.com/radio95-rnt/rds95.git synced 2026-02-26 20:33:53 +01:00

reduce branching and a bit clean up

This commit is contained in:
2025-06-15 12:12:21 +02:00
parent b32f80dfc4
commit 4f0a4d6876
2 changed files with 25 additions and 27 deletions

View File

@@ -206,9 +206,8 @@ static void handle_adr(char *arg, RDSModulator* mod, char* output) {
static void handle_site(char *arg, RDSModulator* mod, char* output) {
uint16_t ids[2];
int count = sscanf(arg, "%4hu,%4hu", &ids[0], &ids[1]);
if(count == 1) {
mod->enc->encoder_data.site_addr[0] = ids[0];
} else if(count == 2) {
if(count == 1) mod->enc->encoder_data.site_addr[0] = ids[0];
else if(count == 2) {
mod->enc->encoder_data.site_addr[0] = ids[0];
mod->enc->encoder_data.site_addr[1] = ids[1];
} else {
@@ -226,15 +225,14 @@ static void handle_g(char *arg, RDSModulator* mod, char* output) {
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, "+");
} 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, "+");
} else strcpy(output, "-");
strcpy(output, "+");
}
static void handle_rt1en(char *arg, RDSModulator* mod, char* output) {
@@ -483,9 +481,7 @@ static void handle_eonaf(char *arg, char *pattern, RDSModulator* mod, char* outp
af_iter = af;
memset(&new_af, 0, sizeof(RDSAFs));
while (arg_count-- != 0) {
add_rds_af(&new_af, *af_iter++);
}
while (arg_count-- != 0) add_rds_af(&new_af, *af_iter++);
memcpy(&(mod->enc->data[mod->enc->program].eon[atoi(pattern)-1].af), &new_af, sizeof(mod->enc->data[mod->enc->program].eon[atoi(pattern)-1].af));
strcpy(output, "+\0");
@@ -628,9 +624,6 @@ void process_ascii_cmd(RDSModulator* mod, char *str, char *cmd_output) {
char *cmd, *arg;
char output[255];
memset(output, 0, sizeof(output));
char upper_str[CTL_BUFFER_SIZE];
uint16_t cmd_len = _strnlen((const char*)str, CTL_BUFFER_SIZE);
for(uint16_t i = 0; i < cmd_len; i++) if(str[i] == '\t') str[i] = ' ';
@@ -645,7 +638,7 @@ void process_ascii_cmd(RDSModulator* mod, char *str, char *cmd_output) {
for (size_t i = 0; i < sizeof(commands_exact) / sizeof(command_handler_t); i++) {
const command_handler_t *handler = &commands_exact[i];
if (cmd_len == handler->cmd_length && strcmp(upper_str, handler->cmd) == 0) {
handler->handler(NULL, mod, output);
handler->handler(NULL, mod, cmd_output);
return;
}
}
@@ -667,7 +660,7 @@ void process_ascii_cmd(RDSModulator* mod, char *str, char *cmd_output) {
cmd = upper_str;
cmd[equals_pos - upper_str] = 0;
arg = equals_pos + 1;
process_pattern_commands(cmd, arg, output, mod);
process_pattern_commands(cmd, arg, cmd_output, mod);
}
uint8_t cmd_reached = 0;
@@ -676,7 +669,7 @@ void process_ascii_cmd(RDSModulator* mod, char *str, char *cmd_output) {
cmd = upper_str;
cmd[1] = 0;
arg = str + 2;
process_command_table(commands_eq2, sizeof(commands_eq2) / sizeof(command_handler_t), cmd, arg, output, mod);
process_command_table(commands_eq2, sizeof(commands_eq2) / sizeof(command_handler_t), cmd, arg, cmd_output, mod);
cmd_reached = 1;
}
@@ -684,7 +677,7 @@ void process_ascii_cmd(RDSModulator* mod, char *str, char *cmd_output) {
cmd = upper_str;
cmd[2] = 0;
arg = str + 3;
process_command_table(commands_eq3, sizeof(commands_eq3) / sizeof(command_handler_t), cmd, arg, output, mod);
process_command_table(commands_eq3, sizeof(commands_eq3) / sizeof(command_handler_t), cmd, arg, cmd_output, mod);
cmd_reached = 1;
}
@@ -692,7 +685,7 @@ void process_ascii_cmd(RDSModulator* mod, char *str, char *cmd_output) {
cmd = upper_str;
cmd[3] = 0;
arg = str + 4;
process_command_table(commands_eq4, sizeof(commands_eq4) / sizeof(command_handler_t), cmd, arg, output, mod);
process_command_table(commands_eq4, sizeof(commands_eq4) / sizeof(command_handler_t), cmd, arg, cmd_output, mod);
cmd_reached = 1;
}
@@ -700,7 +693,7 @@ void process_ascii_cmd(RDSModulator* mod, char *str, char *cmd_output) {
cmd = upper_str;
cmd[4] = 0;
arg = str + 5;
process_command_table(commands_eq5, sizeof(commands_eq5) / sizeof(command_handler_t), cmd, arg, output, mod);
process_command_table(commands_eq5, sizeof(commands_eq5) / sizeof(command_handler_t), cmd, arg, cmd_output, mod);
cmd_reached = 1;
}
@@ -708,7 +701,7 @@ void process_ascii_cmd(RDSModulator* mod, char *str, char *cmd_output) {
cmd = upper_str;
cmd[5] = 0;
arg = str + 6;
process_command_table(commands_eq6, sizeof(commands_eq6) / sizeof(command_handler_t), cmd, arg, output, mod);
process_command_table(commands_eq6, sizeof(commands_eq6) / sizeof(command_handler_t), cmd, arg, cmd_output, mod);
cmd_reached = 1;
}
@@ -716,7 +709,7 @@ void process_ascii_cmd(RDSModulator* mod, char *str, char *cmd_output) {
cmd = upper_str;
cmd[6] = 0;
arg = str + 7;
process_command_table(commands_eq7, sizeof(commands_eq7) / sizeof(command_handler_t), cmd, arg, output, mod);
process_command_table(commands_eq7, sizeof(commands_eq7) / sizeof(command_handler_t), cmd, arg, cmd_output, mod);
cmd_reached = 1;
}
@@ -724,10 +717,9 @@ void process_ascii_cmd(RDSModulator* mod, char *str, char *cmd_output) {
cmd = upper_str;
cmd[7] = 0;
arg = str + 8;
process_command_table(commands_eq8, sizeof(commands_eq8) / sizeof(command_handler_t), cmd, arg, output, mod);
process_command_table(commands_eq8, sizeof(commands_eq8) / sizeof(command_handler_t), cmd, arg, cmd_output, mod);
cmd_reached = 1;
}
if (cmd_output != NULL && cmd_reached) strcpy(cmd_output, output);
if (!cmd_reached) strcpy(cmd_output, "?\0");
}

View File

@@ -84,12 +84,18 @@ void init_rds_modulator(RDSModulator* rdsMod, RDSEncoder* enc) {
rdsMod->enc = enc;
if(STREAMS > 0) rdsMod->data[1].symbol_shift = M_PI;
if(modulatorsaved()) {
Modulator_loadFromFile(&rdsMod->params);
} else {
Modulator_saveToFile(&rdsMod->params, "ALL");
}
#if STREAMS > 1
rdsMod->data[1].symbol_shift = M_PI/2;
#if STREAMS > 2
rdsMod->data[2].symbol_shift = M_PI;
#if STREAMS > 3
rdsMod->data[3].symbol_shift = 3*M_PI/2;
#endif
#endif
#endif
if(modulatorsaved()) Modulator_loadFromFile(&rdsMod->params);
else Modulator_saveToFile(&rdsMod->params, "ALL");
}
float get_rds_sample(RDSModulator* rdsMod, uint8_t stream) {