Data collection core that utilises the nine ring buffer. Intended as the base of other data collection projects
record_ring/record_ring.cpp
- Committer:
- jont
- Date:
- 2015-07-10
- Revision:
- 0:79615902fcb0
File content as of revision 0:79615902fcb0:
#include "mbed.h" #include "record_ring.h" /* J.J.Trinder, based on original code for midi projects 199X updateded sometime to the MBED Yeh its atad klunky, it works and is useful to explain things to people... */ JRecordRing::JRecordRing() { int bufsize = buff_size; buf = new log_record [bufsize+1]; // sp = ep = buf; memset(buf,0,bufsize); } JRecordRing::~JRecordRing() { //not convinced this cleans up properly delete [] buf; } /*======================================================================*/ /* RingWriteToBuffer */ /*======================================================================*/ //add critical section ie disable interrupts while fiddling with buffers int JRecordRing::RingWriteToBuffer(log_record n) { // printf("WriteInBuffer%d",inCount); __disable_irq(); // Disable Interrupts // do something that can't be interrupted opBuffer[inIndex].timestamp = n.timestamp; opBuffer[inIndex].ad1 = n.ad1; opBuffer[inIndex].ad2 = n.ad2; opBuffer[inIndex].ad3 = n.ad3; opBuffer[inIndex].ad4 = n.ad4; opBuffer[inIndex].ad5 = n.ad5; opBuffer[inIndex].ad6 = n.ad6; opBuffer[inIndex].count = n.count; opBuffer[inIndex].count2 = n.count2; opBuffer[inIndex].record_type = n.record_type; opBuffer[inIndex].temperature = n.temperature; inCount++; inIndex++; if (inIndex >= buff_size) inIndex = 0; __enable_irq(); // Enable Interrupts //printf("ZWriteInBuffer%d\n",inCount); return 0; } /*======================================================================*/ /* Output whats remaining.... */ /*======================================================================*/ long JRecordRing::get_next_record(log_record * lr) { // long toSend; #ifdef _PC printf("\nCall in %x out %x count %x",inIndex,outIndex, inCount); #endif if (inCount == 0) return -1; /* nowt to send */ __disable_irq(); // Disable Interrupts //lr. = opBuffer[outIndex]; lr->timestamp = opBuffer[outIndex].timestamp; lr->ad1 = opBuffer[outIndex].ad1; lr->ad2 = opBuffer[outIndex].ad2; lr->ad3 = opBuffer[outIndex].ad3; lr->ad4 = opBuffer[outIndex].ad4; lr->ad5 = opBuffer[outIndex].ad5; lr->ad6 = opBuffer[outIndex].ad6; lr->count = opBuffer[outIndex].count; lr->count2 = opBuffer[outIndex].count2; lr->temperature = opBuffer[outIndex].temperature; lr->record_type = opBuffer[outIndex].record_type; #ifdef _PC printf(" <%s> ",lr->count); #endif inCount--; outIndex++; if (outIndex >=buff_size) outIndex = 0; __enable_irq(); // Enable Interrupts return 0; //check what we should return as now record in the arg }