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;