Fix mbtk from v1265 GSW

Change-Id: I5d8d395616f284bc74c8b9448cfa347164b5a668
diff --git a/mbtk/test/libgsw_lib/gsw_uart_test.c b/mbtk/test/libgsw_lib/gsw_uart_test.c
new file mode 100755
index 0000000..95b7654
--- /dev/null
+++ b/mbtk/test/libgsw_lib/gsw_uart_test.c
@@ -0,0 +1,215 @@
+#include <stdio.h>

+#include <string.h>

+#include <strings.h>

+#include <stdlib.h>

+#include <errno.h>

+#include <fcntl.h>

+#include <signal.h>

+#include <sys/types.h>

+#include <unistd.h>

+#include <pthread.h>

+#include <termios.h>

+#include <time.h>

+#include <sys/ioctl.h>

+#include <dlfcn.h>

+#include <stdint.h>

+#include <stdbool.h>

+#define MY_IOCTL_CMD3  _IOW('d', 1, char*) // 写入字符串

+typedef enum{

+  GSW_HAL_BAUDRATE_1200=1200,

+  GSW_HAL_BAUDRATE_1800=1800,

+  GSW_HAL_BAUDRATE_4800=4800,

+  GSW_HAL_BAUDRATE_9600=9600,

+  GSW_HAL_BAUDRATE_19200=19200,

+  GSW_HAL_BAUDRATE_38400=38400,

+  GSW_HAL_BAUDRATE_57600=57600,

+  GSW_HAL_BAUDRATE_115200=115200,

+  GSW_HAL_BAUDRATE_230400=230400,

+  GSW_HAL_BAUDRATE_460800=460800,

+  GSW_HAL_BAUDRATE_500000=500000,

+  GSW_HAL_BAUDRATE_576000=576000,

+  GSW_HAL_BAUDRATE_921600=921600

+}gsw_hal_uart_baudrate;

+

+int32_t (*gsw_uart_open_ex)(int8_t *port, gsw_hal_uart_baudrate, uint32_t, int8_t, uint32_t);

+int32_t (*gsw_uart_flush)(int32_t);

+int32_t (*gsw_uart_close)(int32_t);

+int32_t (*gsw_uart_write)(int32_t, const uint8_t *buffer, uint32_t);

+int32_t (*gsw_uart_read)(int32_t, uint8_t *buffer, uint32_t, int32_t);

+int32_t (*gsw_uart_ioctl)(int32_t, uint32_t, void *pvalue);

+void *dlHandle_uart;

+char *lynqLib_uart = "/lib/libgsw_lib.so";

+

+

+int8_t *port; 

+gsw_hal_uart_baudrate baudrate;

+uint32_t bits = -1;

+int8_t parity = 3;

+uint32_t stop = -1;

+int fd = -1;

+int ret = -1;

+void prama(char *buffer)

+{

+    char *words[10];

+    for (int i = 0; i < 10; i++)

+    {

+        words[i] = (char *)malloc(20 * sizeof(char));

+        if (words[i] != NULL)

+        {

+            strcpy(words[i], "");

+        }

+    }

+    int i = 0;

+    buffer[strlen(buffer)-1] = '\0';

+    char *token = strtok(buffer, " ");  

+    while (token != NULL && i < 10)

+    {  

+        strcpy(words[i], token);

+        printf("var%d = %s\n", i, words[i]);

+        i++;

+        token = strtok(NULL, " ");

+    }

+    if (words[0])

+        port = (int8_t *)words[0];

+    if (words[1])

+        baudrate = atoi(words[1]);

+    if (words[2])

+        bits = atoi(words[2]);

+    if (words[3])

+        parity = (int8_t)(words[3][0]);

+    if (words[4])

+        stop = atoi(words[4]);

+    

+    for (int i = 1; i < 10; i++)

+    {

+        free(words[i]);

+    }

+    return;

+}

+

+void *read_function(void *timeout_ms)

+{

+    uint8_t buf[128];

+    while(1)

+    {

+        memset(buf,0,sizeof(buf));

+        ret = gsw_uart_read(fd, buf, sizeof(buf) - 1, *(int *)timeout_ms);

+        if(ret > 0)

+        {

+            if(memcmp(buf, "exit", 4) == 0)

+            {

+                printf("exit\n");

+                break;

+            }

+        printf("%s\n",buf);

+        printf("gsw_uart_read success.\n");

+        }

+    }

+    close(fd);

+    return NULL;

+}

+

+int main(void)

+{

+    int opt = 0;

+    int timeout_ms;

+    dlHandle_uart = dlopen(lynqLib_uart, RTLD_NOW);

+    pthread_t read_thread;

+    while(1)

+    {

+        printf("=========uart main=========\n");

+        if (scanf("%d", &opt) != 1)

+            printf("input error,please check it");

+        while(getchar()!='\n');

+        switch (opt)

+        {

+            case 1:

+            {

+                char buffer[126];

+                if (fgets(buffer, sizeof(buffer), stdin) == NULL)

+                {

+                    printf("input error\n");

+                    break;

+                }

+                prama(buffer);

+                gsw_uart_open_ex=(int32_t(*)(int8_t *port, gsw_hal_uart_baudrate, uint32_t, int8_t, uint32_t))dlsym(dlHandle_uart, "gsw_uart_open_ex");

+                fd = gsw_uart_open_ex(port, baudrate, bits, parity, stop);

+                if(fd < 0)

+                {

+                    printf("gsw_uart_open_ex FAIL.\n");

+                    break;

+                }

+                

+                printf("gsw_uart_open_ex success.\n");

+                break;

+            }

+

+            case 2:

+            {

+                gsw_uart_flush=(int32_t(*)(int32_t))dlsym(dlHandle_uart, "gsw_uart_flush");

+                ret = gsw_uart_flush(fd);

+                if(ret < 0)

+                {

+                    printf("gsw_uart_flush FAIL.\n");

+                    break;

+                }

+                printf("gsw_uart_flush success.\n");

+                break;

+            }

+

+            case 3:

+            {

+                gsw_uart_close=(int32_t(*)(int32_t))dlsym(dlHandle_uart, "gsw_uart_close");

+                ret = gsw_uart_close(fd);

+                if(ret < 0)

+                {

+                    printf("gsw_uart_close FAIL.\n");

+                    break;

+                }

+                free(port);

+                printf("gsw_uart_close success.\n");

+                return 0;

+            }

+

+            case 4:

+            {

+                const uint8_t *buf = (const uint8_t *)"Hello ward";

+                gsw_uart_write=(int32_t(*)(int32_t, const uint8_t *buffer, uint32_t))dlsym(dlHandle_uart, "gsw_uart_write");

+                ret = gsw_uart_write(fd, buf, strlen((const char* )buf));

+                if(ret < 0)

+                {

+                    printf("gsw_uart_write FAIL.\n");

+                    break;

+                }

+                printf("gsw_uart_write success.\n");

+                break;

+            }

+

+            case 5:

+            {

+                printf("Non-blocking read : 0\nBlockage : 1\nTimeout time (milliseconds) : greater than 1\n");

+                ret = scanf("%d",&timeout_ms); 

+                gsw_uart_read=(int32_t(*)(int32_t, uint8_t *buffer, uint32_t, int32_t))dlsym(dlHandle_uart, "gsw_uart_read");

+                pthread_create(&read_thread, NULL, read_function, (void *)&timeout_ms);

+                pthread_join(read_thread, NULL);

+                break;

+            }

+

+            case 6:

+            {

+                char buf[128] = "Hello ward";

+                gsw_uart_ioctl=(int32_t(*)(int32_t, uint32_t, void *pvalue))dlsym(dlHandle_uart, "gsw_uart_ioctl");

+                ret = gsw_uart_ioctl(fd, MY_IOCTL_CMD3, buf);

+                if(ret < 0)

+                {

+                    printf("gsw_uart_ioctl FAIL.\n");

+                    break;

+                }

+                printf("gsw_uart_ioctl success.\n");

+                break;

+            }

+        }

+

+    }

+    return 0;

+}