From 7dce2b6300ef4423b6c8c15cb0fe8aca8317f720 Mon Sep 17 00:00:00 2001 From: KubaPro010 Date: Mon, 22 Dec 2025 21:53:00 +0100 Subject: [PATCH] when file is corrupted, also call the on_init --- src/fs.c | 9 +++++---- src/fs.h | 2 +- src/lua_rds.c | 5 ++++- src/rds.c | 2 +- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/fs.c b/src/fs.c index 66ce00a..0fc932b 100644 --- a/src/fs.c +++ b/src/fs.c @@ -32,7 +32,7 @@ void encoder_saveToFile(RDSEncoder *enc) { fclose(file); } -void encoder_loadFromFile(RDSEncoder *enc) { +int encoder_loadFromFile(RDSEncoder *enc) { char encoderPath[128]; snprintf(encoderPath, sizeof(encoderPath), "%s/.rdsEncoder", getenv("HOME")); @@ -40,19 +40,19 @@ void encoder_loadFromFile(RDSEncoder *enc) { FILE *file = fopen(encoderPath, "rb"); if (!file) { perror("Error opening file"); - return; + return 1; } fread(&rdsEncoderfile, sizeof(rdsEncoderfile), 1, file); fclose(file); if (rdsEncoderfile.file_starter != 225 || rdsEncoderfile.file_ender != 95 || rdsEncoderfile.file_middle != 160) { fprintf(stderr, "[RDSENCODER-FILE] Invalid file format\n"); - return; + return 1; } if (crc16_ccitt((char*)&rdsEncoderfile, offsetof(RDSEncoderFile, crc)) != rdsEncoderfile.crc) { fprintf(stderr, "[RDSENCODER-FILE] CRC mismatch! Data may be corrupted\n"); - return; + return 1; } 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)); enc->program = rdsEncoderfile.program; + return 0; } int encoder_saved() { diff --git a/src/fs.h b/src/fs.h index 4d378a4..23bc7ff 100644 --- a/src/fs.h +++ b/src/fs.h @@ -5,7 +5,7 @@ #include "lib.h" void encoder_saveToFile(RDSEncoder *emp); -void encoder_loadFromFile(RDSEncoder *emp); +int encoder_loadFromFile(RDSEncoder *emp); int encoder_saved(); void Modulator_saveToFile(RDSModulatorParameters *emp); diff --git a/src/lua_rds.c b/src/lua_rds.c index 87b1502..469f2bb 100644 --- a/src/lua_rds.c +++ b/src/lua_rds.c @@ -12,7 +12,10 @@ int lua_set_rds_program_defaults(lua_State *localL) { int lua_reset_rds(lua_State *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); for(int i = 0; i < PROGRAMS; i++) reset_rds_state(mod->enc, i); Modulator_saveToFile(&mod->params); diff --git a/src/rds.c b/src/rds.c index 85630ed..e20f14d 100644 --- a/src/rds.c +++ b/src/rds.c @@ -696,7 +696,7 @@ void set_rds_defaults(RDSEncoder* enc, uint8_t program) { void init_rds_encoder(RDSEncoder* enc) { 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 { encoder_saveToFile(enc); lua_on_init();