Working Thread (the wireless kind) example with DHCP Ethernet enabled. At this point, router is not a correct description. I do not know if Thread will handle routing automatically or I will need to do something to enable internet connectivity to a Thread client device. That is the goal, give a Thread client a routable connection to the internet.

Dependencies:   EthernetInterface fsl_phy_mcr20a fsl_smac mbed-rtos mbed

circular_buffer.cpp

Committer:
jmulvain
Date:
2016-11-03
Revision:
29:241a264ebe8f
Parent:
27:1eb29717bfd9

File content as of revision 29:241a264ebe8f:

#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;
}