diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/logger.c | 86 | ||||
| -rw-r--r-- | src/subscriber.c | 1 | ||||
| -rw-r--r-- | src/utils.h | 3 |
3 files changed, 30 insertions, 60 deletions
diff --git a/src/logger.c b/src/logger.c index b44b5d0..a94f110 100644 --- a/src/logger.c +++ b/src/logger.c @@ -30,19 +30,12 @@ void sighandler(int signo){ void publish(int queue_id, void* publisher); -typedef struct record { - time_t secs; - long nsecs; - uint16_t power; -} record; - typedef struct queue { - int length; - long interval; - record records[RECORD_MAX]; + int size; + char msg[ZMQ_MSG_SIZE]; } queue; -queue queues[RECORD_QUEUES]; +queue queues[MAX_QUEUES]; int main (int argc, char *argv []) { @@ -75,7 +68,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); } @@ -98,43 +91,45 @@ 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; + char *header[STATIC_LEN]; while(!__stop){ interval=INTERVAL(__loginterval); // Log current interval - queue_id=(queue_id+1)>=RECORD_QUEUES ? 0 : (queue_id+1); + queue_id=(queue_id+1)>=MAX_QUEUES ? 0 : (queue_id+1); printf("Queue id %d",queue_id); - queues[queue_id].interval=interval; - int record=0; + *queues[queue_id].msg='\0'; + sprintf(queues[queue_id].msg,"%s\n%s\n%s\n%ld\n",ZMQ_TOKEN,__key,__client,interval); + queues[queue_id].size=strlen(queues[queue_id].msg); while((TIMESTAMP()-interval)<__loginterval){ 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++; + // Read power: + fgets(buffer,STATIC_LEN,regptr); + // Get power measurement timestamp: + clock_gettime(CLOCK_REALTIME,&power_ts); + char line[STATIC_LEN]; + sprintf(line,"%ld,%ld,%d\n",power_ts.tv_sec,power_ts.tv_nsec,atoi(buffer)); + int linelen=strlen(line); + if(queues[queue_id].size+linelen>ZMQ_MSG_SIZE){ + printf("To many measurements to publish. Please increase ZMQ_MSG_SIZE\n"); } else { - printf("Queue overflow, RECORD_MAX must be increase!! n=%d\n",record); + strcat(queues[queue_id].msg,line); + queues[queue_id].size+=strlen(line); } + // Reset power register file: + fseek(regptr,0,SEEK_SET); +#if LOGGERS_DELAY > 0 + usleep(LOGGERS_DELAY*1000); +#endif + printf("Tick\n"); fflush(stdout); } - queues[queue_id].length=record; publish(queue_id,publisher); } @@ -148,30 +143,5 @@ int main (int argc, char *argv []) void publish(int queue_id, void* publisher){ printf("Publishing...\n"); - // Build message header: - char buffer[ZMQ_MSG_SIZE]; - sprintf(buffer,"%s\n%s\n%s\n%ld\n",ZMQ_TOKEN,__key,__client,queues[queue_id].interval); - int msglen=strlen(buffer); - - // Put every lines in the buffer and send it - char line[STATIC_LEN]; - for(int record=0;record<queues[queue_id].length;record++){ - *line='\0'; - sprintf(line,"%ld,%ld,%d\n",queues[queue_id].records[record].secs,queues[queue_id].records[record].nsecs,queues[queue_id].records[record].power); - int linelength=strlen(line); - if((linelength+msglen)<ZMQ_MSG_SIZE){ - strcat(buffer,line); - msglen+=linelength; - } else { - // It buffer is full, we send the message and create another one - zmq_send (publisher, buffer, msglen, 0); - // Build new message header: - sprintf(buffer,"%s\n%s\n%s\n%ld\n",ZMQ_TOKEN,__key,__client,queues[queue_id].interval); - strcat(buffer,line); - msglen=strlen(buffer); - } - } - printf("msglength=%d\n",msglen); - // Finally send the last message (or the only one) - zmq_send (publisher, buffer, msglen, 0); + zmq_send(publisher,queues[queue_id].msg,queues[queue_id].size,0); }
\ No newline at end of file diff --git a/src/subscriber.c b/src/subscriber.c index 5c3703e..1024041 100644 --- a/src/subscriber.c +++ b/src/subscriber.c @@ -79,6 +79,7 @@ int main (int argc, char *argv []) // Write all the measurements: if(line>4){ fwrite(token, strlen(token), 1, fptr); + printf("%s\n",token); fwrite("\n",1,1,fptr); } diff --git a/src/utils.h b/src/utils.h index 6705ebf..f27ff9e 100644 --- a/src/utils.h +++ b/src/utils.h @@ -10,8 +10,7 @@ #define INA260_SYSFS "/sys/kernel/ina260" #define INA260_POWER_REGISTER "registers/power" #define STATIC_LEN 255 -#define RECORD_QUEUES 1 -#define RECORD_MAX 100000 +#define MAX_QUEUES 1 #ifndef ZMQ_TOKEN #define ZMQ_TOKEN "ina260-zmq-publisher" |
