This program utilizes the mcr20 Thread Shield on the FRDM-K64F MCU which is a two-part workspace (HVAC Server (RX)/Probe(TX)) to handle low temperature events read at the probe(s) to prevent pipes from freezing.

Dependencies:   DHT fsl_phy_mcr20a fsl_smac mbed-rtos mbed

Fork of mcr20_wireless_uart by NXP

Revision:
27:1eb29717bfd9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/circular_buffer.cpp	Mon Jun 29 05:50:47 2015 +0000
@@ -0,0 +1,77 @@
+#include "circular_buffer.h"
+
+CircularBuffer::CircularBuffer()
+{
+    size = gCircularBufferSize_c;
+    readIndex = 0;
+    writeIndex = 0;
+    count = 0;
+    MEM_Init();
+    buffer = (uint8_t *) MEM_BufferAlloc(size * sizeof(uint8_t));
+    if ( NULL == buffer )
+    {
+        /*if buffer alloc fails stop the program execution*/
+        while(1);
+    }
+}
+ 
+CircularBuffer::CircularBuffer(uint32_t sz)
+{
+    size = sz;
+    readIndex = 0;
+    writeIndex = 0;
+    count = 0;
+    MEM_Init();
+    buffer = (uint8_t *) MEM_BufferAlloc(size * sizeof(uint8_t));
+    if ( NULL == buffer )
+    {
+        /*if buffer alloc fails stop the program execution*/
+        while(1);
+    }
+}
+
+CircularBuffer::~CircularBuffer()
+{
+    size = 0;
+    readIndex = 0;
+    writeIndex = 0;
+    count = 0;
+    MEM_BufferFree(buffer);  
+}
+
+bufferStatus_t CircularBuffer :: addToBuffer (uint8_t c)
+{
+    buffer[writeIndex] = c;
+    writeIndex++;
+    if (writeIndex >= size)
+    {
+        writeIndex = 0;
+    }
+    count++;
+    if (count >= size)
+    {
+        return buffer_Full_c;
+    }
+    return buffer_Ok_c;
+}
+
+bufferStatus_t CircularBuffer :: getFromBuffer (uint8_t *c)
+{
+    if ( 0 == count )
+    {
+        return buffer_Empty_c;
+    }
+    (*c) = buffer[readIndex];
+    readIndex++;
+    if (readIndex >= size)
+    {
+        readIndex = 0;
+    }
+    count--;
+    return buffer_Ok_c;
+}
+
+uint32_t CircularBuffer :: getCount()
+{
+    return count;
+}
\ No newline at end of file