Fix mbtk from v1265 GSW

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

+#include <stdlib.h>

+#include <stdbool.h>

+#include <dlfcn.h>

+#include <stdint.h>

+#include <string.h>

+

+

+#define GSW_SMS_SEND_NUM_MAX            5      /**< dest num max count */

+#define GSW_SMS_ADDRESS_LEN             32     /**< one dest number max length*/

+#define GSW_SMS_CONCAT_SMS_COUNT_MAX    160    /**< one page max bytes*/

+#define GSW_SMS_MSG_CONTENT_LEN_MAX     3      /**< sms page max count*/

+#define GSW_SMS_CONTENT_LEN_MAX         3      /**< newmsg recv one page*/

+#define GSW_SMS_SEND_CONT_MAX           (GSW_SMS_MSG_CONTENT_LEN_MAX*GSW_SMS_CONCAT_SMS_COUNT_MAX*2)   /**< sms send max len*/

+#define GSW_SMS_RECV_CONT_MAX           1440   /**< sms receive max len*/

+

+#define GSW_HAL_SMS_ADDRESS_LEN GSW_SMS_ADDRESS_LEN

+#define GSW_HAL_SMS_RECV_CONT_MAX GSW_SMS_RECV_CONT_MAX

+

+typedef unsigned short uint16_t;

+typedef unsigned int uint32_t;

+typedef unsigned short uint16;

+typedef uint32_t sms_client_handle_type;

+

+typedef enum

+{

+    GSW_SMS_FULL_FLG,               /**< sms full flag*/

+    GSW_SMS_RECEIVED_FLG,           /**<recv new sms flag*/

+}gsw_sms_state_e;

+

+typedef enum

+{

+    SMS_FORMAT_GSM_7BIT        = 0,   /**< 7bit econde*/

+    SMS_FORMAT_BINARY_DATA     = 1,   /**< 8bit binary encode*/

+    SMS_FORMAT_UCS2            = 2,   /**< ucs2 encode*/

+}gsw_sms_format_e;

+

+typedef struct gsw_hal_sms_date

+{

+    unsigned char   year[5];   /**< year of date*/

+    unsigned char   month[3];   /**< month of date*/

+    unsigned char   day[3];   /**< day of date*/

+    unsigned char   hour[3];   /**< hour of  time*/

+    unsigned char   minutes[3];   /**< minute of  time*/

+    unsigned char   seconds[3];   /**< second of time*/

+    unsigned char   timezone[4];   /**< timezone*/

+} gsw_sms_date_t;

+

+typedef struct gsw_hal_sms_msg_type

+{

+    char              src_num[GSW_SMS_ADDRESS_LEN+1];   /**< sms phone num send msg*/

+    char              dest_num[GSW_SMS_ADDRESS_LEN + 1];   /**< sms phone num recv msg*/

+    gsw_sms_format_e  content_encode;  /**< sms content is 7bit or 8bit or Ucs2 encode*/

+    unsigned int      content_len;  /**< sms content size*/

+    char              content[GSW_SMS_RECV_CONT_MAX + 1];  /**< sms content*/

+    gsw_sms_date_t    date;  /**< message time*/

+} gsw_sms_msg_type_t;

+

+typedef void (* GSW_HAL_SMS_CALLBACK_FUN)(gsw_sms_state_e state, gsw_sms_msg_type_t *report_info);

+

+

+int (*gsw_sms_reg_callback)(GSW_HAL_SMS_CALLBACK_FUN handle_ptr);

+int (*gsw_sms_sdk_init)(int32_t token);

+int (*gsw_sms_sdk_deinit)(void);

+int (*gsw_send_sms)(int8_t *phone_num, int32_t char_set, int8_t *msg, int32_t msg_len);

+int (*gsw_get_smsc_address)(int32_t len, int8_t *smsc);

+int (*gsw_set_smsc_address)(const int8_t *smsc);

+

+#define lib_gsw_sms_path "/lib/libgsw_lib.so"

+static void *dlHandle_sms;

+

+

+void gsw_test_callback(gsw_sms_state_e state, gsw_sms_msg_type_t *report_info)

+{

+    printf("gsw_test_callback: state = %d\n", state);

+    printf("gsw_test_callback: report_info->src_num = %s\n", report_info->src_num);

+    printf("gsw_test_callback: report_info->dest_num = %s\n", report_info->dest_num);

+    printf("gsw_test_callback: report_info->content_encode = %d\n", report_info->content_encode);

+    printf("gsw_test_callback: report_info->content_len = %d\n", report_info->content_len);

+    printf("gsw_test_callback: report_info->content = %s\n", report_info->content);

+    printf("gsw_test_callback: report_info->date->year = %s\n", report_info->date.year);

+    printf("gsw_test_callback: report_info->date->month = %s\n", report_info->date.month);

+    printf("gsw_test_callback: report_info->date->day = %s\n", report_info->date.day);

+    printf("gsw_test_callback: report_info->date->hour = %s\n", report_info->date.hour);

+    printf("gsw_test_callback: report_info->date->minutes = %s\n", report_info->date.minutes);

+    printf("gsw_test_callback: report_info->date->seconds = %s\n", report_info->date.seconds);

+    printf("gsw_test_callback: report_info->date->timezone = %s\n", report_info->date.timezone);

+}

+

+

+static int gsw_sms_api_import()

+{

+    dlHandle_sms = dlopen(lib_gsw_sms_path, RTLD_NOW);

+    if (dlHandle_sms == NULL) {

+        printf("Failed to open %s\n", lib_gsw_sms_path);

+        return -1;

+    }

+

+    gsw_sms_sdk_init = (int(*)(int32_t token))dlsym(dlHandle_sms,"gsw_sms_sdk_init");

+    if(gsw_sms_sdk_init == NULL)

+    {

+        printf("gsw_sms_sdk_init fail\n");

+        return -1;

+    }

+

+    gsw_sms_reg_callback = (int(*)(GSW_HAL_SMS_CALLBACK_FUN handle_ptr))dlsym(dlHandle_sms,"gsw_sms_reg_callback");

+    if(gsw_sms_reg_callback == NULL)

+    {

+        printf("gsw_sms_reg_callback fail\n");

+        return -1;

+    }

+

+    gsw_send_sms = (int(*)(int8_t *phone_num, int32_t char_set, int8_t *msg, int32_t msg_len))dlsym(dlHandle_sms,"gsw_send_sms");

+    if(gsw_send_sms == NULL)

+    {

+        printf("gsw_send_sms fail\n");

+        return -1;

+    }

+

+    gsw_get_smsc_address = (int(*)(int32_t len, int8_t *smsc))dlsym(dlHandle_sms,"gsw_get_smsc_address");

+    if(gsw_get_smsc_address == NULL)

+    {

+        printf("gsw_get_smsc_address fail\n");

+        return -1;

+    }

+

+    gsw_set_smsc_address = (int(*)(const int8_t *smsc))dlsym(dlHandle_sms,"gsw_set_smsc_address");

+    if(gsw_set_smsc_address == NULL)

+    {

+        printf("gsw_set_smsc_address fail\n");

+        return -1;

+    }

+

+    gsw_sms_sdk_deinit = (int(*)(void))dlsym(dlHandle_sms,"gsw_sms_sdk_deinit");

+    if(gsw_sms_sdk_deinit == NULL)

+    {

+        printf("gsw_sms_sdk_deinit fail\n");

+        return -1;

+    }

+

+    return 0;

+}

+

+int main()

+{

+    int ret = -1;

+    int opt = -1;

+    char operator[10];

+    char phone_number[GSW_HAL_SMS_ADDRESS_LEN] = {0};

+    char serv_numer[GSW_HAL_SMS_ADDRESS_LEN] = {0};

+

+    ret = gsw_sms_api_import();

+    if(ret != 0)

+    {

+        printf("gsw_sms_api_import fail\n");

+        return -1;

+    }

+

+    while(1)

+    {

+        printf("=========sms main=========\n"

+        "\t-1 exit\n"

+        "\t1 sms init\n"

+        "\t2 send text sms\n"

+        "\t3 wait receive new sms\n"

+        "\t4 send PDU sms\n"

+        "\t7 query service number\n"

+        "\t8 set service number\n"

+        "\t9 deinit sms\n"

+        "operator: >> \n");

+

+        opt = -1;

+        ret = -1;

+        printf("%s\n",fgets(operator, sizeof(operator), stdin));

+        fflush(stdin);

+        opt = atoi(operator);

+        switch (opt)

+        {

+            case -1:

+            {

+                printf("main exit\n");

+                return 0;

+            }

+            case 1:

+            {

+                printf("gsw_sms_sdk_init start");

+                ret = gsw_sms_sdk_init(1234);

+                if(ret != 0)

+                {

+                    printf("gsw_sms_sdk_init fail,ret = %d\n",ret);

+                    dlclose(dlHandle_sms);

+                    continue;

+                }

+                

+                break;

+            }

+            case 2:

+            {

+                char *tmp = "all man hello world";

+                printf("input phone number:\n");

+                memset(phone_number, 0x0, GSW_HAL_SMS_ADDRESS_LEN);

+                //fgets(phone_number, MAX_LEN, stdin);

+                printf("%d\n",scanf("%15s", phone_number));

+                fflush(stdin);

+                int len = strlen(tmp);

+                ret = gsw_send_sms((int8_t*)phone_number, 0, (int8_t*)tmp, len);

+                if(ret != 0)

+                {

+                    printf("gsw_send_sms fail,ret = %d\n",ret);

+                    continue;

+                }

+                break;

+            }

+

+            case 3:

+            {

+                printf("gsw_sms_reg_callback start\n");

+                ret = gsw_sms_reg_callback(gsw_test_callback);

+                if(ret != 0)

+                {

+                    printf("gsw_sms_reg_callback fail,ret = %d\n",ret);

+                    continue;

+                }

+                printf("gsw_sms_reg_callback end");

+                break;

+            }

+

+            case 4:

+            {

+                char *tmp = "你好"; 

+                printf("input phone number:\n");

+                memset(phone_number, 0x0, GSW_HAL_SMS_ADDRESS_LEN);

+                //fgets(phone_number, MAX_LEN, stdin);

+                printf("%d\n",scanf("%15s", phone_number));

+                fflush(stdin);

+                int len = strlen(tmp);

+                ret = gsw_send_sms((int8_t*)phone_number, 2, (int8_t *)tmp, len);

+                if(ret != 0)

+                {

+                    printf("gsw_send_sms fail,ret = %d\n",ret);

+                    continue;

+                }

+                break;

+            }

+

+            case 7:

+            {   

+                printf("gsw_get_smsc_address start\n");

+                ret = gsw_get_smsc_address(GSW_HAL_SMS_ADDRESS_LEN, (int8_t *)serv_numer);

+                if(ret != 0)

+                {

+                    printf("gsw_get_smsc_address fail,ret = %d\n",ret);

+                    continue;

+                }

+                printf("smsc: %s\n", serv_numer);

+                break;

+            }

+            

+            case 8:

+            {

+                printf("input phone number:\n");

+                memset(phone_number, 0x0, GSW_HAL_SMS_ADDRESS_LEN);

+                //fgets(phone_number, MAX_LEN, stdin);

+                printf("%d\n",scanf("%15s", phone_number));

+                fflush(stdin);

+                printf("start memcpy\n");

+                memcpy(serv_numer, phone_number, GSW_HAL_SMS_ADDRESS_LEN);

+                ret = gsw_set_smsc_address((const int8_t *)serv_numer);

+                if(ret != 0)

+                {

+                    printf("gsw_set_smsc_address fail,ret = %d\n",ret);

+                    continue;

+                }

+                printf("smsc: %s\n", serv_numer);

+                break;

+            }

+            

+

+            case 9:

+            {

+

+                printf("gsw_sms_sdk_deinit start\n");

+                ret = gsw_sms_sdk_deinit();

+                if(ret != 0)

+                {

+                    printf("gsw_sms_sdk_deinit fail,ret = %d\n",ret);

+                    dlclose(dlHandle_sms);

+                    continue;

+                }

+                break;

+            }

+

+            default:

+            {

+                continue;

+            }

+            

+        }

+

+

+    }

+

+

+

+

+

+}

+