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

pragma once, maybe reduces size?

This commit is contained in:
2025-12-20 10:36:39 +01:00
parent eb0f11b962
commit d52a9678ec
11 changed files with 31 additions and 31 deletions

View File

@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.10) 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}\") add_compile_options(-Wall -Werror -Wextra -pedantic -O2 -std=c18 -march=native -DVERSION=\"${PROJECT_VERSION}\")

View File

@@ -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); 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].enabled = (flag1 == 2);
mod->enc->rtpData[mod->enc->program][0].running = flag1 & 1; 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, "+"); 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); 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].enabled = (flag1 == 2);
mod->enc->rtpData[mod->enc->program][1].running = flag1 & 1; 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, "+"); strcpy(output, "+");
} }

View File

@@ -1,3 +1,5 @@
#pragma once
#include "common.h" #include "common.h"
#include "rds.h" #include "rds.h"
#include "fs.h" #include "fs.h"

View File

@@ -1,3 +1,4 @@
#pragma once
#include <stddef.h> #include <stddef.h>
#include <stdint.h> #include <stdint.h>
#include <stdio.h> #include <stdio.h>

View File

@@ -1,3 +1,4 @@
#pragma once
#include "common.h" #include "common.h"
#include "rds.h" #include "rds.h"
#include "modulator.h" #include "modulator.h"

View File

@@ -1,7 +1,10 @@
#pragma once
#include "common.h" #include "common.h"
#include "rds.h" #include "rds.h"
#include <time.h> #include <time.h>
#define TOGGLE(x) ((x) ^= 1)
void msleep(unsigned long ms); void msleep(unsigned long ms);
int _strnlen(const char *s, int maxlen); int _strnlen(const char *s, int maxlen);

View File

@@ -29,9 +29,7 @@ void cleanup_rds_modulator(RDSModulator* rdsMod) {
} }
float get_rds_sample(RDSModulator* rdsMod, uint8_t stream) { float get_rds_sample(RDSModulator* rdsMod, uint8_t stream) {
if (stream >= rdsMod->num_streams) { if (stream >= rdsMod->num_streams) return 0.0f;
return 0.0f;
}
rdsMod->data[stream].phase += 1187.5 / RDS_SAMPLE_RATE; 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); 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*(rdsMod->params.rdsgen > stream ? 1 : 0);
return sample*rdsMod->params.level*tooutput;
} }

View File

@@ -101,14 +101,14 @@ static void get_rds_fasttuning_group(RDSEncoder* enc, RDSGroup *group) {
static void get_rds_rt_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) { 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); 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_update = 0;
enc->state[enc->program].rt_state = 0; enc->state[enc->program].rt_state = 0;
enc->data[enc->program].current_rt = 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) { 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); 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].rt2_update = 0;
enc->state[enc->program].rt_state = 0; enc->state[enc->program].rt_state = 0;
enc->data[enc->program].current_rt = 1; 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); get_next_af_oda(enc, af);
group->b |= 7 << 12; 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 = (af[0] & 0xFF) << 8;
group->c <<= 8;
group->c |= af[1] & 0xFF; group->c |= af[1] & 0xFF;
group->d = af[2] & 0xFF; group->d = (af[2] & 0xFF) << 8;
group->d <<= 8;
group->d |= af[3] & 0xFF; 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) { static void get_rds_ptyn_group(RDSEncoder* enc, RDSGroup *group) {
if (enc->state[enc->program].ptyn_state == 0 && enc->state[enc->program].ptyn_update) { 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); 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; 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': case '1':
if(enc->state[enc->program].data_ecc == 0 && enc->data[enc->program].slc_data != 0) get_rds_slcdata_group(enc, group); 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); else get_rds_ecc_group(enc, group);
enc->state[enc->program].data_ecc ^= 1; TOGGLE(enc->state[enc->program].data_ecc);
break; break;
case '2': case '2':
get_rds_rt_group(enc, group); get_rds_rt_group(enc, group);
@@ -444,17 +442,17 @@ static void get_rds_sequence_group(RDSEncoder* enc, RDSGroup *group, char* grp,
case 'R': case 'R':
if(enc->state[enc->program].rtp_oda == 0) get_rds_rtplus_group(enc, group); if(enc->state[enc->program].rtp_oda == 0) get_rds_rtplus_group(enc, group);
else get_rdsp_rtp_oda_group(group); else get_rdsp_rtp_oda_group(group);
enc->state[enc->program].rtp_oda ^= 1; TOGGLE(enc->state[enc->program].rtp_oda);
break; break;
case 'P': case 'P':
if(enc->state[enc->program].ert_oda == 0) get_rds_ertplus_group(enc, group); if(enc->state[enc->program].ert_oda == 0) get_rds_ertplus_group(enc, group);
else get_rdsp_ertp_oda_group(group); else get_rdsp_ertp_oda_group(group);
enc->state[enc->program].ert_oda ^= 1; TOGGLE(enc->state[enc->program].ert_oda);
break; break;
case 'S': case 'S':
if(enc->state[enc->program].ert_oda == 0) get_rds_ert_group(enc, group); if(enc->state[enc->program].ert_oda == 0) get_rds_ert_group(enc, group);
else get_rdsp_ert_oda_group(group); else get_rdsp_ert_oda_group(group);
enc->state[enc->program].ert_oda ^= 1; TOGGLE(enc->state[enc->program].ert_oda);
break; break;
case 'F': case 'F':
get_rds_lps_group(enc, group); get_rds_lps_group(enc, group);
@@ -465,7 +463,7 @@ static void get_rds_sequence_group(RDSEncoder* enc, RDSGroup *group, char* grp,
case 'U': case 'U':
if(enc->state[enc->program].af_oda == 0) get_rds_oda_af_group(enc, group); if(enc->state[enc->program].af_oda == 0) get_rds_oda_af_group(enc, group);
else get_rdsp_oda_af_oda_group(group); else get_rdsp_oda_af_oda_group(group);
enc->state[enc->program].af_oda ^= 1; TOGGLE(enc->state[enc->program].af_oda);
break; 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) { 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--; enc->state[enc->program].rt_switching_period_state--;
if(enc->state[enc->program].rt_switching_period_state == 0) { 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); 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); else memcpy(enc->state[enc->program].rt_text, enc->data[enc->program].rt1, RT_LENGTH);
enc->state[enc->program].rt_state = 0; 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].start[1] = tags[4] & 0x3f;
enc->rtpData[enc->program][0].len[1] = tags[5] & 0x1f; 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].running = 1;
enc->rtpData[enc->program][0].enabled = 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].start[1] = tags[4] & 0x3f;
enc->rtpData[enc->program][1].len[1] = tags[5] & 0x1f; 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].running = 1;
enc->rtpData[enc->program][1].enabled = 1; enc->rtpData[enc->program][1].enabled = 1;
} }

View File

@@ -1,5 +1,4 @@
#ifndef RDS_H #pragma once
#define RDS_H
/* The RDS error-detection code generator polynomial is /* The RDS error-detection code generator polynomial is
* x^10 + x^8 + x^7 + x^5 + x^4 + x^3 + x^0 * 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_ertplus_tags(RDSEncoder *enc, uint8_t *tags);
void set_rds_ptyn(RDSEncoder *enc, char *ptyn); void set_rds_ptyn(RDSEncoder *enc, char *ptyn);
void set_rds_grpseq(RDSEncoder* enc, char *grpseq); void set_rds_grpseq(RDSEncoder* enc, char *grpseq);
void set_rds_grpseq2(RDSEncoder* enc, char *grpseq2); void set_rds_grpseq2(RDSEncoder* enc, char *grpseq2);
#endif

View File

@@ -8,7 +8,7 @@ static struct pollfd poller;
static struct sockaddr_in client_addr; static struct sockaddr_in client_addr;
static socklen_t client_len = sizeof(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) { int open_udp_server(int port, RDSModulator* rds_mod) {
sockfd = socket(AF_INET, SOCK_DGRAM, 0); sockfd = socket(AF_INET, SOCK_DGRAM, 0);

View File

@@ -1,3 +1,4 @@
#pragma once
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>