Data collection core that utilises the nine ring buffer. Intended as the base of other data collection projects
ninelocks_logger_core/ninelocks_logger_core.cpp@0:79615902fcb0, 2015-07-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |