Merge "[BugFix][API-1387]fix sta cannot connect ap" into GSW3.0-No-Connman
diff --git a/src/connectivity/gps/2.0/gps_hal/mnldinf/inc/mnldinf_utility.h b/src/connectivity/gps/2.0/gps_hal/mnldinf/inc/mnldinf_utility.h
index 9b6d74b..30d3aa5 100644
--- a/src/connectivity/gps/2.0/gps_hal/mnldinf/inc/mnldinf_utility.h
+++ b/src/connectivity/gps/2.0/gps_hal/mnldinf/inc/mnldinf_utility.h
@@ -21,6 +21,7 @@
#define DUMP_BYTES_PER_LINE 16
#define DUMP_MAX_PRINT_LINE 10
+#define SOCKET_RETRY_MAX_COUNT 20
#define MNLDINF_DUMP_MEM(addr, len) do{\
int i = 0, j = 0;\
diff --git a/src/connectivity/gps/2.0/gps_hal/mnldinf/src/mnldinf_utility.c b/src/connectivity/gps/2.0/gps_hal/mnldinf/src/mnldinf_utility.c
index f6dd4b5..052a9ba 100755
--- a/src/connectivity/gps/2.0/gps_hal/mnldinf/src/mnldinf_utility.c
+++ b/src/connectivity/gps/2.0/gps_hal/mnldinf/src/mnldinf_utility.c
@@ -427,6 +427,7 @@
int fd;
int size;
struct sockaddr_un addr;
+ int socket_retry_counter=0;
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX;
@@ -447,13 +448,23 @@
strerror(errno), errno);
return -1;
}
- if(connect(fd, (struct sockaddr*)&addr, size) == -1) {
- LOGE("mnldinf_socket_tcp_client_connect_local() connect() failed, abstruct=%d name=[%s] reason=[%s]%d",
+/* retry connection if socket connection fail, 500000us*20 times */
+ while (1){
+ if(connect(fd, (struct sockaddr*)&addr, size) == -1) {
+ LOGE("mnldinf_socket_tcp_client_connect_local() connect() failed, abstruct=%d name=[%s] reason=[%s]%d",
abstract, name, strerror(errno), errno);
- close(fd);
- return -1;
+ }else{
+ break;
+ }
+ if(socket_retry_counter >= SOCKET_RETRY_MAX_COUNT) {
+ LOGE("retry connect() for 20 times");
+ close(fd);
+ return -1;
+ }
+ socket_retry_counter++;
+ LOGE("retry connect() socket_retry_counter=%d", socket_retry_counter);
+ usleep(500000);
}
-
return fd;
}
diff --git a/src/connectivity/gps/2.0/gps_hal/src/gpshal.c b/src/connectivity/gps/2.0/gps_hal/src/gpshal.c
old mode 100644
new mode 100755
index 3240013..9aad141
--- a/src/connectivity/gps/2.0/gps_hal/src/gpshal.c
+++ b/src/connectivity/gps/2.0/gps_hal/src/gpshal.c
@@ -139,7 +139,7 @@
// Do not deinit resources
// We want to have a simple design for a built-in service
// "Deinit" is for an installable / removable service
-static void gpshal_resource_init(GpsCallbacks_ext* src) {
+static int gpshal_resource_init(GpsCallbacks_ext* src) {
unsigned int capabilities = 0;
unsigned int year = 0;
char *name = g_gpshal_ctx.gps_name;//"Version: MNLD, MNL";
@@ -155,50 +155,56 @@
system_info.size = sizeof(GnssSystemInfo);
g_gpshal_ctx.gps_cbs->set_system_info_cb(&system_info);
- if (GPSHAL_STATE_UNKNOWN != g_gpshal_ctx.gps_state_intent) return; // at most once
+ if (GPSHAL_STATE_UNKNOWN != g_gpshal_ctx.gps_state_intent){
+ return 0; // already set
+ } // at most once
g_gpshal_ctx.fd_mnl2hal_basic = create_mnl2hal_fd_basic();
- if (-1 == g_gpshal_ctx.fd_mnl2hal_basic) return; // error
+ if (-1 == g_gpshal_ctx.fd_mnl2hal_basic){
+ return -1; // error
+ }
g_gpshal_ctx.fd_mnl2hal_ext = create_mnl2hal_fd_ext();
- if (-1 == g_gpshal_ctx.fd_mnl2hal_ext) return; // error
+ if (-1 == g_gpshal_ctx.fd_mnl2hal_ext){
+ return -1; // error
+ }
g_gpshal_ctx.fd_worker_epoll = epoll_create(MAX_EPOLL_EVENT);
if (-1 == g_gpshal_ctx.fd_worker_epoll) {
LOGE("Fail to create epoll reason=[%s]%d",
strerror(errno), errno);
- return; // error
+ return -1; // error
}
if (mnldinf_epoll_add_fd(
g_gpshal_ctx.fd_worker_epoll,
g_gpshal_ctx.fd_mnl2hal_basic) == -1) {
LOGE("Fail to add fd_mnl2hal basic");
- return; // error
+ return -1; // error
}
if (mnldinf_epoll_add_fd(
g_gpshal_ctx.fd_worker_epoll,
g_gpshal_ctx.fd_mnl2hal_ext) == -1) {
LOGE("Fail to add fd_mnl2hal ext");
- return; // error
+ return -1; // error
}
g_gpshal_ctx.thd_worker = g_gpshal_ctx.gps_cbs->create_thread_cb(
GPSHAL_WORKER_THREAD_NAME, gpshal_worker_thread, NULL);
if (!g_gpshal_ctx.thd_worker) {
LOGE("Fail to create %s", GPSHAL_WORKER_THREAD_NAME);
- return; // error
+ return -1; // error
}
gpshal_set_gps_state(GPSHAL_STATE_RESOURCE);
+ return 0;
}
int gpshal_gpscbs_save(GpsCallbacks_ext* src) {
// assert(NULL != src);
if (sizeof(GpsCallbacks_ext) == src->size) {
LOGD("Use GpsCallbacks");
- gpshal_resource_init(src);
- return 0;
+ return gpshal_resource_init(src);
}
LOGE("Bad callback, size: %zd, expected: %zd",
src->size, sizeof(GpsCallbacks_ext));
diff --git a/src/connectivity/gps/2.0/gps_hal/src/gpsinf.c b/src/connectivity/gps/2.0/gps_hal/src/gpsinf.c
index 88e1b2b..1dc85f0 100644
--- a/src/connectivity/gps/2.0/gps_hal/src/gpsinf.c
+++ b/src/connectivity/gps/2.0/gps_hal/src/gpsinf.c
@@ -338,6 +338,10 @@
// Thread: BackgroundThread
static int gpsinf_start(void) {
// GPSHAL_DEBUG_FUNC_SCOPE2(g_gpshal_ctx.mutex_gps_state_intent);
+ if (GPSHAL_STATE_UNKNOWN == g_gpshal_ctx.gps_state_intent){
+ LOGE("gpsinf_start failed: gps_state_intent=UNKNOWN");
+ return -1;
+ }
memset(&mnlDebugData, 0, sizeof(DebugData));//clear debug data every session
gpshal_set_gps_state_intent(GPSHAL_STATE_START);
gpshal2mnl_gps_start();
@@ -347,6 +351,10 @@
// Thread: BackgroundThread
static int gpsinf_stop(void) {
// GPSHAL_DEBUG_FUNC_SCOPE2(g_gpshal_ctx.mutex_gps_state_intent);
+ if (GPSHAL_STATE_UNKNOWN == g_gpshal_ctx.gps_state_intent){
+ LOGE("gpsinf_stop failed: gps_state_intent=UNKNOWN");
+ return -1;
+ }
gpshal_set_gps_state_intent(GPSHAL_STATE_STOP);
gpshal2mnl_gps_stop();
return 0; // OK to stop
@@ -354,6 +362,10 @@
// Thread: BackgroundThread
static void gpsinf_cleanup(void) {
+ if (GPSHAL_STATE_UNKNOWN == g_gpshal_ctx.gps_state_intent){
+ LOGE("gpsinf_cleanup failed: gps_state_intent=UNKNOWN");
+ return -1;
+ }
timer_t retry_timer;
// GPSHAL_DEBUG_FUNC_SCOPE2(g_gpshal_ctx.mutex_gps_state_intent);
gpshal_set_gps_state_intent(GPSHAL_STATE_CLEANUP);
diff --git a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnld.c b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnld.c
index 3411b98..d32a295 100755
--- a/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnld.c
+++ b/src/connectivity/gps/2.0/mtk_mnld/mnld_entity/src/mnld.c
@@ -7,6 +7,8 @@
#include <stdio.h>
#include <sys/time.h>
#include <sys/socket.h>
+#include <sys/types.h>
+#include <fcntl.h>
#include <time.h>
#include <signal.h>
#if defined(__ANDROID_OS__)
@@ -3530,7 +3532,7 @@
int main(int argc, char** argv) {
mnld_wake_lock_init();
mnld_wake_lock_take();
- LOGD("mnld version=%s\n", MNLD_VERSION);
+ LOGE("mnld version=%s\n", MNLD_VERSION);
daemon_parse_commandline(argc, argv);
set_signal_ignore(SIGPIPE);
@@ -3595,9 +3597,11 @@
if ((argc >= 3) //Parameter count check
&& (!strncmp(argv[2], "meta", 4) || !strncmp(argv[2], "factory", 7)
|| !strncmp(argv[2], "test", 4) || !strncmp(argv[2], "PDNTest", 7))) {
+ LOGE("enter not normal mode\n");
mnld_factory_test_entry(argc, argv);
mnld_wake_lock_give();
} else {
+ LOGE("enter normal mode\n");
gps_control_init();
epo_downloader_init();
qepo_downloader_init();
@@ -3607,6 +3611,21 @@
mpe_function_init();
#endif
mnld_init();
+
+ /*lcz add mnld.server to determined if mnld is ready.start. 2023/10/26/ */
+ int fd=0;
+ fd = open("/tmp/mnld.server",O_CREAT|O_RDONLY,0744);
+ LOGE("tmp-file open\n");
+ if(fd < 0)
+ {
+ LOGE("open error: %d (%s)\n", errno, strerror(errno));
+ }
+ else
+ {
+ close(fd);
+ }
+ /*lcz add mnld.server to determined if mnld is ready.end. 2023/10/26/ */
+
// For MNL5.9 and later version, we move flp_monitor_init after mnld_init,
// creating that the monitor thread after mnld msg socket initialized,
// then the screen status can be send to mnld main thread without concern
diff --git a/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c b/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c
index 4d79d0f..a812738 100755
--- a/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c
+++ b/src/lynq/lib/liblynq-gnss/src/lynq_gnss.c
@@ -72,6 +72,7 @@
int lynq_gnss_callback_reg(lynq_gnss_cb* callbacks)
{
+ int i=0;
if (NULL == callbacks)
{
RLOGD("illegal callbacks!!!");
@@ -85,9 +86,23 @@
RLOGD("callbacks error");
return -1;
}
- if(gpshal_gpscbs_save(turn_cbs) != 0)
+ for(i=0;i<5;i++)
{
- RLOGD("For cbs save error\r\n");
+ RLOGD("The callback_gps_state:%s",gpshal_state_to_string(g_gpshal_ctx.gps_state));
+ if(gpshal_gpscbs_save(turn_cbs) != 0)
+ {
+ RLOGD("For cbs save error\r\n");
+ }
+ RLOGD("The callback_gps_state:%s",gpshal_state_to_string(g_gpshal_ctx.gps_state));
+ if(g_gpshal_ctx.gps_state != GPSHAL_STATE_UNKNOWN)
+ {
+ break;
+ }
+ sleep(1);
+ }
+ if(i>=5)
+ {
+ RLOGD("For cbs save error2\r\n");
return -1;
}
g_lynq_gnss_calback_flag = 1;
@@ -122,6 +137,11 @@
int lynq_gnss_start(void)
{
+ if (g_lynq_gnss_init_flag == 0)
+ {
+ RLOGD("start is not allowed");
+ return -1;
+ }
//memset(&lynq_debug_data, 0, sizeof(DebugData));
gpshal_set_gps_state_intent(GPSHAL_STATE_START);
gpshal2mnl_gps_start();
@@ -130,6 +150,11 @@
int lynq_gnss_stop(void)
{
+ if (g_lynq_gnss_init_flag == 0)
+ {
+ RLOGD("stop is not allowed");
+ return -1;
+ }
gpshal_set_gps_state_intent(GPSHAL_STATE_STOP);
gpshal2mnl_gps_stop();
return 0;