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

when file is corrupted, also call the on_init

This commit is contained in:
2025-12-22 21:53:00 +01:00
parent ceae7ec6ce
commit 7dce2b6300
4 changed files with 11 additions and 7 deletions

View File

@@ -32,7 +32,7 @@ void encoder_saveToFile(RDSEncoder *enc) {
fclose(file); fclose(file);
} }
void encoder_loadFromFile(RDSEncoder *enc) { int encoder_loadFromFile(RDSEncoder *enc) {
char encoderPath[128]; char encoderPath[128];
snprintf(encoderPath, sizeof(encoderPath), "%s/.rdsEncoder", getenv("HOME")); snprintf(encoderPath, sizeof(encoderPath), "%s/.rdsEncoder", getenv("HOME"));
@@ -40,19 +40,19 @@ void encoder_loadFromFile(RDSEncoder *enc) {
FILE *file = fopen(encoderPath, "rb"); FILE *file = fopen(encoderPath, "rb");
if (!file) { if (!file) {
perror("Error opening file"); perror("Error opening file");
return; return 1;
} }
fread(&rdsEncoderfile, sizeof(rdsEncoderfile), 1, file); fread(&rdsEncoderfile, sizeof(rdsEncoderfile), 1, file);
fclose(file); fclose(file);
if (rdsEncoderfile.file_starter != 225 || rdsEncoderfile.file_ender != 95 || rdsEncoderfile.file_middle != 160) { if (rdsEncoderfile.file_starter != 225 || rdsEncoderfile.file_ender != 95 || rdsEncoderfile.file_middle != 160) {
fprintf(stderr, "[RDSENCODER-FILE] Invalid file format\n"); fprintf(stderr, "[RDSENCODER-FILE] Invalid file format\n");
return; return 1;
} }
if (crc16_ccitt((char*)&rdsEncoderfile, offsetof(RDSEncoderFile, crc)) != rdsEncoderfile.crc) { if (crc16_ccitt((char*)&rdsEncoderfile, offsetof(RDSEncoderFile, crc)) != rdsEncoderfile.crc) {
fprintf(stderr, "[RDSENCODER-FILE] CRC mismatch! Data may be corrupted\n"); fprintf(stderr, "[RDSENCODER-FILE] CRC mismatch! Data may be corrupted\n");
return; return 1;
} }
for (int i = 0; i < PROGRAMS; i++) { for (int i = 0; i < PROGRAMS; i++) {
@@ -61,6 +61,7 @@ void encoder_loadFromFile(RDSEncoder *enc) {
} }
memcpy(&(enc->encoder_data), &(rdsEncoderfile.encoder_data), sizeof(RDSEncoderData)); memcpy(&(enc->encoder_data), &(rdsEncoderfile.encoder_data), sizeof(RDSEncoderData));
enc->program = rdsEncoderfile.program; enc->program = rdsEncoderfile.program;
return 0;
} }
int encoder_saved() { int encoder_saved() {

View File

@@ -5,7 +5,7 @@
#include "lib.h" #include "lib.h"
void encoder_saveToFile(RDSEncoder *emp); void encoder_saveToFile(RDSEncoder *emp);
void encoder_loadFromFile(RDSEncoder *emp); int encoder_loadFromFile(RDSEncoder *emp);
int encoder_saved(); int encoder_saved();
void Modulator_saveToFile(RDSModulatorParameters *emp); void Modulator_saveToFile(RDSModulatorParameters *emp);

View File

@@ -12,7 +12,10 @@ int lua_set_rds_program_defaults(lua_State *localL) {
int lua_reset_rds(lua_State *localL) { int lua_reset_rds(lua_State *localL) {
(void)localL; (void)localL;
encoder_saveToFile(mod->enc); if(encoder_saveToFile(mod->enc)) {
lua_set_rds_program_defaults(localL);
encoder_saveToFile(mod->enc)
}
encoder_loadFromFile(mod->enc); encoder_loadFromFile(mod->enc);
for(int i = 0; i < PROGRAMS; i++) reset_rds_state(mod->enc, i); for(int i = 0; i < PROGRAMS; i++) reset_rds_state(mod->enc, i);
Modulator_saveToFile(&mod->params); Modulator_saveToFile(&mod->params);

View File

@@ -696,7 +696,7 @@ void set_rds_defaults(RDSEncoder* enc, uint8_t program) {
void init_rds_encoder(RDSEncoder* enc) { void init_rds_encoder(RDSEncoder* enc) {
for(int i = 0; i < PROGRAMS; i++) set_rds_defaults(enc, i); for(int i = 0; i < PROGRAMS; i++) set_rds_defaults(enc, i);
if (encoder_saved()) encoder_loadFromFile(enc); if (encoder_saved() && encoder_loadFromFile(enc)) lua_on_init();
else { else {
encoder_saveToFile(enc); encoder_saveToFile(enc);
lua_on_init(); lua_on_init();