diff --git a/src/ascii_cmd.c b/src/ascii_cmd.c index 8b14c8c..acf6f8f 100644 --- a/src/ascii_cmd.c +++ b/src/ascii_cmd.c @@ -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"); } \ No newline at end of file diff --git a/src/modulator.c b/src/modulator.c index 648e48b..15771bc 100644 --- a/src/modulator.c +++ b/src/modulator.c @@ -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) {