Change test makefile.

Change-Id: I27eef2cdb86b220dd03e9be79d5bef7f9303258b
diff --git a/mbtk/test/Makefile b/mbtk/test/Makefile
index 89ccbdf..28cd0b4 100755
--- a/mbtk/test/Makefile
+++ b/mbtk/test/Makefile
@@ -1,51 +1,24 @@
 ROOT = $(shell pwd)/../..
 include ../Make.defines
 
-LOCAL_PATH=$(BUILD_ROOT)/test
+#exclude_dirs := include bin
+#test_dirs := $(shell find . -maxdepth 1 -type d)
+#test_dirs := $(basename $(patsubst ./%,%,$(test_dirs)))
+#test_dirs := $(filter-out $(exclude_dirs),$(test_dirs))
 
-INC_DIR +=
-
-LIB_DIR +=
-
-LIBS += -lmbtk_lib -llynq_lib -lql_lib -lmbtk_mqtt -laudio-apu -lcutils -ltinyalsa -lacm -lubus -lubox -lmbtk_fota -lmbtk_audio -lmbtk_ril -lmbtk_factory -lmbtk_net -lmbtk_gnss -lmbtk_http -lmbtk_ftp -lmbtk_tcpip \
-		-lmbtk_coap
-
-CFLAGS +=
-
-DEFINE +=
-
-MY_FILES_PATH:=$(LOCAL_PATH)
-#ifeq ($(CONFIG_MBTK_QL_SUPPORT),y)
-#MY_FILES_PATH += $(LOCAL_PATH)/ql
-#endif
-
-#ifeq ($(CONFIG_MBTK_PLATFORM),linux)
-#MY_FILES_PATH += $(LOCAL_PATH)/platform/linux
-#endif
-
-LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
-ifeq ($(BUILD_PLATFORM), asr1803)
-LOCAL_SRC_FILES += $(wildcard asr1803/*.c) $(wildcard asr1803/*.cpp)
-else
-LOCAL_SRC_FILES += $(wildcard asr1806/*.c) $(wildcard asr1806/*.cpp)
-endif
-
-$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
-
-OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
-BINS = $(patsubst %.o,%,$(OBJS))
-
-all: $(BINS)
-
-$(BINS):$(OBJS)
-	@echo "  BIN     $@"
-	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
-
-%.o:%.c
-	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
-
-%.o:%.cpp
-	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+SUBDIRS := $(wildcard */)
+SUBDIRS_WITH_MAKEFILES := $(foreach dir,$(SUBDIRS),$(if $(wildcard $(dir)Makefile),$(dir),))
+ 
+all:
+	@echo DIR=$(SUBDIRS_WITH_MAKEFILES)
+	@for dir in $(SUBDIRS_WITH_MAKEFILES); do \
+		echo "Building $$dir"; \
+		$(MAKE) -C $$dir || exit 1; \
+	done
 
 clean:
-	rm -f $(OBJS)
+	@echo DIR=$(SUBDIRS_WITH_MAKEFILES)
+	@for i in $(SUBDIRS_WITH_MAKEFILES); do \
+		(cd $$i && echo "Cleaning $$i" && $(MAKE) clean) || exit 1; \
+	done
+	rm -rf $(OUT_DIR)
diff --git a/mbtk/test/asr1803/aiti_audio_test.c b/mbtk/test/asr1803/aiti_audio_test.c
deleted file mode 100755
index 0472c9a..0000000
--- a/mbtk/test/asr1803/aiti_audio_test.c
+++ /dev/null
@@ -1,538 +0,0 @@
-#include "mbtk_type.h"
-#include <fcntl.h>
-#include <stdint.h>
-#include <limits.h>
-#include <termios.h>
-#include <stdarg.h>
-// #include "ql_at.h"
-#include "ql/ql_audio.h"
-// #include "mopen_tts.h"
-
-#define MBTK_AUD_DEMO_WAV "/data/demo.wav"
-
-#define MBTK_AUD_DEMO_WAV1 "/data/demo1.wav"
-
-
-int play_hdl = 0;
-static int record_fd = 0;
-
-
-int Ql_cb_playback(int hdl, int result)
-{
-    printf("%s: hdl=%d, result=%d\n\r", __func__, hdl, result);
-    if (result == AUD_PLAYER_FINISHED || result == AUD_PLAYER_NODATA)
-    {
-        printf("%s: play finished\n\r", __func__);
-    }
-    return 0;
-}
-
-void record_cb_func(int cb_result, char* databuf, unsigned int len)
-{
-    int rc;
-
-    if(NULL != databuf && len > 0 && record_fd > 0)
-    {
-        //for debug:save into file
-        rc = write(record_fd, databuf, len);
-        if (rc < 0) {
-            printf("%s: error writing to file!\n", __FUNCTION__);
-        } else if (rc < len) {
-            printf("%s: wrote less the buffer size!\n", __FUNCTION__);
-        }
-    }
-}
-
-
-int MBTK_wav_pcm16Le_check(int fd)
-{
-    struct wav_header hdr;
-
-    if (fd <= 0)
-        return -1;
-
-    if (read(fd, &hdr, sizeof(hdr)) != sizeof(hdr))
-    {
-        printf("\n%s: cannot read header\n", __FUNCTION__);
-        return -1;
-    }
-
-        printf("hdr.riff_id:%X, hdr.riff_fmt:%X, hdr.fmt_id:%X", hdr.riff_id, hdr.riff_fmt, hdr.fmt_id);
-
-    if ((hdr.riff_id != ID_RIFF)
-            || (hdr.riff_fmt != ID_WAVE)
-            || (hdr.fmt_id != ID_FMT))
-    {
-        printf("\n%s: is not a riff/wave file\n", __FUNCTION__);
-        return -1;
-    }
-
-    if ((hdr.audio_format != FORMAT_PCM) || (hdr.fmt_sz != 16)) {
-        printf("\n%s: is not pcm format\n", __FUNCTION__);
-        return -1;
-    }
-
-    if (hdr.bits_per_sample != 16) {
-        printf("\n%s: is not 16bit per sample\n", __FUNCTION__);
-        return -1;
-    }
-
-    printf("audio_format: %d,num_channels: %d,sample_rate: %d,byte_rate: %d,bits_per_sample:  %d data_sz: %d\n",
-           hdr.audio_format, hdr.num_channels, hdr.sample_rate, hdr.byte_rate, hdr.bits_per_sample, hdr.data_sz);
-
-    return hdr.data_sz;
-}
-
-int MBTK_wav_pcm16Le_set(int fd)
-{
-    struct wav_header hdr;
-
-    if (fd <= 0)
-        return -1;
-
-    memset(&hdr, 0, sizeof(struct wav_header));
-
-    hdr.riff_id = ID_RIFF;
-    hdr.riff_fmt = ID_WAVE;
-    hdr.fmt_id = ID_FMT;
-    hdr.fmt_sz = 16;
-    hdr.audio_format = FORMAT_PCM;
-    hdr.num_channels = 1;
-    hdr.sample_rate = 8000;
-    hdr.bits_per_sample = 16;
-    hdr.byte_rate = (8000 * 1 * hdr.bits_per_sample) / 8;
-    hdr.block_align = (hdr.bits_per_sample * 1) / 8;
-    hdr.data_id = ID_DATA;
-    hdr.data_sz = 0;
-
-    hdr.riff_sz = hdr.data_sz + 44 - 8;
-    if (write(fd, &hdr, sizeof(hdr)) != sizeof(hdr)) {
-        return -1;
-    }
-
-    return 0;
-}
-
-unsigned char* handle_file1(char *audioFilePath)
-{
-    long filesize;
-    unsigned char *pcmBuf = NULL;
-    FILE *fp = NULL;
-    int size;
-
-    // 处理文件格式
-    fp = fopen(audioFilePath, "rb");
-    if (!fp) {
-        printf("%s:fopen failed",__func__);
-    }
-
-    fseek(fp,0,SEEK_END);
-    filesize=ftell(fp);
-    printf("%s:filesize:%d\n", __func__, filesize);
-    fseek(fp,44,SEEK_SET);
-    pcmBuf =(unsigned char *)malloc(sizeof(char)*filesize);
-    memset(pcmBuf,0,sizeof(char)*filesize);
-//    fread(pcmBuf, filesize-44,1, fp);
-    fread(pcmBuf, 1, filesize-44, fp);
-    fclose(fp);
-
-    printf("strlen(pcmBuf):%d\n", strlen(pcmBuf));
-
-    return pcmBuf;
-}
-
-void *audio_thread(void *arg)
-{
-    printf("audio_thread(1)----------\n");
-    Ql_Playback_Samprate_Set(1);
-    int play_hdl = 0;
-    int fd = 0;
-    int ret;
-    int file_size =0;
-    int file_size1 =0;
-    unsigned char *pcmBuf = NULL;
-    unsigned char *pcmBuf1 = NULL;
-
-    play_hdl = Ql_AudPlayer_Open(NULL, Ql_cb_playback);
-    if(0 == play_hdl)
-    {
-        printf("Ql_AudPlayer_Open fail\n");
-    }
-
-    fd = open(MBTK_AUD_DEMO_WAV, O_RDWR);
-    if (fd <= 0)
-    {
-        printf("Open fail\n");
-    }
-
-    int fd1 = open(MBTK_AUD_DEMO_WAV1, O_RDWR);
-    printf("fd1:%d\n", fd1);
-    if (fd1 <= 0)
-    {
-        printf("Open fail\n");
-    }
-
-    file_size = MBTK_wav_pcm16Le_check(fd);
-
-    file_size1 = MBTK_wav_pcm16Le_check(fd1);
-    printf("file_size:%d, file_size1:%d\n", file_size, file_size1);
-
-    pcmBuf = handle_file1(MBTK_AUD_DEMO_WAV);
-
-    pcmBuf1 = handle_file1(MBTK_AUD_DEMO_WAV1);
-
-    if(file_size > 0  && file_size1 > 0 )
-    {
-        if(pcmBuf != NULL)
-        {
-            ret = Ql_AudPlayer_Play(play_hdl, pcmBuf, file_size);
-            printf("ret:%d\n", ret);
-        }
-
-        Ql_Rxgain_Set(3);
-        if(pcmBuf1 != NULL)
-        {
-            ret = Ql_AudPlayer_Play(play_hdl, pcmBuf1, file_size1);
-            printf("ret:%d\n", ret);
-        }
-
-    }
-
-    Ql_AudPlayer_Close(play_hdl);
-    close(fd);
-    close(fd1);
-    return 0;
-}
-
-
-void *audio_play_file_thread(void *arg)
-{
-    char operator[10];
-
-    int fd = open(MBTK_AUD_DEMO_WAV, O_RDWR);
-    if (fd <= 0)
-        return 0;
-
-    int fd1 = open(MBTK_AUD_DEMO_WAV1, O_RDWR);
-    if (fd1 <= 0)
-        return 0;
-
-    Ql_AudPlayer_PlayFrmFile(play_hdl, fd, 0);
-
-    Ql_Rxgain_Set(3);
-
-    Ql_AudPlayer_PlayFrmFile(play_hdl, fd1, 0);
-
-    close(fd);
-    close(fd1);
-
-    return 0;
-}
-
-
-int aplay_thread(char *audioFilePath)
-{
-    int res;
-    pthread_t play_thread;
-
-    res = pthread_create(&play_thread, NULL, audio_thread, audioFilePath);
-    if (res != 0) {
-        printf("%s:pthread_create failed",__func__);
-        return 0;
-    }
-
-    return 0;
-}
-
-
-int aplay_file_thread(int play_hdl)
-{
-    int res;
-    pthread_t play_thread;
-    int hdl = play_hdl;
-
-    res = pthread_create(&play_thread, NULL, audio_play_file_thread, &hdl);
-    if (res != 0) {
-        printf("%s:pthread_create failed",__func__);
-        return 0;
-    }
-
-    return 0;
-}
-
-
-
-void aplay(void)
-{
-    char operator[10];
-    char databuf[1024];
-    int opt = 0;
-    int fd = 0;
-    int size = 0;
-    int state;
-    int handler = 0;
-    int file_size = 0 ;
-
-    while(1)
-    {
-        printf("=========aplay========2\n"
-            "\t 0 Open PCM\n"
-            "\t 1 Play Stream\n"
-            "\t 2 Play file\n"
-            "\t 3 Close\n"
-            "\t 4 play stream thread\n"
-            "\t 5 pause\n"
-            "\t 6 repause\n"
-            "\t 7 play file thread\n"
-            "\t 8 play mp3\n"
-            "\t others exit\n\n"
-            "operator >> ");
-
-        fflush(stdin);
-        fgets(operator, sizeof(operator), stdin);
-        opt = atoi(operator);
-        switch (opt)
-        {
-            case 0:
-                Ql_Playback_Samprate_Set(1);
-                play_hdl = Ql_AudPlayer_Open(NULL, Ql_cb_playback);
-                if(0 == play_hdl)
-                    printf("Ql_AudPlayer_Open fail\n");
-
-                printf("\nplay_hdl:%d\n", play_hdl);
-                break;
-            case 1:
-               if(0 == play_hdl)
-                    continue;
-
-                fd = open(MBTK_AUD_DEMO_WAV, O_RDWR);
-                if (fd <= 0)
-                    continue;
-
-                file_size = MBTK_wav_pcm16Le_check(fd);
-                printf("file_size:%d\n", file_size);
-                if(file_size > 0 )
-                {
-                    unsigned char *pcmBuf = NULL;
-                    char *p1 = pcmBuf;
-                    pcmBuf = handle_file1(MBTK_AUD_DEMO_WAV);
-                    if(pcmBuf != NULL)
-                    {
-                        if(-1 == Ql_AudPlayer_Play(play_hdl, pcmBuf, file_size))
-                                printf("\n------\n");
-                    }
-
-                }
-
-//                Ql_Rxgain_Set(5);
-
-                close(fd);
-                break;
-            case 2:
-                if(0 == play_hdl)
-                    continue;
-
-                fd = open(MBTK_AUD_DEMO_WAV, O_RDWR);
-                if (fd <= 0)
-                    continue;
-
-                if(1)
-                {
-                    Ql_AudPlayer_PlayFrmFile(play_hdl, fd, 44);
-                }
-                else
-                {
-                    printf("aplay file type error\n");
-                }
-                close(fd);
-                break;
-            case 3:
-                if(0 == play_hdl)
-                    continue;
-                Ql_AudPlayer_Close(play_hdl);
-                break;
-            case 4:
-                aplay_thread(MBTK_AUD_DEMO_WAV);
-                break;
-            case 5:
-                if(0 == play_hdl)
-                    continue;
-                Ql_AudPlayer_Pause(play_hdl);
-                break;
-            case 6:
-                if(0 == play_hdl)
-                    continue;
-                Ql_AudPlayer_Resume(play_hdl);
-                break;
-            case 7:
-                if(0 == play_hdl)
-                    continue;
-                aplay_file_thread(play_hdl);
-                break;
-            case 8:
-           //     Ql_Mp3_To_Wav("/data/demo.wav", "/data/mp3demo.mp3", play_hdl);
-                Ql_Mp3_To_Play("/data/mp3demo.mp3", play_hdl, 0);
-                break;
-            default:
-                return;
-        }
-
-        sleep(1);
-    }
-
-    printf("aplay exit\n");
-    return ;
-}
-void arec(void)
-{
-    int ret;
-    char operator[10];
-    int opt;
-    int hdl = 0;
-
-    while(1)
-    {
-        printf("=======arec======\n"
-            "\t 0 Open PCM\n"
-            "\t 1 Start Record\n"
-            "\t 2 Get state\n"
-            "\t 3 Pause\n"
-            "\t 4 Resume\n"
-            "\t 5 Stop\n"
-            "\t 6 Close\n"
-            "\t others exit\n\n"
-            "operator >> ");
-
-        fflush(stdin);
-        fgets(operator, sizeof(operator), stdin);
-        opt = atoi(operator);
-        switch (opt)
-        {
-            case 0:
-                Ql_Playback_Samprate_Set(0);
-                hdl = Ql_AudRecorder_Open(NULL, record_cb_func);
-                if (hdl == 0)
-                    return ;
-                break;
-            case 1:
-                if(0 == hdl)
-                {
-                    printf("audio is not initialized yet.\n");
-                    continue;
-                }
-
-                if(0 != record_fd)
-                {
-                    printf("audio It's already being recorded.\n");
-                    continue;
-                }
-                record_fd = open(MBTK_AUD_DEMO_WAV, O_RDWR|O_CREAT|O_TRUNC, 0644);
-                if (record_fd <= 0)
-                    printf("file open error\n");
-
-                if(0 == MBTK_wav_pcm16Le_set(record_fd))
-                {
-                    ret = Ql_AudRecorder_StartRecord();
-                    if(0 != ret)
-                    {
-                        printf("audio record error: %d\n", ret);
-                        close(record_fd);
-                        record_fd = 0;
-                    }
-                }
-                else
-                {
-                    printf("arec set file header error\n");
-                    close(record_fd);
-                    record_fd = 0;
-                }
-                break;
-            case 2:
-                // printf("arec state : %d\n", state);
-                break;
-            case 3:
-                break;
-            case 4:
-                break;
-            case 5:
-                break;
-            case 6:
-                Ql_AudRecorder_Close();
-                if(record_fd > 0)
-                {
-                    close(record_fd);
-                    record_fd = 0;
-                }
-                break;
-            default:
-                return;
-        }
-
-        sleep(1);
-    }
-
-    printf("arec exit\n");
-    return ;
-}
-int main(void)
-{
-    char operator[10];
-    int opt;
-
-//    printf("Ql_Mp3_To_Wav()\n");
-//    mbtk_audio_mp3_to_wav("/data/demo.wav", "/data/mp3demo.mp3");
- //   Ql_Mp3_To_Wav("/data/demo.wav", "/data/mp3demo.mp3");
-
-    while(1)
-    {
-        printf("=========audio main=========\n"
-            "\t0 exit\n"
-            "\t1 aplay\n"
-            "\t2 arec\n"
-            "\t3 set speaker Volume\n"
-            "\t4 get speaker Volume\n"
-            "\t5 set mic Volume\n"
-            "\t6 get mic Volume\n"
-            "\t7 tts\n"
-            "\t8 tone\n"
-            "operator: >> ");
-
-        fgets(operator, sizeof(operator), stdin);
-        fflush(stdin);
-        opt = atoi(operator);
-        switch (opt)
-        {
-            case 0:
-                printf("main exit\n");
-                return 0;
-            case 1:
-                aplay();
-                break;
-            case 2:
-                arec();
-                break;
-            case 3:
-                mbtk_at_rec(NULL);
-                break;
-            case 4:
-                mbtk_at_play(NULL);
-                break;
-            case 5:
-                break;
-            case 6:
-                break;
-            case 7:
-                break;
-            case 8:
-                break;
-            default:
-                break;
-        }
-
-        sleep(1);
-    }
-
-    return 0;
-}
-
-
diff --git a/mbtk/test/asr1803/audio_play_test.c b/mbtk/test/asr1803/audio_play_test.c
deleted file mode 100755
index a954734..0000000
--- a/mbtk/test/asr1803/audio_play_test.c
+++ /dev/null
@@ -1,213 +0,0 @@
-#include "mbtk_type.h"
-#include <fcntl.h>
-#include <stdint.h>
-#include <limits.h>
-#include <termios.h>
-#include <stdarg.h>
-#include <pthread.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include "ql/ql_audio.h"
-
-static pthread_t play_thread_play;
-int play_hdl = 0;
-int handler = 0;
-int fd = -1;
-
-int Ql_cb_playback(int hdl, int result)
-{
-    // printf("%s: hdl=%d, result=%d\n\r", __func__, hdl, result);
-    if (result == AUD_PLAYER_FINISHED || result == AUD_PLAYER_NODATA)
-    {
-        printf("%s: play finished\n\r", __func__);
-    }
-    return 0;
-}
-
-
-void dtmf_cb1(char dtmf)
-{
-    printf("%s:%c\n", __FUNCTION__, dtmf);
-}
-
-int MBTK_wav_pcm16Le_check(int fd)
-{
-    struct wav_header hdr;
-
-    if (fd <= 0)
-        return -1;
-
-    if (read(fd, &hdr, sizeof(hdr)) != sizeof(hdr))
-    {
-        printf("\n%s: cannot read header\n", __FUNCTION__);
-        return -1;
-    }
-
-    if ((hdr.riff_id != ID_RIFF)
-            || (hdr.riff_fmt != ID_WAVE)
-            || (hdr.fmt_id != ID_FMT))
-    {
-        printf("\n%s: is not a riff/wave file\n", __FUNCTION__);
-        return -1;
-    }
-
-    if ((hdr.audio_format != FORMAT_PCM) || (hdr.fmt_sz != 16)) {
-        printf("\n%s: is not pcm format\n", __FUNCTION__);
-        return -1;
-    }
-
-    if (hdr.bits_per_sample != 16) {
-        printf("\n%s: is not 16bit per sample\n", __FUNCTION__);
-        return -1;
-    }
-
-    return 0;
-}
-
-int MBTK_wav_pcm16Le_set(int fd)
-{
-    struct wav_header hdr;
-
-    if (fd <= 0)
-        return -1;
-
-    memset(&hdr, 0, sizeof(struct wav_header));
-
-    hdr.riff_id = ID_RIFF;
-    hdr.riff_fmt = ID_WAVE;
-    hdr.fmt_id = ID_FMT;
-    hdr.fmt_sz = 16;
-    hdr.audio_format = FORMAT_PCM;
-    hdr.num_channels = 1;
-    hdr.sample_rate = 8000;
-    hdr.bits_per_sample = 16;
-    hdr.byte_rate = (8000 * 1 * hdr.bits_per_sample) / 8;
-    hdr.block_align = (hdr.bits_per_sample * 1) / 8;
-    hdr.data_id = ID_DATA;
-    hdr.data_sz = 0;
-
-    hdr.riff_sz = hdr.data_sz + 44 - 8;
-    if (write(fd, &hdr, sizeof(hdr)) != sizeof(hdr)) {
-        return -1;
-    }
-
-    return 0;
-}
-
-static void audio_play_thread(void *arg)
-{
-    Ql_AudPlayer_PlayFrmFile(play_hdl, fd, 0);
-}
-
-
-int main(int argc, char* argv[])
-{
-    if(argc != 2) {
-        printf("audio_play_test <wav_file>\n");
-        return -1;
-    }
-
-    struct stat st;
-    const char *path = (const char *)argv[1];
-    // mbtk_log_init("radio", "MBTK_AUDIO");
-
-    /* Check and open source file */
-    if (access(path, F_OK) || stat(path, &st)) {
-        printf("%s: error reading from file %s\n", __FUNCTION__, path);
-        return -1;
-    }
-
-    if (!st.st_size) {
-        printf("%s: empty file %s\n", __FUNCTION__, path);
-        return -1;
-    }
-
-    printf("1\n");
-    mbtk_audio_ubus_client_init(&handler, dtmf_cb1);
-    printf("2\n");
-    mbtk_audio_switch_pcm(1);
-    printf("3\n");
-    mbtk_audio_mode_set(2);
-    printf("4\n");
-    play_hdl = Ql_AudPlayer_Open(NULL, Ql_cb_playback);
-    printf("5\n");
-    if(0 == play_hdl) {
-        printf("Ql_AudPlayer_Open fail\n");
-        return -1;
-    }
-
-    char cmd[100];
-    bool running = TRUE;
-    printf("6\n");
-    while(running)
-    {
-        memset(cmd, 0, 100);
-        int err;
-        printf("1 : Play    Other : Exit\n");
-        if(fgets(cmd, 100, stdin))
-        {
-            if(cmd[0] == '\r' || cmd[0] == '\n')
-                continue;
-            int state = atoi(cmd);
-            switch(state){
-                case 1:
-                {
-                    if(0 == play_hdl)
-                        break;
-                    fd = open(argv[1], O_RDONLY);
-                    if (fd <= 0) {
-                        printf("Open file fail.\n");
-                        goto exit;
-                    }
-
-                    mbtk_audio_path_enable(1);
-                    if(0 == MBTK_wav_pcm16Le_check(fd))
-                    {
-                        pthread_attr_t thread_attr;
-                        pthread_attr_init(&thread_attr);
-                        if(pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED))
-                        {
-                            printf("pthread_attr_setdetachstate() fail.\n");
-                            goto exit;
-                        }
-
-                        if (pthread_create(&play_thread_play, NULL, (void *)&audio_play_thread, NULL) < 0) {
-                            printf("%s: error creating thread_play!\n", __FUNCTION__);
-                            goto exit;
-                        }
-
-                        printf("Start play audio...\n");
-                    }
-                    else
-                    {
-                        printf("aplay file type error\n");
-                        goto exit;
-                    }
-                    break;
-                }
-                default:
-                {
-                    if(0 == play_hdl)
-                        break;
-                    Ql_AudPlayer_Close(play_hdl);
-                    running = FALSE;
-                    break;
-                }
-            }
-        }
-    }
-
-exit:
-    if(fd > 0) {
-        close(fd);
-    }
-    mbtk_audio_path_enable(0);
-
-    mbtk_audio_mode_set(0);
-    mbtk_audio_switch_pcm(0);
-
-
-    printf("Success exit.\n");
-    return 0;
-}
-
diff --git a/mbtk/test/asr1803/audio_test.c b/mbtk/test/asr1803/audio_test.c
deleted file mode 100755
index d8121ee..0000000
--- a/mbtk/test/asr1803/audio_test.c
+++ /dev/null
@@ -1,342 +0,0 @@
-#include "mbtk_type.h"
-#include <fcntl.h>
-#include <stdint.h>
-#include <limits.h>
-#include <termios.h>
-#include <stdarg.h>
-// #include "ql_at.h"
-#include "ql/ql_audio.h"
-// #include "mopen_tts.h"
-
-#define MBTK_AUD_DEMO_WAV "/data/demo.wav"
-
-static int record_fd = 0;
-
-int Ql_cb_playback(int hdl, int result)
-{
-    printf("%s: hdl=%d, result=%d\n\r", __func__, hdl, result);
-    if (result == AUD_PLAYER_FINISHED || result == AUD_PLAYER_NODATA)
-    {
-        printf("%s: play finished\n\r", __func__);
-    }
-    return 0;
-}
-
-void record_cb_func(int cb_result, char* databuf, unsigned int len)
-{
-    int rc;
-
-    if(NULL != databuf && len > 0 && record_fd > 0)
-    {
-        //for debug:save into file
-        rc = write(record_fd, databuf, len);
-        if (rc < 0) {
-            printf("%s: error writing to file!\n", __FUNCTION__);
-        } else if (rc < len) {
-            printf("%s: wrote less the buffer size!\n", __FUNCTION__);
-        }
-    }
-}
-int MBTK_wav_pcm16Le_check(int fd)
-{
-    struct wav_header hdr;
-
-    if (fd <= 0)
-        return -1;
-
-    if (read(fd, &hdr, sizeof(hdr)) != sizeof(hdr))
-    {
-        printf("\n%s: cannot read header\n", __FUNCTION__);
-        return -1;
-    }
-
-    if ((hdr.riff_id != ID_RIFF)
-            || (hdr.riff_fmt != ID_WAVE)
-            || (hdr.fmt_id != ID_FMT))
-    {
-        printf("\n%s: is not a riff/wave file\n", __FUNCTION__);
-        return -1;
-    }
-
-    if ((hdr.audio_format != FORMAT_PCM) || (hdr.fmt_sz != 16)) {
-        printf("\n%s: is not pcm format\n", __FUNCTION__);
-        return -1;
-    }
-
-    if (hdr.bits_per_sample != 16) {
-        printf("\n%s: is not 16bit per sample\n", __FUNCTION__);
-        return -1;
-    }
-
-    return 0;
-}
-
-int MBTK_wav_pcm16Le_set(int fd)
-{
-    struct wav_header hdr;
-
-    if (fd <= 0)
-        return -1;
-
-    memset(&hdr, 0, sizeof(struct wav_header));
-
-    hdr.riff_id = ID_RIFF;
-    hdr.riff_fmt = ID_WAVE;
-    hdr.fmt_id = ID_FMT;
-    hdr.fmt_sz = 16;
-    hdr.audio_format = FORMAT_PCM;
-    hdr.num_channels = 1;
-    hdr.sample_rate = 8000;
-    hdr.bits_per_sample = 16;
-    hdr.byte_rate = (8000 * 1 * hdr.bits_per_sample) / 8;
-    hdr.block_align = (hdr.bits_per_sample * 1) / 8;
-    hdr.data_id = ID_DATA;
-    hdr.data_sz = 0;
-
-    hdr.riff_sz = hdr.data_sz + 44 - 8;
-    if (write(fd, &hdr, sizeof(hdr)) != sizeof(hdr)) {
-        return -1;
-    }
-
-    return 0;
-}
-void aplay(void)
-{
-    char operator[10];
-    char databuf[1024];
-    int opt = 0;
-    int fd = 0;
-    int size = 0;
-    int state;
-    int play_hdl = 0;
-
-    while(1)
-    {
-        printf("=========aplay========\n"
-            "\t 0 Open PCM\n"
-            "\t 1 Play Stream\n"
-            "\t 2 Play file\n"
-            "\t 3 play mp3\n"
-            "\t 4 Close Player\n"
-            "\t 5 exit\n"
-            "\t others exit\n\n"
-            "operator >> ");
-
-        fflush(stdin);
-        fgets(operator, sizeof(operator), stdin);
-        opt = atoi(operator);
-        switch (opt)
-        {
-            case 0:
-                play_hdl = Ql_AudPlayer_Open(NULL, Ql_cb_playback);
-                if(0 == play_hdl)
-                    printf("Ql_AudPlayer_Open fail\n");
-                break;
-            case 1:
-               if(0 == play_hdl)
-                    continue;
-
-                fd = open(MBTK_AUD_DEMO_WAV, O_RDWR);
-                if (fd <= 0)
-                    continue;
-
-                if(0 == MBTK_wav_pcm16Le_check(fd))
-                {
-                    memset(databuf, 0, sizeof(databuf));
-                    while(0 < (size = read(fd, databuf, sizeof(databuf))))
-                    {
-                        // Ql_Rxgain_Set(2);
-                        if(-1 == Ql_AudPlayer_Play(play_hdl, databuf, size))
-                            break;
-                    }
-                    printf("aplay Stream end \n");
-                }
-
-                close(fd);
-                break;
-            case 2:
-                if(0 == play_hdl)
-                    continue;
-
-                fd = open(MBTK_AUD_DEMO_WAV, O_RDWR);
-                if (fd <= 0)
-                    continue;
-
-                if(0 == MBTK_wav_pcm16Le_check(fd))
-                {
-                    Ql_Rxgain_Set(11);
-                    Ql_AudPlayer_PlayFrmFile(play_hdl, fd, 0);
-                }
-                else
-                {
-                    printf("aplay file type error\n");
-                }
-                close(fd);
-                break;
-            case 3:
-            //    aplay_thread(MBTK_AUD_DEMO_WAV);
-                Ql_Rxgain_Set(11);
-                Ql_Mp3_To_Play("/data/mp3demo.mp3", play_hdl, 0);
-                break;
-            case 4:
-                if(0 == play_hdl)
-                    continue;
-                Ql_AudPlayer_Close(play_hdl);
-                break;
-            case 5:
-            default:
-                return;
-        }
-
-        sleep(1);
-    }
-
-    printf("aplay exit\n");
-    return ;
-}
-void arec(void)
-{
-    int ret;
-    char operator[10];
-    int opt;
-    int hdl = 0;
-
-    while(1)
-    {
-        printf("=======arec======\n"
-            "\t 0 Open PCM\n"
-            "\t 1 Start Record\n"
-            // "\t 2 Get state\n"
-            // "\t 3 Pause\n"
-            // "\t 4 Resume\n"
-            // "\t 5 Stop\n"
-            "\t 2 Stop/Close Recorder\n"
-            "\t others exit\n\n"
-            "operator >> ");
-
-        fflush(stdin);
-        fgets(operator, sizeof(operator), stdin);
-        opt = atoi(operator);
-        switch (opt)
-        {
-            case 0:
-                hdl = Ql_AudRecorder_Open(NULL, record_cb_func);
-                if (hdl == 0)
-                    return ;
-                break;
-            case 1:
-                if(0 == hdl)
-                {
-                    printf("audio is not initialized yet.\n");
-                    continue;
-                }
-
-                if(0 != record_fd)
-                {
-                    printf("audio It's already being recorded.\n");
-                    continue;
-                }
-                record_fd = open(MBTK_AUD_DEMO_WAV, O_RDWR|O_CREAT|O_TRUNC, 0644);
-                if (record_fd <= 0)
-                    printf("file open error\n");
-
-                if(0 == MBTK_wav_pcm16Le_set(record_fd))
-                {
-                    ret = Ql_AudRecorder_StartRecord();
-                    if(0 != ret)
-                    {
-                        printf("audio record error: %d\n", ret);
-                        close(record_fd);
-                        record_fd = 0;
-                    }
-                }
-                else
-                {
-                    printf("arec set file header error\n");
-                    close(record_fd);
-                    record_fd = 0;
-                }
-                break;
-            case 2:
-                Ql_AudRecorder_Close();
-                if(record_fd > 0)
-                {
-                    close(record_fd);
-                    record_fd = 0;
-                }
-                break;
-            case 3:
-                // break;
-            case 4:
-                // break;
-            case 5:
-                // break;
-            case 6:
-                // break;
-            default:
-                return;
-        }
-
-        sleep(1);
-    }
-
-    printf("arec exit\n");
-    return ;
-}
-int main(void)
-{
-    char operator[10];
-    int opt;
-
-    while(1)
-    {
-        printf("=========audio main=========\n"
-            "\t0 exit\n"
-            "\t1 Ql_aplay\n"
-            "\t2 Ql_arec\n"
-            "\t3 audio record\n"
-            "\t4 player stream\n"
-            // "\t5 set mic Volume\n"
-            // "\t6 get mic Volume\n"
-            // "\t7 tts\n"
-            // "\t8 tone\n"
-            "operator: >> ");
-
-        fgets(operator, sizeof(operator), stdin);
-        fflush(stdin);
-        opt = atoi(operator);
-        switch (opt)
-        {
-            case 0:
-                printf("main exit\n");
-                return 0;
-            case 1:
-                aplay();
-                break;
-            case 2:
-                arec();
-                break;
-            case 3:
-                mbtk_at_rec(NULL);
-                break;
-            case 4:
-                mbtk_at_play(NULL);
-                break;
-            case 5:
-                break;
-            case 6:
-                break;
-            case 7:
-                break;
-            case 8:
-                break;
-            default:
-                break;
-        }
-
-        sleep(1);
-    }
-
-    return 0;
-}
-
diff --git a/mbtk/test/asr1803/audio_test_yx.c b/mbtk/test/asr1803/audio_test_yx.c
deleted file mode 100755
index dd9aec5..0000000
--- a/mbtk/test/asr1803/audio_test_yx.c
+++ /dev/null
@@ -1,249 +0,0 @@
-#include "mbtk_type.h"
-#include <fcntl.h>
-#include <stdint.h>
-#include <limits.h>
-#include <termios.h>
-#include <stdarg.h>
-#include <fcntl.h>
-#include <sys/time.h>
-#include <pthread.h>
-#include <signal.h>
-#include <sys/stat.h>
-
-#include "ql/ql_audio.h"
-
-int handler = 0;
-int s_play_hdl = -1;
-int s_play_fd = -1;
-static pthread_t play_thread_play;
-
-#define PROMPT_START_RECORD "/bin/start_record_test.wav"
-#define RECORD_FILEPATH "/usrdata/test.wav"
-#define PROMPT_START_PLAY "/bin/start_play_test.wav"
-#define PROMPT_TEST_FINISH "/bin/test_end_test.wav"
-
-#if 1
-void dtmf_cb1(char dtmf)
-{
-    printf("%s:%c\n", __FUNCTION__, dtmf);
-}
-#endif
-
-int Ql_cb_playback(int hdl, int result)
-{
-    printf("%s: hdl=%d, result=%d\n\r", __func__, hdl, result);
-    if (result == AUD_PLAYER_FINISHED || result == AUD_PLAYER_NODATA)
-    {
-        printf("%s: play finished\n\r", __func__);
-    }
-    return 0;
-}
-
-int MBTK_wav_pcm16Le_check(int fd)
-{
-    struct wav_header hdr;
-
-    if (fd <= 0)
-        return -1;
-
-    if (read(fd, &hdr, sizeof(hdr)) != sizeof(hdr))
-    {
-        printf("\n%s: cannot read header\n", __FUNCTION__);
-        return -1;
-    }
-
-    if ((hdr.riff_id != ID_RIFF) || (hdr.riff_fmt != ID_WAVE) || (hdr.fmt_id != ID_FMT))
-    {
-        printf("\n%s: is not a riff/wave file\n", __FUNCTION__);
-        return -1;
-    }
-
-    if ((hdr.audio_format != FORMAT_PCM) || (hdr.fmt_sz != 16))
-    {
-        printf("\n%s: is not pcm format\n", __FUNCTION__);
-        return -1;
-    }
-
-    if (hdr.bits_per_sample != 16)
-    {
-        printf("\n%s: is not 16bit per sample\n", __FUNCTION__);
-        return -1;
-    }
-
-    return 0;
-}
-
-int PLT_Audio_StartPlay(char *filePath, int repeat_value)
-{
-    s_play_hdl = Ql_AudPlayer_Open(NULL, Ql_cb_playback);
-	if (0 == s_play_hdl) {
-		printf("Ql_AudPlayer_Open Failed...\n");
-		return -2;
-	}
-
-	s_play_fd = open(filePath, O_RDWR);
-	if (s_play_fd <= 0){
-		printf(" Open wavFilePath Failed\n");
-	    return -3 ;
-	}
-
-	mbtk_audio_path_enable(1);
-	if (0 == MBTK_wav_pcm16Le_check(s_play_fd)) {
-		Ql_AudPlayer_PlayFrmFile(s_play_hdl, s_play_fd, 0);
-	} else {
-		printf("aplay FileType error...\n");
-		close(s_play_fd);
-		return -4;
-	}
-	close(s_play_fd);
-	mbtk_audio_path_enable(0);
-	Ql_AudPlayer_Close(s_play_hdl);
-    s_play_hdl = -1;
-
-	printf("aplay End...\n");
-    return 0;
-}
-
-static void audio_play_thread(void *arg)
-{
-    PLT_Audio_StartPlay((char*)arg, 1);
-}
-
-static void sig_handler(int sig)
-{
-    if(s_play_hdl > 0) {
-        Ql_AudPlayer_Stop(s_play_hdl);
-        if (pthread_join(play_thread_play, NULL)) {
-            printf("error join play_recorder!\n");
-        }
-
-        mbtk_audio_mode_set(-2);
-        mbtk_audio_switch_pcm(0);
-        mbtk_audio_ubus_client_deinit(handler);
-    }
-
-    printf("Success exit by signal...\n");
-    exit(0);
-}
-
-
-int main(int argc, char* argv[])
-{
-    if(argc != 2) {
-        printf("audio_play_test <wav_file>\n");
-        return -1;
-    }
-
-    struct stat st;
-    const char *path = (const char *)argv[1];
-    // mbtk_log_init("radio", "MBTK_AUDIO");
-
-    /* Check and open source file */
-    if (access(path, F_OK) || stat(path, &st)) {
-        printf("%s: error reading from file %s\n", __FUNCTION__, path);
-        return -1;
-    }
-
-    if (!st.st_size) {
-        printf("%s: empty file %s\n", __FUNCTION__, path);
-        return -1;
-    }
-
-    signal(SIGINT, sig_handler);
-    signal(SIGTERM, sig_handler);
-    signal(SIGTSTP, sig_handler);
-
-    mbtk_audio_ubus_client_init(&handler, dtmf_cb1);
-    mbtk_audio_switch_pcm(1);
-    mbtk_audio_mode_set(2);
-
-    char cmd[100];
-    bool running = TRUE;
-    while(running)
-    {
-        memset(cmd, 0, 100);
-        int err;
-        printf("1 : Play    2 : Pause    3 : Resume    4 : Stop    Other : Exit\n");
-        if(fgets(cmd, 100, stdin))
-        {
-            if(cmd[0] == '\r' || cmd[0] == '\n')
-                continue;
-            int state = atoi(cmd);
-            switch(state){
-                case 1:
-                {
-                    if(s_play_hdl > 0) {
-                        break;
-                    }
-                    pthread_attr_t thread_attr;
-                    pthread_attr_init(&thread_attr);
-                    if(pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED))
-                    {
-                        printf("pthread_attr_setdetachstate() fail.\n");
-                        goto exit;
-                    }
-
-                    if (pthread_create(&play_thread_play, NULL, (void *)&audio_play_thread, path) < 0) {
-                        printf("%s: error creating thread_play!\n", __FUNCTION__);
-                        goto exit;
-                    }
-
-                    printf("Start play audio...\n");
-                    break;
-                }
-                case 2:
-                {
-                    if(s_play_hdl <= 0) {
-                        break;
-                    }
-                    Ql_AudPlayer_Pause(s_play_hdl);
-                    printf("Audio pause.\n");
-                    break;
-                }
-                case 3:
-                {
-                    if(s_play_hdl <= 0) {
-                        break;
-                    }
-                    Ql_AudPlayer_Resume(s_play_hdl);
-                    printf("Audio resume.\n");
-                    break;
-                }
-                case 4:
-                {
-                    if(s_play_hdl <= 0) {
-                        break;
-                    }
-                    Ql_AudPlayer_Stop(s_play_hdl);
-                    if (pthread_join(play_thread_play, NULL)) {
-                        printf("error join play_thread!\n");
-                    }
-                    s_play_hdl = -1;
-                    printf("Audio stop.\n");
-                    break;
-                }
-                default:
-                {
-                    running = FALSE;
-                    if(s_play_hdl <= 0) {
-                        break;
-                    }
-                    Ql_AudPlayer_Stop(s_play_hdl);
-                    if (pthread_join(play_thread_play, NULL)) {
-                        printf("error join play_thread!\n");
-                    }
-                }
-            }
-        }
-    }
-
-exit:
-
-    mbtk_audio_mode_set(-2);
-    mbtk_audio_switch_pcm(0);
-    mbtk_audio_ubus_client_deinit(handler);
-
-    printf("Success exit.\n");
-    return 0;
-}
-
diff --git a/mbtk/test/asr1803/mbtk_audio_set.c b/mbtk/test/asr1803/mbtk_audio_set.c
deleted file mode 100755
index 77ce01a..0000000
--- a/mbtk/test/asr1803/mbtk_audio_set.c
+++ /dev/null
@@ -1,101 +0,0 @@
-#include "mbtk_audio.h"
-#include <stdlib.h>
-
-static void help(int tag)
-{
-    printf("TAG : %d\n", tag);
-    printf("./mbtk_gain_set tx_codec/tx_dsp [gain]\n");
-    printf("./mbtk_gain_set rx_codec/rx_dsp [gain0] [value1] [gain2] [value3] [gain4] [value5] [gain6] [value7] [gain8] [value9] [value10]\n");
-    printf("./mbtk_gain_set reg [addr] [value]\n");
-}
-
-int main(int argc,char *argv[])
-{
-	int handler = 0;
-
-	if(argc < 3)
-	{
-        help(0);
-		return -1;
-	}
-
-    if(strcmp(argv[1], "reg") && strcmp(argv[1], "tx_codec")
-        && strcmp(argv[1], "tx_dsp") && strcmp(argv[1], "rx_codec")
-        && strcmp(argv[1], "rx_dsp")) {
-        help(1);
-        return -1;
-    }
-
-    if(strcmp(argv[1], "reg") == 0 && argc != 4) {
-        help(2);
-        return -1;
-    }
-
-    if(strcmp(argv[1], "tx_codec") == 0 && argc != 3) {
-        help(3);
-        return -1;
-    }
-
-    if(strcmp(argv[1], "tx_dsp") == 0 && argc != 3) {
-        help(4);
-        return -1;
-    }
-
-    if(strcmp(argv[1], "rx_codec") == 0 && argc != 13) {
-        help(5);
-        return -1;
-    }
-
-    if(strcmp(argv[1], "rx_dsp") == 0 && argc != 13) {
-        help(6);
-        return -1;
-    }
-
-    if(mbtk_audio_ubus_client_init(&handler, NULL)) {
-		printf("mbtk_audio_ubus_client_init fail.\n");
-		return -1;
-	}
-
-    if(strcmp(argv[1], "tx_codec") == 0 || strcmp(argv[1], "tx_dsp") == 0) {
-     	unsigned short gain[1];
-
-        gain[0] = (unsigned short)strtoul(argv[2], 0, 0);
-
-    	printf("Type:%s, gain:%d(0x%04x)\n", argv[1], gain[0], gain[0]);
-
-        if(strcmp(argv[1], "tx_codec") == 0) {
-            mbtk_audio_ubus_gain_set(AUDIO_GAIN_TYPE_TX_CODECGAIN, gain, 1);
-        } else {
-            mbtk_audio_ubus_gain_set(AUDIO_GAIN_TYPE_TX_DSPGAIN, gain, 1);
-        }
-    } else if(strcmp(argv[1], "rx_codec") == 0 || strcmp(argv[1], "rx_dsp") == 0) {
-    	unsigned short gain[11];
-
-        printf("Type:%s\n", argv[1]);
-
-        int i = 0;
-        for(;i < 11; i++) {
-    	    gain[i] = (unsigned short)strtoul(argv[2 + i], 0, 0);
-            printf("Gain[%d%%]:%d(0x%04x)\n", i * 10, gain[i], gain[i]);
-        }
-
-        if(strcmp(argv[1], "rx_codec") == 0) {
-            mbtk_audio_ubus_gain_set(AUDIO_GAIN_TYPE_RX_CODECGAIN, gain, 11);
-        } else {
-            mbtk_audio_ubus_gain_set(AUDIO_GAIN_TYPE_RX_DSPGAIN, gain, 11);
-        }
-    } else if(strcmp(argv[1], "reg") == 0) {
-        int value[2];
-        value[0] = (unsigned int)strtoul(argv[2], 0, 0);
-    	value[1] = (unsigned int)strtoul(argv[3], 0, 0);
-        mbtk_audio_ubus_reg_set(value[0], value[1]);
-    }
-
-	if(mbtk_audio_ubus_client_deinit(handler)) {
-		printf("mbtk_audio_ubus_client_init fail.\n");
-		return -1;
-	}
-
-    return 0;
-}
-
diff --git a/mbtk/test/asr1803/mbtk_dtmf_test.c b/mbtk/test/asr1803/mbtk_dtmf_test.c
deleted file mode 100755
index 7dd055f..0000000
--- a/mbtk/test/asr1803/mbtk_dtmf_test.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- *   \file dtmf_test.c
- *   \brief A Documented file.
- *
- *  Detailed description
- *   \Author:  js.wang <js.wang@mobiletek.cn>
- *   \Version: 1.0.0
- *   \Date: 2022-03-31
- */
-
-/******************************************************************************\
- *   Include files
-\******************************************************************************/
-#include <pthread.h>
-#include <time.h>
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdio.h>
-#include <signal.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <string.h>
-#include <stdlib.h>
-#include <poll.h>
-#include <stdlib.h>
-
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "mbtk_audio.h"
-
-void dtmf_cb(char dtmf)
-{
-    printf("%s:%c\n", __FUNCTION__, dtmf);
-}
-
-void audio_volume_cb(int volume)
-{
-    printf("%s:%d\n", __FUNCTION__, volume);
-}
-
-int main(int argc, char *argv[])
-{
-    char operator[10];
-    int opt;
-    mbtk_audio_client_handle_type dtmf_handle;
-
-
-    while(1)
-    {
-        printf("=========audio main=========\n"
-            "\t0 exit\n"
-            "\t1 audio init\n"
-            "\t2 audio get volume\n"
-            "\t3 audio set volume\n"
-            "\t4 audio deinit\n"
-            "operator: >> ");
-        fgets(operator, sizeof(operator), stdin);
-        fflush(stdin);
-        opt = atoi(operator);
-        switch (opt)
-        {
-        case 0:
-            printf("main exit\n");
-            return 0;
-        case 1:
-            mbtk_audio_ubus_client_init(&dtmf_handle, dtmf_cb);
-            break;
-        case 2:
-            mbtk_audio_ubus_volume_get(audio_volume_cb);
-            break;
-        case 3:
-            printf("please input volume (0~100): \n");
-            fgets(operator, sizeof(operator), stdin);
-            fflush(stdin);
-            opt = atoi(operator);
-            mbtk_audio_ubus_volume_set(opt);
-            break;
-        case 4:
-            mbtk_audio_ubus_client_deinit(dtmf_handle);
-            break;
-        default:
-            break;
-        }
-    }
-
-    return 0;
-}
-
diff --git a/mbtk/test/asr1803/ubus_cli_demo.c b/mbtk/test/asr1803/ubus_cli_demo.c
deleted file mode 100755
index 0b689c9..0000000
--- a/mbtk/test/asr1803/ubus_cli_demo.c
+++ /dev/null
@@ -1,163 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <libubox/blobmsg_json.h>
-#include "libubus.h"
-
-#include "audio_if_parameter.h"
-//#include <include/audio_if.h>
-//#include <include/audio_if_types.h>
-//#include <include/audio_if_ubus.h>
-
-#define LOG(fmt, args...) \
-    do{ \
-        printf("%s#%d: " fmt "\n", __FUNCTION__, __LINE__, ##args); \
-    } while(0)
-
-//User task
-static pthread_t        APP_MainLoopTask;
-
-/**********************************************************************\
-*   APP Global Variables for uBus
-\**********************************************************************/
-#define AUDIO_UBUS_ID            "audio_if"
-#define AUDIO_UBUS_AUDIO_GAIN_SET	"audio_gain_set"
-
-static struct ubus_context     *APP_ctx = NULL;
-static uint32_t  APP_audio_request_id;
-static struct blob_buf audio_cm_b;
-
-
-/**********************************************************************\
-*   Function:       APP_uBusInit
-*   Description:    init UBUS context
-*   Returns:        0 on success
-\**********************************************************************/
-static int APP_uBusInit(void)
-{
-    int rc = 0;
-
-    uloop_init();
-    APP_ctx = ubus_connect(NULL);
-    if (APP_ctx == NULL)
-    {
-        printf(" %s Failed to connect to ubus!\n", __FUNCTION__);
-        return -1;
-    }
-
-    ubus_add_uloop(APP_ctx);
-    // lookup audio_if until success
-    while(1)
-    {
-        rc = ubus_lookup_id(APP_ctx, AUDIO_UBUS_ID, & APP_audio_request_id);
-        if (0 != rc)
-        {
-            printf("%s, Failed to look up(%s), rc=%d\n", __FUNCTION__, AUDIO_UBUS_ID, rc);
-            usleep(100000); //100ms
-        }
-        else
-            break;
-    }
-    printf("%s, ubus_lookup_id(%s) OK\n", __FUNCTION__, AUDIO_UBUS_ID);
-    return 0;
-}
-
-static void  APP_Audio_GaniSet_cb(struct ubus_request *req, int rc)
-{
-    if (req)
-    {
-        free(req);
-        req = NULL;
-    }
-    printf("%s do nothing, rc=%d\n", __FUNCTION__, rc);
-}
-
-
-/**********************************************************************\
-*   Function:      APP_Audio_VolumeSet
-*   Description:   This function is called to send command into audio_if.
-*   unsigned int volume(0~100)
-*   Returns:        0 on success
-\**********************************************************************/
-static void  APP_Audio_GainSet(unsigned char *gain, int gain_num)
-{
-    int rc = 0;
-    struct ubus_request *req = NULL;
-
-    req = (struct ubus_request *)malloc(sizeof(struct ubus_request));
-    if (req == NULL)
-    {
-        printf("leave %s: lack of memory\n", __FUNCTION__);
-        return;
-    }
-    memset(req, 0, sizeof(struct ubus_request));
-    blob_buf_init(&audio_cm_b, 0);
-
-    char name[20];
-    int i = 0;
-    for(; i < gain_num; i++) {
-        memset(name, 0x0, 20);
-        sprintf(name, "volume_gain_%d", i);
-        blobmsg_add_u8(&audio_cm_b, name, gain[i]);
-    }
-
-#if 1
-    if ((rc = ubus_invoke_async(APP_ctx, APP_audio_request_id, AUDIO_UBUS_AUDIO_GAIN_SET, audio_cm_b.head, req)) != UBUS_STATUS_OK)
-    {
-        free(req);
-        printf("%s, ubus_invoke_async volume set failed: %s\n", __FUNCTION__,  ubus_strerror(rc));
-    }
-    else
-    {
-        printf("%s: ubus_invoke_async success\n", __FUNCTION__);
-        req->complete_cb = APP_Audio_GaniSet_cb;
-        ubus_complete_request_async(APP_ctx, req);
-    }
-#else
-    if ((rc = ubus_invoke(APP_ctx, APP_audio_request_id, AUDIO_UBUS_AUDIO_GAIN_SET, audio_cm_b.head, NULL, 0, 0)) != UBUS_STATUS_OK)
-    {
-        printf("%s, ubus_invoke_async volume set failed: %s\n", __FUNCTION__, ubus_strerror(rc));
-    }
-    else
-    {
-        printf("%s: ubus_invoke_async success\n", __FUNCTION__);
-    }
-    free(req);
-
-#endif
-}
-
-/**********************************************************************\
-*   Function:       main
-*   Description:    Main function of this APP.
-*   Returns:        0 on success
-\**********************************************************************/
-int main (int argc ,char *argv[])
-{
-    pthread_attr_t tattr;
-
-    /*Init ubus server*/
-    if(APP_uBusInit())
-        return -1;
-
-#if 0
-    /*Create thread to accept user choice*/
-    pthread_attr_init(&tattr);
-    pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
-    pthread_create(&APP_MainLoopTask, &tattr, (void *)APP_MainLoop, NULL);
-#else
-    unsigned char gain[] = {0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xa0};
-    APP_Audio_GainSet(gain, sizeof(gain));
-
-#endif
-
-    uloop_run();
-
-    printf("Here, uloop stopped!!!\n ");
-
-    /*unregister uloop*/
-    /* thread will get here only if uloop stopped*/
-    ubus_free(APP_ctx);
-    uloop_done();
-    return 0;
-}
-
diff --git a/mbtk/test/asr1803/yx_audio_test.c b/mbtk/test/asr1803/yx_audio_test.c
deleted file mode 100755
index 740f152..0000000
--- a/mbtk/test/asr1803/yx_audio_test.c
+++ /dev/null
@@ -1,285 +0,0 @@
-#include "mbtk_type.h"
-#include <fcntl.h>
-#include <stdint.h>
-#include <limits.h>
-#include <termios.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <signal.h>
-// #include "ql_at.h"
-#include "ql/ql_audio.h"
-// #include "mopen_tts.h"
-
-#define MBTK_PLAY_PA_CONTROL 1
-#define MBTK_RECV_PA_CONTROL 1
-
-static int record_fd = -1;
-static int play_hdl = 0;
-static int gpio33_fd = -1;
-static int gpio34_fd = -1;
-
-int Ql_cb_playback(int hdl, int result)
-{
-    printf("%s: hdl=%d, result=%d\n\r", __func__, hdl, result);
-    if (result == AUD_PLAYER_FINISHED || result == AUD_PLAYER_NODATA)
-    {
-        printf("%s: play finished\n\r", __func__);
-    }
-    return 0;
-}
-
-void record_cb_func(int cb_result, char* databuf, unsigned int len)
-{
-    int rc;
-
-    if(NULL != databuf && len > 0 && record_fd > 0)
-    {
-        //for debug:save into file
-        rc = write(record_fd, databuf, len);
-        if (rc < 0) {
-            printf("%s: error writing to file!\n", __FUNCTION__);
-        } else if (rc < len) {
-            printf("%s: wrote less the buffer size!\n", __FUNCTION__);
-        }
-    }
-}
-
-int MBTK_wav_pcm16Le_check(int fd)
-{
-    struct wav_header hdr;
-
-    if (fd <= 0)
-        return -1;
-
-    if (read(fd, &hdr, sizeof(hdr)) != sizeof(hdr))
-    {
-        printf("\n%s: cannot read header\n", __FUNCTION__);
-        return -1;
-    }
-
-    if ((hdr.riff_id != ID_RIFF)
-            || (hdr.riff_fmt != ID_WAVE)
-            || (hdr.fmt_id != ID_FMT))
-    {
-        printf("\n%s: is not a riff/wave file\n", __FUNCTION__);
-        return -1;
-    }
-
-    if ((hdr.audio_format != FORMAT_PCM) || (hdr.fmt_sz != 16)) {
-        printf("\n%s: is not pcm format\n", __FUNCTION__);
-        return -1;
-    }
-
-    if (hdr.bits_per_sample != 16) {
-        printf("\n%s: is not 16bit per sample\n", __FUNCTION__);
-        return -1;
-    }
-
-    return 0;
-}
-
-static void audio_pa_open()
-{
-    if(gpio34_fd > 0) {
-        write(gpio34_fd, "1", 1);
-    }
-
-    if(gpio33_fd > 0) {
-        write(gpio33_fd, "0", 1);
-    }
-}
-
-static void audio_pa_close()
-{
-    if(gpio34_fd > 0) {
-        write(gpio34_fd, "0", 1);
-    }
-
-    if(gpio33_fd > 0) {
-        write(gpio33_fd, "1", 1);
-    }
-}
-
-int MBTK_wav_pcm16Le_set(int fd)
-{
-    struct wav_header hdr;
-
-    if (fd <= 0)
-        return -1;
-
-    memset(&hdr, 0, sizeof(struct wav_header));
-
-    hdr.riff_id = ID_RIFF;
-    hdr.riff_fmt = ID_WAVE;
-    hdr.fmt_id = ID_FMT;
-    hdr.fmt_sz = 16;
-    hdr.audio_format = FORMAT_PCM;
-    hdr.num_channels = 1;
-    hdr.sample_rate = 8000;
-    hdr.bits_per_sample = 16;
-    hdr.byte_rate = (8000 * 1 * hdr.bits_per_sample) / 8;
-    hdr.block_align = (hdr.bits_per_sample * 1) / 8;
-    hdr.data_id = ID_DATA;
-    hdr.data_sz = 0;
-
-    hdr.riff_sz = hdr.data_sz + 44 - 8;
-    if (write(fd, &hdr, sizeof(hdr)) != sizeof(hdr)) {
-        return -1;
-    }
-
-    return 0;
-}
-
-static int play(const char *path)
-{
-    int fd = open(path, O_RDONLY);
-    if(fd < 0) {
-        printf("open(%s) fail:%d\n", path, errno);
-        return -1;
-    }
-
-#if MBTK_PLAY_PA_CONTROL
-    audio_pa_close();
-#endif
-
-    play_hdl = Ql_AudPlayer_Open(NULL, Ql_cb_playback);
-    if(0 == play_hdl) {
-        printf("Ql_AudPlayer_Open fail\n");
-        close(fd);
-        return -1;
-    }
-
-    if(MBTK_wav_pcm16Le_check(fd)) {
-        printf("MBTK_wav_pcm16Le_check() fail.\n");
-        goto fail;
-    }
-
-#if MBTK_PLAY_PA_CONTROL
-    audio_pa_open();
-#endif
-    if(Ql_AudPlayer_PlayFrmFile(play_hdl, fd, 0)) {
-        printf("Ql_AudPlayer_PlayFrmFile() fail.\n");
-        goto fail;
-    }
-
-    if(play_hdl) {
-#if MBTK_PLAY_PA_CONTROL
-        audio_pa_close();
-#endif
-        printf("Play complete.\n");
-        Ql_AudPlayer_Close(play_hdl);
-#if MBTK_PLAY_PA_CONTROL
-        audio_pa_open();
-#endif
-        play_hdl = 0;
-    }
-    close(fd);
-    return 0;
-fail:
-    Ql_AudPlayer_Close(play_hdl);
-    close(fd);
-    return -1;
-}
-
-static int recv(const char *path)
-{
-    record_fd = open(path, O_RDWR|O_CREAT|O_TRUNC, 0644);
-    if(record_fd < 0) {
-        printf("open(%s) fail:%d\n", path, errno);
-        return -1;
-    }
-#if MBTK_RECV_PA_CONTROL
-    audio_pa_close();
-#endif
-
-    int hdl = Ql_AudRecorder_Open(NULL, record_cb_func);
-    if(0 == hdl) {
-        printf("Ql_AudRecorder_Open fail\n");
-        close(record_fd);
-        record_fd = -1;
-        return -1;
-    }
-
-    if(MBTK_wav_pcm16Le_set(record_fd)) {
-        printf("MBTK_wav_pcm16Le_set() fail.\n");
-        goto fail;
-    }
-#if MBTK_RECV_PA_CONTROL
-    audio_pa_open();
-#endif
-    if(Ql_AudRecorder_StartRecord()) {
-        printf("Ql_AudRecorder_StartRecord() fail.\n");
-        goto fail;
-    }
-    sleep(10);
-#if MBTK_RECV_PA_CONTROL
-    audio_pa_close();
-#endif
-    Ql_AudRecorder_Close();
-#if MBTK_RECV_PA_CONTROL
-    audio_pa_open();
-#endif
-    printf("Recorder complete.\n");
-    close(record_fd);
-    record_fd = -1;
-    return 0;
-fail:
-    Ql_AudRecorder_Close();
-    close(record_fd);
-    record_fd = -1;
-    return -1;
-}
-
-static void sig_handler(int sig)
-{
-    printf("output signal number: %d.\n", sig);
-    if(play_hdl) {
-        Ql_AudPlayer_Stop(play_hdl);
-    }
-}
-
-static void help()
-{
-    printf("yx_audio_test play/recv file_name\n");
-}
-
-int main(int argc, char *argv[])
-{
-    if(argc != 3) {
-        help();
-        return -1;
-    }
-
-    signal(SIGINT, sig_handler);
-    signal(SIGTERM, sig_handler);
-    signal(SIGTSTP, sig_handler);
-    if(access("/sys/class/gpio/gpio33/value", F_OK)) {
-        system("echo 33 > /sys/class/gpio/export");
-        system("echo out > /sys/class/gpio/gpio33/direction");
-    }
-    gpio33_fd = open("/sys/class/gpio/gpio33/value", O_RDWR);
-
-    if(access("/sys/class/gpio/gpio34/value", F_OK)) {
-        system("echo 34 > /sys/class/gpio/export");
-        system("echo out > /sys/class/gpio/gpio34/direction");
-    }
-    gpio34_fd = open("/sys/class/gpio/gpio34/value", O_RDWR);
-
-    int ret = -1;
-    if(!strcmp(argv[1], "play")) {
-        ret = play(argv[2]);
-    } else if(!strcmp(argv[1], "recv")) {
-        ret = recv(argv[2]);
-    } else {
-        help();
-    }
-
-    if(gpio34_fd > 0) {
-        close(gpio34_fd);
-    }
-
-    if(gpio33_fd > 0) {
-        close(gpio33_fd);
-    }
-    return ret;
-}
diff --git a/mbtk/test/at.c b/mbtk/test/at.c
deleted file mode 100755
index c69ba82..0000000
--- a/mbtk/test/at.c
+++ /dev/null
@@ -1,652 +0,0 @@
-#include <termios.h>
-#include <pthread.h>
-#include <sys/un.h>
-#include <stdio.h>
-#include <sys/socket.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <string.h>
-#include <sys/epoll.h>
-#include <netinet/in.h>
-#include <signal.h>
-#include <unistd.h>
-#include <sys/select.h>
-
-#include "ql/ql_uart.h"
-#include "mbtk_type.h"
-
-//#define AT_TYPE_SOCKET
-#define MBTK_LOG
-
-#ifdef MBTK_LOG
-#include "mbtk_log.h"
-#else
-#define LOGE printf
-#define LOGD printf
-#define LOGV printf
-#define LOGI printf
-#endif
-
-#define DATABITS	CS8
-#define STOPBITS	0
-#define PARITYON        0
-#define PARITY          0
-
-typedef enum {
-    AT_MODE_SOCK_1 = 0,
-    AT_MODE_SOCK_2,
-    AT_MODE_DEV_1,
-    AT_MODE_DEV_2
-} at_mode_enum;
-
-static int epoll_fd = -1;
-static struct epoll_event epoll_events[20];
-static int at_fd = -1;
-static at_mode_enum at_mode = AT_MODE_SOCK_1;
-
-static char *at_rsp_complete_tag[] = {
-        "OK",
-        "ERROR",
-        "CONNECT",
-		"+CMS ERROR:",
-		"+CME ERROR:",
-		"NO ANSWER",
-		"NO DIALTONE",
-		NULL};
-
-//#ifdef AT_TYPE_SOCKET
-#define TEMP_FAILURE_RETRY(exp) ({         \
-    typeof (exp) _rc;                      \
-    do {                                   \
-        _rc = (exp);                       \
-    } while (_rc == -1 && errno == EINTR); \
-    _rc; })
-//#endif
-
-static void at_epoll_change(int is_add,int fd)
-{
-    struct epoll_event ev;
-    memset(&ev,0x0,sizeof(struct epoll_event));
-    ev.data.fd = fd;
-    ev.events = EPOLLIN | EPOLLET;
-    if(is_add)
-    {
-        epoll_ctl(epoll_fd,EPOLL_CTL_ADD,fd,&ev);
-    }
-    else
-    {
-        epoll_ctl(epoll_fd,EPOLL_CTL_DEL,fd,&ev);
-    }
-}
-
-static int at_set_fd_noblock(int fd)
-{
-    // Set O_NONBLOCK
-    int flags = fcntl(fd, F_GETFL, 0);
-    if (flags < 0) {
-        LOGE("Get flags error:%s\n", strerror(errno));
-        return -1;
-    }
-    flags |= O_NONBLOCK;
-    if (fcntl(fd, F_SETFL, flags) < 0) {
-        LOGE("Set flags error:%s\n", strerror(errno));
-        return -1;
-    }
-
-    return 0;
-}
-
-//#ifdef AT_TYPE_SOCKET
-int openSocket(const char* sockname)
-{
-	int sock = socket(AF_UNIX, SOCK_STREAM, 0);
-	if (sock < 0) {
-		LOGE("Error create socket: %s\n", strerror(errno));
-		return -1;
-	}
-	struct sockaddr_un addr;
-	memset(&addr, 0, sizeof(addr));
-	addr.sun_family = AF_UNIX;
-	strncpy(addr.sun_path, sockname, sizeof(addr.sun_path));
-	while (TEMP_FAILURE_RETRY(connect(sock,(const struct sockaddr*)&addr, sizeof(addr))) != 0) {
-		LOGE("Error connect to socket %s: %s, try again", sockname, strerror(errno));
-		sleep(1);
-	}
-
-#if 0
-	int sk_flags = fcntl(sock, F_GETFL, 0);
-	fcntl(sock, F_SETFL, sk_flags | O_NONBLOCK);
-#endif
-
-	return sock;
-}
-
-//#else
-
-static int at_open(char *dev)
-{
-    // Init USB PC port.
-    struct termios ser_settings;
-    int fd = -1;
-
-usb_pc_init:
-    fd = open(dev,O_RDWR);
-    if(fd <= 0)
-    {
-        if(errno == ENODEV)
-        {
-            LOGD("Wait dev[%s] ready...",dev);
-            usleep(500000);
-            goto usb_pc_init;
-        }
-
-        LOGE("Cannot open USB PC port[%s] - [errno = %d]",dev,errno);
-        return -1;
-    }
-
-    tcgetattr(fd, &ser_settings);
-    cfmakeraw(&ser_settings);
-    //ser_settings.c_lflag |= (ECHO | ECHONL);
-    //ser_settings.c_lflag &= ~ECHOCTL;
-    tcsetattr(fd, TCSANOW, &ser_settings);
-
-#if 0
-    if(at_set_fd_noblock(at_fd))
-    {
-        LOGE("at_set_fd_noblock() fail.");
-        return -1;
-    }
-
-    at_epoll_change(1, at_fd);
-#endif
-
-    return fd;
-}
-//#endif
-
-static int adb_port_open(const char *dev, unsigned int baud)
-{
-	int fd;
-
-	while((fd = open(dev, O_RDWR)) < 0)
-	{
-		printf("%s: open %s failed\n", __func__, dev);
-		sleep(1);
-	}
-
-	/* set newtio */
-	struct termios newtio;
-	memset(&newtio, 0, sizeof(newtio));
-#if 0
-	(void)fcntl(fd, F_SETFL, 0);
-	newtio.c_cflag = BAUD | DATABITS | STOPBITS | PARITYON | PARITY | CLOCAL | CREAD;
-	newtio.c_iflag = IGNPAR;
-	newtio.c_oflag = 0;
-	newtio.c_lflag = 0;    /* disable ECHO, ICANON, etc... */
-
-	newtio.c_cc[VERASE]   = 0x8;      /* del */
-	newtio.c_cc[VEOF]     = 4;      /* Ctrl-d */
-	newtio.c_cc[VMIN]     = 1;      /* blocking read until 1 character arrives */
-	newtio.c_cc[VEOL]     = 0xD;      /* '\0' */
-
-	tcflush(fd, TCIFLUSH);
-	tcsetattr(fd, TCSANOW, &newtio);
-#else
-	if (tcflush(fd, TCIOFLUSH) < 0) {
-		printf("Could not flush uart port\n");
-		return -1;
-	}
-
-    newtio.c_cc[VTIME]    = 0;   /* inter-character timer unused */
-    newtio.c_cc[VMIN]	   = 1;   /* blocking read until 5 chars received */
-    newtio.c_cflag |= (CS8 | CLOCAL | CREAD);
-    newtio.c_iflag = IGNPAR;
-    newtio.c_oflag = 0;
-    newtio.c_lflag = 0;
-
-	int rate = baud;  // Default bitrate.
-	switch(rate)
-	{
-		case 300:
-			cfsetospeed(&newtio, B300);
-			cfsetispeed(&newtio, B300);
-			break;
-		case 600:
-			cfsetospeed(&newtio, B600);
-			cfsetispeed(&newtio, B600);
-			break;
-		case 1200:
-			cfsetospeed(&newtio, B1200);
-			cfsetispeed(&newtio, B1200);
-			break;
-		case 2400:
-			cfsetospeed(&newtio, B2400);
-			cfsetispeed(&newtio, B2400);
-			break;
-		case 4800:
-			cfsetospeed(&newtio, B4800);
-			cfsetispeed(&newtio, B4800);
-			break;
-		case 9600:
-			cfsetospeed(&newtio, B9600);
-			cfsetispeed(&newtio, B9600);
-			break;
-		case 19200:
-			cfsetospeed(&newtio, B19200);
-			cfsetispeed(&newtio, B19200);
-			break;
-		case 38400:
-			cfsetospeed(&newtio, B38400);
-			cfsetispeed(&newtio, B38400);
-			break;
-		case 57600:
-			cfsetospeed(&newtio, B57600);
-			cfsetispeed(&newtio, B57600);
-			break;
-		case 115200:
-			cfsetospeed(&newtio, B115200);
-			cfsetispeed(&newtio, B115200);
-			break;
-		case 230400:
-			cfsetospeed(&newtio, B230400);
-			cfsetispeed(&newtio, B230400);
-			break;
-		case 460800:
-			cfsetospeed(&newtio, B460800);
-			cfsetispeed(&newtio, B460800);
-			break;
-		case 921600:
-			cfsetospeed(&newtio, B921600);
-			cfsetispeed(&newtio, B921600);
-			break;
-		case 1500000:
-			cfsetospeed(&newtio, B1500000);
-			cfsetispeed(&newtio, B1500000);
-			break;
-		case 2000000:
-			cfsetospeed(&newtio, B2000000);
-			cfsetispeed(&newtio, B2000000);
-			break;
-		case 3000000:
-			cfsetospeed(&newtio, B3000000);
-			cfsetispeed(&newtio, B3000000);
-			break;
-		case 4000000:
-			cfsetospeed(&newtio, B4000000);
-			cfsetispeed(&newtio, B4000000);
-			break;
-		default:
-			cfsetospeed(&newtio, B115200);
-			cfsetispeed(&newtio, B115200);
-			break;
-	}
-
-	if (tcsetattr(fd, TCSANOW, &newtio) < 0) {
-		printf("Can't set port setting\n");
-		return -1;
-	}
-	/* Blocking behavior */
-	fcntl(fd, F_SETFL, 0);
-#endif
-
-    return fd;
-}
-
-
-static void signal_process(int signal_num) {
-    if(at_fd > 0) {
-        close(at_fd);
-    }
-#ifdef MBTK_LOG
-    LOGD("Exit by sig - %d\n", signal_num);
-#endif
-    exit(0);
-}
-
-static void* read_thread_run( void *arg)
-{
-    //UNUSED(arg);
-
-    char at_rsp[1024];
-    char *ptr;
-    int index;
-    int len;
-    while(at_fd > 0) {
-        memset(at_rsp, 0x0, 1024);
-        index = 0;
-        len = 0;
-        while(1) {
-            if((len = read(at_fd, at_rsp + index, 1024)) > 0) {
-                ptr = at_rsp;
-                while(*ptr == '\r' || *ptr == '\n')
-                {
-                    ptr++;
-                }
-                if(strlen(ptr) > 0 && ptr[strlen(ptr) - 1] == '\n') {
-                    printf("<%s\n", ptr);
-#ifdef MBTK_LOG
-                    LOGV("RSP:%s", ptr);
-#endif
-
-                    break;
-                } else {
-                    index += len;
-                }
-            } else {
-                LOGE("Read error:%d",errno);
-                return NULL;
-            }
-        }
-    }
-
-    LOGD("read_thread_run() exit.\n");
-    return NULL;
-}
-
-static int read_thread_start()
-{
-    pthread_t tid;
-    pthread_attr_t attr;
-    pthread_attr_init (&attr);
-    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-    int ret = pthread_create(&tid, &attr, read_thread_run, &attr);
-    if (ret < 0)
-    {
-        LOGE("pthread_create\n");
-        return -1;
-    }
-
-    return 0;
-}
-
-static int at_complete(char *rsp)
-{
-#if 0
-    char *ptr = at_rsp_complete_tag;
-    while(ptr) {
-        LOGD("ptr = %s", ptr);
-        if(strstr(rsp, ptr)) {
-            LOGD("%s , %s", rsp, ptr);
-            return 1;
-        }
-        ptr++;
-    }
-#else
-    int i = 0;
-    while(at_rsp_complete_tag[i]) {
-        LOGD("ptr = %s", at_rsp_complete_tag[i]);
-        if(strstr(rsp, at_rsp_complete_tag[i])) {
-            LOGD("%s , %s", rsp, at_rsp_complete_tag[i]);
-            return 1;
-        }
-        i++;
-    }
-
-#endif
-    return 0;
-}
-
-static void at_rsp_read()
-{
-    char at_rsp[1024];
-    int len = 0;
-    while(1) {
-        memset(at_rsp, 0x0, 1024);
-        if((len = read(at_fd, at_rsp, 1024)) > 0) {
-            printf("%s", at_rsp);
-            if(at_complete(at_rsp)) {
-                break;
-            }
-        } else {
-            printf("Read error:%d\n",errno);
-            break;
-        }
-    }
-}
-
-static void help()
-{
-    printf("at : Enter AT mode(Socket).\n");
-    printf("at <at_cmd>: Send AT command(Socket).\n");
-    printf("at <dev>: Enter AT mode(Device).\n");
-    printf("at <dev> echo: ´®¿ÚÊý¾Ý»ØÏÔ¡£\n");
-    printf("at <dev> <at_cmd>: Send AT command(Device).\n");
-}
-
-static void sig_process(int sig)
-{
-    LOGI("I got signal %d\n", sig);
-    switch(sig)
-    {
-        case SIGINT: // Ctrl + C
-        {
-            LOGI("Exit by SIGINT.\n");
-            exit(0);
-        }
-        case SIGQUIT: // Ctrl + \ (ÀàËÆ SIGINT £¬µ«Òª²úÉúcoreÎļþ)
-        {
-            LOGI("Exit by SIGQUIT.\n");
-            exit(0);
-        }
-        case SIGTERM:// ĬÈÏkill   (ͬ SIGKILL £¬µ« SIGKILL ²»¿É²¶»ñ)
-        {
-            LOGI("Exit by SIGTERM.\n");
-            exit(0);
-        }
-        case SIGTSTP:// Ctrl + Z (ͬ SIGSTOP £¬µ« SIGSTOP ²»¿É²¶»ñ)
-        {
-            LOGI("Exit by SIGTSTP.\n");
-            exit(0);
-        }
-        case SIGSEGV: // Èç¿ÕÖ¸Õë
-        {
-            LOGI("Exit by SIGSEGV.\n");
-            exit(0);
-        }
-        default:
-        {
-            LOGI("Unknown sig:%d\n",sig);
-            break;
-        }
-    }
-}
-
-int main(int argc, char *argv[])
-{
-    //UNUSED(argc);
-    //UNUSED(argv);
-    signal(SIGINT, sig_process);
-    signal(SIGQUIT, sig_process);
-    signal(SIGTERM, sig_process);
-    //signal(SIGTSTP, sig_process);
-    //signal(SIGSEGV, sig_process);
-
-#ifdef MBTK_LOG
-    mbtk_log_init("radio", "MBTK_AT");
-    LOGI("mbtk_at start.");
-#endif
-
-    signal(SIGKILL, signal_process);
-    signal(SIGINT, signal_process);
-    signal(SIGQUIT, signal_process);
-    signal(SIGTERM, signal_process);
-
-    char *at_cmd = NULL;
-    bool echo = FALSE;
-    if(argc == 1) {
-        at_mode = AT_MODE_SOCK_1;
-    } else if(argc == 2) {
-        if(!strncasecmp(argv[1], "at", 2)) {
-            at_mode = AT_MODE_SOCK_2;
-            at_cmd = argv[1];
-        } else if(!strncasecmp(argv[1], "/dev/", 5)) {
-            at_mode = AT_MODE_DEV_1;
-        } else {
-            help();
-            return -1;
-        }
-    } else if(argc == 3) {
-        if(!strncasecmp(argv[1], "/dev/", 5) && (!strncasecmp(argv[2], "at", 2) || !strncasecmp(argv[2], "echo", 4))) {
-            at_mode = AT_MODE_DEV_2;
-            if(!strncasecmp(argv[2], "at", 2)) {
-                at_cmd = argv[2];
-            } else {
-                echo = TRUE;
-            }
-        } else {
-            help();
-            return -1;
-        }
-    } else {
-        help();
-        return -1;
-    }
-#if 0
-#ifdef AT_TYPE_SOCKET
-    at_fd = openSocket("/tmp/atcmdmbtk");
-#else
-	at_fd = at_open(argv[1]);
-#endif
-    if(at_fd > 0) {
-#ifdef AT_TYPE_SOCKET
-        if(argc > 1) {
-            char *at_cmd = argv[1];
-#else
-	    if(argc > 2) {
-            char *at_cmd = argv[2];
-#endif
-#endif
-
-    if(at_mode == AT_MODE_SOCK_1 || at_mode == AT_MODE_SOCK_2) {
-        at_fd = openSocket("/tmp/atcmdmbtk");
-    } else {
-#if 0
-        at_fd = at_open(argv[1]);
-#else
-        if(echo) {
-            at_fd = adb_port_open(argv[1], 115200);
-        } else {
-            at_fd = at_open(argv[1]);
-        }
-#endif
-    }
-    if(at_fd > 0) {
-        if(at_cmd != NULL) {
-            char *ptr = at_cmd + strlen(at_cmd) - 1;
-            while(ptr >= at_cmd && (*ptr == '\r' || *ptr == '\n'))
-            {
-                *ptr-- = '\0';
-            }
-            // printf("AT:[%ld]%s\n", strlen(at_cmd), at_cmd);
-            if(!strncasecmp(at_cmd, "at", 2))
-            {
-                *(++ptr) = '\r';
-                *(++ptr) = '\n';
-                if(write(at_fd, at_cmd, strlen(at_cmd)) <= 0) {
-                    printf("Write error:%d\n", errno);
-                } else {
-                    // Read response.
-                    at_rsp_read();
-                }
-            } else {
-                printf("AT error!\n");
-            }
-        } else {
-            if(echo) {
-                char read_buff[1024];
-                char write_buff[1024];
-                int len;
-#if 0
-                fd_set fds;
-                int fdcount, nfds = 0;
-                while(1) {
-                    FD_SET(at_fd, &fds);
-        		    if(at_fd > nfds)
-        			    nfds = at_fd;
-
-                    fdcount = select(nfds + 1, &fds, NULL, NULL, NULL);
-        			if(fdcount < 0) /* error */
-        			{
-        				printf("select returned %d, errno %d, continue\r", fdcount, errno);
-        				sleep(1);
-        				continue;
-        			}
-
-        			if(FD_ISSET(at_fd, &fds))
-        			{
-                        FD_CLR(at_fd, &fds);
-                        memset(read_buff, 0x0, 1024);
-                        if((len = read(at_fd, read_buff, 1024)) > 0) {
-                            memset(write_buff, 0x0, 1024);
-                            printf("%s\n", read_buff);
-                            len = snprintf(write_buff, 1024, "%s\n", read_buff);
-                            write(at_fd, write_buff, len);
-                        } else {
-                            printf("Read error:%d\n",errno);
-                            return NULL;
-                        }
-                    }
-                }
-#else
-                printf("Waitting data!!!\n");
-                while(1) {
-                    memset(read_buff, 0x0, 1024);
-                    if((len = read(at_fd, read_buff, 1024)) > 0) {
-                        memset(write_buff, 0x0, 1024);
-                        printf("%s\n", read_buff);
-                        len = snprintf(write_buff, 1024, "%s\n", read_buff);
-                        write(at_fd, write_buff, len);
-                    } else {
-                        printf("Read error:%d\n",errno);
-                        return NULL;
-                    }
-                }
-#endif
-            } else {
-                setbuf(stdout, NULL);
-                read_thread_start();
-                char at_cmd[100];
-                //printf(">>");
-                while(1)
-                {
-                    memset(at_cmd, 0x0, 100);
-                    if(fgets(at_cmd, 100, stdin))
-                    {
-                        char *ptr = at_cmd + strlen(at_cmd) - 1;
-                        while(ptr >= at_cmd && (*ptr == '\r' || *ptr == '\n'))
-                        {
-                            *ptr-- = '\0';
-                        }
-                        // printf("AT:[%ld]%s\n", strlen(at_cmd), at_cmd);
-                        if(!strncasecmp(at_cmd, "at", 2))
-                        {
-                            *(++ptr) = '\r';
-                            *(++ptr) = '\n';
-                            if(write(at_fd, at_cmd, strlen(at_cmd)) <= 0) {
-                                LOGE("Write error:%d",errno);
-                                break;
-                            }
-                            printf(">%s",at_cmd);
-#ifdef MBTK_LOG
-                            LOGV("AT:%s",at_cmd);
-#endif
-                        } else if(!strcasecmp(at_cmd, "q")) {
-                            break;
-                        } else {
-                            printf("\n");
-                        }
-                    }
-                }
-            }
-        }
-
-        close(at_fd);
-
-#ifdef MBTK_LOG
-        LOGD("EXIT");
-#endif
-    }
-
-    return 0;
-}
diff --git a/mbtk/test/device_info.c b/mbtk/test/device_info.c
deleted file mode 100755
index 3dd9b2a..0000000
--- a/mbtk/test/device_info.c
+++ /dev/null
@@ -1,56 +0,0 @@
-#include "mbtk_device.h"
-
-static char* band_2_str(mbtk_modem_band_area_enum band_area)
-{
-    switch(band_area)
-    {
-        case MBTK_MODEM_BAND_AREA_CN:
-            return "CN";
-        case MBTK_MODEM_BAND_AREA_EU:
-            return "EU";
-        default:
-            return "ALL";
-    }
-}
-
-int main(int argc, char *argv[])
-{
-    mbtk_device_info_basic_t info_basic;
-    memset(&info_basic, 0, sizeof(mbtk_device_info_basic_t));
-    int result = mbtk_dev_info_read(MBTK_DEVICE_INFO_ITEM_BASIC, &info_basic, sizeof(mbtk_device_info_basic_t));
-    if(result) {
-        printf("mbtk_dev_info_read(BASIC) fail.\n");
-        return -1;
-    }
-
-    /*
-    uint8 project[16];          // T108 / L508_X6
-        uint8 project_cust[16];     // T108_C1 / L508_X6_C1  (Refer to: Custom_Model in blf file.)
-        uint32 ab_support;          // 1 for ab
-        uint8 revision_out[48];     // L508_X6v01.01b04.00
-        uint8 revision_in[64];
-    */
-    printf("Project:%s\n", info_basic.project);
-    printf("Custom_Model:%s\n", info_basic.project_cust);
-    printf("Revision_Out:%s\n", info_basic.revision_out);
-    printf("Revision_In:%s\n", info_basic.revision_in);
-    printf("AB System:%s\n", info_basic.ab_support ? "Yes" : "No");
-
-    mbtk_device_info_modem_t info_modem;
-    memset(&info_modem, 0, sizeof(mbtk_device_info_modem_t));
-    result = mbtk_dev_info_read(MBTK_DEVICE_INFO_ITEM_MODEM, &info_modem, sizeof(mbtk_device_info_modem_t));
-    if(result) {
-        printf("mbtk_dev_info_read(MODEM) fail.\n");
-        return -1;
-    }
-
-    printf("Band:%s\n", band_2_str(info_modem.band_area));
-    printf("Band GSM:0x%08x\n", info_modem.band_gsm);
-    printf("Band WCDMA:0x%08x\n", info_modem.band_wcdma);
-    printf("Band TDLTE:0x%08x\n", info_modem.band_tdlte);
-    printf("Band FDDLTE:0x%08x\n", info_modem.band_fddlte);
-
-    return 0;
-}
-
-
diff --git a/mbtk/test/liblynq_lib/Makefile b/mbtk/test/liblynq_lib/Makefile
new file mode 100755
index 0000000..55e0360
--- /dev/null
+++ b/mbtk/test/liblynq_lib/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS += -lmbtk_lib -lmbtk_ril -lmbtk_net -lmbtk_audio -lmbtk_fota -lmbtk_gnss -lmbtk_factory -llynq_lib
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/fota_test.c b/mbtk/test/liblynq_lib/fota_test.c
similarity index 100%
rename from mbtk/test/fota_test.c
rename to mbtk/test/liblynq_lib/fota_test.c
diff --git a/mbtk/test/asr1806/lynq-audio-demo.cpp b/mbtk/test/liblynq_lib/lynq-audio-demo.cpp
similarity index 100%
rename from mbtk/test/asr1806/lynq-audio-demo.cpp
rename to mbtk/test/liblynq_lib/lynq-audio-demo.cpp
diff --git a/mbtk/test/asr1806/lynq_call_test.c b/mbtk/test/liblynq_lib/lynq_call_test.c
similarity index 100%
rename from mbtk/test/asr1806/lynq_call_test.c
rename to mbtk/test/liblynq_lib/lynq_call_test.c
diff --git a/mbtk/test/asr1806/lynq_chip_id.c b/mbtk/test/liblynq_lib/lynq_chip_id.c
similarity index 100%
rename from mbtk/test/asr1806/lynq_chip_id.c
rename to mbtk/test/liblynq_lib/lynq_chip_id.c
diff --git a/mbtk/test/lynq_log_test.c b/mbtk/test/liblynq_lib/lynq_log_test.c
similarity index 100%
rename from mbtk/test/lynq_log_test.c
rename to mbtk/test/liblynq_lib/lynq_log_test.c
diff --git a/mbtk/test/asr1806/lynq_nw_test.c b/mbtk/test/liblynq_lib/lynq_nw_test.c
similarity index 100%
rename from mbtk/test/asr1806/lynq_nw_test.c
rename to mbtk/test/liblynq_lib/lynq_nw_test.c
diff --git a/mbtk/test/asr1806/lynq_qser_sms_test.c b/mbtk/test/liblynq_lib/lynq_qser_sms_test.c
similarity index 100%
rename from mbtk/test/asr1806/lynq_qser_sms_test.c
rename to mbtk/test/liblynq_lib/lynq_qser_sms_test.c
diff --git a/mbtk/test/asr1806/lynq_sleep_test.c b/mbtk/test/liblynq_lib/lynq_sleep_test.c
similarity index 100%
rename from mbtk/test/asr1806/lynq_sleep_test.c
rename to mbtk/test/liblynq_lib/lynq_sleep_test.c
diff --git a/mbtk/test/asr1806/lynq_time_test.c b/mbtk/test/liblynq_lib/lynq_time_test.c
similarity index 100%
rename from mbtk/test/asr1806/lynq_time_test.c
rename to mbtk/test/liblynq_lib/lynq_time_test.c
diff --git a/mbtk/test/asr1806/qser_data_call_test.c b/mbtk/test/liblynq_lib/qser_data_call_test.c
similarity index 100%
rename from mbtk/test/asr1806/qser_data_call_test.c
rename to mbtk/test/liblynq_lib/qser_data_call_test.c
diff --git a/mbtk/test/asr1806/qser_gnss_test.c b/mbtk/test/liblynq_lib/qser_gnss_test.c
old mode 100644
new mode 100755
similarity index 100%
rename from mbtk/test/asr1806/qser_gnss_test.c
rename to mbtk/test/liblynq_lib/qser_gnss_test.c
diff --git a/mbtk/test/asr1806/qser_led_test.c b/mbtk/test/liblynq_lib/qser_led_test.c
old mode 100644
new mode 100755
similarity index 100%
rename from mbtk/test/asr1806/qser_led_test.c
rename to mbtk/test/liblynq_lib/qser_led_test.c
diff --git a/mbtk/test/asr1806/qser_sim_test.c b/mbtk/test/liblynq_lib/qser_sim_test.c
old mode 100644
new mode 100755
similarity index 100%
rename from mbtk/test/asr1806/qser_sim_test.c
rename to mbtk/test/liblynq_lib/qser_sim_test.c
diff --git a/mbtk/test/asr1806/qser_thermal_test.c b/mbtk/test/liblynq_lib/qser_thermal_test.c
old mode 100644
new mode 100755
similarity index 100%
rename from mbtk/test/asr1806/qser_thermal_test.c
rename to mbtk/test/liblynq_lib/qser_thermal_test.c
diff --git a/mbtk/test/asr1806/ring_tele.h b/mbtk/test/liblynq_lib/ring_tele.h
similarity index 100%
rename from mbtk/test/asr1806/ring_tele.h
rename to mbtk/test/liblynq_lib/ring_tele.h
diff --git a/mbtk/test/libmbtk_audio/Makefile b/mbtk/test/libmbtk_audio/Makefile
new file mode 100755
index 0000000..1045e71
--- /dev/null
+++ b/mbtk/test/libmbtk_audio/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS += -lmbtk_lib -lmbtk_net -lmbtk_audio
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/asr1806/mbtk_pcm_play_test.c b/mbtk/test/libmbtk_audio/mbtk_pcm_play_test.c
similarity index 100%
rename from mbtk/test/asr1806/mbtk_pcm_play_test.c
rename to mbtk/test/libmbtk_audio/mbtk_pcm_play_test.c
diff --git a/mbtk/test/asr1806/mbtk_pcm_recorder_test.c b/mbtk/test/libmbtk_audio/mbtk_pcm_recorder_test.c
similarity index 100%
rename from mbtk/test/asr1806/mbtk_pcm_recorder_test.c
rename to mbtk/test/libmbtk_audio/mbtk_pcm_recorder_test.c
diff --git a/mbtk/test/asr1806/mbtk_wav_play_test.c b/mbtk/test/libmbtk_audio/mbtk_wav_play_test.c
similarity index 100%
rename from mbtk/test/asr1806/mbtk_wav_play_test.c
rename to mbtk/test/libmbtk_audio/mbtk_wav_play_test.c
diff --git a/mbtk/test/asr1806/mbtk_wav_recorder_test.c b/mbtk/test/libmbtk_audio/mbtk_wav_recorder_test.c
similarity index 100%
rename from mbtk/test/asr1806/mbtk_wav_recorder_test.c
rename to mbtk/test/libmbtk_audio/mbtk_wav_recorder_test.c
diff --git a/mbtk/test/libmbtk_coap/Makefile b/mbtk/test/libmbtk_coap/Makefile
new file mode 100755
index 0000000..28bf46c
--- /dev/null
+++ b/mbtk/test/libmbtk_coap/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS += -lmbtk_lib -lmbtk_net -lmbtk_coap
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/mbtk_coap_test.c b/mbtk/test/libmbtk_coap/mbtk_coap_test.c
similarity index 100%
rename from mbtk/test/mbtk_coap_test.c
rename to mbtk/test/libmbtk_coap/mbtk_coap_test.c
diff --git a/mbtk/test/libmbtk_ecall/Makefile b/mbtk/test/libmbtk_ecall/Makefile
new file mode 100755
index 0000000..28bf46c
--- /dev/null
+++ b/mbtk/test/libmbtk_ecall/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS += -lmbtk_lib -lmbtk_net -lmbtk_coap
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/libmbtk_factory/Makefile b/mbtk/test/libmbtk_factory/Makefile
new file mode 100755
index 0000000..d93d8c5
--- /dev/null
+++ b/mbtk/test/libmbtk_factory/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS += -lmbtk_lib -lmbtk_factory -lmbtk_audio
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/mbtk_adc_test.c b/mbtk/test/libmbtk_factory/mbtk_adc_test.c
similarity index 100%
rename from mbtk/test/mbtk_adc_test.c
rename to mbtk/test/libmbtk_factory/mbtk_adc_test.c
diff --git a/mbtk/test/libmbtk_fota/Makefile b/mbtk/test/libmbtk_fota/Makefile
new file mode 100755
index 0000000..33a7f43
--- /dev/null
+++ b/mbtk/test/libmbtk_fota/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS += -lmbtk_lib -lmbtk_net -lmbtk_fota
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/libmbtk_ftp/Makefile b/mbtk/test/libmbtk_ftp/Makefile
new file mode 100755
index 0000000..d520ad9
--- /dev/null
+++ b/mbtk/test/libmbtk_ftp/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS += -lmbtk_lib -lmbtk_net -lmbtk_ftp
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/mbtk_ftp_test.c b/mbtk/test/libmbtk_ftp/mbtk_ftp_test.c
similarity index 100%
rename from mbtk/test/mbtk_ftp_test.c
rename to mbtk/test/libmbtk_ftp/mbtk_ftp_test.c
diff --git a/mbtk/test/libmbtk_gnss/Makefile b/mbtk/test/libmbtk_gnss/Makefile
new file mode 100755
index 0000000..d520ad9
--- /dev/null
+++ b/mbtk/test/libmbtk_gnss/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS += -lmbtk_lib -lmbtk_net -lmbtk_ftp
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/libmbtk_http/Makefile b/mbtk/test/libmbtk_http/Makefile
new file mode 100755
index 0000000..ad42a13
--- /dev/null
+++ b/mbtk/test/libmbtk_http/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS += -lmbtk_lib -lmbtk_net -lmbtk_http
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/mbtk_http_test.c b/mbtk/test/libmbtk_http/mbtk_http_test.c
similarity index 100%
rename from mbtk/test/mbtk_http_test.c
rename to mbtk/test/libmbtk_http/mbtk_http_test.c
diff --git a/mbtk/test/libmbtk_lib/Makefile b/mbtk/test/libmbtk_lib/Makefile
new file mode 100755
index 0000000..844f199
--- /dev/null
+++ b/mbtk/test/libmbtk_lib/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS += -lmbtk_lib
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/mbtk_at_test.c b/mbtk/test/libmbtk_lib/mbtk_at_test.c
similarity index 100%
rename from mbtk/test/mbtk_at_test.c
rename to mbtk/test/libmbtk_lib/mbtk_at_test.c
diff --git a/mbtk/test/libmbtk_mqtt/Makefile b/mbtk/test/libmbtk_mqtt/Makefile
new file mode 100755
index 0000000..4802389
--- /dev/null
+++ b/mbtk/test/libmbtk_mqtt/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS += -lmbtk_lib -lmbtk_net -lmbtk_mqtt -lmbtk_http
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/mbtk_mqtt_aliyun_test.c b/mbtk/test/libmbtk_mqtt/mbtk_mqtt_aliyun_test.c
similarity index 100%
rename from mbtk/test/mbtk_mqtt_aliyun_test.c
rename to mbtk/test/libmbtk_mqtt/mbtk_mqtt_aliyun_test.c
diff --git a/mbtk/test/mbtk_mqtt_test.c b/mbtk/test/libmbtk_mqtt/mbtk_mqtt_test.c
similarity index 100%
rename from mbtk/test/mbtk_mqtt_test.c
rename to mbtk/test/libmbtk_mqtt/mbtk_mqtt_test.c
diff --git a/mbtk/test/libmbtk_net/Makefile b/mbtk/test/libmbtk_net/Makefile
new file mode 100755
index 0000000..d172606
--- /dev/null
+++ b/mbtk/test/libmbtk_net/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS += -lmbtk_lib -lmbtk_net
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/mbtk_net_control_test.c b/mbtk/test/libmbtk_net/mbtk_net_control_test.c
similarity index 100%
rename from mbtk/test/mbtk_net_control_test.c
rename to mbtk/test/libmbtk_net/mbtk_net_control_test.c
diff --git a/mbtk/test/libmbtk_ril/Makefile b/mbtk/test/libmbtk_ril/Makefile
new file mode 100755
index 0000000..6197845
--- /dev/null
+++ b/mbtk/test/libmbtk_ril/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS += -lmbtk_lib -lmbtk_ril
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/mbtk_info_test.c b/mbtk/test/libmbtk_ril/mbtk_info_test.c
similarity index 100%
rename from mbtk/test/mbtk_info_test.c
rename to mbtk/test/libmbtk_ril/mbtk_info_test.c
diff --git a/mbtk/test/libmbtk_tcpip/Makefile b/mbtk/test/libmbtk_tcpip/Makefile
new file mode 100755
index 0000000..0ee33e7
--- /dev/null
+++ b/mbtk/test/libmbtk_tcpip/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS += -lmbtk_lib -lmbtk_net -lmbtk_tcpip
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/mbtk_tcpip_test.c b/mbtk/test/libmbtk_tcpip/mbtk_tcpip_test.c
similarity index 100%
rename from mbtk/test/mbtk_tcpip_test.c
rename to mbtk/test/libmbtk_tcpip/mbtk_tcpip_test.c
diff --git a/mbtk/test/tcp_test.c b/mbtk/test/libmbtk_tcpip/tcp_test.c
similarity index 100%
rename from mbtk/test/tcp_test.c
rename to mbtk/test/libmbtk_tcpip/tcp_test.c
diff --git a/mbtk/test/libql_lib/Makefile b/mbtk/test/libql_lib/Makefile
new file mode 100755
index 0000000..3acd13c
--- /dev/null
+++ b/mbtk/test/libql_lib/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS += -lmbtk_lib -lmbtk_net -lmbtk_ril -lql_lib -lmbtk_audio -lmbtk_http -lmbtk_fota -lmbtk_factory
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/ql_DSI_ConnectManager_test.c b/mbtk/test/libql_lib/ql_DSI_ConnectManager_test.c
similarity index 100%
rename from mbtk/test/ql_DSI_ConnectManager_test.c
rename to mbtk/test/libql_lib/ql_DSI_ConnectManager_test.c
diff --git a/mbtk/test/ql_adc_test.c b/mbtk/test/libql_lib/ql_adc_test.c
similarity index 100%
rename from mbtk/test/ql_adc_test.c
rename to mbtk/test/libql_lib/ql_adc_test.c
diff --git a/mbtk/test/ql_call_test.c b/mbtk/test/libql_lib/ql_call_test.c
similarity index 100%
rename from mbtk/test/ql_call_test.c
rename to mbtk/test/libql_lib/ql_call_test.c
diff --git a/mbtk/test/ql_dev_test.c b/mbtk/test/libql_lib/ql_dev_test.c
similarity index 100%
rename from mbtk/test/ql_dev_test.c
rename to mbtk/test/libql_lib/ql_dev_test.c
diff --git a/mbtk/test/ql_gpio_test.c b/mbtk/test/libql_lib/ql_gpio_test.c
similarity index 100%
rename from mbtk/test/ql_gpio_test.c
rename to mbtk/test/libql_lib/ql_gpio_test.c
diff --git a/mbtk/test/ql_i2c_test.c b/mbtk/test/libql_lib/ql_i2c_test.c
similarity index 100%
rename from mbtk/test/ql_i2c_test.c
rename to mbtk/test/libql_lib/ql_i2c_test.c
diff --git a/mbtk/test/ql_nw_test.c b/mbtk/test/libql_lib/ql_nw_test.c
similarity index 100%
rename from mbtk/test/ql_nw_test.c
rename to mbtk/test/libql_lib/ql_nw_test.c
diff --git a/mbtk/test/ql_sim_test.c b/mbtk/test/libql_lib/ql_sim_test.c
similarity index 100%
rename from mbtk/test/ql_sim_test.c
rename to mbtk/test/libql_lib/ql_sim_test.c
diff --git a/mbtk/test/ql_sms_test.c b/mbtk/test/libql_lib/ql_sms_test.c
similarity index 100%
rename from mbtk/test/ql_sms_test.c
rename to mbtk/test/libql_lib/ql_sms_test.c
diff --git a/mbtk/test/ql_spi_test.c b/mbtk/test/libql_lib/ql_spi_test.c
similarity index 100%
rename from mbtk/test/ql_spi_test.c
rename to mbtk/test/libql_lib/ql_spi_test.c
diff --git a/mbtk/test/ql_uart_test.c b/mbtk/test/libql_lib/ql_uart_test.c
similarity index 100%
rename from mbtk/test/ql_uart_test.c
rename to mbtk/test/libql_lib/ql_uart_test.c
diff --git a/mbtk/test/ql_voice_test.c b/mbtk/test/libql_lib/ql_voice_test.c
similarity index 100%
rename from mbtk/test/ql_voice_test.c
rename to mbtk/test/libql_lib/ql_voice_test.c
diff --git a/mbtk/test/mbtk_dsp_gain_set.c b/mbtk/test/mbtk_dsp_gain_set.c
deleted file mode 100755
index bae9485..0000000
--- a/mbtk/test/mbtk_dsp_gain_set.c
+++ /dev/null
@@ -1,36 +0,0 @@
-#include "mbtk_audio_gain.h"
-#include "mbtk_log.h"
-
-static void help()
-{
-    printf("./mbtk_dsp_gain_set spk/mic <gain>\n");
-}
-
-int main(int argc, char *argv[])
-{
-    if(argc != 3) {
-        help();
-        return -1;
-    }
-
-    if(strcmp(argv[1], "spk") && strcmp(argv[1], "mic")) {
-        help();
-        return -1;
-    }
-
-    mbtk_log_init("radio", "MBTK_GAIN");
-
-    CONFIG_DSPGAIN_Direction dir = CONFIG_DSPGAIN_RX;
-    if(!strcmp(argv[1], "mic")) {
-        dir = CONFIG_DSPGAIN_TX;
-    }
-    if(mbtk_dsp_gain_set(dir, atoi(argv[2]))) {
-        printf("\nFail.\n");
-    } else {
-        printf("\nSuccess.\n");
-    }
-
-    return 0;
-}
-
-
diff --git a/mbtk/test/mbtk_mdio.c b/mbtk/test/mbtk_mdio.c
deleted file mode 100644
index b1010fc..0000000
--- a/mbtk/test/mbtk_mdio.c
+++ /dev/null
@@ -1,91 +0,0 @@
-
-//mdio eth0 1          	读取phy寄存器1的数值
-//mdio eth0 0 0x1120      将0x1120写入 phy寄存器1
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <linux/mii.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <net/if.h>
-#include <linux/sockios.h>
-#include <linux/types.h>
-#include <netinet/in.h>
-#include <unistd.h>
-
-
-#define reteck(ret)     \
-        if(ret < 0){    \
-            printf("%m! \"%s\" : line: %d\n", __func__, __LINE__);   \
-            goto lab;   \
-        }
-
-#define help() \
-    printf("mdio:\n");                  \
-    printf("read operation: mdio reg_addr\n");          \
-    printf("write operation: mdio reg_addr value\n");    \
-    printf("For example:\n");            \
-    printf("mdio eth0 1\n");             \
-    printf("mdio eth0 0 0x12\n\n");      \
-    exit(0);
-
-int sockfd;
-
-int main(int argc, char *argv[]){
-
-    if(argc == 1 || !strcmp(argv[1], "-h")){
-        help();
-    }
-
-    struct mii_ioctl_data *mii = NULL;
-    struct ifreq ifr;
-    int ret;
-
-    memset(&ifr, 0, sizeof(ifr));
-    strncpy(ifr.ifr_name, argv[1], IFNAMSIZ - 1);
-
-    sockfd = socket(PF_LOCAL, SOCK_DGRAM, 0);
-    reteck(sockfd);
-
-    //get phy address in smi bus
-    ret = ioctl(sockfd, SIOCGMIIPHY, &ifr);
-    reteck(ret);
-
-    mii = (struct mii_ioctl_data*)&ifr.ifr_data;
-
-    if(argc == 3){
-
-        mii->reg_num    = (uint16_t)strtoul(argv[2], NULL, 0);
-
-        ret = ioctl(sockfd, SIOCGMIIREG, &ifr);
-        reteck(ret);
-
-        printf("read phy addr: 0x%x  reg: 0x%x   value : 0x%x\n", mii->phy_id, mii->reg_num, mii->val_out);
-
-        if (mii->reg_num == 0x1)
-        {
-            printf("Link Status\n");
-
-            if(mii->val_out& 0x0004){
-                printf("link is up\n");
-            }else{
-                printf("link is down\n");
-            }
-        }
-    }else if(argc == 4){
-
-        mii->reg_num    = (uint16_t)strtoul(argv[2], NULL, 0);
-        mii->val_in     = (uint16_t)strtoul(argv[3], NULL, 0);
-
-        ret = ioctl(sockfd, SIOCSMIIREG, &ifr);
-        reteck(ret);
-
-        printf("write phy addr: 0x%x  reg: 0x%x  value : 0x%x\n", mii->phy_id, mii->reg_num, mii->val_in);
-    }
-
-    lab:
-    close(sockfd);
-    return 0;
-}
\ No newline at end of file
diff --git a/mbtk/test/mtd_info.c b/mbtk/test/mtd_info.c
deleted file mode 100755
index 8076076..0000000
--- a/mbtk/test/mtd_info.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "mbtk_mtd.h"
-
-
-int main(int argc, char *argv[])
-{
-    mbtk_partition_info_t *partition_info = mbtk_partition_get();
-    if(partition_info != NULL) {
-        int i = 0;
-        while(i < MBTK_PARTITION_NUM_MAX) {
-            if(partition_info[i].used) {
-                printf("%s(%s) : %08x %08x\n", partition_info[i].name, partition_info[i].dev,
-                    partition_info[i].partition_start, partition_info[i].partition_size);
-            }
-            i++;
-        }
-    }
-    return 0;
-}
-
diff --git a/mbtk/test/others/Makefile b/mbtk/test/others/Makefile
new file mode 100755
index 0000000..7dc5e8b
--- /dev/null
+++ b/mbtk/test/others/Makefile
@@ -0,0 +1,34 @@
+ROOT = $(shell pwd)/../../..
+include $(ROOT)/mbtk/Make.defines
+
+INC_DIR +=
+
+LIB_DIR +=
+
+LIBS +=  -lmbtk_lib -laudio-apu -lcutils -ltinyalsa -lacm -lubus -lubox
+
+CFLAGS += 
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+$(info LOCAL_SRC_FILES = $(LOCAL_SRC_FILES))
+
+OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(LOCAL_SRC_FILES)))
+BINS = $(patsubst %.o,%,$(OBJS))
+
+all: $(BINS)
+
+$(BINS):$(OBJS)
+	@echo "  BIN     $@"
+	$(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $@.o -o $(OUT_DIR)/bin/$@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+	$(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+	rm -f $(OBJS)
diff --git a/mbtk/test/fb_demo.c b/mbtk/test/others/fb_demo.c
similarity index 100%
rename from mbtk/test/fb_demo.c
rename to mbtk/test/others/fb_demo.c
diff --git a/mbtk/test/framebuffer_demo.c b/mbtk/test/others/framebuffer_demo.c
similarity index 100%
rename from mbtk/test/framebuffer_demo.c
rename to mbtk/test/others/framebuffer_demo.c
diff --git a/mbtk/test/fs_full.c b/mbtk/test/others/fs_full.c
similarity index 100%
rename from mbtk/test/fs_full.c
rename to mbtk/test/others/fs_full.c
diff --git a/mbtk/test/iconv_demo.cc b/mbtk/test/others/iconv_demo.cc
similarity index 100%
rename from mbtk/test/iconv_demo.cc
rename to mbtk/test/others/iconv_demo.cc
diff --git a/mbtk/test/key_ev_demo.c b/mbtk/test/others/key_ev_demo.c
similarity index 100%
rename from mbtk/test/key_ev_demo.c
rename to mbtk/test/others/key_ev_demo.c
diff --git a/mbtk/test/mbtk_spi_write.c b/mbtk/test/others/mbtk_spi_write.c
similarity index 100%
rename from mbtk/test/mbtk_spi_write.c
rename to mbtk/test/others/mbtk_spi_write.c
diff --git a/mbtk/test/partition_write_demo.c b/mbtk/test/others/partition_write_demo.c
similarity index 100%
rename from mbtk/test/partition_write_demo.c
rename to mbtk/test/others/partition_write_demo.c
diff --git a/mbtk/test/polarssl_demo.c b/mbtk/test/others/polarssl_demo.c
similarity index 100%
rename from mbtk/test/polarssl_demo.c
rename to mbtk/test/others/polarssl_demo.c
diff --git a/mbtk/test/touch_ev_demo.c b/mbtk/test/others/touch_ev_demo.c
similarity index 100%
rename from mbtk/test/touch_ev_demo.c
rename to mbtk/test/others/touch_ev_demo.c
diff --git a/mbtk/test/ubus_demo.c b/mbtk/test/others/ubus_demo.c
similarity index 100%
rename from mbtk/test/ubus_demo.c
rename to mbtk/test/others/ubus_demo.c
diff --git a/mbtk/test/usb_check.c b/mbtk/test/others/usb_check.c
similarity index 100%
rename from mbtk/test/usb_check.c
rename to mbtk/test/others/usb_check.c