Add toolchain and mbtk source

Change-Id: Ie12546301367ea59240bf23d5e184ad7e36e40b3
diff --git a/mbtk/mbtk_lib/src/mbtk_task.c b/mbtk/mbtk_lib/src/mbtk_task.c
new file mode 100755
index 0000000..935369a
--- /dev/null
+++ b/mbtk/mbtk_lib/src/mbtk_task.c
@@ -0,0 +1,139 @@
+/*************************************************************
+Description:
+    mbtk_task.c
+    Used to implement mobiletek standard task or thread interfaces
+Author:
+    YangDagang
+Date:
+    2019-7-13
+*************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include "mbtk_type.h"
+#include "mbtk_queue.h"
+#include "mbtk_task.h"
+#include "mbtk_log.h"
+
+/*************************************************************
+    Constants and Macros
+*************************************************************/
+
+/*************************************************************
+    Definitions:enum,struct,union
+*************************************************************/
+
+
+/*************************************************************
+    Variables:local,extern
+*************************************************************/
+
+/*************************************************************
+    Local Function Declaration
+*************************************************************/
+
+/*************************************************************
+    Extern Function Declaration
+*************************************************************/
+
+/*************************************************************
+    Function Definitions
+*************************************************************/
+void mbtk_mutex_init(mbtk_mutex *mutex)
+{
+    pthread_mutex_init(&mutex->crit_sect, NULL);
+}
+
+void mbtk_mutex_deinit(mbtk_mutex *mutex)
+{
+    pthread_mutex_destroy(&mutex->crit_sect);
+}
+
+void mbtk_mutex_lock(mbtk_mutex *mutex)
+{
+    pthread_mutex_lock(&mutex->crit_sect);
+}
+
+void mbtk_mutex_unlock(mbtk_mutex *mutex)
+{
+    pthread_mutex_unlock(&mutex->crit_sect);
+}
+
+int mbtk_task_start(mbtk_task_info *task)
+{
+    static pthread_attr_t thread_attr;
+    pthread_attr_init(&thread_attr);
+    if(pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED))
+    {
+        LOGE("pthread_attr_setdetachstate() fail.");
+        return -1;
+    }
+
+    if (pthread_create((pthread_t*)task->task_id,
+        &thread_attr, task->thread_run, task->args) != 0)
+    {
+        LOGE("%s errno: %d (%s)",__func__, errno, strerror(errno));
+        return -1;
+    }
+    pthread_attr_destroy(&thread_attr);
+
+    return 0;
+}
+
+int mbtk_task_queue_start(void *param,mbtk_task_cb_handle cb)
+{
+    int res = 0;
+    mbtk_task_queue_info *ts = (mbtk_task_queue_info *)param;
+
+    if(cb == NULL)
+    {
+        return MBTK_FAILE;
+    }
+    mbtk_queue_init(&ts->queue);
+    mbtk_mutex_init(&ts->mutex);
+    pthread_cond_init(&ts->cond, NULL);
+    res = pthread_create(&ts->thread_id,NULL,cb,NULL);
+    usleep(500000);
+    return res;
+}
+
+void mbtk_task_queue_stop(void *param)
+{
+    mbtk_task_queue_info *ts = (mbtk_task_queue_info *)param;
+    pthread_cancel(ts->thread_id);
+}
+
+int mbtk_signal_send(void *param,mbtk_signal_info* info)
+{
+    int res = 0;
+    mbtk_task_queue_info *ts = (mbtk_task_queue_info *)param;
+
+    mbtk_mutex_lock(&ts->mutex);
+    res = mbtk_queue_put(&ts->queue,(void*)info);
+    pthread_cond_signal(&ts->cond);
+    mbtk_mutex_unlock(&ts->mutex);
+    return res;
+}
+
+mbtk_signal_info *mbtk_signal_get(void *param)
+{
+    void *res = NULL;
+    mbtk_task_queue_info *ts = (mbtk_task_queue_info *)param;
+
+    mbtk_mutex_lock(&ts->mutex);
+    res = mbtk_queue_get(&ts->queue);
+    if(res == NULL){
+        // extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
+        //      pthread_mutex_t *__restrict __mutex)
+        pthread_cond_wait(&ts->cond, (pthread_mutex_t*)(&ts->mutex));
+        res = mbtk_queue_get(&ts->queue);
+    }
+    mbtk_mutex_unlock(&ts->mutex);
+    return res;
+}
+