From e8417d7397564e2f16b484da357fe01f1c0ccf13 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Mon, 17 Jul 2023 14:50:13 +0200 Subject: [PATCH] Minor changes --- config.mk | 2 +- src/logger.c | 73 ++++++++++++++++++++++++++++++++++++---------------- src/utils.h | 2 ++ 3 files changed, 54 insertions(+), 23 deletions(-) diff --git a/config.mk b/config.mk index ae7b7b8..a37b20e 100644 --- a/config.mk +++ b/config.mk @@ -19,7 +19,7 @@ LOGGERS_DIR=/tmp/ina260_logs/ # LOGGERS_DELAY defines the delay between 2 consecutive # ina260 power read performed by the logger # Unit is milliseconds -LOGGERS_DELAY=1 +LOGGERS_DELAY=1000 # SUBSCRIBER_DIR will contain all the measurments # received from the publishers SUBSCRIBER_DIR=./data diff --git a/src/logger.c b/src/logger.c index 2501e9a..667627b 100644 --- a/src/logger.c +++ b/src/logger.c @@ -24,6 +24,21 @@ void sighandler(int signo){ } } +void publish(int queue_id); + +typedef struct record { + time_t secs; + long nsecs; + uint16_t power; +} record; + +typedef struct queue { + int length; + record records[RECORD_MAX]; +} queue; + +queue queues[RECORD_QUEUES]; + int main (int argc, char *argv []) { if(argc != 4){ @@ -52,7 +67,7 @@ int main (int argc, char *argv []) printf("Log interval is too small (min=%ds)\n",MIN_INTERVAL); exit(2); } - if(!FILE_EXISTS(__regpower)){ + if(FILE_EXISTS(__regpower)){ printf("Logger cannot access to %s\n",__regpower); exit(3); } @@ -62,38 +77,52 @@ int main (int argc, char *argv []) FILE *regptr,*logptr; char logfilepath[STATIC_LEN]=""; - regptr=fopen(__regpower,"r"); + regptr=fopen("/home/loic/out.txt","r"); char buffer[STATIC_LEN]; int power; time_t interval; struct timespec power_ts; - + int queue_id=0; + while(!__stop){ interval=INTERVAL(__loginterval); - *logfilepath='\0'; // Clear previous path - sprintf(logfilepath,"%s/%ld",__logdir,interval); - logptr=fopen(logfilepath,"w"); - // Write file header: - fprintf(logptr,"timestamp,ns,power\n"); // Log current interval + queue_id=queue_id>=RECORD_QUEUES ? 0 : queue_id+1; + int record=0; while((TIMESTAMP()-interval)<__loginterval){ - // Read power: - fgets(buffer,STATIC_LEN,regptr); - power=atoi(buffer); - // Get power measurement timestamp: - clock_gettime(CLOCK_REALTIME,&power_ts); - // Write measurement in file: - fprintf(logptr,"%d,%ld,%d\n",power_ts.tv_sec,power_ts.tv_nsec,power); - // Reset power register file: - fseek(regptr,0,SEEK_SET); -#if LOGGERS_DELAY > 0 - usleep(LOGGERS_DELAY*1000); -#endif - //printf("Tick\n"); fflush(stdout); + if(__stop) + break; + if(record < RECORD_MAX){ + // Read power: + fgets(buffer,STATIC_LEN,regptr); + // Get power measurement timestamp: + clock_gettime(CLOCK_REALTIME,&power_ts); + queues[queue_id].records[record].secs=power_ts.tv_sec; + queues[queue_id].records[record].nsecs=power_ts.tv_nsec; + queues[queue_id].records[record].power=atoi(buffer); + // Reset power register file: + fseek(regptr,0,SEEK_SET); + #if LOGGERS_DELAY > 0 + usleep(LOGGERS_DELAY*1000); + #endif + printf("Tick\n"); fflush(stdout); + record++; + } else { + printf("Queue overflow, RECORD_MAX must be increase!! n=%d\n",record); + } } - fclose(logptr); + queues[queue_id].length=record; + publish(queue_id); } fclose(regptr); return 0; } + + +void publish(int queue_id){ + for(int i=0;i