blob: 6865be25cdfd869f8b9375fcf4cb21d3f3b11a8f [file] [log] [blame]
/**@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;
}