2014 Freescale / Hack A Day Make It Challenge FRDM-K64 Internet of "Thing"

Dependencies:   mbed

Queue.cpp

Committer:
emh203
Date:
2014-04-10
Revision:
0:423d5729e94e

File content as of revision 0:423d5729e94e:

/*

--------------------------------------------
|                                          |
|                     ....                 |
|                    7OO$?I78.             |
|                   .?8++++7+II?D.         |
|                   .?O++=I++II+?=         |
|                   .IO++?7==I??$.         |
|                   .8++=$===?+I$          |
|                   ?+++===+===+           |
|                   ???=+I++==+?           |
|                 .??++====+==++           |
|                 ?+++==========~          |
|                $+++==========+=          |
|              =?+===+==+I========         |
|           ..++======~~~~========?        |
|         .$?I??+=~~===~~~===~===++.       |
|       .+==.+=~~~=~==~~~~==~~=~==+?       |
|      ?===I+====~~=~~~=~~=====~~~=?.      |
|     .=~~~+==~==..~~~~~~=    ~~~~=7=      |
|     +=~~?+~~=.  ==~~~~=.     ~~~~=?.     |
|     =~~~=~~~   ?===~~+.       ~~~~+      |
|     +~~:+~~=    =~~==.        =~~+.      |
|     ~:~ =~~=    =~~~=         ~===       |
|         I=~~   ,=~~=            ,.       |
|          ~~.   ,====                     |
|                 ====                     |
|                 =~~.                     |
|                                          |
|------------------------------------------|                                                          
|              Internet Of Thing           |
|                  Eli Hughes              |
| Freescale / Hack-a-day Make-It-Challenge |
|              FTF 2014 - Dallas, Tx       |
|------------------------------------------|

*/
#include "stdint.h"
#include "Queue.h"
#include <string.h>

static char StringBuffer[256];

void InitByteQueue(ByteQueue *BQ,uint16_t Size,uint8_t * Storage) {
    uint16_t i;

    BQ->QueueSize = Size;
    BQ->ReadPtr=0;
    BQ->WritePtr=0;
    BQ->QueueStorage = Storage;

    for (i=0;i<BQ->QueueSize;i++) {
        BQ->QueueStorage[i] = 0;
    }
}

uint16_t BytesInQueue(ByteQueue *BQ) {
    if (BQ->ReadPtr > BQ->WritePtr) {
        return (BQ->QueueSize - BQ->ReadPtr + BQ->WritePtr);
    } else if (BQ->WritePtr > BQ->ReadPtr) {
        return     (BQ->WritePtr - BQ->ReadPtr);
    } else {
        return 0;
    }
}

int16_t ByteEnqueue(ByteQueue *BQ,uint8_t Val) {
    if (BytesInQueue(BQ) == BQ->QueueSize - 1) {
        return QUEUE_FULL;
    } else {
        BQ->QueueStorage[BQ->WritePtr] = Val;
        BQ->WritePtr++;

        if (BQ->WritePtr >= BQ->QueueSize) {
            BQ->WritePtr = 0;
        }
        return QUEUE_OK;
    }
}

int16_t ByteArrayEnqueue(ByteQueue *BQ,uint8_t *Buf,uint16_t Len) {
    uint16_t i;
    for (i=0;i<Len;i++) {
        ByteEnqueue(BQ,Buf[i]);
    }
    return QUEUE_OK;
}


int16_t Qprintf(ByteQueue *BQ, const char *FormatString,...)
{
 
     va_list argptr; 
     va_start(argptr,FormatString); 
     vsprintf((char *)StringBuffer,FormatString,argptr);
     va_end(argptr);   
           
    return ByteArrayEnqueue(BQ,(uint8_t *)StringBuffer,strlen(StringBuffer));
}


int16_t ByteDequeue(ByteQueue *BQ,uint8_t *Val) {

    if (BytesInQueue(BQ) == 0) {
        return QUEUE_EMPTY;
    } else {
        *Val  = BQ->QueueStorage[BQ->ReadPtr];

        BQ->ReadPtr++;

        if (BQ->ReadPtr >= BQ->QueueSize) {
            BQ->ReadPtr = 0;
        }
        return QUEUE_OK;
    }
}

uint8_t ForcedByteDequeue(ByteQueue *BQ)
{
    uint8_t RetVal;

    if (BytesInQueue(BQ) == 0) {
        return 0;
    } else {
        RetVal  = BQ->QueueStorage[BQ->ReadPtr];

        BQ->ReadPtr++;

        if (BQ->ReadPtr >= BQ->QueueSize) {
            BQ->ReadPtr = 0;
        }
        return RetVal;
    }
}