now path to data storage is configurable by .cmd file

This commit is contained in:
2025-11-13 22:30:17 +03:00
parent 32cbb041b8
commit ea4cc6d28d

24
main.c
View File

@ -160,6 +160,7 @@ typedef struct main_state_typedef{
uint32_t run_length; // in ms. Used as timeout for receive_to_file uint32_t run_length; // in ms. Used as timeout for receive_to_file
uint32_t run_I; // № current run uint32_t run_I; // № current run
uint32_t runs_N; // total number of runs uint32_t runs_N; // total number of runs
char data_path[200]; // base directory for data files
} main_state; } main_state;
static void main_state_set_defaults(main_state* st) { static void main_state_set_defaults(main_state* st) {
@ -168,6 +169,8 @@ static void main_state_set_defaults(main_state* st) {
st->run_length = 1000; st->run_length = 1000;
st->run_I = 0; st->run_I = 0;
st->runs_N = 1; st->runs_N = 1;
strncpy(st->data_path, "data", sizeof(st->data_path));
st->data_path[sizeof(st->data_path)-1] = '\0';
} }
static char* f_trim(char* s) { static char* f_trim(char* s) {
@ -227,6 +230,9 @@ static void parse_cmd_file(const char* filename, main_state* st) {
char* endp = NULL; char* endp = NULL;
unsigned long v = strtoul(value, &endp, 0); unsigned long v = strtoul(value, &endp, 0);
if (endp != value) st->run_I = (uint32_t)v; if (endp != value) st->run_I = (uint32_t)v;
} else if (strcmp(field, "data_path") == 0) {
strncpy(st->data_path, value, sizeof(st->data_path));
st->data_path[sizeof(st->data_path)-1] = '\0';
} }
} }
fclose(f); fclose(f);
@ -720,8 +726,8 @@ int main(int argc, char** argv) {
main_state_set_defaults(&state); main_state_set_defaults(&state);
parse_cmd_file(cmd_filename, &state); parse_cmd_file(cmd_filename, &state);
// отладочный вывод принятых значений // отладочный вывод принятых значений
printf("Parsed state: run_mode=%d, BF_mode=%d, run_length=%u, runs_N=%u, run_I=%u\n", printf("Parsed state: run_mode=%d, BF_mode=%d, run_length=%u, runs_N=%u, run_I=%u, data_path=%s\n",
(int)state.run_mode, (int)state.BF_mode, state.run_length, state.runs_N, state.run_I); (int)state.run_mode, (int)state.BF_mode, state.run_length, state.runs_N, state.run_I, state.data_path);
/* Removed unused temporary buffers and FFT/LFSM placeholders */ /* Removed unused temporary buffers and FFT/LFSM placeholders */
@ -809,9 +815,9 @@ int main(int argc, char** argv) {
if (state.run_mode == RUN_MODE_FINITE){ if (state.run_mode == RUN_MODE_FINITE){
state.run_I = 0; state.run_I = 0;
char tmp_data_filename[] = " "; char tmp_data_filename[256];
struct timespec ts; struct timespec ts;
uint32_t max_total_words = 0; uint32_t max_total_words = 1000000;
uint32_t *inp_buff = malloc(1024*100*1024*2*4); uint32_t *inp_buff = malloc(1024*100*1024*2*4);
while(state.run_I < state.runs_N){ while(state.run_I < state.runs_N){
max_total_words = 10000000; max_total_words = 10000000;
@ -819,7 +825,7 @@ int main(int argc, char** argv) {
// sprintf(&tmp_data_filename, "tmp/received_data_%ld.%ld.csv", ts.tv_sec, ts.tv_nsec); // sprintf(&tmp_data_filename, "tmp/received_data_%ld.%ld.csv", ts.tv_sec, ts.tv_nsec);
// sprintf(&logfilename, "tmp/received_data_%ld.%ld.csv", ts.tv_sec, ts.tv_nsec); // sprintf(&logfilename, "tmp/received_data_%ld.%ld.csv", ts.tv_sec, ts.tv_nsec);
//sprintf(&logfilename, "data/received_data_%ld.csv", seconds); //sprintf(&logfilename, "data/received_data_%ld.csv", seconds);
snprintf(tmp_data_filename, sizeof(tmp_data_filename), "tmp/received_data_%ld.%ld.csv", ts.tv_sec, ts.tv_nsec); snprintf(tmp_data_filename, sizeof(tmp_data_filename), "%s/received_data_%ld.%ld.csv", state.data_path, ts.tv_sec, ts.tv_nsec);
printf("%u/%u dumping to file: %s\n", (unsigned)state.run_I, (unsigned)state.runs_N, tmp_data_filename); printf("%u/%u dumping to file: %s\n", (unsigned)state.run_I, (unsigned)state.runs_N, tmp_data_filename);
receive_to_file(hnd, tmp_data_filename, inp_buff, max_total_words, state.run_length); receive_to_file(hnd, tmp_data_filename, inp_buff, max_total_words, state.run_length);
@ -833,7 +839,7 @@ int main(int argc, char** argv) {
}else if (state.run_mode == RUN_MODE_INF){ }else if (state.run_mode == RUN_MODE_INF){
state.run_I = 0; state.run_I = 0;
char tmp_data_filename[] = " "; char tmp_data_filename[256];
struct timespec ts; struct timespec ts;
uint32_t max_total_words = 0; uint32_t max_total_words = 0;
uint32_t *inp_buff = malloc(1024*100*1024*2*4); uint32_t *inp_buff = malloc(1024*100*1024*2*4);
@ -844,7 +850,7 @@ int main(int argc, char** argv) {
// sprintf(&tmp_data_filename, "tmp/received_data_%ld.%ld.csv", ts.tv_sec, ts.tv_nsec); // sprintf(&tmp_data_filename, "tmp/received_data_%ld.%ld.csv", ts.tv_sec, ts.tv_nsec);
// sprintf(&logfilename, "tmp/received_data_%ld.%ld.csv", ts.tv_sec, ts.tv_nsec); // sprintf(&logfilename, "tmp/received_data_%ld.%ld.csv", ts.tv_sec, ts.tv_nsec);
//sprintf(&logfilename, "data/received_data_%ld.csv", seconds); //sprintf(&logfilename, "data/received_data_%ld.csv", seconds);
snprintf(tmp_data_filename, sizeof(tmp_data_filename), "tmp/received_data_%ld.%ld.csv", ts.tv_sec, ts.tv_nsec); snprintf(tmp_data_filename, sizeof(tmp_data_filename), "%s/received_data_%ld.%ld.csv", state.data_path, ts.tv_sec, ts.tv_nsec);
printf("%u dumping to file: %s\n", (unsigned)state.run_I, tmp_data_filename); printf("%u dumping to file: %s\n", (unsigned)state.run_I, tmp_data_filename);
receive_to_file(hnd, tmp_data_filename, inp_buff, max_total_words, state.run_length); receive_to_file(hnd, tmp_data_filename, inp_buff, max_total_words, state.run_length);
state.run_I++; state.run_I++;
@ -862,8 +868,8 @@ int main(int argc, char** argv) {
time_t seconds; time_t seconds;
time(&seconds); time(&seconds);
char logfilename[] = " "; char logfilename[256];
sprintf(&logfilename, "data/received_data_%ld.csv", seconds); snprintf(logfilename, sizeof(logfilename), "%s/received_data_%ld.csv", state.data_path, (long)seconds);
//logfile_ptr = fopen(logfilename, "w"); //logfile_ptr = fopen(logfilename, "w");
FILE *logfile_ptr; FILE *logfile_ptr;
logfile_ptr = fopen(logfilename, "a"); logfile_ptr = fopen(logfilename, "a");