Data collection core that utilises the nine ring buffer. Intended as the base of other data collection projects

Committer:
jont
Date:
Fri Jul 10 18:13:44 2015 +0000
Revision:
0:79615902fcb0
Child:
1:d22102484ea1
Friday night

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jont 0:79615902fcb0 1 #include "ninelocks_logger_core.h"
jont 0:79615902fcb0 2 #include "record_ring.h"
jont 0:79615902fcb0 3 #include "mbed.h"
jont 0:79615902fcb0 4 #include "SDFileSystem.h"
jont 0:79615902fcb0 5
jont 0:79615902fcb0 6
jont 0:79615902fcb0 7
jont 0:79615902fcb0 8 /*
jont 0:79615902fcb0 9 NineLoggerCore::NineLoggerCore( ){
jont 0:79615902fcb0 10
jont 0:79615902fcb0 11 }*/
jont 0:79615902fcb0 12
jont 0:79615902fcb0 13 NineLoggerCore::NineLoggerCore(Serial * pc){
jont 0:79615902fcb0 14 _pc = pc;
jont 0:79615902fcb0 15
jont 0:79615902fcb0 16 //_pin = 0;
jont 0:79615902fcb0 17 }
jont 0:79615902fcb0 18 /*=====================================================================================*/
jont 0:79615902fcb0 19 // Functions to do with data logging
jont 0:79615902fcb0 20 /*=====================================================================================*/
jont 0:79615902fcb0 21 /*
jont 0:79615902fcb0 22 in
jont 0:79615902fcb0 23 long seconds - a timestamp of some sort
jont 0:79615902fcb0 24 char entryType an arbritry flag to label records with
jont 0:79615902fcb0 25 */
jont 0:79615902fcb0 26 void NineLoggerCore::do_journal(long seconds, char entryType)
jont 0:79615902fcb0 27 {
jont 0:79615902fcb0 28 log_record logrec;
jont 0:79615902fcb0 29 logrec.ad1 = 0;
jont 0:79615902fcb0 30 logrec.ad2 = 0;
jont 0:79615902fcb0 31 logrec.ad3 = 0;
jont 0:79615902fcb0 32 logrec.ad4 =0;
jont 0:79615902fcb0 33 logrec.ad5 = 0;
jont 0:79615902fcb0 34 logrec.ad6 = 0;
jont 0:79615902fcb0 35 logrec.count = 0;
jont 0:79615902fcb0 36 logrec.count2 = 0;
jont 0:79615902fcb0 37 // logrec.count = counter_reed.read();
jont 0:79615902fcb0 38 // logrec.count2 = counter_reed2.read();
jont 0:79615902fcb0 39 // logrec.temperature = read_thermo();
jont 0:79615902fcb0 40 logrec.timestamp = seconds;
jont 0:79615902fcb0 41 logrec.record_type = entryType;
jont 0:79615902fcb0 42 log_buffer.RingWriteToBuffer(logrec);
jont 0:79615902fcb0 43 }
jont 0:79615902fcb0 44
jont 0:79615902fcb0 45 /*=====================================================================================*/
jont 0:79615902fcb0 46 // Write event to the logfile
jont 0:79615902fcb0 47 /*=====================================================================================*/
jont 0:79615902fcb0 48 bool NineLoggerCore::flush_buffered_journal_events()
jont 0:79615902fcb0 49 {
jont 0:79615902fcb0 50 int remain = 0;
jont 0:79615902fcb0 51 //char eventlog_filename[255];
jont 0:79615902fcb0 52 // if ( rt_info.log_enabled != true) {
jont 0:79615902fcb0 53 // return(false);
jont 0:79615902fcb0 54 // }
jont 0:79615902fcb0 55 remain = log_buffer.ring_count();
jont 0:79615902fcb0 56 if (remain <=0 ) {
jont 0:79615902fcb0 57 return false;
jont 0:79615902fcb0 58 }
jont 0:79615902fcb0 59
jont 0:79615902fcb0 60
jont 0:79615902fcb0 61 FILE *fp = fopen(journallog_filename, "a");
jont 0:79615902fcb0 62 if(!fp) {
jont 0:79615902fcb0 63 fprintf(stderr, "File %s could not be opened!\n",journallog_filename);
jont 0:79615902fcb0 64 return false;
jont 0:79615902fcb0 65 }
jont 0:79615902fcb0 66 //now write allthose events into the logile
jont 0:79615902fcb0 67 log_record rec;
jont 0:79615902fcb0 68 while (log_buffer.ring_count() >0) {
jont 0:79615902fcb0 69 long z = log_buffer.get_next_record(&rec);
jont 0:79615902fcb0 70 if (z <0) {
jont 0:79615902fcb0 71 //uh oh
jont 0:79615902fcb0 72 } else {
jont 0:79615902fcb0 73 //write_event(z);
jont 0:79615902fcb0 74 // printf("Writing DataJournal...\n");
jont 0:79615902fcb0 75 fprintf(fp, "%i,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%i,%i,%.1f,%c\n", rec.timestamp,rec.ad1, rec.ad2,rec.ad3, rec.ad4, rec.ad5, rec.ad6,rec.count, rec.count2, rec.temperature,rec.record_type);
jont 0:79615902fcb0 76 // time_t seconds =(time_t) rec.timestamp;
jont 0:79615902fcb0 77 // fprintf(fp,"%s",ctime(&seconds));
jont 0:79615902fcb0 78 }
jont 0:79615902fcb0 79 }
jont 0:79615902fcb0 80 // printf("Closing File...\n");
jont 0:79615902fcb0 81 fclose(fp);
jont 0:79615902fcb0 82 return true;
jont 0:79615902fcb0 83 }
jont 0:79615902fcb0 84
jont 0:79615902fcb0 85
jont 0:79615902fcb0 86 void NineLoggerCore::setfilename(char* filename){
jont 0:79615902fcb0 87
jont 0:79615902fcb0 88 if(_pc != NULL) {
jont 0:79615902fcb0 89 // _pc->printf("called set filename");
jont 0:79615902fcb0 90 }
jont 0:79615902fcb0 91 strncpy(journallog_filename, filename,nl_name_length);
jont 0:79615902fcb0 92
jont 0:79615902fcb0 93 if(_pc != NULL) {
jont 0:79615902fcb0 94 // _pc->printf("set fname to %s \r\n", filename);
jont 0:79615902fcb0 95 }
jont 0:79615902fcb0 96 }