Baseline for testing
EventLog.cpp
- Committer:
- foxbrianr
- Date:
- 2019-09-12
- Revision:
- 1:aaddf80105fe
- Parent:
- 0:929bb73983c5
- Child:
- 2:486d068deff9
File content as of revision 1:aaddf80105fe:
#include "mbed.h" #include "EventLog.h" #include "stdio.h" /*------------------------------------------------------------------- * define local file system *-------------------------------------------------------------------*/ LocalFileSystem local("local"); const char * filename = "/local/events.bin"; ESCM_Event::ESCM_Event(): address(0),port(0xFF) { } ESCM_Event::ESCM_Event(uint16_t address): address(address),port(0xFF) { setTimeNow(); } void ESCM_Event::setTimeNow(void) { time_t rawtime; struct tm * timeinfo; time ( &rawtime ); timeinfo = localtime ( &rawtime ); timeinfo = localtime (&rawtime); hours = timeinfo->tm_hour; mins = timeinfo->tm_min; secs = timeinfo->tm_sec; year = timeinfo->tm_year+1900; month = timeinfo->tm_mon + 1; day = timeinfo->tm_mday; } void ESCM_Event::getTime (char * buffer) { sprintf(buffer,"%02d:%02d %02d/%02d/%04d", hours,mins,month,day,year); } ESCM_EventLog::ESCM_EventLog() { full_=false; head_=0; tail_=0; } ESCM_EventLog::~ESCM_EventLog() { } int ESCM_EventLog::init() { full_=false; head_=0; tail_=0; printf("Initializing Event Log\n\r"); if ( !load() ) { memset ( events,0,sizeof(ESCM_Event)*MAX_EVENTS); // for testing for ( int i=0;i<MAX_EVENTS;i++) { add(i*2); } save(); } return 1; } int ESCM_EventLog::load() { #if 1 printf("Reading %s ...",filename ); FILE *input = fopen(filename, "rb"); if(input!= NULL){ uint16_t code; uint16_t size; fread(&code, sizeof(uint16_t),1,input); fread(&size, sizeof(uint16_t),1,input); if (code != 0xFAFA && size > 50 ) { return 0; } fread(&head_, sizeof(uint16_t),1,input); fread(&tail_, sizeof(uint16_t),1,input); for (int i=0;i<MAX_EVENTS;i++) { printf("." ); fread( &events[i].port, sizeof(uint16_t),1 , input); fread( &events[i].address, sizeof(uint16_t),1 , input); fread( &events[i].hours, sizeof(uint16_t),1 , input); fread( &events[i].mins, sizeof(uint16_t),1 , input); fread( &events[i].secs, sizeof(uint16_t),1 , input); fread( &events[i].day, sizeof(uint16_t),1 , input); fread( &events[i].month, sizeof(uint16_t),1 , input); fread( &events[i].year, sizeof(uint16_t),1 , input); //fread( events[i].timeStr, sizeof(char) ,40, input); } fclose(input); } else { printf("Could not Read %s\n\r",filename ); return 0; } #endif return 1; } int ESCM_EventLog::save() { #if 1 printf("Saving %s ...",filename ); FILE *output = fopen(filename, "wb"); if (output != NULL) { uint16_t code = 0xFAFA; uint16_t size = MAX_EVENTS; fwrite(&code, sizeof(uint16_t),1,output); fwrite(&size, sizeof(uint16_t),1,output); fwrite(&head_, sizeof(uint16_t),1,output); fwrite(&tail_, sizeof(uint16_t),1,output); for (int i=0;i<MAX_EVENTS;i++) { //printf("." ); fwrite( &events[i].port, sizeof(uint16_t),1 , output); fwrite( &events[i].address, sizeof(uint16_t),1 , output); fwrite( &events[i].hours, sizeof(uint16_t),1 , output); fwrite( &events[i].mins, sizeof(uint16_t),1 , output); fwrite( &events[i].secs, sizeof(uint16_t),1 , output); fwrite( &events[i].day, sizeof(uint16_t),1 , output); fwrite( &events[i].month, sizeof(uint16_t),1 , output); fwrite( &events[i].year, sizeof(uint16_t),1 , output); } fflush(output); fclose(output); } else { printf("Could not save %s\n\r",filename ); return 0; } #endif printf("Done \n\r" ); return 1; } void ESCM_EventLog::display(Serial *pc) { int j = tail_; int i = head_ ; int count = 0 ; pc->printf("\n\r"); pc->printf("-----------------------------\n\r"); pc->printf("- Event Log \n\r"); pc->printf("-----------------------------\n\r"); pc->printf("%d %d %d \n\r", i,j, full_); while ( count < size() ) { if (--i < 0 ) { i =( max_size_ - 1 ); } pc->printf("%02d <%02d> %02d :: %02d:%02d:%02d %02d/%02d/%04d \n\r", count, events[i].port, events[i].address, events[i].hours, events[i].mins, events[i].secs, events[i].month, events[i].day, events[i].year ); count++; } pc->printf("-----------------------------\n\r"); } void ESCM_EventLog::add(uint16_t address, uint16_t port) { ESCM_Event newEvent; newEvent.address = address; newEvent.port = port; newEvent.setTimeNow(); //sprintf ( newEvent.timeStr , "%s", "==="); put( newEvent ); } void ESCM_EventLog::add(uint16_t address) { ESCM_Event newEvent; newEvent.address = address; newEvent.port = 0; newEvent.setTimeNow(); //sprintf ( newEvent.timeStr , "%s", "==="); put( newEvent ); } void ESCM_EventLog::add(uint16_t address, char* timeStamp) { ESCM_Event newEvent; newEvent.address = address; newEvent.setTimeNow(); //sprintf ( newEvent.timeStr , "%-16s", timeStamp); put( newEvent ); } ESCM_Event * ESCM_EventLog::index (int pos ){ ESCM_Event * result = NULL; if (!empty()) { if (pos < size() || pos >= 0 ) { int index = (head_ - 1 - pos ); if (index < 0 ) index += max_size_; result = &(events[index]); } } return result; }