summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2023-07-17 14:50:13 +0200
committerLoic Guegan <manzerbredes@mailbox.org>2023-07-17 14:50:13 +0200
commite8417d7397564e2f16b484da357fe01f1c0ccf13 (patch)
tree19e6b8e031549ba827d83a21f11c281d04f9bbfb
parent44f332f91d48e43a3a3c30fec4353ea9358d51fd (diff)
Minor changes
-rw-r--r--config.mk2
-rw-r--r--src/logger.c73
-rw-r--r--src/utils.h2
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<queues[queue_id].length;i++){
+ printf("%d,%ld,%d\n",queues[queue_id].records[i].secs,queues[queue_id].records[i].nsecs,queues[queue_id].records[i].power);
+ fflush(stdout);
+ }
+} \ No newline at end of file
diff --git a/src/utils.h b/src/utils.h
index bca8ee0..d7d884f 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -10,6 +10,8 @@
#define INA260_SYSFS "/sys/kernel/ina260"
#define INA260_POWER_REGISTER "registers/power"
#define STATIC_LEN 255
+#define RECORD_QUEUES 1
+#define RECORD_MAX 1000
#ifndef ZMQ_TOKEN
#define ZMQ_TOKEN "ina260-zmq-publisher"