Redbear Nano firmware using Sandroide and showing how to send custom strings and parameters to the Android application
Dependencies: BLE_API MbedJSONValue mbed nRF51822
Fork of BLE_RedBearNano-SAndroidEDevice by
Diff: Queue.h
- Revision:
- 2:6c45738bba43
diff -r ff6ec7837f46 -r 6c45738bba43 Queue.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Queue.h Mon Jul 24 09:36:09 2017 +0000 @@ -0,0 +1,126 @@ +// downloaded from: https://gist.github.com/ArnonEilat/4471278 + +#include <stdlib.h> +#include <stdio.h> + +#define TRUE 1 +#define FALSE 0 +#define QUEUE_STRING_LENGTH 40 + +/* a link in the queue, holds the info and point to the next Node*/ +typedef struct { + int length; + char payload[QUEUE_STRING_LENGTH-1]; // null-terminated string, max 256 characters long, this may be JSON or any other format, depending on the application +} DATA; + +typedef struct Node_t { + DATA data; + struct Node_t *prev; +} NODE; + +/* the HEAD of the Queue, hold the amount of node's that are in the queue*/ +typedef struct Queue { + NODE *head; + NODE *tail; + int size; + int limit; +} Queue; + +Queue *ConstructQueue(int limit); +void DestructQueue(Queue *queue); +int Enqueue(Queue *pQueue, NODE *item); +NODE *Dequeue(Queue *pQueue); +int isEmpty(Queue* pQueue); + +Queue *ConstructQueue(int limit) { + Queue *queue = (Queue*) malloc(sizeof (Queue)); + if (queue == NULL) { + return NULL; + } + if (limit <= 0) { + limit = 65535; + } + queue->limit = limit; + queue->size = 0; + queue->head = NULL; + queue->tail = NULL; + + return queue; +} + +void DestructQueue(Queue *queue) { + NODE *pN; + while (!isEmpty(queue)) { + pN = Dequeue(queue); + free(pN); + } + free(queue); +} + +int Enqueue(Queue *pQueue, NODE *item) { + /* Bad parameter */ + if ((pQueue == NULL) || (item == NULL)) { + return FALSE; + } + // if(pQueue->limit != 0) + if (pQueue->size >= pQueue->limit) { + return FALSE; + } + /*the queue is empty*/ + item->prev = NULL; + if (pQueue->size == 0) { + pQueue->head = item; + pQueue->tail = item; + + } else { + /*adding item to the end of the queue*/ + pQueue->tail->prev = item; + pQueue->tail = item; + } + pQueue->size++; + return TRUE; +} + +NODE * Dequeue(Queue *pQueue) { + /*the queue is empty or bad param*/ + NODE *item; + if (isEmpty(pQueue)) + return NULL; + item = pQueue->head; + pQueue->head = (pQueue->head)->prev; + pQueue->size--; + return item; +} + +int isEmpty(Queue* pQueue) { + if (pQueue == NULL) { + return FALSE; + } + if (pQueue->size == 0) { + return TRUE; + } else { + return FALSE; + } +} +/* +int main() { + int i; + Queue *pQ = ConstructQueue(7); + NODE *pN; + + for (i = 0; i < 9; i++) { + pN = (NODE*) malloc(sizeof (NODE)); + pN->data.info = 100 + i; + Enqueue(pQ, pN); + } + + while (!isEmpty(pQ)) { + pN = Dequeue(pQ); + printf("\nDequeued: %d", pN->data); + free(pN); + } + DestructQueue(pQ); + return (EXIT_SUCCESS); +} + +*/ \ No newline at end of file