| /**@File lib_wifi6.c |
| * @Brief :about function test |
| * @details : |
| * @Author : qs.xiong |
| * @Date : 2022-3-14 |
| * @Version : V1.0 |
| * @copy ritght : Copyright (c) MobileTek |
| */ |
| #include <log/log.h> |
| #include <stdio.h> |
| #include <sys/types.h> |
| #include <string.h> |
| #include <stdlib.h> |
| #include <stdlib.h> |
| #include <pthread.h> |
| #include <ctype.h> |
| #include "libwifi6.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| #ifdef __cplusplus |
| } |
| #endif |
| //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; |
| } |
| if(i==4){ |
| return; |
| } |
| } |
| return; |
| } |
| |
| |
| |
| int lynq_wifi_enable(void) |
| { |
| system("chmod 777 /data/wl"); |
| char *lynq_wifi_enable[]={"insmod /lib/modules/4.19.98/kernel/drivers/net/wireless/bcmdhd/bcmdhd.ko " |
| "firmware_path=/system/etc/firmware/wifi/wg870/w870_rtecdc_mfg.trxs " |
| "nvram_path=/system/etc/firmware/wifi/wg870/cyw955572fcipa_rev2.52.txt\n"}; |
| if(system(lynq_wifi_enable[0])==-1){ |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| int lynq_wifi_disable(void) |
| { |
| system("rmmod bcmdhd.ko"); |
| return 0; |
| } |
| /* |
| int lynq_wifi_work_mode_set(lynq_wifi_work_mode_m mode) |
| { |
| FILE *fp; |
| |
| switch(mode){ |
| case LYNQ_WIFI_WORK_MODE_STA: |
| if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){ |
| perror("popen error!"); |
| return -1; |
| } |
| break; |
| case LYNQ_WIFI_WORK_MODE_AP: |
| if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){ |
| perror("popen error!"); |
| return -1; |
| } |
| break; |
| default: |
| return -1; |
| } |
| return 0; |
| } |
| */ |
| 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_cmd_ret[MAX_RET]={0}; |
| char lynq_mode[10]={0}; |
| char *strcn="mode="; |
| char sta[MAX_CMD]="station"; |
| char ap[MAX_CMD]="AP"; |
| |
| FILE *fp; |
| CHECK_NULL_RETURN_VALUE(mode,"mode is null",-1); |
| if ((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){ |
| 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",lynq_mode); |
| if(strcmp(lynq_mode,sta)==0){ |
| *mode=LYNQ_WIFI_WORK_MODE_STA; |
| }else if((strcmp(lynq_mode,ap))==0){ |
| *mode=LYNQ_WIFI_WORK_MODE_AP; |
| } |
| } |
| } |
| if(feof(fp)){ |
| break; |
| } |
| } |
| |
| 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) |
| { |
| FILE *fp; |
| 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"); |
| |
| if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){ |
| perror("popen error!"); |
| return -1; |
| } |
| |
| 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); |
| if(ret==-1){ |
| 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}; |
| 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) |
| { |
| sscanf(lynq_cmd_ret,"%*[^=]=%s",ap_ssid); |
| } |
| } |
| if(feof(fp)){ |
| break; |
| } |
| } |
| |
| if((pclose(fp))==-1){ |
| perror("close file faild"); |
| return -1; |
| } |
| return 0; |
| } |
| |
| int lynq_wifi_ap_frequency_set(lynq_wifi_index_e idx,int lynq_wifi_frequency) |
| { |
| FILE *fp; |
| 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); |
| |
| if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){ |
| 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); |
| fwrite(lynq_cmd_slect,sizeof(lynq_cmd_slect),1,fp); |
| |
| int ret=pclose(fp); |
| if(ret==-1){ |
| perror("close file faild"); |
| 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; |
| 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[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((strncmp(lynq_cmd_ret,strcn,5))==0) |
| { |
| sscanf(lynq_cmd_ret,"%*[^=]=%s",freq); |
| *lynq_wifi_frequency=atoi(freq); |
| } |
| } |
| if(feof(fp)){ |
| break; |
| } |
| } |
| |
| if((pclose(fp))==-1){ |
| perror("close file faild"); |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| /* |
| int lynq_wifi_ap_bandwidth_set(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m bandwidth) |
| { |
| |
| |
| |
| return 0; |
| } |
| */ |
| int lynq_wifi_ap_bandwidth_get(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m* bandwidth) |
| { |
| 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[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){ |
| perror("popen error!"); |
| return -1; |
| } |
| |
| if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){ |
| strncpy(aim,lynq_cmd_ret+3,2); |
| if((strncmp(aim,number,2))==0){ |
| *bandwidth=1; |
| }else{ |
| *bandwidth=0; |
| } |
| } |
| if((pclose(fp))==-1){ |
| perror("close file faild"); |
| return -1; |
| } |
| |
| return 0; |
| |
| } |
| /* |
| int lynq_wifi_ap_channel_set( lynq_wifi_index_e idx,int channel) |
| { |
| FILE *fp; |
| FILE *fg; |
| char lynq_cmd_ret[MAX_CMD]={0}; |
| char lynq_tmp_cmd[MAX_RET]={0}; |
| 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((strcmp(lynq_cmd_ret,g_lynq_wifi_ok))!=0){ |
| CLOSE_FP_RETURN_VALUE(fp); |
| return -1; |
| } |
| } |
| if((pclose(fg))==-1){ |
| perror("close file faild"); |
| return -1; |
| } |
| sprintf(lynq_tmp_cmd,"%s%d",lynq_change_cmd[1],channel); |
| system("/data/wl down"); |
| if((fp=popen(lynq_tmp_cmd,"w"))==NULL){ |
| perror("popen error!"); |
| return -1; |
| } |
| |
| int ret=pclose(fp); |
| if(ret==-1){ |
| perror("close file faild"); |
| return -1; |
| } |
| system("/data/wl up"); |
| return 0; |
| } |
| */ |
| 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[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!"); |
| return -1; |
| } |
| |
| if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){ |
| strncpy(channel_str,lynq_cmd_ret,2); |
| *channel=atoi(channel_str); |
| } |
| if((pclose(fp))==-1){ |
| perror("close file faild"); |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| |
| 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[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); |
| fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp); |
| |
| ret=pclose(fp); |
| if(ret==-1){ |
| perror("close file faild"); |
| return -1; |
| } |
| break; |
| } |
| case LYNQ_WIFI_AUTH_WPA_PSK: |
| { |
| |
| 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); |
| 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_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){ |
| 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_str_auth); |
| if((strncmp(get_str_auth,use_to_cmp,3))==0){ |
| *auth=LYNQ_WIFI_AUTH_WPA_PSK; |
| break; |
| } |
| } |
| } |
| if(feof(fp)){ |
| break; |
| } |
| } |
| 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_ap_max_sta_set(lynq_wifi_index_e idx,int max_sta_num) |
| { |
| FILE * fp; |
| char lynq_cmd_ret[MAX_RET]={0}; |
| char lynq_tmp_cmd[MAX_CMD]={0}; |
| 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) |
| { |
| perror("popen error!"); |
| return -1; |
| } |
| if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0) |
| { |
| perror("fread fail!"); |
| return -1; |
| } |
| |
| int ret=pclose(fp); |
| if(ret==-1) |
| { |
| perror("close file faild"); |
| return -1; |
| } |
| |
| return 0; |
| } |
| */ |
| 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>9){ |
| return -1; |
| } |
| if((fp=popen("/data/wl maxassoc","r"))==NULL) |
| { |
| perror("popen error!"); |
| return -1; |
| } |
| if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0) |
| { |
| perror("fread fail!"); |
| return -1; |
| } |
| strcpy(get_str_num,lynq_cmd_ret); |
| *max_sta_num=atoi(get_str_num); |
| |
| int ret=pclose(fp); |
| if(ret==-1) |
| { |
| perror("close file faild"); |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| int lynq_wifi_ap_start(lynq_wifi_index_e idx) |
| { |
| FILE *fp; |
| 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("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL) |
| { |
| perror("popen error!"); |
| 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; |
| } |
| return 0; |
| } |
| |
| int lynq_wifi_ap_restart(lynq_wifi_index_e idx) |
| { |
| 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; |
| |
| } |
| |
| int lynq_wifi_ap_stop(lynq_wifi_index_e idx) |
| { |
| FILE *fp; |
| 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("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL) |
| { |
| perror("popen error!"); |
| 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; |
| } |
| return 0; |
| } |
| |
| int lynq_wifi_ap_hide_ssid(lynq_wifi_index_e idx) |
| { |
| FILE *fp; |
| 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){ |
| perror("popen error!"); |
| return -1; |
| } |
| |
| 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"); |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| int lynq_wifi_ap_unhide_ssid(lynq_wifi_index_e idx) |
| { |
| FILE *fp; |
| if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){ |
| perror("popen error!"); |
| return -1; |
| } |
| 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); |
| |
| 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"); |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| int lynq_ap_ssid_pass_set(lynq_wifi_index_e idx,char *password) |
| { |
| FILE *fp; |
| int ret; |
| int pass_len; |
| pass_len=strlen(password); |
| 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[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); |
| |
| ret=pclose(fp); |
| if(ret==-1){ |
| perror("close file faild"); |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| int lynq_sta_ssid_pass_set(lynq_wifi_index_e idx,char *password) |
| { |
| FILE *fp; |
| int pass_len; |
| pass_len=strlen(password); |
| 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[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) |
| { |
| FILE *fp; |
| char lynq_wifi_ssid_cmd[80]={0}; |
| char lynq_tmp_cmd[MAX_CMD]={0}; |
| 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"); |
| 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; |
| } |
| |
| 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); |
| if(ret==-1){ |
| perror("close file faild"); |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| int lynq_wifi_sta_ssid_get(lynq_wifi_index_e idx,char* sta_ssid) |
| { |
| 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) |
| { |
| sscanf(lynq_cmd_ret,"%*[^=]=%s",sta_ssid); |
| } |
| } |
| if(feof(fp)){ |
| break; |
| } |
| } |
| |
| if((pclose(fp))==-1){ |
| perror("close file faild"); |
| return -1; |
| } |
| return 0; |
| |
| } |
| |
| 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[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); |
| fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp); |
| |
| ret=pclose(fp); |
| if(ret==-1){ |
| perror("close file faild"); |
| return -1; |
| } |
| break; |
| } |
| case LYNQ_WIFI_STA_AUTH_WPA_PSK: |
| { |
| 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); |
| 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) |
| { |
| 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="; |
| |
| FILE *fp; |
| 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,9))==0) |
| { |
| 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; |
| } |
| } |
| } |
| if(feof(fp)){ |
| break; |
| } |
| } |
| if(*auth!=LYNQ_WIFI_AUTH_WPA_PSK){ |
| *auth=LYNQ_WIFI_AUTH_OPEN; |
| } |
| if((pclose(fp))==-1){ |
| perror("close file faild"); |
| return -1; |
| } |
| |
| } |
| |
| int lynq_wifi_sta_connect(lynq_wifi_index_e idx) |
| { |
| FILE *fp; |
| 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("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL) |
| { |
| perror("popen error!"); |
| 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; |
| } |
| return 0; |
| } |
| |
| int lynq_wifi_sta_disconnect(lynq_wifi_index_e idx) |
| { |
| FILE *fp; |
| 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; |
| } |
| |
| 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; |
| } |
| |
| return 0; |
| } |
| |
| int lynq_wifi_wpa_start(void){ |
| int ret; |
| pthread_t pth; |
| |
| ret=pthread_create(&pth,NULL,StartThread,NULL); |
| if(ret<0){ |
| return -1; |
| } |
| pthread_join(pth,NULL); |
| |
| return 0; |
| } |
| |
| int lynq_wifi_wpacli_start(void){ |
| FILE *fp; |
| int i=0; |
| char lynq_cmd_ret[MAX_RET]={0}; |
| 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<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); |
| fp=popen(cmd,"r"); |
| fread(cmd,1,200,fp); |
| fclose(fp); |
| 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; |
| } |