#include #include #include #include #include #include #include #include "wmg_debug.h" static pthread_t app_scan_tid; static int event = WIFIMG_NETWORK_DISCONNECTED; static void wifi_event_handle(tWIFI_EVENT wifi_event, void *buf, int event_label) { wmg_printf(MSG_DEBUG,"event_label 0x%x\n", event_label); switch(wifi_event) { case WIFIMG_WIFI_ON_SUCCESS: { wmg_printf(MSG_INFO,"WiFi on success!\n"); event = WIFIMG_WIFI_ON_SUCCESS; break; } case WIFIMG_WIFI_ON_FAILED: { wmg_printf(MSG_ERROR,"WiFi on failed!\n"); event = WIFIMG_WIFI_ON_FAILED; break; } case WIFIMG_WIFI_OFF_FAILED: { wmg_printf(MSG_ERROR,"wifi off failed!\n"); event = WIFIMG_WIFI_OFF_FAILED; break; } case WIFIMG_WIFI_OFF_SUCCESS: { wmg_printf(MSG_INFO,"wifi off success!\n"); event = WIFIMG_WIFI_OFF_SUCCESS; break; } case WIFIMG_NETWORK_CONNECTED: { wmg_printf(MSG_INFO,"WiFi connected ap!\n"); event = WIFIMG_NETWORK_CONNECTED; break; } case WIFIMG_NETWORK_DISCONNECTED: { wmg_printf(MSG_INFO,"WiFi disconnected!\n"); event = WIFIMG_NETWORK_DISCONNECTED; break; } case WIFIMG_PASSWORD_FAILED: { wmg_printf(MSG_ERROR,"Password authentication failed!\n"); event = WIFIMG_PASSWORD_FAILED; break; } case WIFIMG_CONNECT_TIMEOUT: { wmg_printf(MSG_ERROR,"Connected timeout!\n"); event = WIFIMG_CONNECT_TIMEOUT; break; } case WIFIMG_NO_NETWORK_CONNECTING: { wmg_printf(MSG_INFO,"It has no wifi auto connect when wifi on!\n"); event = WIFIMG_NO_NETWORK_CONNECTING; break; } case WIFIMG_CMD_OR_PARAMS_ERROR: { wmg_printf(MSG_ERROR,"cmd or params error!\n"); event = WIFIMG_CMD_OR_PARAMS_ERROR; break; } case WIFIMG_KEY_MGMT_NOT_SUPPORT: { wmg_printf(MSG_ERROR,"key mgmt is not supported!\n"); event = WIFIMG_KEY_MGMT_NOT_SUPPORT; break; } case WIFIMG_OPT_NO_USE_EVENT: { wmg_printf(MSG_INFO,"operation no use!\n"); event = WIFIMG_OPT_NO_USE_EVENT; break; } case WIFIMG_NETWORK_NOT_EXIST: { wmg_printf(MSG_ERROR,"network not exist!\n"); event = WIFIMG_NETWORK_NOT_EXIST; break; } case WIFIMG_DEV_BUSING_EVENT: { wmg_printf(MSG_INFO,"wifi device busing!\n"); event = WIFIMG_DEV_BUSING_EVENT; break; } default: { wmg_printf(MSG_INFO,"Other event, no care!\n"); } } } void *app_scan_task(void *args) { const aw_wifi_interface_t *p_wifi = (aw_wifi_interface_t *)args; char scan_results[4096]; int len = 0; int event_label = 0; while(1){ event_label++; p_wifi->start_scan(event_label); len = 4096; p_wifi->get_scan_results(scan_results, &len); } } int check_password(const char *passwd) { int result = 0; int i=0; if(!passwd || *passwd =='\0'){ return -1; } if(strlen(passwd) < 8 || strlen(passwd) > 64 ){ wmg_printf(MSG_ERROR,"ERROR:passwd less than 8 or longer than 64"); return -1; } for(i=0; passwd[i]!='\0'; i++){ /* non printable char */ if((passwd[i]<32) || (passwd[i] > 126)){ wmg_printf(MSG_INFO,"ERROR:passwd include unprintable char"); result = -1; break; } } return result; } void print_help(){ wmg_printf(MSG_INFO,"---------------------------------------------------------------------------------\n"); wmg_printf(MSG_INFO,"NAME:\n\twifi_add_network_test\n"); wmg_printf(MSG_INFO,"DESCRIPTION:\n\tadd and connect the AP.\n"); wmg_printf(MSG_INFO,"USAGE:\n\twifi_add_network_test \n"); wmg_printf(MSG_INFO,"PARAMS:\n\tssid : ssid of the AP\n"); wmg_printf(MSG_INFO,"\tpasswd : password of the AP(WPA_PSK/WPA2_PSK: Common characters:ASCII 32-126)\n"); wmg_printf(MSG_INFO,"\tkey_mgmt : encryption method of the AP\n"); wmg_printf(MSG_INFO,"\t\t0 : NONE\n"); wmg_printf(MSG_INFO,"\t\t1 : key_mgmt = WPA_PSK (password length:8-64 and whithout unprintable char)\n"); wmg_printf(MSG_INFO,"\t\t2 : key_mgmt = WPA2_PSK (password length:8-64 and whithout unprintable char)\n"); wmg_printf(MSG_INFO,"\t\t3 : key_mgmt = WEP\n"); wmg_printf(MSG_INFO,"\tlevel : print level(d0~d5).larger value,more info.para is not required,default d2.\n"); wmg_printf(MSG_INFO,"--------------------------------------MORE---------------------------------------\n"); wmg_printf(MSG_INFO,"The way to get help information:\n"); wmg_printf(MSG_INFO,"\twifi_add_network_test --help\n"); wmg_printf(MSG_INFO,"\twifi_add_network_test -h\n"); wmg_printf(MSG_INFO,"\twifi_add_network_test -H\n"); wmg_printf(MSG_INFO,"---------------------------------------------------------------------------------\n"); } int check_params(int num, char *str[]){ if(num < 4 || num >5){ wmg_printf(MSG_ERROR,"ERROR: params more or less!\n"); return -1; } int mgmt = atoi(str[3]); if(mgmt >= 0 && mgmt <= 3){ if((mgmt == 1 || mgmt == 2) && (check_password(str[2]))){ wmg_printf(MSG_ERROR,"ERROR: password format incorrect!\n"); return -1; } return 0; }else{ wmg_printf(MSG_ERROR,"ERROR:key_mgmt not allowed!\n"); return -1; } } /* *argc[1] ap ssid *argc[2] ap passwd *argc[2] key_mgmt */ static int set_log_level(int argv, char *argc[]) { if(argv >=5 && !strncmp(argc[4],"d",1)){ char *debug = argc[4]; if(strlen(debug) >=2 && debug[1] >= '0' && debug[1] <= '5'){ wmg_set_debug_level(debug[1] - '0'); return 0; }else{ printf("Illegal level\n"); printf("Level range 0~5\n"); return -1; } } return 0; } int main(int argv, char *argc[]){ int ret = 0, len = 0, switch_int = 0; int times = 0, event_label = 0;; char ssid[256] = {0}, scan_results[4096] = {0}; int wifi_state = WIFIMG_WIFI_DISABLED; const aw_wifi_interface_t *p_wifi_interface = NULL; tKEY_MGMT key_mgmt = WIFIMG_NONE; if(argv == 2 && (!strcmp(argc[1],"--help") || !strcmp(argc[1], "-h") || !strcmp(argc[1], "-H"))){ print_help(); return -1; } if(check_params(argv, argc)){ print_help(); return -1; } if(set_log_level(argv, argc)) return -1; wmg_printf(MSG_INFO,"\n*********************************\n"); wmg_printf(MSG_INFO,"***Start wifi connect ap test\n"); wmg_printf(MSG_INFO,"***ssid :%s\n",argc[1]); wmg_printf(MSG_INFO,"***password:%s\n",argc[2]); wmg_printf(MSG_INFO,"*********************************\n"); event_label = rand(); p_wifi_interface = aw_wifi_on(wifi_event_handle, event_label); if(p_wifi_interface == NULL){ wmg_printf(MSG_ERROR,"wifi on failed event 0x%x\n", event); return -1; } while(aw_wifi_get_wifi_state() == WIFIMG_WIFI_BUSING){ wmg_printf(MSG_INFO,"wifi state busing,waiting\n"); usleep(2000000); } //pthread_create(&app_scan_tid, NULL, &app_scan_task,(void *)p_wifi_interface); event_label++; switch_int= atoi(argc[3]); wmg_printf(MSG_DEBUG,"The switch_int is %d\n",switch_int); switch(switch_int) { case 0: key_mgmt = WIFIMG_NONE; break; case 1: key_mgmt = WIFIMG_WPA_PSK; break; case 2: key_mgmt = WIFIMG_WPA2_PSK; break; case 3: key_mgmt = WIFIMG_WEP; break; default: ; break; } p_wifi_interface->add_network(argc[1], key_mgmt, argc[2], event_label); while(aw_wifi_get_wifi_state() == WIFIMG_WIFI_BUSING){ wmg_printf(MSG_INFO,"wifi state busing,waiting\n"); usleep(2000000); } wmg_printf(MSG_INFO,"\n******************************\n"); if(aw_wifi_get_wifi_state()== WIFIMG_WIFI_CONNECTED){ wmg_printf(MSG_INFO,"Wifi connect ap : Success!\n"); } else{ wmg_printf(MSG_ERROR,"Wifi connect ap : Failure!\n"); } wmg_printf(MSG_INFO,"******************************\n"); return 0; }