[Bugfix][TAT-28] ELT port can not NMEA data,and optimization rndis boot mode
Change-Id: I840295c41ad50c28d39de379bcdc75351dcf8932
diff --git a/src/lynq/lib/liblynq-at-common/lynq_at_common.cpp b/src/lynq/lib/liblynq-at-common/lynq_at_common.cpp
index 6afe8cc..e73121d 100755
--- a/src/lynq/lib/liblynq-at-common/lynq_at_common.cpp
+++ b/src/lynq/lib/liblynq-at-common/lynq_at_common.cpp
@@ -151,13 +151,17 @@
if(mode == 1)
{
g_gtarndis_mode = mode;
- system("echo \"1\" > /data/rndis.conf");
+ system("uci set lynq_uci.rndis.status='1'");
+ usleep(10*1000);
+ system("uci commit");
lynq_response_ok();
}
else if (mode == 0)
{
g_gtarndis_mode = mode;
- system("echo \"0\" > /data/rndis.conf");
+ system("uci set lynq_uci.rndis.status='0'");
+ usleep(10*1000);
+ system("uci commit");
lynq_response_ok();
}
else
diff --git a/src/lynq/lib/liblynq-uci/lynq_uci.config b/src/lynq/lib/liblynq-uci/lynq_uci.config
index 86f578c..4956bc1 100755
--- a/src/lynq/lib/liblynq-uci/lynq_uci.config
+++ b/src/lynq/lib/liblynq-uci/lynq_uci.config
@@ -24,5 +24,5 @@
config lynq_gnss_log_level 'lynq_gnss_log'
option level '4'
-config lynq_rndis 'lynq_rndis'
- option initiate '0'
+config rndis_status 'rndis'
+ option status '0'
diff --git a/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_controller.c b/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_controller.c
index 5ab32d5..3cd6be5 100755
--- a/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_controller.c
+++ b/src/telephonyware/3.0/atcid/atci/src/lynq-private/lynq_atsvc_controller.c
@@ -505,102 +505,3 @@
/*load pulgin from plugin config*/
return 0;
}
-
-#if 0
-
-/*
- //填充对端地址
- //报式传输,只发不收可以不bind,要发要收必须要bind
- stRemoteAddr.sun_family = AF_UNIX;
- sprintf(stRemoteAddr.sun_path, "./server"); //注意用sprintf
-
- if(0 > sendto(iSocketFD, "客户端", sizeof("客户端"), 0, (void *)&stRemoteAddr, sizeof(stRemoteAddr)))
- {
- close(iSocketFD);
- printf("发送数据失败!\n");
- return -1;
- }
-
- if(0 > recvfrom(iSocketFD, acBuf, sizeof(acBuf), 0, NULL, NULL))
- {
- close(iSocketFD);
- printf("接收数据失败!\n");
- return -1;
- }
-
- printf("客户端接收到服务器发来的消息是:%s\n", acBuf);
- while(1)
- {
- sleep(1);
- }
- return 0;
-*/
-
-
-
-/*listen UPD SOCKET port */
-struct sockaddr_in server_addr;
-struct sockaddr_in lynqClient_addr;
-bzero(&server_addr, sizeof(server_addr));
-server_addr.sin_family = AF_INET;
-server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
-server_addr.sin_port = htons(LYNQ_SERVICE_PORT);
-/* create socket */
-//int server_socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
-atsvc_socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
-if(atsvc_socket_fd == -1)
-{
- RLOGE("Create Socket Failed:");
- exit(1);
-}
-
-/* bind socket port*/
-if(-1 == (bind(server_socket_fd,(struct sockaddr*)&server_addr,sizeof(server_addr))))
-{
- RLOGE("Server Bind Failed:");
- exit(1);
-}
-/* create epoll fd,add socket to epoll */
-ep_fd = epoll_create(LYNQ_SOCKET_ENVNT_FD_MAX);
-//int len = sizeof(struct sockaddr_in);
-lynq_ev.events = EPOLLIN | EPOLLET;
-lynq_ev.data.fd = server_socket_fd;
-if(epoll_ctl(ep_fd, EPOLL_CTL_ADD, server_socket_fd, &lynq_ev) < 0)
-{
- fprintf(stderr, "epoll set insertion error: fd=%d\n", server_socket_fd);
- return;
-}
-else
-{
- printf("monitor socket add epoll success!!!\n");
-}
-char buffer[LYNQ_SOCKET_BUFFER];
-lynq_client_t *client_tmp = NULL;
-/* tranlate data */
-while(true)
-{
- if(!s_registerCalled)
- {
- sleep(1);
- continue;
- }
- en_fd = epoll_wait(ep_fd, lynq_events, 10000, -1);//###Check valid
- if(en_fd <=0 )
- {
- continue;
- }
- for (int n = 0; n < en_fd; ++n)
- {
- if (lynq_events[n].data.fd == server_socket_fd)
- {
- /* define address to catch the client addreess*/
- //struct sockaddr_in client_addr;
- socklen_t client_addr_length = sizeof(lynqClient_addr);
- /* receive the data */
- bzero(buffer, LYNQ_SOCKET_BUFFER);
- if(recvfrom(server_socket_fd, buffer, LYNQ_SOCKET_BUFFER,0,(struct sockaddr*)&lynqClient_addr, &client_addr_length) == -1)
- {
- RLOGE("Receive Data Failed:");
- continue;
- }
-#endif
diff --git a/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_controller.c b/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_controller.c
index 7a2a6e2..4d5bd8f 100755
--- a/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_controller.c
+++ b/src/telephonyware/3.0/atcid/atci/src/lynq-private/pseudo_terminal/transfer_controller.c
@@ -2,6 +2,13 @@
#include <string.h>
#include <stdlib.h>
#include <termios.h>
+#include <sys/select.h>
+/* According to earlier standards */
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/stat.h>
+
#include "transfer_controller.h"
#include "atcid_serial.h"
@@ -47,8 +54,6 @@
}
return NULL;
}
-
-
int parse_terminal_config(char *path, port_conf_t * port_conf)
{
ALOGD("[%d][%s] enter",__LINE__,__FUNCTION__);
@@ -137,7 +142,7 @@
tcgetattr(fd,&deviceOptions);
// set raw input
- deviceOptions.c_lflag = ICANON ;
+ //deviceOptions.c_lflag = ICANON | ECHO;
// set raw output
deviceOptions.c_oflag &= ~OPOST;
deviceOptions.c_oflag &= ~OLCUC;
@@ -194,7 +199,7 @@
ALOGD("[%d][%s] init urc port %d",__LINE__,__FUNCTION__,port_config.serial_urc_port);
if(open_serial_device_with_id(port_config.serial_urc_port,L_URC_TYPE)!=0)
{
- ALOGD("[%d][%s] init urc port fail%d",__LINE__,__FUNCTION__,port_config.serial_urc_port);
+ ALOGD("[%d][%s] init urc port fail,serial_urc_port:%d,urc_fd:%d",__LINE__,__FUNCTION__,port_config.serial_urc_port,port_config.urc_fd);
}
}
return 0;
@@ -206,6 +211,7 @@
int write_len = 0;
char buffer[out_size+1];
int output_len = 0;
+ int count=0;
memset(buffer,0,out_size+1);
if(NULL == output)
{
@@ -245,7 +251,25 @@
ALOGE("io fd don`t opened");
return;
}
+ resp_try_write:
write_len = write(port_config.io_fd, buffer,output_len);
+ if(write_len != output_len)
+ {
+ LOGATCI(LOG_DEBUG, "resp wirte_line=%d,output_len=%d,errno:%d!",write_len,output_len,errno);
+ if(write_len == -1)
+ {//meybe usb has change,eg.switch adb to rndis mode,or rndis to adb mode,so we need reopen,the reopen time is 5.
+ if(count < 5)
+ {
+ close(port_config.io_fd);
+ init_pseudo_terminal();
+ usleep(500*1000);
+ count++;
+ LOGATCI(LOG_DEBUG, "retry times = %d",count);
+ goto resp_try_write;
+ }
+ }
+ }
+ LOGATCI(LOG_DEBUG, "resp wirte_line=%d,output_len=%d!",write_len,output_len);
}
else if(type == L_URC_TYPE)
{
@@ -254,12 +278,31 @@
ALOGE("urc fd don`t opened");
return;
}
+ urc_try_write:
write_len = write(port_config.urc_fd, buffer,output_len);
+ if(write_len != output_len)
+ {
+ LOGATCI(LOG_DEBUG, "urc wirte_line=%d,output_len=%d,errno:%d!",write_len,output_len,errno);
+ if(write_len == -1)//meybe usb has change,eg.switch adb to rndis mode,or rndis to adb mode,so we need reopen,the reopen time is 5.
+ {
+ if(count < 5)
+ {
+ close(port_config.urc_fd);
+ init_pseudo_terminal();
+ usleep(100*1000);
+ count++;
+ LOGATCI(LOG_DEBUG, "retry times = %d",count);
+ goto urc_try_write;
+ }
+ }
+ }
+ LOGATCI(LOG_DEBUG, "urc wirte_line=%d,output_len=%d!",write_len,output_len);
}
else
{
ALOGE("the type is invalid");
}
+ LOGATCI(LOG_DEBUG, "end retry times = %d",count);
return;
}