[FIXBUG]API-175 API-176 and add sta api

Change-Id: I1115a46e22eab9babfde9a71ac4e573e7129c920
diff --git a/lib/liblynq-wifi6/libwifi6.c b/lib/liblynq-wifi6/libwifi6.c
index 09baa20..6865be2 100755
--- a/lib/liblynq-wifi6/libwifi6.c
+++ b/lib/liblynq-wifi6/libwifi6.c
@@ -13,6 +13,7 @@
 #include <stdlib.h>
 #include <stdlib.h>
 #include <pthread.h>
+#include <ctype.h>
 #include "libwifi6.h"
 
 #ifdef __cplusplus
@@ -21,30 +22,49 @@
 #ifdef __cplusplus
 }
 #endif
-
-#define MAX_CMD 256
+//max len of cmd include password len
+#define MAX_CMD 256    
 #define MAX_RET 1024
 #define MODE_LEN 10
+
+#define PRINT_AND_RETURN_VALUE(str,value) \
+{\ 
+	perror((str));\
+	return (value);\
+}		
+#define CLOSE_FP_RETURN_VALUE(fp,str,value)\
+{\
+	if((pclose((fp)))==-1){ \
+		perror("close fp failed");\		
+	}\	
+	PRINT_AND_RETURN_VALUE((str),(value));\
+}
+
+#define CHECK_NULL_RETURN_VALUE(pt,str,value)\
+{\
+	if((pt)==NULL){ \
+		PRINT_AND_RETURN_VALUE((str),(value));\	
+	}\	
+}
+
 char g_lynq_wifi_ok[3]="OK";
 
 
 void StartThread()
 {
-
 	char start_cmd[120]="wpa_supplicant -iwlan0 -Dnl80211 -c /data/wifi/wg870/wpa_supplicant.conf -g/var/run/wpa_wlan0_cmd  -dd -t -B";
 	char get_pid_cmd[20]="wpa_supplicant";
 	if((GetPIDbyName(get_pid_cmd))>0){
 			return;
-		}	
+		}
 	system(start_cmd);
 	for(int i=0;i<5;i++){
+		sleep(2);
 		if((GetPIDbyName(get_pid_cmd))>0){
 			break;
-		}else{
-			sleep(2);
-			}
+		}
 		if(i==4){
-			printf("start timeout\n");
+			return;
 			}
 	}
     return;
@@ -67,16 +87,7 @@
 
 int lynq_wifi_disable(void)
 {
-	FILE *fp;
-	if((popen("rmmod bcmdhd.ko","w"))==NULL){
-		perror("poepn error!");
-		return -1;
-	}
-	int ret=pclose(fp);
-	if(ret==-1){
-		perror("close file faild");
-		return -1;
-		}
+	system("rmmod bcmdhd.ko");
 	return 0;
 }
 /*
@@ -104,19 +115,18 @@
 }
 */
 int lynq_wifi_work_mode_get(lynq_wifi_work_mode_m *mode)
-{
-
-	char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
+{	
+    char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
 	char lynq_cmd_ret[MAX_RET]={0};
 	char lynq_mode[10]={0};
 	char *strcn="mode=";
-	char sta[64]="station";
-	char ap[64]="AP";
+	char sta[MAX_CMD]="station";
+	char ap[MAX_CMD]="AP";
 	
 	FILE *fp;		
-
-	if ((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){				
-		return -1;	
+	CHECK_NULL_RETURN_VALUE(mode,"mode is null",-1);
+	if ((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
+		return -1;
 		}
 
 	while(1){
@@ -136,12 +146,12 @@
 			}
 		}
 
-	if((pclose(fp))==-1){		
-		perror("close file faild"); 	
-		return -1;	
-		}	
-	return 0;
+	if((pclose(fp))==-1){
+		perror("close file faild");
+		return -1;
+		}
 
+	return 0;
 }
 
 int lynq_wifi_ap_ssid_set(lynq_wifi_index_e idx,char *ap_ssid)
@@ -150,6 +160,12 @@
 	char lynq_wifi_ssid_cmd[80]={0};
 	char lynq_tmp_cmd[MAX_CMD]={0};
 	char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
+	if(idx<0||idx>9){
+		return -1;
+		}
+	if(((strlen(ap_ssid))<8) || ((strlen(ap_ssid))>32)){
+		PRINT_AND_RETURN_VALUE("ssid is illgal",-1);
+	}
 	sprintf(lynq_tmp_cmd,"%s%d%s","IFNAME=wlan0 set_network ",idx," ssid ");
 	sprintf(lynq_wifi_ssid_cmd,"%s%s%s%s%s",lynq_tmp_cmd,"\"",ap_ssid,"\"","\n");
 
@@ -166,12 +182,13 @@
 			perror("close file faild");
 			return -1;
 		}
+	
 	return 0;
-
 }
 
 int lynq_wifi_ap_ssid_get(lynq_wifi_index_e idx,char* ap_ssid)
 {
+	CHECK_NULL_RETURN_VALUE(ap_ssid,"ap_ssid is null",-1);
 	FILE *fp;	
 	char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
 	char lynq_cmd_ret[MAX_RET]={0}; 
@@ -199,20 +216,22 @@
 		perror("close file faild");
 		return -1;
 		}
-    printf("after pclose ssid get\n");
 	return 0;
 }
 
 int lynq_wifi_ap_frequency_set(lynq_wifi_index_e idx,int lynq_wifi_frequency)
 {
 	FILE *fp;
-
-	char lynq_wifi_frequency_cmd[128]={0};
-	char lynq_cmd_mode[128]={0};
-	char lynq_cmd_slect[128]={0};
-	char lynq_cmd_save[128]="IFNAME=wlan0 save_config\n";
-	
-
+	char lynq_wifi_frequency_cmd[MAX_CMD]={0};
+	char lynq_cmd_mode[MAX_CMD]={0};
+	char lynq_cmd_slect[MAX_CMD]={0};
+	char lynq_cmd_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
+	if(idx<0||idx>9){
+		return -1;
+		}
+	if(lynq_wifi_frequency != 2437 || lynq_wifi_frequency != 5180){
+		PRINT_AND_RETURN_VALUE("set frequency not in range",-1);
+	}
 	sprintf(lynq_wifi_frequency_cmd,"IFNAME=wlan0 set_net %d frequency %d\n", idx, lynq_wifi_frequency);
 	sprintf(lynq_cmd_mode, "IFNAME=wlan0 set_net %d mode 2\n", idx);
 	sprintf(lynq_cmd_slect, "IFNAME=wlan0 select_net %d\n", idx);
@@ -221,7 +240,7 @@
 			perror("popen error!");
 			return -1;
 		}
-	
+
 	fwrite(lynq_wifi_frequency_cmd,sizeof(lynq_wifi_frequency_cmd),1,fp);
 	fwrite(lynq_cmd_mode,sizeof(lynq_cmd_mode),1,fp);
 	fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
@@ -233,27 +252,30 @@
 			return -1;
 		}
 
-
 	return 0;
 }
 
 int lynq_wifi_ap_frequency_get(lynq_wifi_index_e idx,int *lynq_wifi_frequency)
 {
+	CHECK_NULL_RETURN_VALUE(lynq_wifi_frequency,"frequency is null",-1);
+
 	FILE *fp;
-	printf("into libwifi6 frequency get\n");
-	char lynq_wifi_ssid_cmd[128]="wpa_cli -iwlan0 -p/var/run/wpa_supplicant status";
-	char lynq_cmd_ret[MAX_RET]={0}; 
+	char lynq_wifi_ssid_cmd[MAX_CMD]="wpa_cli -iwlan0 -p/var/run/wpa_supplicant status";
+	char lynq_cmd_ret[MAX_RET]={0};
 	char *strcn="freq=";
-	char freq[128]={0};
+	char freq[MAX_CMD]={0};
+	if(idx<0||idx>9){
+		return -1;
+		}
 	
-	if((fp=popen(lynq_wifi_ssid_cmd,"r"))==NULL){		
-		perror("popen error!"); 			
-		return -1;	
-		}	
-	while(1){		
-		if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){		
+	if((fp=popen(lynq_wifi_ssid_cmd,"r"))==NULL){
+		perror("popen error!");
+		return -1;
+		}
+	while(1){
+		if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
 			if((strncmp(lynq_cmd_ret,strcn,5))==0)
-				{	
+				{
 					sscanf(lynq_cmd_ret,"%*[^=]=%s",freq);
 					*lynq_wifi_frequency=atoi(freq);
 				}
@@ -282,30 +304,34 @@
 */
 int lynq_wifi_ap_bandwidth_get(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m* bandwidth)
 {
-	printf("into lynq_wifi_ap_bandwidth_get*******\n");
+	if(bandwidth==NULL){
+		PRINT_AND_RETURN_VALUE("call falure",-1);
+	}
 	FILE *fp;
 	char aim[MAX_CMD]={0};
 	char number[10]="80";
-	char lynq_wifi_bandwidth_cmd[64]="/data/wl chanspec\n";
+	char lynq_wifi_bandwidth_cmd[MAX_CMD]="/data/wl chanspec\n";
 	char lynq_cmd_ret[MAX_CMD]={0};
+	if(idx<0||idx>9){
+		return -1;
+		}
 	
-	if((fp=popen(lynq_wifi_bandwidth_cmd,"r"))==NULL){		
+	if((fp=popen(lynq_wifi_bandwidth_cmd,"r"))==NULL){
 		perror("popen error!");
 		return -1;
-		}	
+		}
 	
 	if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
 		strncpy(aim,lynq_cmd_ret+3,2);
-		printf("************band aim string is %s\n",aim);
 		if((strncmp(aim,number,2))==0){
 			*bandwidth=1;
 		}else{
 			*bandwidth=0;
 			}
 		}
-	if((pclose(fp))==-1){		
-		perror("close file faild"); 	
-		return -1;	
+	if((pclose(fp))==-1){
+		perror("close file faild");
+		return -1;
 		}
 
 	return 0;
@@ -318,15 +344,16 @@
 	FILE *fg;
 	char lynq_cmd_ret[MAX_CMD]={0};
 	char lynq_tmp_cmd[MAX_RET]={0};
-	char lynq_change_cmd[64]="/data/wl chanspec ";
-	char chose_idx_cmd[64]="";
+	char lynq_change_cmd[MAX_CMD]="/data/wl chanspec ";
+	char chose_idx_cmd[MAX_CMD]="";
 	sprintf(chose_idx_cmd,"%s%d%s","IFNAME=wlan0 slecet_net ",idx,"\n");
 	if((fg=popen(chose_idx_cmd,"r"))==NULL){
 		perror("popen error!");
 		return -1;
 		}
-	if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){			
+	if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
 		if((strcmp(lynq_cmd_ret,g_lynq_wifi_ok))!=0){
+			CLOSE_FP_RETURN_VALUE(fp);
 			return -1;
 			}
 		}
@@ -352,13 +379,17 @@
 */
 int lynq_wifi_ap_channel_get( lynq_wifi_index_e idx,int* channel)
 {
+	CHECK_NULL_RETURN_VALUE(channel,"channel is null",-1);
 	FILE *fp;
 	char lynq_cmd_set[MAX_CMD]={0};
-	char channel_str[64]={0};
+	char channel_str[MAX_CMD]={0};
 	char lynq_cmd_ret[MAX_RET]={0};
+	if(idx<0||idx>9){
+		return -1;
+		}
 			
-	if((fp=popen("/data/wl chanspec","r"))==NULL){ 			
-		perror("popen error!");			
+	if((fp=popen("/data/wl chanspec","r"))==NULL){
+		perror("popen error!");
 		return -1;
 		}
 
@@ -367,7 +398,7 @@
 		*channel=atoi(channel_str);
 		}
 	if((pclose(fp))==-1){
-		perror("close file faild");	
+		perror("close file faild");
 		return -1;
 		}
 
@@ -375,14 +406,18 @@
 }
 
 
-int lynq_wifi_ap_auth_set(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s auth) 
+int lynq_wifi_ap_auth_set(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s auth)
 {
 	FILE *fp;
+	int ret;
+	if(idx<0||idx>9){
+		return -1;
+		}
 	switch(auth){
 		case LYNQ_WIFI_AUTH_OPEN:
 		{
-			char lynq_auth_cmd[64]={0};
-			char lynq_auth_save[64]="IFNAME=wlan0 save_config\n";
+			char lynq_auth_cmd[MAX_CMD]={0};
+			char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
 			char lynq_cmd_quit[12]="quit\n";
 			sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d key_mgmt NONE\n",idx);
 			
@@ -395,7 +430,7 @@
 			fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
 			fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
 			
-			int ret=pclose(fp);
+			ret=pclose(fp);
 			if(ret==-1){
 				perror("close file faild");
 				return -1;
@@ -405,10 +440,10 @@
 		case LYNQ_WIFI_AUTH_WPA_PSK:
 		{
 
-			char lynq_auth_cmd[64]={0};
-			char lynq_psk_cmd[64]={0};
-			char lynq_pairwise_cmd[64]={0};
-			char lynq_auth_save[64]="IFNAME=wlan0 save_config\n";
+			char lynq_auth_cmd[MAX_CMD]={0};
+			char lynq_psk_cmd[MAX_CMD]={0};
+			char lynq_pairwise_cmd[MAX_CMD]={0};
+			char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
 			char lynq_cmd_quit[12]="quit\n";
 
 			sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d  proto WPA2\n",idx);
@@ -426,36 +461,38 @@
 			fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
 			fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
 		
-			int ret=pclose(fp);
+			ret=pclose(fp);
 			if(ret==-1){
 				perror("close file faild");
 				return -1;
 			}
-		
 			break;
-		}		
+		}
 		default:
 			return -1;
 			}
 
-
 	return 0;
 }
 
 int lynq_wifi_ap_auth_get(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s *auth)
 {
+	CHECK_NULL_RETURN_VALUE(auth,"chanauthnel is null",-1);
 	char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
 	char lynq_cmd_ret[MAX_RET]={0};
 	char get_str_auth[20]={0};
 	char use_to_cmp[4]="WPA";
 	char strcn[20]="key_mgmt=";
+	if(idx<0||idx>9){
+		return -1;
+		}
 	
 	FILE *fp;
 	if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
 		perror("popen error!");
-		return -1;	
-		}	
-	while(1){		
+		return -1;
+		}
+	while(1){
 		if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
 			if((strncmp(lynq_cmd_ret,strcn,9))==0)
 				{
@@ -486,8 +523,8 @@
 	FILE * fp;
 	char lynq_cmd_ret[MAX_RET]={0};
 	char lynq_tmp_cmd[MAX_CMD]={0};	
-	sprintf(lynq_tmp_cmd,"%s%d%s","/data/wl maxassoc ",max_sta_num,"\n");
-	if(idx<0||idx>10){
+	sprintf(lynq_tmp_cmd,"/data/wl maxassoc %d%s",max_sta_num,"\n");
+	if(idx<0||idx>9){
 		return -1;
 		}
 	if((fp=popen(lynq_tmp_cmd,"r"))==NULL)
@@ -513,10 +550,11 @@
 */
 int lynq_wifi_ap_max_sta_get(lynq_wifi_index_e idx,int* max_sta_num)
 {
+	CHECK_NULL_RETURN_VALUE(max_sta_num,"max_sta_num is null",-1);
 	FILE *fp;
 	char get_str_num[5]={0};
 	char lynq_cmd_ret[MAX_RET]={0};
-	if(idx<0||idx>10){
+	if(idx<0||idx>9){
 		return -1;
 		}
 	if((fp=popen("/data/wl maxassoc","r"))==NULL)
@@ -544,32 +582,29 @@
 
 int lynq_wifi_ap_start(lynq_wifi_index_e idx)
 {
-
 	FILE *fp;
-	char LYNQ_WIFI_CMD[128]={0};
-	char LYNQ_CMD_RET[MAX_CMD]={0};
-	sprintf(LYNQ_WIFI_CMD,"wpa_cli -iwlan0 -p/var/run/wpa_supplicant select_net %d\n",idx);
+	char lynq_wifi_cmd[MAX_CMD]={0};
+	char lynq_cmd_quit[MAX_CMD]="quit";
+	if(idx<0||idx>9){
+		return -1;
+		}
+	sprintf(lynq_wifi_cmd,"IFNAME=wlan0 select_net %d\n",idx);
 
-	if((fp=popen(LYNQ_WIFI_CMD,"r"))==NULL)
+	if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
 		{
 			perror("popen error!");
 			return -1;
 		}
 	
-	fgets(LYNQ_CMD_RET,sizeof(LYNQ_CMD_RET),fp);
+	fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
+	fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
 	
-	if((strncmp(LYNQ_CMD_RET,g_lynq_wifi_ok,strlen(g_lynq_wifi_ok)))!=0)
-		{
-			return -1;
-		}	
-
 	int ret=pclose(fp);
 	if(ret==-1)
 		{
 			perror("close file faild");
 			return -1;
 		}
-
 	return 0;
 }
 
@@ -577,19 +612,21 @@
 {
 	int lynq_stop;
 	int lynq_start;
-
+	if(idx<0||idx>9){
+		return -1;
+		}
 	lynq_stop = lynq_wifi_ap_stop(idx);
 	if ( lynq_stop != 0 )
 	{
 		return -1;
 	}
-		
+
 	lynq_start = lynq_wifi_ap_start(idx);
 	if ( lynq_start != 0 )
 	{
 		return -1;
 	}
-	
+
 	return 0;
 
 }
@@ -597,37 +634,41 @@
 int lynq_wifi_ap_stop(lynq_wifi_index_e idx)
 {
 	FILE *fp;
-	char LYNQ_WIFI_CMD[128]={0};
-	char LYNQ_CMD_RET[MAX_CMD]={0};
-	sprintf(LYNQ_WIFI_CMD,"wpa_cli -iwlan0 -p/var/run/wpa_supplicant disable_net %d\n",idx);
+	char lynq_wifi_cmd[MAX_CMD]={0};
+	char lynq_cmd_quit[MAX_CMD]="quit";
+	if(idx<0||idx>9){
+		return -1;
+		}
+	sprintf(lynq_wifi_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
 
-	if( (fp=popen(LYNQ_WIFI_CMD,"r")) == NULL ){
+	if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
+		{
 			perror("popen error!");
 			return -1;
 		}
-		
-	fgets( LYNQ_CMD_RET,sizeof(LYNQ_CMD_RET),fp );
-		
-	if((strncmp(LYNQ_CMD_RET,g_lynq_wifi_ok,sizeof(g_lynq_wifi_ok)))!=0){
-			return -1;
-		}	
-	
+
+	fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
+	fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
+
 	int ret=pclose(fp);
-	if(ret==-1){
-		perror("close file faild");
-		return -1;
+	if(ret==-1)
+		{
+			perror("close file faild");
+			return -1;
 		}
-	
 	return 0;
 }
 
 int lynq_wifi_ap_hide_ssid(lynq_wifi_index_e idx)
 {
 	FILE *fp;
-	char lynq_disable_cmd[128]={0};
-	char lynq_select_cmd[128]={0};
+	char lynq_disable_cmd[MAX_CMD]={0};
+	char lynq_select_cmd[MAX_CMD]={0};
 	char lynq_hide_cmd[]="IFNAME=wlan0 SET HIDE_SSID 1\n";
-	
+	if(idx<0||idx>9){
+		return -1;
+		}
+
 	sprintf(lynq_disable_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
 	sprintf(lynq_select_cmd,"IFNAME=wlan0 select_net %d\n",idx);
 	if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
@@ -638,7 +679,7 @@
 	fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
 	fwrite(lynq_hide_cmd,sizeof(lynq_hide_cmd),1,fp);
 	fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
-		
+	
 	int ret=pclose(fp);
 	if(ret==-1){
 		perror("close file faild");
@@ -655,9 +696,12 @@
 		perror("popen error!");
 		return -1;
 	}
-	char lynq_disable_cmd[128]={0};
-	char lynq_select_cmd[128]={0};
-	char lynq_unhide_cmd[128]="IFNAME=wlan0 SET HIDE_SSID 0\n";
+	char lynq_disable_cmd[MAX_CMD]={0};
+	char lynq_select_cmd[MAX_CMD]={0};
+	char lynq_unhide_cmd[MAX_CMD]="IFNAME=wlan0 SET HIDE_SSID 0\n";
+	if(idx<0||idx>9){
+		return -1;
+		}
 
 	sprintf(lynq_disable_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
 	sprintf(lynq_select_cmd,"IFNAME=wlan0 select_net %d\n",idx);
@@ -665,7 +709,7 @@
 	fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
 	fwrite(lynq_unhide_cmd,sizeof(lynq_unhide_cmd),1,fp);
 	fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
-				
+
 	int ret=pclose(fp);
 	if(ret==-1){
 		perror("close file faild");
@@ -681,12 +725,16 @@
 	int ret;
 	int pass_len;
 	pass_len=strlen(password);
-	if(pass_len< 0 || pass_len > 256){
+	if(((pass_len+1) > MAX_CMD) || pass_len<8){
+		PRINT_AND_RETURN_VALUE("password is illgal",-1);
+	}else if((lynq_get_wifi_space(password))== 1){
+		PRINT_AND_RETURN_VALUE("password is illgal",-1);
+	}
+	if(idx<0||idx>9){
 		return -1;
 		}
-
 	char lynq_tmp_cmd[300]={0};
-	char lynq_pass_save[64]="IFNAME=wlan0 save_config\n";
+	char lynq_pass_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
 	char lynq_cmd_quit[12]="quit\n";
 	sprintf(lynq_tmp_cmd,"%s%d%s%s%s%s%s","IFNAME=wlan0 set_net ",idx," psk ","\"",password,"\"","\n");
 
@@ -698,12 +746,13 @@
 	fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
 	fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
 	fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
-	
+
 	ret=pclose(fp);
 	if(ret==-1){
 		perror("close file faild");
 		return -1;
 	}
+
 	return 0;
 }
 
@@ -712,44 +761,52 @@
 	FILE *fp;
 	int pass_len;
 	pass_len=strlen(password);
-	if(pass_len< 0 || pass_len > 256){
+	if(((pass_len+1) > MAX_CMD) || pass_len<8){
+		PRINT_AND_RETURN_VALUE("password is illgal",-1);
+	}else if((lynq_get_wifi_space(password))== 1){
+		PRINT_AND_RETURN_VALUE("password is illgal",-1);
+	}
+	if(idx<0||idx>9){
 		return -1;
 		}
 	char lynq_tmp_cmd[MAX_CMD]={0};
-	char lynq_pass_save[64]="IFNAME=wlan0 save_config\n";
+	char lynq_pass_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
 	char lynq_cmd_quit[12]="quit\n";
 	sprintf(lynq_tmp_cmd,"%s%d%s%s%s%s%s","IFNAME=wlan0 set_net ",idx," psk ","\"",password,"\"","\n");
-	
+
 	if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
 			perror("popen error!");
 			return -1;
 		}
-	
+
 	fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
 	fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
 	fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
-	
+
 	int ret=pclose(fp);
 	if(ret==-1){
 		perror("close file faild");
 		return -1;
 	}
-	
+
 	return 0;
 }
 
-/*
+
 int lynq_wifi_sta_ssid_set(lynq_wifi_index_e idx,char *sta_ssid)
 {
-	printf("*******into lynq_wifi_sta_ssid_set\n");
 	FILE *fp;
-	char lynq_wifi_ssid_cmd[128]={0};
+	char lynq_wifi_ssid_cmd[80]={0};
 	char lynq_tmp_cmd[MAX_CMD]={0};
-	char lynq_cmd_save[128]="IFNAME=wlan0 save_config\n";
-
-	sprintf(lynq_tmp_cmd,"IFNAME=wlan0 set_network %d ssid ",idx);
+	char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
+	sprintf(lynq_tmp_cmd,"%s%d%s","IFNAME=wlan0 set_network ",idx," ssid ");
 	sprintf(lynq_wifi_ssid_cmd,"%s%s%s%s%s",lynq_tmp_cmd,"\"",sta_ssid,"\"","\n");
-    printf("set sta ssid cmd: %s\n",lynq_wifi_ssid_cmd);
+	if(idx<0||idx>9){
+		return -1;
+		}
+	if(((strlen(sta_ssid))>32)){
+		PRINT_AND_RETURN_VALUE("ssid is illgal",-1);
+	}
 	if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
 			perror("popen error!");
 			return -1;
@@ -757,48 +814,46 @@
 
 	fwrite(lynq_wifi_ssid_cmd,sizeof(lynq_wifi_ssid_cmd),1,fp);
 	fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
-	
-		int ret=pclose(fp);
+
+	int ret=pclose(fp);
 		if(ret==-1){
 			perror("close file faild");
 			return -1;
 		}
-	
-	return 0;
 
+	return 0;
 }
 
 int lynq_wifi_sta_ssid_get(lynq_wifi_index_e idx,char* sta_ssid)
 {
-	FILE *fp;
-	char get_ssid[108]={0};
+	CHECK_NULL_RETURN_VALUE(sta_ssid,"ap_ssid is null",-1);
+	FILE *fp;	
 	char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
 	char lynq_cmd_ret[MAX_RET]={0}; 
 	char *strcn="ssid=";
 	if(idx>10||idx<0){
 		return -1;
-		}		
+		}
 	if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){		
 		perror("popen error!"); 			
-		return -1;	
-		}	
-	while(1){		
-		if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){						
-			if((strncmp(lynq_cmd_ret,strcn,5))==0)			
+		return -1;
+		}
+	while(1){
+		if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
+			if((strncmp(lynq_cmd_ret,strcn,5))==0)
 				{
-					sscanf(lynq_cmd_ret,"%*[^=]=%s",get_ssid);
-					strcpy(sta_ssid,get_ssid);
-				}					
-			}		
-		if(feof(fp))
-		{			
-			break;			
-		}			
-		}	
-	if((pclose(fp))==-1){		
-		perror("close file faild"); 	
-		return -1;	
-		}	
+					sscanf(lynq_cmd_ret,"%*[^=]=%s",sta_ssid);
+				}
+			}
+		if(feof(fp)){
+			break;
+			}
+		}
+	
+	if((pclose(fp))==-1){
+		perror("close file faild");
+		return -1;
+		}
 	return 0;
 
 }
@@ -806,90 +861,93 @@
 int lynq_wifi_sta_auth_set(lynq_wifi_index_e idx, lynq_wifi_sta_auth_s auth)
 {
 	FILE *fp;
+	int ret;
+	if(idx<0||idx>9){
+		return -1;
+		}
 	switch(auth){
 		case LYNQ_WIFI_STA_AUTH_OPEN:
 		{
-			char lynq_auth_cmd[128]={0};
-			char lynq_auth_save[]="IFNAME=wlan0 save_config\n";
-			sprintf(lynq_auth_cmd,"%s%d%s","IFNAME=wlan0 set_net ",idx," key_mgmt NONE\n");
+			char lynq_auth_cmd[MAX_CMD]={0};
+			char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
+			char lynq_cmd_quit[12]="quit\n";
+			sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d key_mgmt NONE\n",idx);
+
 			if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
 				perror("popen error!");
 				return -1;
 			}
-				
+
 			fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
 			fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
-			
-			int ret=pclose(fp);
+			fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
+
+			ret=pclose(fp);
 			if(ret==-1){
 				perror("close file faild");
 				return -1;
-			}
-				break;
-			}
+				}
+			break;
+		}
 		case LYNQ_WIFI_STA_AUTH_WPA_PSK:
 		{
-			char lynq_auth_cmd[128]={0};
-			char lynq_psk_cmd[128]={0};
-			char lynq_pairwise_cmd[50]={0};
-			char lynq_auth_save[128]="IFNAME=wlan0 save_config\n";
-			sprintf(lynq_auth_cmd,"%s%d%s","IFNAME=wlan0 set_net ",idx," proto WPA2\n");
-			sprintf(lynq_psk_cmd,"%s%d%s","IFNAME=wlan0 set_net ",idx," key_mgmt WPA-PSK\n");
-			sprintf(lynq_pairwise_cmd,"%s%d%s","IFNAME=wlan0 set_net ",idx," pairwise CCMP\n");
-						
+			char lynq_auth_cmd[MAX_CMD]={0};
+			char lynq_psk_cmd[MAX_CMD]={0};
+			char lynq_pairwise_cmd[MAX_CMD]={0};
+			char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
+			char lynq_cmd_quit[12]="quit\n";
+
+			sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d  proto WPA2\n",idx);
+			sprintf(lynq_psk_cmd,"IFNAME=wlan0 set_net %d key_mgmt WPA-PSK\n",idx);
+			sprintf(lynq_pairwise_cmd,"IFNAME=wlan0 set_net %d pairwise CCMP\n",idx);
+			
 			if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
 				perror("popen error!");
 				return -1;
 			}
-	
+
 			fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
 			fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
 			fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
 			fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
-			
-			int ret=pclose(fp);
-			if(ret==-1)
-			{
+			fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
+
+			ret=pclose(fp);
+			if(ret==-1){
 				perror("close file faild");
 				return -1;
 			}
-			
 			break;
-		}		
+		}
 		default:
 			return -1;
-	}
-	
+			}
+
 	return 0;
 }
 
 int lynq_wifi_sta_auth_get(lynq_wifi_index_e idx, lynq_wifi_sta_auth_s* auth)
 {
-	FILE *fp;
-	char *lynq_wifi_auth_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
+	CHECK_NULL_RETURN_VALUE(auth,"chanauthnel is null",-1);	
+	char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
 	char lynq_cmd_ret[MAX_RET]={0};
-	char get_auth[12]={0};
-	char strcn[12]="key_mgmt=";
-	char open[12]="NONE";
+	char get_str_auth[20]={0};
+	char use_to_cmp[4]="WPA";
+	char strcn[20]="key_mgmt=";
 
-	if(idx<0||idx>10){
-		return -1;
-		}
-	
-	if((fp=popen(lynq_wifi_auth_cmd[0],"r"))==NULL){
+	FILE *fp;
+	if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
 		perror("popen error!");
-		return -1;
+		return -1;	
 		}
 	while(1){
-		if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL)
-		{
+		if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
 			if((strncmp(lynq_cmd_ret,strcn,9))==0)
 				{
-					sscanf(lynq_cmd_ret,"%*[^=]=%s",get_auth);
-					if((strcmp(open,get_auth))==0){
-						*auth=LYNQ_WIFI_AUTH_OPEN;
-						}else{
-							*auth=LYNQ_WIFI_AUTH_WPA_PSK;
+					sscanf(lynq_cmd_ret,"%*[^=]=%s",get_str_auth);
+					if((strncmp(get_str_auth,use_to_cmp,3))==0){
+						*auth=LYNQ_WIFI_AUTH_WPA_PSK;
+						break;
 						}
 				}
 			}
@@ -897,67 +955,73 @@
 			break;
 			}
 		}
-	if((pclose(fp))==-1)
-	{
+	if(*auth!=LYNQ_WIFI_AUTH_WPA_PSK){
+		*auth=LYNQ_WIFI_AUTH_OPEN;
+		}
+	if((pclose(fp))==-1){
 		perror("close file faild");
 		return -1;
-	}
-
-	return 0;
+		}
 
 }
 
-int lynq_wifi_sta_connect(void)
+int lynq_wifi_sta_connect(lynq_wifi_index_e idx)
 {
-
 	FILE *fp;
-	char lynq_wifi_cmd[128]={0};
-	char lynq_cmd_ret[MAX_RET]={0};
-	sprintf(lynq_wifi_cmd,"wpa_cli -iwlan0 -p/var/run/wpa_supplicant select_net %d\n",idx);
+	char lynq_wifi_cmd[MAX_CMD]={0};
+	char lynq_cmd_quit[MAX_CMD]="quit\n";
+	if(idx<0||idx>9){
+		return -1;
+		}
+	sprintf(lynq_wifi_cmd,"IFNAME=wlan0 select_net %d\n",idx);
 
-	if((fp=popen(lynq_wifi_cmd,"r"))==NULL){
+	if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
+		{
 			perror("popen error!");
 			return -1;
 		}
-	fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp);
 
-	if((strncmp(lynq_cmd_ret,g_lynq_wifi_ok,strlen(g_lynq_wifi_ok)))!=0){
-			return -1;
-		}
+	fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
+	fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
 
 	int ret=pclose(fp);
-	if(ret==-1){
-		perror("close file faild");
-		return -1;
+	if(ret==-1)
+		{
+			perror("close file faild");
+			return -1;
 		}
-
 	return 0;
 }
 
 int lynq_wifi_sta_disconnect(lynq_wifi_index_e idx)
 {
 	FILE *fp;
-	char LYNQ_WIFI_CMD[128]={0};
-	char LYNQ_CMD_RET[MAX_CMD]={0};
-	sprintf(LYNQ_WIFI_CMD,"wpa_cli -iwlan0 -p/var/run/wpa_supplicant disable_net %d\n",idx);
-	if((fp=popen(LYNQ_WIFI_CMD,"r"))==NULL){
+	char lynq_wifi_cmd[MAX_CMD]={0};
+	char lynq_cmd_quit[MAX_CMD]="quit\n";
+	if(idx<0||idx>9){
+		return -1;
+		}
+	sprintf(lynq_wifi_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
+
+	if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
+		{
 			perror("popen error!");
 			return -1;
 		}
-	fgets(LYNQ_CMD_RET,sizeof(LYNQ_CMD_RET),fp);
 
-	if((strncmp(LYNQ_CMD_RET,g_lynq_wifi_ok,strlen(g_lynq_wifi_ok)))!=0){
-			return -1;
-		}	
+	fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
+	fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
+
 	int ret=pclose(fp);
-	if(ret==-1){
-		perror("close file faild");
-		return -1;
+	if(ret==-1)
+		{
+			perror("close file faild");
+			return -1;
 		}
 
 	return 0;
 }
-*/
+
 int lynq_wifi_wpa_start(void){
 	int ret;
 	pthread_t pth;
@@ -972,39 +1036,40 @@
 }
 
 int lynq_wifi_wpacli_start(void){
-	
 	FILE *fp;
 	int i=0;
 	char lynq_cmd_ret[MAX_RET]={0};
-	char add_cmd[128]="IFNAME=wlan0 add_net\n";
-	char save_cmd[128]="IFNAME=wlan0 save_config\n";
+	char add_cmd[MAX_CMD]="IFNAME=wlan0 add_net\n";
+	char save_cmd[MAX_CMD]="IFNAME=wlan0 save_config\n";
 	char exit_cmd[20]="quit\n";
 
-	
+	if(lynq_get_idx_number() == 1){
+		PRINT_AND_RETURN_VALUE("don't need add idx agin\n",0);
+	}
 	fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w");
 	if(fp==NULL){
 		perror("start wpa_supplicant faild!");
 		return -1;
 		}
 
-	for(i=0;i<9;i++){
+	for(i=0;i<10;i++){
 		fwrite(add_cmd,sizeof(add_cmd),1,fp);
 		}
 	fwrite(save_cmd,sizeof(save_cmd),1,fp);
 	fwrite(exit_cmd,sizeof(exit_cmd),1,fp);
-	
+
 	int ret=pclose(fp);
 	if(ret==-1)
 	{
 		perror("close file faild");
 		return -1;
 	}
-	
+
  	return 0;
 }
 
 pid_t GetPIDbyName(char* ps_name)
-{    
+{
 	FILE *fp;
 	char *cmd=(char*)calloc(1,200);
 	sprintf(cmd,"pidof %s",ps_name);
@@ -1014,3 +1079,71 @@
 	return atoi(cmd);
 }
 
+int lynq_get_idx_number(void)
+{
+	FILE *fp;
+	const char* number="9";
+	char lynq_wifi_ssid_cmd[MAX_CMD]="wpa_cli -iwlan0 -p/var/run/wpa_supplicant list_net";
+	char lynq_cmd_ret[MAX_RET]={0};
+
+	if((fp=popen(lynq_wifi_ssid_cmd,"r"))==NULL){
+		perror("popen error!");	
+		return -1;
+		}	
+	while(1){		
+		if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
+			if((strncmp(lynq_cmd_ret,number,1))==0)
+			{
+				CLOSE_FP_RETURN_VALUE(fp,"don't need add idx",1);
+			}
+		}
+		if(feof(fp)){
+			break;
+			}
+		}
+
+	if((pclose(fp))==-1){
+		perror("close file faild");
+		return -1;
+		}
+
+	return 0;
+}
+
+
+int lynq_get_wifi_mac(char* wifi_mac)
+{
+	FILE * fp;
+	char lynq_cmd_ret[MAX_RET]={0};
+	char lynq_tmp_cmd[MAX_CMD]={0};	
+
+	if((fp=popen("/data/wl cur_etheraddr","r"))==NULL)
+	{
+		perror("popen error!");
+		return -1;
+	}
+	if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
+	{
+		perror("fread fail!");
+		return -1;
+	}
+	strncpy(wifi_mac,lynq_cmd_ret+14,18);
+	int ret=pclose(fp);
+	if(ret==-1)
+	{
+		perror("close file faild");
+		return -1;
+	 }
+
+	return 0;
+}
+int lynq_get_wifi_space(char* password){
+	int i;
+	for(i=0;password[i];i++){
+		if(isspace(password[i])){
+			return 1;
+		}
+	}
+
+	return 0;
+}