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:
9
src/fs.c
9
src/fs.c
@@ -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() {
|
||||||
|
|||||||
2
src/fs.h
2
src/fs.h
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user