[GPS]ubus to socket api

Change-Id: I11230bc70964e08e9c9a6d560211b7a6fd1d8915
diff --git a/mbtk/libmbtk_factory/mbtk_power.c b/mbtk/libmbtk_factory/mbtk_power.c
old mode 100755
new mode 100644
index 89788d5..6d53f2b
--- a/mbtk/libmbtk_factory/mbtk_power.c
+++ b/mbtk/libmbtk_factory/mbtk_power.c
@@ -3,6 +3,14 @@
 #include <stdint.h>
 #include <libubox/blobmsg_json.h>
 #include <libubus.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <netinet/in.h>
+#include <pthread.h>
+#include <sys/epoll.h>
 
 #include "mbtk_power.h"
 /****************************DEFINE***************************************/
@@ -13,6 +21,18 @@
 #define MBTK_POWER_CLOSE_FAIL -1
 #define MBTK_POWER_CLOSE_SUCCESS 0
 
+#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***************************************/
@@ -142,45 +162,110 @@
 	return MBTK_POWER_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);
+         }
+     }
+ }
+ 
+
 
 static int mbtk_power_gnss_close(void)
 {
     int ret = 0;
-    int ubus_gnss_result = MBTK_POWER_CLOSE_SUCCESS;
-    struct ubus_context *mbtk_power_ctx = NULL;
-    ret = mbtk_power_ubus_uloop_init(&mbtk_power_ctx);
-    if(ret < 0)
+
+    ret = mbtk_GPS_process(GNSS_CMD_DEINIT, NULL);
+   
+    if (-1 == ret)
     {
-        LOGE("[MBTK_POWER] mbtk_gnss_ubus_uloop_init() fail.");
+        LOGE("[MBTK_POWER] mbtk_power_gnss_close fail.");
         return MBTK_POWER_CLOSE_FAIL;
     }
 
-    struct blob_buf outBlob;
-    memset(&outBlob, 0, sizeof(outBlob));
-
-    blob_buf_init(&outBlob, 0);
-    blobmsg_add_u32(&outBlob, "gnss_init_param", 0);
-#if 1
-    ret = mbtk_power_invoke_reply_data_cb("mbtk_gnss", "gnss_deinit", outBlob.head,
-                                    (ubus_data_handler_t *)mbtk_power_gnss_callback, &ubus_gnss_result, 8000, mbtk_power_ctx);
-#else
-    ret = mbtk_power_invoke_reply_data_cb("gps", "gnss_deinit", outBlob.head,
-                                    (ubus_data_handler_t *)mbtk_power_gnss_callback, &ubus_gnss_result, 8000, mbtk_power_ctx);
-#endif
-    blob_buf_free(&outBlob);
-    
-    if (ret != 0)
-    {
-        LOGE("[MBTK_POWER] mbtk_invoke_reply_data_cb() fail.");
-        return MBTK_POWER_CLOSE_FAIL;
-    }
-
-    if(ubus_gnss_result != MBTK_POWER_CLOSE_SUCCESS)
-    {
-        return MBTK_POWER_CLOSE_FAIL;
-    }
-
-    mbtk_power_ubus_uloop_deinit(mbtk_power_ctx);
     return MBTK_POWER_CLOSE_SUCCESS;
 }