[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit

Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/app/zte_comm/wlan/wifi_test.c b/ap/app/zte_comm/wlan/wifi_test.c
new file mode 100755
index 0000000..93f5720
--- /dev/null
+++ b/ap/app/zte_comm/wlan/wifi_test.c
@@ -0,0 +1,373 @@
+#include <stdio.h>

+#include <stdlib.h>

+#include <stdbool.h>

+#include <stdio.h>

+#include <string.h>

+#include <errno.h>

+#include <unistd.h>

+#include <sys/types.h>

+#include <sys/time.h>

+#include <getopt.h>

+#include <time.h>

+#include <wifi_msg.h>

+#include "softap_api.h"

+

+

+#include "wifi_sta_ctrl.h"

+#include "wifi_util.h"

+/*

+static char * g_short_string = "u:b:s:d:h";

+

+static struct option g_long_options[] = {

+	{"upgrade",   		required_argument,	NULL,	'u'},

+	{"boot",    		required_argument,	NULL,	'b'},

+	{"status",   		required_argument,	NULL,	's'},

+	{"debug",   		required_argument,	NULL,	'd'},

+	{"help",			no_argument,		NULL,	'h'},

+};

+

+static option_handle_t g_option_handle[] = {

+	{'u',		excute_command_upgrade},

+	{'b',		excute_command_boot},

+	{'s',		excute_command_status},

+	{'d',		excute_command_debug},

+	{'h',		excute_command_help}

+};

+

+*/

+

+int  msg_queue_id = 0;

+scan_result_t  g_scan_spot_list[60];

+int g_spot_cur_num = 0;

+void usage (void)

+{

+	printf ("cmd list: "

+			"  open		open wifi\n"

+			"  close	close wifi\n"

+			"  results	display the scan results\n"

+	         "  mmi		display scan list to simulate watch mmi\n"

+	         "  help	dispaly this message\n"

+             "  scan	send scan cmd\n"			 

+             "  conn	connect the ap specified by the index of scan list ,and need input the password\n"			 

+	         "  forget	disconnect and forget the ap\n"

+	         "  dump	dump the content of the global variable in wlan_manager\n"

+	         "  cmd 	you can send a wpa_supplicant cmd directly\n");

+}

+

+static scan_result_t* parse_spot_string(scan_result_t *spot, char *spot_string)

+{

+	char *splited_string = NULL;

+	char *save = NULL;

+	const char *delimiter = ",";

+	scan_content_t scan_content = WIFI_STATION_AP_CONTENT_UNDEFINED;

+	char spot_string_tmp[256] = {0};

+

+	if (spot_string == NULL) {

+		return NULL;

+	}

+

+	safe_strcpy(spot_string_tmp, spot_string, 256);

+

+	//·Ö¸î×Ö·û´®£¬´æ´¢µ½½á¹¹Ìå

+	splited_string = strtok_r(spot_string_tmp, delimiter, &save);

+

+//	wf_log("%s", splited_string);

+	while (splited_string) {

+		scan_content++;

+		switch (scan_content) {

+		case WIFI_STATION_AP_MAC:

+			safe_strcpy(spot->mac, splited_string, WIFI_STATION_MAC_LEN);

+			break;

+		case WIFI_STATION_AP_SSID:

+			safe_strcpy(spot->ssid, splited_string, WIFI_STATION_SSID_LEN);

+			break;		

+		case WIFI_STATION_AP_AUTH_MODE:

+			safe_strcpy(spot->auth_mode, splited_string, WIFI_STATION_AUTH_MODE_LEN);

+			break;

+		case WIFI_STATION_AP_ENCRYPT_TYPE:

+			safe_strcpy(spot->encrypt_type, splited_string, WIFI_STATION_ENCRYPT_TYPE_LEN);

+			break;

+		case WIFI_STATION_AP_CHANNEL:

+			spot->channel = atoi(splited_string);

+			break;

+		case WIFI_STATION_AP_SIGNAL:

+			spot->signal = atoi(splited_string);

+			break;

+		case WIFI_STATION_AP_CONNECT_STATUS:

+			spot->connect_status = atoi(splited_string);

+			break;

+		case WIFI_STATION_AP_NETWORK_ID:

+			spot->network_id = atoi(splited_string);

+			break;

+		default:

+			break;

+		}

+

+		splited_string = strtok_r(NULL, delimiter, &save);

+//		wf_log("%s", splited_string);

+	}

+

+	if (scan_content != WIFI_STATION_AP_NETWORK_ID) {

+		return NULL;

+	}

+

+	return spot;

+

+}

+

+static void parse_scan_result(char *aplist,char* aplist1)

+{

+	char *splited_string = NULL;

+	char *save = NULL;

+	const char *delimiter = ";";

+	char spot_string_tmp[2048+2] = {0};// nv ×¿ÉÒÔ´æ´¢1024 byte

+	int index = 0;

+	if (aplist == NULL) {

+		return;

+	}

+	if(strlen(aplist)>0){

+		safe_strcpy(spot_string_tmp, aplist, sizeof(spot_string_tmp));

+		if(strlen(aplist1)>0){

+			strcat(spot_string_tmp, ";");

+			strcat(spot_string_tmp, aplist1);

+		}

+	}

+	else{

+		return;

+	}

+

+	//·Ö¸î×Ö·û´®£¬´æ´¢µ½½á¹¹Ìå

+	splited_string = strtok_r(spot_string_tmp, delimiter, &save);

+//	wf_log("profile=%s", splited_string);

+	while (splited_string) {

+		parse_spot_string(&g_scan_spot_list[index], splited_string);

+		index++;

+		splited_string = strtok_r(NULL, delimiter, &save);

+//		wf_log("profile=%s", splited_string);

+	}

+

+	g_spot_cur_num = index;

+

+}

+

+static void set_spot_state(msg_act_spot_t *mas)

+{

+	int i = 0;

+	spot_action_t  action = mas->act;

+	for(i = 0; i< g_spot_cur_num; i++ ){

+		if( strcmp(g_scan_spot_list[i].mac, mas->mac) ==0){

+			if(SAVE_ACTION == action){

+				g_scan_spot_list[i].network_id = mas->network_id;

+			}

+			else if(DEL_ACTION == action)

+				g_scan_spot_list[i].network_id = -1;

+			else if(CONNECTING_ACTION == action)

+				g_scan_spot_list[i].connect_status = CONNECTING_STATUS;

+			else if(DHCPING_ACTION == action)

+				g_scan_spot_list[i].connect_status = DHCPING_STATUS;

+			else if(CONNECTED_ACTION == action)

+				g_scan_spot_list[i].connect_status = CONNECTED_STATUS;

+			else if(DISCONNECT_ACTION == action)

+				g_scan_spot_list[i].connect_status = DISCONNECT_STATUS;

+			

+			break;

+		}

+	}

+}

+

+

+static void process_msg(MSG_BUF *pMsg)

+{

+	switch (pMsg->usMsgCmd) {

+		case   MSG_CMD_WIFI_STATION_INDICATE_SCAN_RESULTS:

+		{

+			if(pMsg->usDataLen ==0){

+				char aplist[1025]={0};

+				char aplist1[1025]={0};

+				sc_cfg_get("EX_APLIST", aplist, 1024);

+				sc_cfg_get("EX_APLIST1", aplist1, 1024);

+				parse_scan_result(aplist,aplist1);

+			}

+			else

+			{

+				msg_act_spot_t *mas = (msg_act_spot_t *)pMsg->aucDataBuf;

+				set_spot_state(mas);

+			}

+			break;

+		}

+		default:

+			break;

+	}

+

+}

+

+void dump_spot_list()

+{

+	int i = 0;

+	printf("%-8s%-24s%-32s%-16s%-8s%-8s%-8s\n","Index","MAC","SSID","CHANNEL","SIGNAL","ID","State");

+	for(i = 0; i< g_spot_cur_num; i++){

+		scan_result_t  *spot = &g_scan_spot_list[i];

+		printf("%-8d%-24s%-32s%-16d%-8d%-8d%-8s\n",i, spot->mac, spot->ssid,spot->channel, 

+		spot->signal,spot->network_id, spot->connect_status==CONNECTED_STATUS?"O":"x");

+	}

+}

+void dump_conn_ap(spot_t *conn_ap)

+{

+	printf("mac=%s\n",conn_ap->mac);

+	printf("ssid=%s\n",conn_ap->ssid);

+	printf("auth_mode=%s\n",conn_ap->auth_mode);

+	printf("encrypt_type=%s\n",conn_ap->encrypt_type);

+	printf("password=%s\n",conn_ap->password);

+	printf("network_id=%d\n",conn_ap->network_id);

+}

+int mmi_display_loop = 0;

+

+

+

+static void *mmi_loop (void *param)

+{

+	MSG_BUF wlanMsg ={0};

+	char name[32] = {0};

+	int ret = -1;

+

+	strcpy (name, (char*) param);

+	prctl (PR_SET_NAME, name, 0, 0, 0);

+

+	while (1) { 

+		if(0 == mmi_display_loop)break;

+		dump_spot_list();

+		sleep(1);

+		printf("\033[2J");//clear screen

+		printf("\033[0;0H");//locate cursor to head

+	}

+

+	return NULL;

+}

+void mmi_display()

+{

+	mmi_display_loop = 1;

+

+	wf_create_thread ("mmi_loop", mmi_loop);

+

+	while(1){

+		char cmd;

+		scanf("%c", &cmd);

+		if(cmd == 'q'){

+			mmi_display_loop = 0;

+			break;

+		}

+	}

+	

+	return;

+}

+

+static void *station_loop (void *param)

+{

+	MSG_BUF wlanMsg ={0};

+	char name[32] = {0};

+	int ret = -1;

+

+	strcpy (name, (char*) param);

+	prctl (PR_SET_NAME, name, 0, 0, 0);

+

+	while (1) { 

+		memset (&wlanMsg, 0, sizeof (MSG_BUF));

+		ret = msgrcv (msg_queue_id, &wlanMsg, sizeof (MSG_BUF) - sizeof (LONG), 0, 0);

+		if (ret == -1) {

+			continue;

+		}

+		process_msg (&wlanMsg);

+		

+	}

+

+	return NULL;

+}

+

+

+int main (int argc, char *argv[])

+{

+	int c=0;

+	int iRet = -1;

+	char cmd[128]={0};

+	

+	msg_queue_id = wf_create_msg_qid (MODULE_ID_WLAN_SERVER);

+	wf_create_thread ("wlan-mmi", station_loop);

+	printf("rda_mmi v1.0\n"

+		"please use results, conn, disc three cmd to control it\n\n");

+	

+	for (;;) {

+

+		printf(">>");

+		scanf("%s", cmd);

+

+		if(!strcmp(cmd, "open")){

+			wf_msg_to_self(MSG_CMD_WIFI_STATION_OPEN, 0, NULL);

+		}

+		else if(!strcmp(cmd, "close")){

+			wf_msg_to_self(MSG_CMD_WIFI_STATION_CLOSE, 0, NULL);

+		}

+		else if(!strcmp(cmd, "results")){

+			dump_spot_list();

+		}

+		else if(!strcmp(cmd, "scan")){

+			wf_msg_to_self(MSG_CMD_WIFI_STATION_SCAN, 0, NULL);

+		}

+		else if(!strcmp(cmd, "conn")){

+			int num = 0;

+			char pwd[WIFI_STATION_SPOT_PASSWORD_LEN]={0};

+			printf("please enter the ssid num\n num=");

+			scanf("%d", &num);

+			if(g_scan_spot_list[num].network_id == -1){

+				printf("\nplease enter the pwd\n pwd=");

+				scanf("%s", pwd);

+			}

+			spot_t  conn_ap ={0};

+			strcpy(conn_ap.mac, g_scan_spot_list[num].mac);

+			strcpy(conn_ap.ssid, g_scan_spot_list[num].ssid);

+			strcpy(conn_ap.auth_mode, g_scan_spot_list[num].auth_mode);

+			strcpy(conn_ap.encrypt_type, g_scan_spot_list[num].encrypt_type);

+			if(g_scan_spot_list[num].network_id >=0)

+				conn_ap.network_id = g_scan_spot_list[num].network_id;

+			else{

+				strcpy(conn_ap.password, pwd);

+				conn_ap.network_id = -1;

+			}

+			dump_conn_ap(&conn_ap);

+			wf_msg_to_self(MSG_CMD_WIFI_STATION_CONNECT, sizeof(conn_ap), &conn_ap);

+			

+		}

+		else if(!strcmp(cmd, "forget")){

+			int num = 0;

+			printf("please enter the ssid num\n num=");

+			scanf("%d", &num);

+			spot_t	conn_ap ={0};

+			strcpy(conn_ap.mac, g_scan_spot_list[num].mac);

+			strcpy(conn_ap.ssid, g_scan_spot_list[num].ssid);

+			conn_ap.network_id = g_scan_spot_list[num].network_id;

+	

+			wf_msg_to_self(MSG_CMD_WIFI_STATION_DISCONNECT, sizeof(conn_ap), &conn_ap);

+		}

+		else if(!strcmp(cmd, "dump")){

+			wf_msg_to_self(MSG_CMD_WIFI_STATION_DEBUG_DUMP, 0, NULL);

+		}

+		else if(!strcmp(cmd, "mmi")){

+			mmi_display();

+		}

+		else if(!strcmp(cmd, "help")){

+			usage();

+		}

+		else if(!strcmp(cmd, "exit") || !strcmp(cmd, "q")){

+			exit(0);

+		}

+		else if(!strcmp(cmd, "cmd")){

+			char cmd[128]={0};

+			printf("please enter wpa_supplicant cmd:\n");

+			scanf("%s", cmd);

+			wf_msg_to_self(MSG_CMD_WIFI_STATION_WPA_CMD, strlen(cmd)+1, cmd);

+		}

+		printf("done\n");

+	}

+

+

+	return 0;

+}