[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;
}