Port of RedBear BLE Shield Arduino Sketch to RedBear Nano. This firmware enables BLE clients to initialize, read and write Nano pins over the air via Bluetooth, using the same protocol used by Redbear BLE Shield. This enables working with Nano devices from any SAndroidE powered application (http://es3.unibs.it/SAndroidE/).

Dependencies:   BLE_API mbed nRF51822 MbedJSONValue

Revision:
2:6c45738bba43
--- /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