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:
@@ -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}\")
|
||||
|
||||
|
||||
@@ -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, "+");
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include "common.h"
|
||||
#include "rds.h"
|
||||
#include "fs.h"
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#pragma once
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
1
src/fs.h
1
src/fs.h
@@ -1,3 +1,4 @@
|
||||
#pragma once
|
||||
#include "common.h"
|
||||
#include "rds.h"
|
||||
#include "modulator.h"
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
#pragma once
|
||||
#include "common.h"
|
||||
#include "rds.h"
|
||||
#include <time.h>
|
||||
|
||||
#define TOGGLE(x) ((x) ^= 1)
|
||||
|
||||
void msleep(unsigned long ms);
|
||||
|
||||
int _strnlen(const char *s, int maxlen);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
30
src/rds.c
30
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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -250,5 +249,3 @@ 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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#pragma once
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
Reference in New Issue
Block a user