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

make save file smaller

This commit is contained in:
2025-03-17 19:56:13 +01:00
parent 9f933d488e
commit 8d73a13bfd
2 changed files with 52 additions and 13 deletions

View File

@@ -111,17 +111,30 @@ void saveToFile(RDSEncoder *emp, const char *option) {
memcpy(&(tempEncoder.encoder_data[emp->program]), &(emp->encoder_data[emp->program]), sizeof(RDSODAState));
tempEncoder.program = emp->program;
}
RDSEncoderFile rdsEncoderfile;
rdsEncoderfile.file_starter = 225;
rdsEncoderfile.file_middle = 160;
rdsEncoderfile.file_ender = 95;
memcpy(&(rdsEncoderfile.data[emp->program]), &(tempEncoder.data[emp->program]), sizeof(RDSData));
memcpy(&(rdsEncoderfile.rtpData[emp->program]), &(tempEncoder.rtpData[emp->program]), sizeof(RDSRTPlusData));
memcpy(&(rdsEncoderfile.odas[emp->program]), &(tempEncoder.odas[emp->program]), sizeof(RDSODA)*MAX_ODAS);
memcpy(&(rdsEncoderfile.oda_state[emp->program]), &(tempEncoder.oda_state[emp->program]), sizeof(RDSODAState));
memcpy(&(rdsEncoderfile.encoder_data[emp->program]), &(tempEncoder.encoder_data[emp->program]), sizeof(RDSODAState));
rdsEncoderfile.program = tempEncoder.program;
file = fopen(encoderPath, "wb");
if (file == NULL) {
perror("Error opening file");
return;
}
fwrite(&tempEncoder, sizeof(RDSEncoder), 1, file);
fwrite(&RDSEncoderFile, sizeof(RDSEncoderFile), 1, file);
fclose(file);
}
void loadFromFile(RDSEncoder *emp) {
void loadFromFile(RDSEncoder *enc) {
RDSEncoderFile rdsEncoderfile;
char encoderPath[256];
snprintf(encoderPath, sizeof(encoderPath), "%s/.rdsEncoder", getenv("HOME"));
FILE *file = fopen(encoderPath, "rb");
@@ -129,8 +142,22 @@ void loadFromFile(RDSEncoder *emp) {
perror("Error opening file");
return;
}
fread(emp, sizeof(RDSEncoder), 1, file);
fread(&rdsEncoderfile, sizeof(RDSEncoderFile), 1, file);
fclose(file);
if (rdsEncoderfile.file_starter != 225 || rdsEncoderfile.file_ender != 95 || rdsEncoderfile.file_middle != 160) {
fprintf(stderr, "Invalid file format\n");
return;
}
for (int i = 0; i < PROGRAMS; i++) {
memcpy(&(enc->data[i]), &(rdsEncoderfile.data[i]), sizeof(RDSData));
memcpy(&(enc->rtpData[i]), &(rdsEncoderfile.rtpData[i]), sizeof(RDSRTPlusData));
memcpy(&(enc->odas[i]), &(rdsEncoderfile.odas[i]), sizeof(RDSODA) * MAX_ODAS);
memcpy(&(enc->oda_state[i]), &(rdsEncoderfile.oda_state[i]), sizeof(RDSODAState));
memcpy(&(enc->encoder_data[i]), &(rdsEncoderfile.encoder_data[i]), sizeof(RDSODAState));
}
enc->program = rdsEncoderfile.program;
}
int rdssaved() {

View File

@@ -42,37 +42,37 @@ typedef struct {
uint8_t afs[MAX_AFS];
} RDSAFs;
typedef struct {
uint8_t enabled : 1;
uint16_t pi;
uint8_t pin[4];
char ps[8];
uint8_t enabled : 1;
uint8_t ta : 1;
uint8_t tp : 1;
uint8_t pin[4];
char ps[8];
RDSAFs af;
} RDSEONs;
typedef struct {
char text[255];
uint8_t destination : 4;
char text[255];
} RDSMessage;
typedef struct {
RDSMessage messages[100];
uint8_t dps2msg : 7;
uint8_t dps2msg_auto : 1;
uint8_t rt2msg : 7;
uint8_t rt2msg_auto : 1;
RDSMessage messages[100];
} RDSMessages;
typedef struct
{
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];
char command[35];
} RDSSchedulerItem;
typedef struct
{
RDSSchedulerItem items[49];
uint8_t enabled : 1;
RDSSchedulerItem items[49];
} RDSScheduler;
typedef struct {
uint8_t dsn;
@@ -105,10 +105,10 @@ typedef struct {
uint8_t dps1_numberofrepeats : 7;
uint8_t dps1_numberofrepeats_clear : 1;
uint8_t dps2_numberofrepeats;
uint8_t dps_label_period; // One transmission of a part of the dynamic ps
uint8_t dps_label_period;
uint8_t dps_restart : 1;
uint8_t dps_speed : 1; // Low is 8 transmissions, high is 4
uint8_t static_ps_period; // One Transmission of static ps
uint8_t dps_speed : 1;
uint8_t static_ps_period;
uint8_t shortrt : 1;
uint8_t rt1_enabled : 1;
@@ -224,6 +224,18 @@ typedef struct {
RDSRTPlusData rtpData[PROGRAMS];
uint8_t program : 3;
} RDSEncoder;
typedef struct {
uint8_t file_starter; // Always is 225 first polish radio programme am frequency
RDSData data[PROGRAMS];
RDSRTPlusData rtpData[PROGRAMS];
RDSODA odas[PROGRAMS][MAX_ODAS];
uint8_t file_middle; // Always is 160, average of both
RDSODAState oda_state[PROGRAMS];
RDSEncoderData encoder_data[PROGRAMS];
uint8_t program : 3;
uint8_t file_ender; // Always is 95 my freq
} RDSEncoderFile;
#pragma pack()
#define GROUP_TYPE_0 ( 0 << 4)