diff --git a/CMakeLists.txt b/CMakeLists.txt index ccc93c9..bba47b6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.10) -project(rds95 VERSION 1.5) +project(rds95 VERSION 1.6) add_compile_options(-Wall -Werror -Wextra -pedantic -O2 -std=c18 -march=native -DVERSION=\"${PROJECT_VERSION}\") diff --git a/src/ascii_cmd.c b/src/ascii_cmd.c index 10a62e5..2e85ef4 100644 --- a/src/ascii_cmd.c +++ b/src/ascii_cmd.c @@ -266,7 +266,7 @@ static void handle_rtprun(char *arg, RDSModulator *mod, char *output) { if (sscanf(arg, "%d,%d", &flag1, &flag2) < 1) flag1 = atoi(arg); mod->enc->rtpData[mod->enc->program][0].enabled = (flag1 == 2); mod->enc->rtpData[mod->enc->program][0].running = flag1 & 1; - if (flag2) mod->enc->rtpState[mod->enc->program][0].toggle ^= 1; + if (flag2) TOGGLE(mod->enc->rtpState[mod->enc->program][0].toggle); strcpy(output, "+"); } @@ -275,7 +275,7 @@ static void handle_ertprun(char *arg, RDSModulator* mod, char* output) { if (sscanf(arg, "%d,%d", &flag1, &flag2) < 1) flag1 = atoi(arg); mod->enc->rtpData[mod->enc->program][1].enabled = (flag1 == 2); mod->enc->rtpData[mod->enc->program][1].running = flag1 & 1; - if (flag2) mod->enc->rtpState[mod->enc->program][1].toggle ^= 1; + if (flag2) TOGGLE(mod->enc->rtpState[mod->enc->program][1].toggle); strcpy(output, "+"); } diff --git a/src/ascii_cmd.h b/src/ascii_cmd.h index 2dd9ede..7e6f912 100644 --- a/src/ascii_cmd.h +++ b/src/ascii_cmd.h @@ -1,3 +1,5 @@ +#pragma once + #include "common.h" #include "rds.h" #include "fs.h" diff --git a/src/common.h b/src/common.h index bd23abd..0d874d6 100644 --- a/src/common.h +++ b/src/common.h @@ -1,3 +1,4 @@ +#pragma once #include #include #include diff --git a/src/fs.h b/src/fs.h index 1725a7c..4d378a4 100644 --- a/src/fs.h +++ b/src/fs.h @@ -1,3 +1,4 @@ +#pragma once #include "common.h" #include "rds.h" #include "modulator.h" diff --git a/src/lib.h b/src/lib.h index d70aa3c..90ce187 100644 --- a/src/lib.h +++ b/src/lib.h @@ -1,7 +1,10 @@ +#pragma once #include "common.h" #include "rds.h" #include +#define TOGGLE(x) ((x) ^= 1) + void msleep(unsigned long ms); int _strnlen(const char *s, int maxlen); diff --git a/src/modulator.c b/src/modulator.c index c2e6a9f..bf66c1c 100644 --- a/src/modulator.c +++ b/src/modulator.c @@ -29,9 +29,7 @@ void cleanup_rds_modulator(RDSModulator* rdsMod) { } float get_rds_sample(RDSModulator* rdsMod, uint8_t stream) { - if (stream >= rdsMod->num_streams) { - return 0.0f; - } + if (stream >= rdsMod->num_streams) return 0.0f; rdsMod->data[stream].phase += 1187.5 / RDS_SAMPLE_RATE; @@ -48,8 +46,7 @@ float get_rds_sample(RDSModulator* rdsMod, uint8_t stream) { } float sample = sinf(M_2PI * rdsMod->data[stream].phase + rdsMod->data[stream].symbol_shift); - if(rdsMod->data[stream].cur_output == 0) sample = -sample; // do bpsk + if(rdsMod->data[stream].cur_output == 0) sample = -sample; // do bpsk, if you comment this part out, nothing will be decoded - uint8_t tooutput = rdsMod->params.rdsgen > stream ? 1 : 0; - return sample*rdsMod->params.level*tooutput; + return sample*rdsMod->params.level*(rdsMod->params.rdsgen > stream ? 1 : 0); } \ No newline at end of file diff --git a/src/rds.c b/src/rds.c index 207efac..422396f 100644 --- a/src/rds.c +++ b/src/rds.c @@ -101,14 +101,14 @@ static void get_rds_fasttuning_group(RDSEncoder* enc, RDSGroup *group) { static void get_rds_rt_group(RDSEncoder* enc, RDSGroup *group) { if (enc->state[enc->program].rt_update && enc->data[enc->program].rt1_enabled && !enc->data[enc->program].current_rt) { memcpy(enc->state[enc->program].rt_text, enc->data[enc->program].rt1, RT_LENGTH); - enc->state[enc->program].rt_ab ^= 1; + TOGGLE(enc->state[enc->program].rt_ab); enc->state[enc->program].rt_update = 0; enc->state[enc->program].rt_state = 0; enc->data[enc->program].current_rt = 0; } if(enc->state[enc->program].rt2_update && enc->data[enc->program].rt2_enabled && enc->data[enc->program].current_rt) { memcpy(enc->state[enc->program].rt_text, enc->data[enc->program].rt2, RT_LENGTH); - enc->state[enc->program].rt_ab ^= 1; + TOGGLE(enc->state[enc->program].rt_ab); enc->state[enc->program].rt2_update = 0; enc->state[enc->program].rt_state = 0; enc->data[enc->program].current_rt = 1; @@ -168,14 +168,12 @@ static void get_rds_oda_af_group(RDSEncoder* enc, RDSGroup *group) { get_next_af_oda(enc, af); group->b |= 7 << 12; - for (int i = 0; i < 4; i++) group->b |= ((af[i] >> 8) & 1) << i; // set the additional bits + for (int i = 0; i < 4; i++) group->b |= ((af[i] >> 8) & 1) << i; - group->c = af[0] & 0xFF; - group->c <<= 8; + group->c = (af[0] & 0xFF) << 8; group->c |= af[1] & 0xFF; - group->d = af[2] & 0xFF; - group->d <<= 8; + group->d = (af[2] & 0xFF) << 8; group->d |= af[3] & 0xFF; } @@ -203,7 +201,7 @@ static void get_rdsp_ct_group(RDSGroup *group, time_t now) { static void get_rds_ptyn_group(RDSEncoder* enc, RDSGroup *group) { if (enc->state[enc->program].ptyn_state == 0 && enc->state[enc->program].ptyn_update) { memcpy(enc->state[enc->program].ptyn_text, enc->data[enc->program].ptyn, PTYN_LENGTH); - enc->state[enc->program].ptyn_ab ^= 1; + TOGGLE(enc->state[enc->program].ptyn_ab); enc->state[enc->program].ptyn_update = 0; } @@ -390,7 +388,7 @@ static void get_rds_sequence_group(RDSEncoder* enc, RDSGroup *group, char* grp, case '1': if(enc->state[enc->program].data_ecc == 0 && enc->data[enc->program].slc_data != 0) get_rds_slcdata_group(enc, group); else get_rds_ecc_group(enc, group); - enc->state[enc->program].data_ecc ^= 1; + TOGGLE(enc->state[enc->program].data_ecc); break; case '2': get_rds_rt_group(enc, group); @@ -444,17 +442,17 @@ static void get_rds_sequence_group(RDSEncoder* enc, RDSGroup *group, char* grp, case 'R': if(enc->state[enc->program].rtp_oda == 0) get_rds_rtplus_group(enc, group); else get_rdsp_rtp_oda_group(group); - enc->state[enc->program].rtp_oda ^= 1; + TOGGLE(enc->state[enc->program].rtp_oda); break; case 'P': if(enc->state[enc->program].ert_oda == 0) get_rds_ertplus_group(enc, group); else get_rdsp_ertp_oda_group(group); - enc->state[enc->program].ert_oda ^= 1; + TOGGLE(enc->state[enc->program].ert_oda); break; case 'S': if(enc->state[enc->program].ert_oda == 0) get_rds_ert_group(enc, group); else get_rdsp_ert_oda_group(group); - enc->state[enc->program].ert_oda ^= 1; + TOGGLE(enc->state[enc->program].ert_oda); break; case 'F': get_rds_lps_group(enc, group); @@ -465,7 +463,7 @@ static void get_rds_sequence_group(RDSEncoder* enc, RDSGroup *group, char* grp, case 'U': if(enc->state[enc->program].af_oda == 0) get_rds_oda_af_group(enc, group); else get_rdsp_oda_af_oda_group(group); - enc->state[enc->program].af_oda ^= 1; + TOGGLE(enc->state[enc->program].af_oda); break; } } @@ -527,7 +525,7 @@ static void get_rds_group(RDSEncoder* enc, RDSGroup *group, uint8_t stream) { if(enc->data[enc->program].rt1_enabled && enc->data[enc->program].rt2_enabled && enc->state[enc->program].rt_switching_period_state) { enc->state[enc->program].rt_switching_period_state--; if(enc->state[enc->program].rt_switching_period_state == 0) { - enc->data[enc->program].current_rt ^= 1; + TOGGLE(enc->data[enc->program].current_rt); if (enc->data[enc->program].current_rt == 1) memcpy(enc->state[enc->program].rt_text, enc->data[enc->program].rt2, RT_LENGTH); else memcpy(enc->state[enc->program].rt_text, enc->data[enc->program].rt1, RT_LENGTH); enc->state[enc->program].rt_state = 0; @@ -820,7 +818,7 @@ inline void set_rds_rtplus_tags(RDSEncoder* enc, uint8_t *tags) { enc->rtpData[enc->program][0].start[1] = tags[4] & 0x3f; enc->rtpData[enc->program][0].len[1] = tags[5] & 0x1f; - enc->rtpState[enc->program][0].toggle ^= 1; + TOGGLE(enc->rtpState[enc->program][0].toggle); enc->rtpData[enc->program][0].running = 1; enc->rtpData[enc->program][0].enabled = 1; } @@ -833,7 +831,7 @@ inline void set_rds_ertplus_tags(RDSEncoder* enc, uint8_t *tags) { enc->rtpData[enc->program][1].start[1] = tags[4] & 0x3f; enc->rtpData[enc->program][1].len[1] = tags[5] & 0x1f; - enc->rtpState[enc->program][1].toggle ^= 1; + TOGGLE(enc->rtpState[enc->program][1].toggle); enc->rtpData[enc->program][1].running = 1; enc->rtpData[enc->program][1].enabled = 1; } diff --git a/src/rds.h b/src/rds.h index 491023b..cdaf0bd 100644 --- a/src/rds.h +++ b/src/rds.h @@ -1,5 +1,4 @@ -#ifndef RDS_H -#define RDS_H +#pragma once /* The RDS error-detection code generator polynomial is * x^10 + x^8 + x^7 + x^5 + x^4 + x^3 + x^0 @@ -249,6 +248,4 @@ void set_rds_rtplus_tags(RDSEncoder *enc, uint8_t *tags); void set_rds_ertplus_tags(RDSEncoder *enc, uint8_t *tags); void set_rds_ptyn(RDSEncoder *enc, char *ptyn); void set_rds_grpseq(RDSEncoder* enc, char *grpseq); -void set_rds_grpseq2(RDSEncoder* enc, char *grpseq2); - -#endif +void set_rds_grpseq2(RDSEncoder* enc, char *grpseq2); \ No newline at end of file diff --git a/src/udp_server.c b/src/udp_server.c index dee263b..da30365 100644 --- a/src/udp_server.c +++ b/src/udp_server.c @@ -8,7 +8,7 @@ static struct pollfd poller; static struct sockaddr_in client_addr; static socklen_t client_len = sizeof(client_addr); -static RDSModulator* mod = NULL; // Store modulator pointer globally or pass it somehow +static RDSModulator* mod = NULL; int open_udp_server(int port, RDSModulator* rds_mod) { sockfd = socket(AF_INET, SOCK_DGRAM, 0); diff --git a/src/udp_server.h b/src/udp_server.h index 13368b6..16d207e 100644 --- a/src/udp_server.h +++ b/src/udp_server.h @@ -1,3 +1,4 @@ +#pragma once #include #include #include