diff --git a/code/application/source/sf_app/code/include/sf_4g_lpa.h b/code/application/source/sf_app/code/include/sf_4g_lpa.h index 85c05dacc..55354617f 100755 --- a/code/application/source/sf_app/code/include/sf_4g_lpa.h +++ b/code/application/source/sf_app/code/include/sf_4g_lpa.h @@ -71,8 +71,8 @@ void sf_set_wifi_socket(int fd); int sf_get_wifi_socket(void); void sf_set_wifi_cmd(UINT8 cmd); UINT8 sf_get_wifi_cmd(void); -void sf_network_select(UINT8 profileId, UINT8 ctlType); //SF_CONTROL_TYPE_e ctlType -void sf_4g_operator_scan(UINT8 mode, UINT8 ctlType); //SF_CONTROL_TYPE_e ctlType +SINT32 sf_network_select(UINT8 profileId, UINT8 ctlType); //SF_CONTROL_TYPE_e ctlType +SINT32 sf_4g_operator_scan(UINT8 mode, UINT8 ctlType); //SF_CONTROL_TYPE_e ctlType SINT32 sf_lpa_get_esim_iccid(SF_CHAR iccid[][22]); void sf_set_esim_card(INT8 flag); diff --git a/code/application/source/sf_app/code/source/4gMng/sf_4g_lpa.c b/code/application/source/sf_app/code/source/4gMng/sf_4g_lpa.c index 2d6fd26e7..4bc013063 100755 --- a/code/application/source/sf_app/code/source/4gMng/sf_4g_lpa.c +++ b/code/application/source/sf_app/code/source/4gMng/sf_4g_lpa.c @@ -333,7 +333,16 @@ static UINT8 WifiCurrentCmd=0; LPA_GET_PROFILES_INFO getProfilesInfo; LPA_PROFILE_INFO *ProfileData = NULL; LPA_PROFILE_INFO ProfileActive; - +SF_THREAD_S ScanTskCfg = +{ + .IsRun = 0, + .TskId = -1, +}; +SF_THREAD_S NetSelectTskCfg = +{ + .IsRun = 0, + .TskId = -1, +}; void sf_set_wifi_cmd(UINT8 cmd) { WifiCurrentCmd = cmd; @@ -2819,7 +2828,7 @@ void sf_operator_scan_thread(void* args) { printf("scan network.\n"); struct ThreadArgs* myArgs = (struct ThreadArgs*)args; - + ScanTskCfg.IsRun = 1; UINT8 totalOperator = 0; UINT8 totalProfile = 0; UINT8 i = 0; @@ -2968,19 +2977,30 @@ void sf_operator_scan_thread(void* args) sf_share_mem_wifi_down(1); } - + ScanTskCfg.IsRun = 0; } -void sf_4g_operator_scan(UINT8 mode, UINT8 ctlType) +SINT32 sf_4g_operator_scan(UINT8 mode, UINT8 ctlType) { - pthread_t tOperScanTask; + SINT32 ret = SF_FAILURE; static struct ThreadArgs args = {0}; args.arg1 = mode; args.arg2 = ctlType; - - pthread_create(&tOperScanTask,NULL,sf_operator_scan_thread,(void *)&args); + + if(ScanTskCfg.IsRun) + { + SLOGE("thread has already run !!!\n"); + return SF_FAILURE; + } + ret = pthread_create(&ScanTskCfg.TskId,NULL,sf_operator_scan_thread,(void *)&args); + if(ret != SF_SUCCESS) + { + MLOGD("thread creat fail!\n"); + return ret; + } + return SF_SUCCESS; } UINT8 sf_wifi_server_network_select_finish(UINT8 errCode) @@ -3084,7 +3104,7 @@ void sf_network_select_thread(void* args) { struct ThreadArgs* myArgs = (struct ThreadArgs*)args; printf("select network, PID:%d\n", myArgs->arg1); - + NetSelectTskCfg.IsRun = 1; UINT32 ret = SF_LPA_SUCCESS; UINT32 sts = 0; UINT32 retryTime=0; @@ -3339,19 +3359,29 @@ void sf_network_select_thread(void* args) } #endif - + NetSelectTskCfg.IsRun = 0; } -void sf_network_select(UINT8 profileId, UINT8 ctlType) +SINT32 sf_network_select(UINT8 profileId, UINT8 ctlType) { - pthread_t tNetWorkSeclectTask; SLOGD("sf_network_select,Pid:%d ctlType:%d\n", profileId, ctlType); - static struct ThreadArgs args = {0}; args.arg1 = profileId; args.arg2 = ctlType; + SINT32 ret = SF_FAILURE; - pthread_create(&tNetWorkSeclectTask, NULL, sf_network_select_thread, (void *)&args); + if(NetSelectTskCfg.IsRun) + { + SLOGE("thread has already run !!!\n"); + return SF_FAILURE; + } + ret = pthread_create(&NetSelectTskCfg.TskId,NULL,sf_network_select_thread,(void *)&args); + if(ret != SF_SUCCESS) + { + MLOGD("thread creat fail!\n"); + return ret; + } + return SF_SUCCESS; }