[GPS]ubus to socket api

Change-Id: I11230bc70964e08e9c9a6d560211b7a6fd1d8915
diff --git a/mbtk/libmbtk_gnss/mbtk_gnss_5311.c b/mbtk/libmbtk_gnss/mbtk_gnss_5311.c
old mode 100755
new mode 100644
index 64d1fdc..e1333d1
--- a/mbtk/libmbtk_gnss/mbtk_gnss_5311.c
+++ b/mbtk/libmbtk_gnss/mbtk_gnss_5311.c
@@ -19,6 +19,11 @@
 #include <termios.h>
 #include <sys/socket.h>
 #include <fcntl.h>
+#include <unistd.h>
+#include <sys/un.h>
+#include <netinet/in.h>
+
+
 
 #include <libubox/blobmsg_json.h>
 #include <libubus.h>
@@ -55,6 +60,18 @@
 #define PARITY		0
 
 #define MBTK_GNSS_NMEA_PORT "/dev/tty_gnss_nmea"
+
+#define GNSS_SOCK_PATH "/tmp/mbtk_gnss_sock"
+
+static int sock_listen_fd = -1;
+
+typedef enum {
+    GNSS_CMD_INIT = 0,
+    GNSS_CMD_DEINIT,
+    GNSS_CMD_SETTING,
+    GNSS_CMD_DL
+} gnss_cmd_enum;
+
 /**********************************DEFINE***********************************/
 
 /**********************************VARIABLE***********************************/
@@ -597,6 +614,96 @@
     return MBTK_RESULT_SUCCESS;
  }
 
+ static int mbtk_GPS_process(gnss_cmd_enum cmd, void *arg)
+{
+    if(sock_listen_fd < 0) {
+        sock_listen_fd = socket(AF_LOCAL, SOCK_STREAM, 0);
+        if(sock_listen_fd < 0)
+        {
+            printf("socket() fail[%d].\n", errno);
+            return -1;
+        }
+
+        struct sockaddr_un cli_addr;
+        memset(&cli_addr, 0, sizeof(cli_addr));
+        cli_addr.sun_family = AF_LOCAL;
+        strcpy(cli_addr.sun_path, GNSS_SOCK_PATH);
+        if(connect(sock_listen_fd, (struct sockaddr *)&cli_addr, sizeof(cli_addr)))
+        {
+            printf("connect() fail[%d].\n", errno);
+            close(sock_listen_fd);
+            sock_listen_fd = -1;
+            return -1;
+        }
+    }
+
+    char buff[100] = {0};
+    if(cmd == GNSS_CMD_INIT) {
+        if(arg) {
+            sprintf(buff, "gnss_init:%d", *(int*)arg);
+        } else {
+            return -1;
+        }
+    } else if(cmd == GNSS_CMD_DEINIT) {
+        sprintf(buff, "gnss_deinit");
+    } else if(cmd == GNSS_CMD_SETTING) {
+        sprintf(buff, "gnss_setting:%s", arg);
+    } else if(cmd == GNSS_CMD_DL) {
+        sprintf(buff, "gnss_dl:%s", arg);
+    } else {
+        printf("Unknown cmd.\n");
+        return -1;
+    }
+
+    write(sock_listen_fd, buff, strlen(buff));
+
+    int len = 0;
+    while(1) {
+        memset(buff, 0, sizeof(buff));
+        len = read(sock_listen_fd, buff, sizeof(buff));
+        if(len > 0) {
+            printf("RSP : %s\n", buff);
+            if(cmd == GNSS_CMD_INIT) {
+                if(memcmp(buff, "gnss_init", 9) == 0) {
+                    return atoi(buff + 10);
+                } else {
+                    printf("gnss_init response error.\n");
+                    return -1;
+                }
+            } else if(cmd == GNSS_CMD_DEINIT) {
+                if(memcmp(buff, "gnss_deinit", 11) == 0) {
+                    return atoi(buff + 12);
+                } else {
+                    printf("gnss_deinit response error.\n");
+                    return -1;
+                }
+            } else if(cmd == GNSS_CMD_SETTING) {
+                if(memcmp(buff, "gnss_setting", 12) == 0) {
+                    return atoi(buff + 13);
+                } else {
+                    printf("gnss_setting response error.\n");
+                    return -1;
+                }
+            } else if(cmd == GNSS_CMD_DL) {
+                if(memcmp(buff, "gnss_dl", 7) == 0) {
+                    return atoi(buff + 8);
+                } else {
+                    printf("gnss_dl response error.\n");
+                    return -1;
+                }
+            } else {
+                printf("Unknown response.\n");
+                return -1;
+            }
+        } else if(len == 0) {
+            printf("RSP is null.\n");
+            return -1;
+        } else {
+            printf("read = %d:errno = %d\n", len, errno);
+        }
+    }
+}
+
 /**********************************FUNC***********************************/
 
 /**********************************API***********************************/
@@ -641,28 +748,16 @@
     int ret = -1;
     MBTK_GNSS_5311_RESULT_TYPE ubus_gnss_result = MBTK_GNSS_RESULT_SUCCESS;
     uint gps_init_val = MBTK_GNSS_OPEN;
-    struct blob_buf outBlob;
-    memset(&outBlob, 0, sizeof(outBlob));
-    
-    blob_buf_init(&outBlob, 0);
-    blobmsg_add_u32(&outBlob, MBTK_GNSS_UBUS_INIT_PARAM, gps_init_val);
+  
 
-    //UBUS_STATUS_OK
-    ret = mbtk_invoke_reply_data_cb(MBTK_GNSS_UBUS_SERVER, MBTK_GNSS_UBUS_INIT, outBlob.head,
-                                    (ubus_data_handler_t *)mbtk_gnss_ubus_result_callback, &ubus_gnss_result, 25000);
-    blob_buf_free(&outBlob);
-    if (ret != 0)
+    ret = mbtk_GPS_process(GNSS_CMD_INIT, &gps_init_val);
+
+    if (-1 == ret)
     {
-        LOGE("[mbtk_gnss_api] mbtk_invoke_reply_data_cb fail.");
+        LOGE("[mbtk_gnss_api] mbtk_gnss_open fail.");
         return MBTK_GNSS_RESULT_FAIL;
     }
 
-    if(ubus_gnss_result != MBTK_GNSS_RESULT_OPEN_SUCCESS)
-    {
-        LOGE("[mbtk_gnss_api] ubus_gnss_result = [%d].", ubus_gnss_result);
-        return ubus_gnss_result;
-    }
-
     
     mbtk_gnss_status = MBTK_GNSS_OPEN;
     return MBTK_GNSS_RESULT_SUCCESS;
@@ -677,32 +772,15 @@
     }
 
     int ret = -1;
-    MBTK_GNSS_5311_RESULT_TYPE ubus_gnss_result = MBTK_GNSS_RESULT_SUCCESS;
-    uint gps_init_val = MBTK_GNSS_CLOSE;
-    struct blob_buf outBlob;
-    memset(&outBlob, 0, sizeof(outBlob));
 
-    blob_buf_init(&outBlob, 0);
-    blobmsg_add_u32(&outBlob, MBTK_GNSS_UBUS_INIT_PARAM, gps_init_val);
+    ret = mbtk_GPS_process(GNSS_CMD_DEINIT, NULL);
 
-    //UBUS_STATUS_OK
-    ret = mbtk_invoke_reply_data_cb(MBTK_GNSS_UBUS_SERVER, MBTK_GNSS_UBUS_INIT, outBlob.head,
-                                    (ubus_data_handler_t *)mbtk_gnss_ubus_result_callback, &ubus_gnss_result, 8000);
-    blob_buf_free(&outBlob);
-    if (ret != 0)
+    if (-1 == ret)
     {
-        LOGE("[mbtk_gnss_api] mbtk_invoke_reply_data_cb fail.");
+        LOGE("[mbtk_gnss_api] mbtk_gnss_close fail.");
         return MBTK_GNSS_RESULT_FAIL;
     }
 
-    if(ubus_gnss_result != MBTK_GNSS_RESULT_CLOSE_SUCCESS)
-    {
-        LOGE("[mbtk_gnss_api] ubus_gnss_result = [%d].", ubus_gnss_result);
-        return ubus_gnss_result;
-    }
-
-    
-
     mbtk_gnss_status = MBTK_GNSS_CLOSE;
     return MBTK_GNSS_RESULT_SUCCESS;
 }
@@ -794,18 +872,12 @@
     }
     
     int ret = -1;
-    struct blob_buf outBlob;
-    memset(&outBlob, 0, sizeof(outBlob));
-
     LOGE("[mbtk_gnss_api] set command [%s].", param_buf);
-    blob_buf_init(&outBlob, 0);
-    blobmsg_add_string(&outBlob, MBTK_GNSS_UBUS_SET_PARAM, param_buf);
-
-    ret = mbtk_invoke_noreply(MBTK_GNSS_UBUS_SERVER, MBTK_GNSS_UBUS_SET, outBlob.head);
-    blob_buf_free(&outBlob);
-    if (ret != 0)
+      
+    ret = mbtk_GPS_process(GNSS_CMD_SETTING, param_buf);
+   if (-1 == ret)
     {
-        LOGE("[mbtk_gnss_api] mbtk_invoke_noreply fail.");
+        LOGE("[mbtk_gnss_api] mbtk_gnss_setting fail.");
         return MBTK_GNSS_RESULT_FAIL;
     }