[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;
+}