mirror of
https://github.com/radio95-rnt/rds95.git
synced 2026-02-27 04:43:52 +01:00
expand data structure (empty your .rdsEncoder)
This commit is contained in:
@@ -18,9 +18,6 @@ static void handle_ptyn(unsigned char *arg, RDSModulator* mod) {
|
||||
}
|
||||
|
||||
static void handle_afch(unsigned char *arg, RDSModulator* mod) {
|
||||
if (arg[0] == 'A' || arg[0] == 'B') {
|
||||
return;
|
||||
}
|
||||
if(arg[0] == '\0') {
|
||||
memset(&(mod->enc->data[mod->enc->program].af), 0, sizeof(mod->enc->data[mod->enc->program].af));
|
||||
return;
|
||||
|
||||
18
src/rds.c
18
src/rds.c
@@ -72,6 +72,8 @@ void saveToFile(RDSEncoder *emp, const char *option) {
|
||||
memcpy(tempEncoder.rtpData[emp->program].len, emp->rtpData[emp->program].len, sizeof(emp->rtpData[emp->program].len));
|
||||
memcpy(tempEncoder.rtpData[emp->program].start, emp->rtpData[emp->program].start, sizeof(emp->rtpData[emp->program].start));
|
||||
memcpy(tempEncoder.rtpData[emp->program].type, emp->rtpData[emp->program].type, sizeof(emp->rtpData[emp->program].type));
|
||||
memcpy(&(tempEncoder.odas[emp->program]), &(emp->odas[emp->program]), sizeof(RDSODA)*MAX_ODAS);
|
||||
memcpy(&(tempEncoder.oda_state[emp->program]), &(emp->oda_state[emp->program]), sizeof(RDSODAState));
|
||||
tempEncoder.rtpData[emp->program].toggle = emp->rtpData[emp->program].toggle;
|
||||
} else if (strcmp(option, "UDG1") == 0) {
|
||||
memcpy(tempEncoder.data[emp->program].udg1, emp->data[emp->program].udg1, sizeof(emp->data[emp->program].udg1));
|
||||
@@ -82,6 +84,8 @@ void saveToFile(RDSEncoder *emp, const char *option) {
|
||||
} else if(strcmp(option, "RTPRUN") == 0) {
|
||||
tempEncoder.rtpData[emp->program].running = emp->rtpData[emp->program].running;
|
||||
tempEncoder.rtpData[emp->program].enabled = emp->rtpData[emp->program].enabled;
|
||||
memcpy(&(tempEncoder.odas[emp->program]), &(emp->odas[emp->program]), sizeof(RDSODA)*MAX_ODAS);
|
||||
memcpy(&(tempEncoder.oda_state[emp->program]), &(emp->oda_state[emp->program]), sizeof(RDSODAState));
|
||||
} else if(strcmp(option, "PTYNEN") == 0) {
|
||||
tempEncoder.data[emp->program].ptyn_enabled = emp->data[emp->program].ptyn_enabled;
|
||||
} else if(strcmp(option, "ECCEN") == 0) {
|
||||
@@ -92,15 +96,18 @@ void saveToFile(RDSEncoder *emp, const char *option) {
|
||||
tempEncoder.data[emp->program].pin[0] = emp->data[emp->program].pin[0];
|
||||
} else if(strcmp(option, "PROGRAM") == 0) {
|
||||
tempEncoder.program = emp->program;
|
||||
} else if(strcmp(option, "EON") == 0) {
|
||||
memcpy(&(tempEncoder.data[emp->program].eon), &(emp->data[emp->program].eon), sizeof(RDSEONs)*4);
|
||||
} else if (strcmp(option, "ALL") == 0) {
|
||||
memcpy(&(tempEncoder.data[emp->program]), &(emp->data[emp->program]), sizeof(RDSData));
|
||||
memcpy(&(tempEncoder.rtpData[emp->program]), &(emp->rtpData[emp->program]), sizeof(RDSRTPlusData));
|
||||
tempEncoder.program = emp->program;
|
||||
memcpy(&(tempEncoder.odas[emp->program]), &(emp->odas[emp->program]), sizeof(RDSODA)*MAX_ODAS);
|
||||
memcpy(&(tempEncoder.oda_state[emp->program]), &(emp->oda_state[emp->program]), sizeof(RDSODAState));
|
||||
memcpy(&(tempEncoder.encoder_data[emp->program]), &(emp->encoder_data[emp->program]), sizeof(RDSODAState));
|
||||
tempEncoder.program = emp->program;
|
||||
}
|
||||
|
||||
memcpy(&(tempEncoder.state[emp->program]), &(emp->state[emp->program]), sizeof(RDSState));
|
||||
memcpy(&(tempEncoder.oda_state[emp->program]), &(emp->oda_state[emp->program]), sizeof(RDSODAState));
|
||||
memcpy(&(tempEncoder.odas[emp->program]), &(emp->odas[emp->program]), sizeof(RDSODA)*MAX_ODAS);
|
||||
|
||||
file = fopen(encoderPath, "wb");
|
||||
if (file == NULL) {
|
||||
@@ -479,12 +486,17 @@ void set_rds_defaults(RDSEncoder* enc, uint8_t program) {
|
||||
memset(&(enc->oda_state[program]), 0, sizeof(RDSODAState));
|
||||
memset(&(enc->odas[program]), 0, sizeof(RDSODA)*MAX_ODAS);
|
||||
memset(&(enc->rtpData[program]), 0, sizeof(RDSRTPlusData));
|
||||
memset(&(enc->encoder_data[program]), 0, sizeof(RDSEncoderData));
|
||||
|
||||
enc->encoder_data[program].uecp_encoder_addr[0] = 0;
|
||||
enc->encoder_data[program].uecp_encoder_addr[1] = 0;
|
||||
|
||||
enc->data[program].ct = 1;
|
||||
enc->data[program].di = 1;
|
||||
enc->data[program].ecclic_enabled = 1;
|
||||
strcpy((char *)enc->data[program].grp_sqc, DEFAULT_GRPSQC);
|
||||
enc->data[program].ms = 1;
|
||||
enc->data[program].tp = 1;
|
||||
enc->data[program].pi = 0xFFFF;
|
||||
strcpy((char *)enc->data[program].ps, "* RDS * ");
|
||||
enc->data[program].rt1_enabled = 1;
|
||||
|
||||
64
src/rds.h
64
src/rds.h
@@ -36,7 +36,7 @@
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
uint8_t num_entries;
|
||||
uint8_t num_entries : 6;
|
||||
uint8_t num_afs : 5;
|
||||
uint8_t afs[MAX_AFS];
|
||||
} RDSAFs;
|
||||
@@ -50,6 +50,33 @@ typedef struct {
|
||||
RDSAFs af;
|
||||
} RDSEONs;
|
||||
typedef struct {
|
||||
unsigned char text[255];
|
||||
uint8_t destination : 4;
|
||||
} RDSMessage;
|
||||
typedef struct {
|
||||
RDSMessage messages[100];
|
||||
uint8_t dps2msg : 7;
|
||||
uint8_t dps2msg_auto : 1;
|
||||
uint8_t rt2msg : 7;
|
||||
uint8_t rt2msg_auto : 1;
|
||||
} RDSMessages;
|
||||
typedef struct
|
||||
{
|
||||
unsigned char command[35];
|
||||
uint8_t days : 7; // let's say that here it will be stored by bits, so 0b1000000 is monday and so on
|
||||
uint8_t pty: 5;
|
||||
uint16_t execution_hours[12];
|
||||
uint16_t execution_minutes[12];
|
||||
} RDSSchedulerItem;
|
||||
typedef struct
|
||||
{
|
||||
RDSSchedulerItem items[49];
|
||||
uint8_t enabled : 1;
|
||||
} RDSScheduler;
|
||||
typedef struct {
|
||||
uint8_t dsn;
|
||||
uint8_t psn;
|
||||
|
||||
uint16_t pi;
|
||||
|
||||
uint8_t ecclic_enabled : 1;
|
||||
@@ -65,9 +92,30 @@ typedef struct {
|
||||
unsigned char ps[PS_LENGTH];
|
||||
unsigned char tps[PS_LENGTH];
|
||||
|
||||
uint8_t eqtext1 : 1;
|
||||
uint8_t dps1_enabled : 1;
|
||||
uint8_t dps2_enabled : 1;
|
||||
unsigned char dps1[255];
|
||||
unsigned char dps2[255];
|
||||
uint8_t dps1_mode : 2;
|
||||
uint8_t dps2_mode : 2;
|
||||
uint8_t dps1_numberofrepeats : 7;
|
||||
uint8_t dps1_numberofrepeats_clear : 1;
|
||||
uint8_t dps2_numberofrepeats;
|
||||
uint8_t dps_label_period;
|
||||
uint8_t dps_restart : 1;
|
||||
uint8_t dps_speed : 1;
|
||||
uint8_t static_ps_period;
|
||||
|
||||
uint8_t shortrt : 1;
|
||||
uint8_t rt1_enabled : 1;
|
||||
uint8_t rt2_enabled : 1;
|
||||
uint8_t rt_type : 2;
|
||||
uint8_t rt_text_timeout;
|
||||
uint8_t rt_switching_period;
|
||||
unsigned char default_rt[RT_LENGTH];
|
||||
unsigned char rt1[RT_LENGTH];
|
||||
unsigned char rt2[RT_LENGTH];
|
||||
|
||||
uint8_t ptyn_enabled : 1;
|
||||
unsigned char ptyn[PTYN_LENGTH];
|
||||
@@ -89,6 +137,8 @@ typedef struct {
|
||||
uint16_t udg2[8][3];
|
||||
|
||||
RDSEONs eon[4];
|
||||
RDSMessages messages;
|
||||
RDSScheduler schedule;
|
||||
} RDSData;
|
||||
typedef struct {
|
||||
uint8_t ecc_or_lic : 1;
|
||||
@@ -99,6 +149,9 @@ typedef struct {
|
||||
unsigned char tps_text[PS_LENGTH];
|
||||
uint8_t ps_csegment : 4;
|
||||
|
||||
unsigned char dps1_text[255];
|
||||
unsigned char dps1_nexttext[127];
|
||||
|
||||
unsigned char rt_text[RT_LENGTH];
|
||||
uint8_t rt_state : 5;
|
||||
uint8_t rt_update : 1;
|
||||
@@ -143,6 +196,15 @@ typedef struct {
|
||||
} RDSRTPlusData;
|
||||
typedef struct
|
||||
{
|
||||
uint8_t uecp_enabled : 1;
|
||||
uint8_t encoder_addr[2];
|
||||
uint16_t site_addr[2];
|
||||
uint8_t selected_encoder_addr;
|
||||
uint16_t selected_site_addr : 10
|
||||
} RDSEncoderData;
|
||||
typedef struct
|
||||
{
|
||||
RDSEncoderData encoder_data[PROGRAMS];
|
||||
RDSData data[PROGRAMS];
|
||||
RDSState state[PROGRAMS];
|
||||
RDSODA odas[PROGRAMS][MAX_ODAS];
|
||||
|
||||
Reference in New Issue
Block a user