Add toolchain and mbtk source

Change-Id: Ie12546301367ea59240bf23d5e184ad7e36e40b3
diff --git a/mbtk/mbtk_lib/src/mbtk_queue.c b/mbtk/mbtk_lib/src/mbtk_queue.c
new file mode 100755
index 0000000..8abc4d1
--- /dev/null
+++ b/mbtk/mbtk_lib/src/mbtk_queue.c
@@ -0,0 +1,218 @@
+/*************************************************************
+Description:
+    mbtk_queue.c
+    Used to implement mobiletek standard queue interfaces
+Author:
+    YangDagang
+Date:
+    2019-7-13
+*************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mbtk_type.h"
+#include "mbtk_queue.h"
+
+/*************************************************************
+    Constants and Macros
+*************************************************************/
+
+/*************************************************************
+    Definitions:enum,struct,union
+*************************************************************/
+
+
+/*************************************************************
+    Variables:local,extern
+*************************************************************/
+
+/*************************************************************
+    Local Function Declaration
+*************************************************************/
+
+/*************************************************************
+    Extern Function Declaration
+*************************************************************/
+
+/*************************************************************
+    Function Definitions
+*************************************************************/
+/*=============================================
+FUNCTION
+    mbtk_tcpip_ptr
+
+DESCRIPTION
+    get tcpip information pointer
+
+DEPENDENCIES
+    None
+
+PARAMETERS
+    None
+
+RETURN VALUE
+    tcpip information pointer
+
+SIDE EFFECTS
+    None
+=============================================*/
+void mbtk_queue_init(mbtk_queue_node_t *queue)
+{
+    if(queue == NULL)
+    {
+        return;
+    }
+    queue->count = 0;
+    queue->payload = NULL;
+    queue->front = NULL;
+    queue->rear = NULL;
+    mbtk_mutex_init(&queue->mutex);
+}
+
+int mbtk_queue_put(mbtk_queue_node_t *queue,void *payload)
+{
+    mbtk_queue_node_t *curr = NULL;
+    mbtk_queue_node_t *p = NULL;
+
+    if(payload == NULL || queue == NULL)
+    {
+        return -1;
+    }
+    mbtk_mutex_lock(&queue->mutex);
+    curr = (mbtk_queue_node_t*)malloc(sizeof(mbtk_queue_node_t));
+    if(curr == NULL)
+    {
+        mbtk_mutex_unlock(&queue->mutex);
+        return -1;
+    }
+    curr->count = 0;
+    curr->rear = NULL;
+    curr->payload = payload;
+    if(queue->front != NULL)
+    {
+        p = queue->front;
+        p->rear = curr;
+        curr->front = p;
+        queue->front = curr;
+    }
+    else
+    {
+        //fisrt add node
+        queue->front = curr;
+        queue->rear = curr;
+        curr->front = queue;
+    }
+    queue->count++;
+    mbtk_mutex_unlock(&queue->mutex);
+    return 0;
+}
+
+int mbtk_queue_insert(mbtk_queue_node_t *queue,void *payload)
+{
+    mbtk_queue_node_t *curr = NULL;
+    mbtk_queue_node_t *p = NULL;
+
+    if(payload == NULL || queue == NULL)
+    {
+        return -1;
+    }
+    mbtk_mutex_lock(&queue->mutex);
+    curr = (mbtk_queue_node_t*)malloc(sizeof(mbtk_queue_node_t));
+    if(curr == NULL)
+    {
+        mbtk_mutex_unlock(&queue->mutex);
+        return -1;
+    }
+    curr->rear = NULL;
+    curr->count = 0;
+    curr->payload = payload;
+    if(queue->front != NULL)
+    {
+        p = queue->rear;
+        queue->rear = curr;
+        curr->front = queue;
+        curr->rear = p;
+        p->front = curr;
+    }
+    else
+    {
+        //fisrt add node
+        queue->front = curr;
+        queue->rear = curr;
+        curr->front = queue;
+    }
+    queue->count++;
+    mbtk_mutex_unlock(&queue->mutex);
+    return 0;
+}
+
+void* mbtk_queue_get(mbtk_queue_node_t *queue)
+{
+    mbtk_queue_node_t *curr = NULL;
+    void *payload = NULL;
+
+    if((queue == NULL) || mbtk_queue_empty(queue))
+    {
+        return NULL;
+    }
+    mbtk_mutex_lock(&queue->mutex);
+    curr = queue->rear;
+    payload = curr->payload;
+    if(curr->rear != NULL)
+    {
+        queue->rear = curr->rear;
+        curr->rear->front = queue;
+    }
+    else
+    {
+        queue->front = NULL;
+        queue->rear = NULL;
+    }
+    free(curr);
+    curr = NULL;
+    queue->count--;
+    mbtk_mutex_unlock(&queue->mutex);
+    return payload;
+}
+
+bool mbtk_queue_empty(mbtk_queue_node_t *queue)
+{
+    bool is_empty = FALSE;
+
+    mbtk_mutex_lock(&queue->mutex);
+    if(queue != NULL)
+    {
+        if((queue->front == NULL) && (queue->rear == NULL))
+        {
+            is_empty = TRUE;
+        }
+    }
+    mbtk_mutex_unlock(&queue->mutex);
+    return is_empty;
+}
+
+bool mbtk_queue_is_full(mbtk_queue_node_t *queue)
+{
+    bool is_full = FALSE;
+
+    mbtk_mutex_lock(&queue->mutex);
+    if((queue != NULL) && (queue->count == MBTK_QUEUE_MAX_NUM))
+    {
+        is_full = TRUE;
+    }
+    mbtk_mutex_unlock(&queue->mutex);
+    return is_full;
+}
+
+void mbtk_queue_deinit(mbtk_queue_node_t *queue)
+{
+    if(queue == NULL)
+    {
+        return;
+    }
+    queue->count = 0;
+    queue->payload = NULL;
+    queue->front = NULL;
+    queue->rear = NULL;
+    mbtk_mutex_deinit(&queue->mutex);
+}