#include "event.h"
#include "plotter_status.h"
+#define MAX_CHANNELS 4
+
struct dataparser_struct {
struct eventhandler_entry evhandler;
- char *log_path;
+ struct plotter_config *cfg;
int infd;
- int outfd;
+ int outfd[MAX_CHANNELS];
int offset;
time_t start_time;
char buf[256];
i = 0;
entries[i]++; /* discard the dollar sign */
data->channel = atoi(entries[i++]);
+ if (data->channel > MAX_CHANNELS)
+ data->channel = 0;
data->state = atoi(entries[i++]);
return 0;
}
-static int open_new_logfile(struct dataparser_struct *dt)
+static int open_new_logfile(struct dataparser_struct *dt, int channel)
{
char path[2048];
struct tm *tm;
time_t cur_time = time(NULL);
tm = localtime(&cur_time);
- strftime(path, sizeof(path), dt->log_path, tm);
+ strftime(path, sizeof(path), dt->cfg->log_path, tm);
+
+ store_int_variable_value_to_array("channel", channel, dt->cfg);
+ replace_variables_with_values(path, sizeof(path), dt->cfg);
pr_debug("Opening %s for writing the log file\n", path);
- dt->outfd = open(path, O_CREAT | O_APPEND | O_WRONLY, 0664);
- if (dt->outfd < 0) {
+ dt->outfd[channel] = open(path, O_CREAT | O_APPEND | O_WRONLY, 0664);
+ if (dt->outfd[channel] < 0) {
pr_err("Failed to open file %s for writing: %m\n",
path);
return -1;
if (0)
dump_data(&data);
- if (!dt->log_path)
+ if (!dt->cfg->log_path)
return 0;
if (state_has_changed()) {
- ret = open_new_logfile(dt);
+ ret = open_new_logfile(dt, data.channel);
if (ret < 0)
return ret;
}
data.ext_temp,
data.total_charge);
- ret = write(dt->outfd, str, len);
+ if (dt->outfd[data.channel] <= 0)
+ open_new_logfile(dt, data.channel);
+
+ ret = write(dt->outfd[data.channel], str, len);
if (ret < 0) {
pr_err("write: %m\n");
return -1;;
dataparser.evhandler.fd = infd;
dataparser.infd = infd;
- dataparser.log_path = cfg->log_path;
+ dataparser.cfg = cfg;
ret = register_event_handler(&dataparser.evhandler);
if (ret < 0)