now path to data storage is configurable by .cmd file

This commit is contained in:
2025-11-13 22:30:17 +03:00
parent e2eac4dd48
commit 87954d40d9

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_I; // № current run
uint32_t runs_N; // total number of runs
char data_path[200]; // base directory for data files
} main_state;
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_I = 0;
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) {
@ -227,6 +230,9 @@ static void parse_cmd_file(const char* filename, main_state* st) {
char* endp = NULL;
unsigned long v = strtoul(value, &endp, 0);
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);
@ -720,8 +726,8 @@ int main(int argc, char** argv) {
main_state_set_defaults(&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",
(int)state.run_mode, (int)state.BF_mode, state.run_length, state.runs_N, state.run_I);
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, state.data_path);
/* 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){
state.run_I = 0;
char tmp_data_filename[] = " ";
char tmp_data_filename[256];
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);
while(state.run_I < state.runs_N){
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(&logfilename, "tmp/received_data_%ld.%ld.csv", ts.tv_sec, ts.tv_nsec);
//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);
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){
state.run_I = 0;
char tmp_data_filename[] = " ";
char tmp_data_filename[256];
struct timespec ts;
uint32_t max_total_words = 0;
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(&logfilename, "tmp/received_data_%ld.%ld.csv", ts.tv_sec, ts.tv_nsec);
//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);
receive_to_file(hnd, tmp_data_filename, inp_buff, max_total_words, state.run_length);
state.run_I++;
@ -862,8 +868,8 @@ int main(int argc, char** argv) {
time_t seconds;
time(&seconds);
char logfilename[] = " ";
sprintf(&logfilename, "data/received_data_%ld.csv", seconds);
char logfilename[256];
snprintf(logfilename, sizeof(logfilename), "%s/received_data_%ld.csv", state.data_path, (long)seconds);
//logfile_ptr = fopen(logfilename, "w");
FILE *logfile_ptr;
logfile_ptr = fopen(logfilename, "a");