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