blob: d3a81ef4b1b33b064541f675750836f6372ee7b3 [file] [log] [blame]
qs.xiong1af5daf2022-03-14 09:12:12 -04001/**@File lib_wifi6.c
2* @Brief :about function test
3* @details :
4* @Author : qs.xiong
5* @Date : 2022-3-14
6* @Version : V1.0
7* @copy ritght : Copyright (c) MobileTek
8*/
9#include <log/log.h>
qs.xiong7a105ce2022-03-02 09:43:11 -050010#include <stdio.h>
11#include <sys/types.h>
12#include <string.h>
qs.xiong1af5daf2022-03-14 09:12:12 -040013#include <stdlib.h>
14#include <stdlib.h>
qs.xiongf1b525b2022-03-31 00:58:23 -040015#include <pthread.h>
qs.xiong97fa59b2022-04-07 05:41:29 -040016#include <ctype.h>
qs.xiong7a105ce2022-03-02 09:43:11 -050017#include "libwifi6.h"
18
qs.xiong1af5daf2022-03-14 09:12:12 -040019#ifdef __cplusplus
20extern "C" {
21#endif
22#ifdef __cplusplus
23}
24#endif
qs.xiong97fa59b2022-04-07 05:41:29 -040025//max len of cmd include password len
26#define MAX_CMD 256
qs.xiong7a105ce2022-03-02 09:43:11 -050027#define MAX_RET 1024
qs.xiongf1b525b2022-03-31 00:58:23 -040028#define MODE_LEN 10
qs.xiong97fa59b2022-04-07 05:41:29 -040029
30#define PRINT_AND_RETURN_VALUE(str,value) \
31{\
32 perror((str));\
33 return (value);\
34}
35#define CLOSE_FP_RETURN_VALUE(fp,str,value)\
36{\
37 if((pclose((fp)))==-1){ \
38 perror("close fp failed");\
39 }\
40 PRINT_AND_RETURN_VALUE((str),(value));\
41}
42
43#define CHECK_NULL_RETURN_VALUE(pt,str,value)\
44{\
45 if((pt)==NULL){ \
46 PRINT_AND_RETURN_VALUE((str),(value));\
47 }\
48}
49
qs.xiong1af5daf2022-03-14 09:12:12 -040050char g_lynq_wifi_ok[3]="OK";
qs.xiongf1b525b2022-03-31 00:58:23 -040051
52
53void StartThread()
54{
qs.xiongf1b525b2022-03-31 00:58:23 -040055 char start_cmd[120]="wpa_supplicant -iwlan0 -Dnl80211 -c /data/wifi/wg870/wpa_supplicant.conf -g/var/run/wpa_wlan0_cmd -dd -t -B";
56 char get_pid_cmd[20]="wpa_supplicant";
57 if((GetPIDbyName(get_pid_cmd))>0){
58 return;
qs.xiong97fa59b2022-04-07 05:41:29 -040059 }
qs.xiongf1b525b2022-03-31 00:58:23 -040060 system(start_cmd);
61 for(int i=0;i<5;i++){
qs.xiong97fa59b2022-04-07 05:41:29 -040062 sleep(2);
qs.xiongf1b525b2022-03-31 00:58:23 -040063 if((GetPIDbyName(get_pid_cmd))>0){
64 break;
qs.xiong97fa59b2022-04-07 05:41:29 -040065 }
qs.xiongf1b525b2022-03-31 00:58:23 -040066 if(i==4){
qs.xiong97fa59b2022-04-07 05:41:29 -040067 return;
qs.xiongf1b525b2022-03-31 00:58:23 -040068 }
69 }
70 return;
71}
72
73
qs.xiong9c99fa92022-03-15 08:03:26 -040074
qs.xiong1af5daf2022-03-14 09:12:12 -040075int lynq_wifi_enable(void)
76{
qs.xiong7a105ce2022-03-02 09:43:11 -050077 char *lynq_wifi_enable[]={"insmod /lib/modules/4.19.98/kernel/drivers/net/wireless/bcmdhd/bcmdhd.ko "
qs.xiong1af5daf2022-03-14 09:12:12 -040078 "firmware_path=/system/etc/firmware/wifi/wg870/w870_rtecdc_mfg.trxs "
qs.xiong9c99fa92022-03-15 08:03:26 -040079 "nvram_path=/system/etc/firmware/wifi/wg870/cyw955572fcipa_rev2.52.txt\n"};
qs.xiong1af5daf2022-03-14 09:12:12 -040080 if(system(lynq_wifi_enable[0])==-1){
qs.xiong7a105ce2022-03-02 09:43:11 -050081 return -1;
82 }
qs.xiong1af5daf2022-03-14 09:12:12 -040083
qs.xiong7a105ce2022-03-02 09:43:11 -050084 return 0;
85}
86
qs.xiong1af5daf2022-03-14 09:12:12 -040087int lynq_wifi_disable(void)
88{
qs.xiong97fa59b2022-04-07 05:41:29 -040089 system("rmmod bcmdhd.ko");
qs.xiong7a105ce2022-03-02 09:43:11 -050090 return 0;
91}
qs.xiongf1b525b2022-03-31 00:58:23 -040092/*
93int lynq_wifi_work_mode_set(lynq_wifi_work_mode_m mode)
qs.xiong7a105ce2022-03-02 09:43:11 -050094{
95 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -040096
qs.xiong7a105ce2022-03-02 09:43:11 -050097 switch(mode){
98 case LYNQ_WIFI_WORK_MODE_STA:
qs.xiong1af5daf2022-03-14 09:12:12 -040099 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -0500100 perror("popen error!");
101 return -1;
102 }
103 break;
104 case LYNQ_WIFI_WORK_MODE_AP:
qs.xiong1af5daf2022-03-14 09:12:12 -0400105 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -0500106 perror("popen error!");
107 return -1;
108 }
109 break;
qs.xiong7a105ce2022-03-02 09:43:11 -0500110 default:
111 return -1;
112 }
113 return 0;
114}
qs.xiongf1b525b2022-03-31 00:58:23 -0400115*/
116int lynq_wifi_work_mode_get(lynq_wifi_work_mode_m *mode)
qs.xiong97fa59b2022-04-07 05:41:29 -0400117{
118 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiongf1b525b2022-03-31 00:58:23 -0400119 char lynq_cmd_ret[MAX_RET]={0};
120 char lynq_mode[10]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500121 char *strcn="mode=";
qs.xiong97fa59b2022-04-07 05:41:29 -0400122 char sta[MAX_CMD]="station";
123 char ap[MAX_CMD]="AP";
qs.xiong7a105ce2022-03-02 09:43:11 -0500124
qs.xiong1af5daf2022-03-14 09:12:12 -0400125 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400126 CHECK_NULL_RETURN_VALUE(mode,"mode is null",-1);
127 if ((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
128 return -1;
qs.xiong1af5daf2022-03-14 09:12:12 -0400129 }
130
131 while(1){
132 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
133 if((strncmp(lynq_cmd_ret,strcn,5))==0)
134 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400135 sscanf(lynq_cmd_ret,"%*[^=]=%s",lynq_mode);
136 if(strcmp(lynq_mode,sta)==0){
137 *mode=LYNQ_WIFI_WORK_MODE_STA;
138 }else if((strcmp(lynq_mode,ap))==0){
139 *mode=LYNQ_WIFI_WORK_MODE_AP;
140 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400141 }
142 }
143 if(feof(fp)){
144 break;
145 }
146 }
147
qs.xiong97fa59b2022-04-07 05:41:29 -0400148 if((pclose(fp))==-1){
149 perror("close file faild");
150 return -1;
151 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500152
qs.xiong97fa59b2022-04-07 05:41:29 -0400153 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500154}
155
qs.xiongf1b525b2022-03-31 00:58:23 -0400156int lynq_wifi_ap_ssid_set(lynq_wifi_index_e idx,char *ap_ssid)
qs.xiong7a105ce2022-03-02 09:43:11 -0500157{
158 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -0400159 char lynq_wifi_ssid_cmd[80]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500160 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500161 char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
qs.xiong97fa59b2022-04-07 05:41:29 -0400162 if(idx<0||idx>9){
163 return -1;
164 }
qs.xiong0fb469a2022-04-14 03:50:45 -0400165 CHECK_NULL_RETURN_VALUE(ap_ssid,"ap_ssid is null",-1);
166 if(((strlen(ap_ssid))>32)){
qs.xiong97fa59b2022-04-07 05:41:29 -0400167 PRINT_AND_RETURN_VALUE("ssid is illgal",-1);
168 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400169 sprintf(lynq_tmp_cmd,"%s%d%s","IFNAME=wlan0 set_network ",idx," ssid ");
170 sprintf(lynq_wifi_ssid_cmd,"%s%s%s%s%s",lynq_tmp_cmd,"\"",ap_ssid,"\"","\n");
qs.xiong7a105ce2022-03-02 09:43:11 -0500171
172 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
173 perror("popen error!");
174 return -1;
175 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400176
qs.xiongf1b525b2022-03-31 00:58:23 -0400177 fwrite(lynq_wifi_ssid_cmd,sizeof(lynq_wifi_ssid_cmd),1,fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400178 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
179
qs.xiong7a105ce2022-03-02 09:43:11 -0500180 int ret=pclose(fp);
181 if(ret==-1){
182 perror("close file faild");
183 return -1;
184 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400185
qs.xiong7a105ce2022-03-02 09:43:11 -0500186 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500187}
188
qs.xiongf1b525b2022-03-31 00:58:23 -0400189int lynq_wifi_ap_ssid_get(lynq_wifi_index_e idx,char* ap_ssid)
qs.xiong7a105ce2022-03-02 09:43:11 -0500190{
qs.xiong97fa59b2022-04-07 05:41:29 -0400191 CHECK_NULL_RETURN_VALUE(ap_ssid,"ap_ssid is null",-1);
qs.xiong1af5daf2022-03-14 09:12:12 -0400192 FILE *fp;
193 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong7a105ce2022-03-02 09:43:11 -0500194 char lynq_cmd_ret[MAX_RET]={0};
195 char *strcn="ssid=";
qs.xiongf1b525b2022-03-31 00:58:23 -0400196 if(idx>10||idx<0){
197 return -1;
198 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500199 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
200 perror("popen error!");
201 return -1;
202 }
203 while(1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400204 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
205 if((strncmp(lynq_cmd_ret,strcn,5))==0)
206 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400207 sscanf(lynq_cmd_ret,"%*[^=]=%s",ap_ssid);
qs.xiong1af5daf2022-03-14 09:12:12 -0400208 }
209 }
210 if(feof(fp)){
211 break;
212 }
213 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400214
qs.xiong1af5daf2022-03-14 09:12:12 -0400215 if((pclose(fp))==-1){
216 perror("close file faild");
217 return -1;
218 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400219 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500220}
221
qs.xiongf1b525b2022-03-31 00:58:23 -0400222int lynq_wifi_ap_frequency_set(lynq_wifi_index_e idx,int lynq_wifi_frequency)
qs.xiong7a105ce2022-03-02 09:43:11 -0500223{
224 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400225 char lynq_wifi_frequency_cmd[MAX_CMD]={0};
226 char lynq_cmd_mode[MAX_CMD]={0};
227 char lynq_cmd_slect[MAX_CMD]={0};
228 char lynq_cmd_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
229 if(idx<0||idx>9){
230 return -1;
231 }
qs.xiong4c91f012022-04-08 06:16:45 -0400232 if((lynq_wifi_frequency != 2437) && (lynq_wifi_frequency != 5180)){
qs.xiong97fa59b2022-04-07 05:41:29 -0400233 PRINT_AND_RETURN_VALUE("set frequency not in range",-1);
234 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400235 sprintf(lynq_wifi_frequency_cmd,"IFNAME=wlan0 set_net %d frequency %d\n", idx, lynq_wifi_frequency);
236 sprintf(lynq_cmd_mode, "IFNAME=wlan0 set_net %d mode 2\n", idx);
237 sprintf(lynq_cmd_slect, "IFNAME=wlan0 select_net %d\n", idx);
qs.xiong7a105ce2022-03-02 09:43:11 -0500238
239 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
240 perror("popen error!");
241 return -1;
242 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400243
qs.xiongf1b525b2022-03-31 00:58:23 -0400244 fwrite(lynq_wifi_frequency_cmd,sizeof(lynq_wifi_frequency_cmd),1,fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400245 fwrite(lynq_cmd_mode,sizeof(lynq_cmd_mode),1,fp);
246 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
247 fwrite(lynq_cmd_slect,sizeof(lynq_cmd_slect),1,fp);
248
qs.xiong7a105ce2022-03-02 09:43:11 -0500249 int ret=pclose(fp);
250 if(ret==-1){
251 perror("close file faild");
252 return -1;
253 }
254
qs.xiong1af5daf2022-03-14 09:12:12 -0400255 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500256}
257
qs.xiongf1b525b2022-03-31 00:58:23 -0400258int lynq_wifi_ap_frequency_get(lynq_wifi_index_e idx,int *lynq_wifi_frequency)
qs.xiong7a105ce2022-03-02 09:43:11 -0500259{
qs.xiong97fa59b2022-04-07 05:41:29 -0400260 CHECK_NULL_RETURN_VALUE(lynq_wifi_frequency,"frequency is null",-1);
261
qs.xiong1af5daf2022-03-14 09:12:12 -0400262 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400263 char lynq_wifi_ssid_cmd[MAX_CMD]="wpa_cli -iwlan0 -p/var/run/wpa_supplicant status";
264 char lynq_cmd_ret[MAX_RET]={0};
qs.xiongf1b525b2022-03-31 00:58:23 -0400265 char *strcn="freq=";
qs.xiong97fa59b2022-04-07 05:41:29 -0400266 char freq[MAX_CMD]={0};
267 if(idx<0||idx>9){
268 return -1;
269 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500270
qs.xiong97fa59b2022-04-07 05:41:29 -0400271 if((fp=popen(lynq_wifi_ssid_cmd,"r"))==NULL){
272 perror("popen error!");
273 return -1;
274 }
275 while(1){
276 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiongf1b525b2022-03-31 00:58:23 -0400277 if((strncmp(lynq_cmd_ret,strcn,5))==0)
qs.xiong97fa59b2022-04-07 05:41:29 -0400278 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400279 sscanf(lynq_cmd_ret,"%*[^=]=%s",freq);
280 *lynq_wifi_frequency=atoi(freq);
281 }
282 }
283 if(feof(fp)){
284 break;
285 }
286 }
287
288 if((pclose(fp))==-1){
289 perror("close file faild");
290 return -1;
291 }
292
293 return 0;
294}
295
296/*
297int lynq_wifi_ap_bandwidth_set(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m bandwidth)
298{
299
300
301
302 return 0;
303}
304*/
305int lynq_wifi_ap_bandwidth_get(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m* bandwidth)
306{
qs.xiong97fa59b2022-04-07 05:41:29 -0400307 if(bandwidth==NULL){
308 PRINT_AND_RETURN_VALUE("call falure",-1);
309 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400310 FILE *fp;
311 char aim[MAX_CMD]={0};
312 char number[10]="80";
you.chen65fdcdf2022-04-09 17:50:09 +0800313 char lynq_wifi_bandwidth_cmd[MAX_CMD]="wl chanspec\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400314 char lynq_cmd_ret[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400315 if(idx<0||idx>9){
316 return -1;
317 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400318
qs.xiong97fa59b2022-04-07 05:41:29 -0400319 if((fp=popen(lynq_wifi_bandwidth_cmd,"r"))==NULL){
qs.xiongf1b525b2022-03-31 00:58:23 -0400320 perror("popen error!");
321 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400322 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400323
324 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
325 strncpy(aim,lynq_cmd_ret+3,2);
qs.xiongf1b525b2022-03-31 00:58:23 -0400326 if((strncmp(aim,number,2))==0){
327 *bandwidth=1;
328 }else{
329 *bandwidth=0;
330 }
331 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400332 if((pclose(fp))==-1){
333 perror("close file faild");
334 return -1;
qs.xiongf1b525b2022-03-31 00:58:23 -0400335 }
336
qs.xiong7a105ce2022-03-02 09:43:11 -0500337 return 0;
338
339}
qs.xiong0fb469a2022-04-14 03:50:45 -0400340
qs.xiongf1b525b2022-03-31 00:58:23 -0400341int lynq_wifi_ap_channel_set( lynq_wifi_index_e idx,int channel)
qs.xiong7a105ce2022-03-02 09:43:11 -0500342{
343 FILE *fp;
qs.xiong0fb469a2022-04-14 03:50:45 -0400344 int ret;
qs.xiong1d58e9b2022-04-14 06:17:01 -0400345 char lynq_cmd_ret[MAX_RET]="";
346 char lynq_cmd_channel[MAX_CMD]="";
347
qs.xiong0fb469a2022-04-14 03:50:45 -0400348 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400349 return -1;
350 }
qs.xiong1d58e9b2022-04-14 06:17:01 -0400351
352 sprintf(lynq_cmd_channel,"wl chanspec %d\n",channel);
353 system("wl down");
qs.xiong1af5daf2022-03-14 09:12:12 -0400354
qs.xiong0fb469a2022-04-14 03:50:45 -0400355 fp=popen(lynq_cmd_channel,"r");
356 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
357 if(strncmp(lynq_cmd_ret,g_lynq_wifi_ok,2) != 0){
358 PRINT_AND_RETURN_VALUE("set channel error",-1);
359 }
qs.xiong1d58e9b2022-04-14 06:17:01 -0400360 system("wl up");
qs.xiong0fb469a2022-04-14 03:50:45 -0400361 }
362
qs.xiong7a105ce2022-03-02 09:43:11 -0500363 return 0;
364}
qs.xiong0fb469a2022-04-14 03:50:45 -0400365
qs.xiongf1b525b2022-03-31 00:58:23 -0400366int lynq_wifi_ap_channel_get( lynq_wifi_index_e idx,int* channel)
qs.xiong7a105ce2022-03-02 09:43:11 -0500367{
qs.xiong97fa59b2022-04-07 05:41:29 -0400368 CHECK_NULL_RETURN_VALUE(channel,"channel is null",-1);
qs.xiongf1b525b2022-03-31 00:58:23 -0400369 FILE *fp;
370 char lynq_cmd_set[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400371 char channel_str[MAX_CMD]={0};
qs.xiongf1b525b2022-03-31 00:58:23 -0400372 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400373 if(idx<0||idx>9){
374 return -1;
375 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400376
you.chen65fdcdf2022-04-09 17:50:09 +0800377 if((fp=popen("wl chanspec","r"))==NULL){
qs.xiong97fa59b2022-04-07 05:41:29 -0400378 perror("popen error!");
qs.xiong1af5daf2022-03-14 09:12:12 -0400379 return -1;
380 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400381
382 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
383 strncpy(channel_str,lynq_cmd_ret,2);
384 *channel=atoi(channel_str);
qs.xiong1af5daf2022-03-14 09:12:12 -0400385 }
386 if((pclose(fp))==-1){
qs.xiong97fa59b2022-04-07 05:41:29 -0400387 perror("close file faild");
qs.xiong1af5daf2022-03-14 09:12:12 -0400388 return -1;
389 }
390
qs.xiong7a105ce2022-03-02 09:43:11 -0500391 return 0;
392}
393
394
qs.xiong97fa59b2022-04-07 05:41:29 -0400395int lynq_wifi_ap_auth_set(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500396{
397 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400398 int ret;
399 if(idx<0||idx>9){
400 return -1;
401 }
qs.xiong0fb469a2022-04-14 03:50:45 -0400402 if((auth !=0) && (auth !=1)){
403 PRINT_AND_RETURN_VALUE("set auth is null",-1);
404 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500405 switch(auth){
qs.xiongf1b525b2022-03-31 00:58:23 -0400406 case LYNQ_WIFI_AUTH_OPEN:
qs.xiong7a105ce2022-03-02 09:43:11 -0500407 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400408 char lynq_auth_cmd[MAX_CMD]={0};
409 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400410 char lynq_cmd_quit[12]="quit\n";
411 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d key_mgmt NONE\n",idx);
412
qs.xiong7a105ce2022-03-02 09:43:11 -0500413 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
414 perror("popen error!");
415 return -1;
416 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500417
418 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
419 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400420 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500421
qs.xiong97fa59b2022-04-07 05:41:29 -0400422 ret=pclose(fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500423 if(ret==-1){
424 perror("close file faild");
425 return -1;
426 }
427 break;
428 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400429 case LYNQ_WIFI_AUTH_WPA_PSK:
qs.xiong7a105ce2022-03-02 09:43:11 -0500430 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400431
qs.xiong97fa59b2022-04-07 05:41:29 -0400432 char lynq_auth_cmd[MAX_CMD]={0};
433 char lynq_psk_cmd[MAX_CMD]={0};
434 char lynq_pairwise_cmd[MAX_CMD]={0};
435 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400436 char lynq_cmd_quit[12]="quit\n";
437
438 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d proto WPA2\n",idx);
439 sprintf(lynq_psk_cmd,"IFNAME=wlan0 set_net %d key_mgmt WPA-PSK\n",idx);
440 sprintf(lynq_pairwise_cmd,"IFNAME=wlan0 set_net %d pairwise CCMP\n",idx);
qs.xiong7a105ce2022-03-02 09:43:11 -0500441
qs.xiong7a105ce2022-03-02 09:43:11 -0500442 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
443 perror("popen error!");
444 return -1;
445 }
446
qs.xiongf1b525b2022-03-31 00:58:23 -0400447 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500448 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
449 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
450 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400451 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500452
qs.xiong97fa59b2022-04-07 05:41:29 -0400453 ret=pclose(fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500454 if(ret==-1){
455 perror("close file faild");
456 return -1;
457 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500458 break;
qs.xiong97fa59b2022-04-07 05:41:29 -0400459 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500460 default:
461 return -1;
462 }
463
qs.xiong7a105ce2022-03-02 09:43:11 -0500464 return 0;
465}
466
qs.xiongf1b525b2022-03-31 00:58:23 -0400467int lynq_wifi_ap_auth_get(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s *auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500468{
qs.xiong0fb469a2022-04-14 03:50:45 -0400469 CHECK_NULL_RETURN_VALUE(auth,"the auth is null",-1);
qs.xiong1af5daf2022-03-14 09:12:12 -0400470 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiongf1b525b2022-03-31 00:58:23 -0400471 char lynq_cmd_ret[MAX_RET]={0};
472 char get_str_auth[20]={0};
473 char use_to_cmp[4]="WPA";
474 char strcn[20]="key_mgmt=";
qs.xiong97fa59b2022-04-07 05:41:29 -0400475 if(idx<0||idx>9){
476 return -1;
477 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500478
qs.xiong1af5daf2022-03-14 09:12:12 -0400479 FILE *fp;
480 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
481 perror("popen error!");
qs.xiong97fa59b2022-04-07 05:41:29 -0400482 return -1;
483 }
484 while(1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400485 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400486 if((strncmp(lynq_cmd_ret,strcn,9))==0)
487 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400488 sscanf(lynq_cmd_ret,"%*[^=]=%s",get_str_auth);
489 if((strncmp(get_str_auth,use_to_cmp,3))==0){
490 *auth=LYNQ_WIFI_AUTH_WPA_PSK;
491 break;
492 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400493 }
494 }
495 if(feof(fp)){
496 break;
497 }
498 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400499 if(*auth!=LYNQ_WIFI_AUTH_WPA_PSK){
500 *auth=LYNQ_WIFI_AUTH_OPEN;
501 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400502 if((pclose(fp))==-1){
503 perror("close file faild");
504 return -1;
505 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500506
qs.xiong1af5daf2022-03-14 09:12:12 -0400507 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500508}
qs.xiong1af5daf2022-03-14 09:12:12 -0400509
qs.xiongf1b525b2022-03-31 00:58:23 -0400510int lynq_wifi_ap_max_sta_get(lynq_wifi_index_e idx,int* max_sta_num)
qs.xiong7a105ce2022-03-02 09:43:11 -0500511{
qs.xiong97fa59b2022-04-07 05:41:29 -0400512 CHECK_NULL_RETURN_VALUE(max_sta_num,"max_sta_num is null",-1);
qs.xiong7a105ce2022-03-02 09:43:11 -0500513 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -0400514 char get_str_num[5]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500515 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400516 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400517 return -1;
518 }
you.chen65fdcdf2022-04-09 17:50:09 +0800519 if((fp=popen("wl maxassoc","r"))==NULL)
qs.xiong1af5daf2022-03-14 09:12:12 -0400520 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500521 perror("popen error!");
522 return -1;
523 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400524 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
525 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500526 perror("fread fail!");
527 return -1;
528 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400529 strcpy(get_str_num,lynq_cmd_ret);
530 *max_sta_num=atoi(get_str_num);
qs.xiong1af5daf2022-03-14 09:12:12 -0400531
qs.xiong7a105ce2022-03-02 09:43:11 -0500532 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400533 if(ret==-1)
534 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500535 perror("close file faild");
536 return -1;
qs.xiong1af5daf2022-03-14 09:12:12 -0400537 }
538
qs.xiong7a105ce2022-03-02 09:43:11 -0500539 return 0;
540}
541
qs.xiongf1b525b2022-03-31 00:58:23 -0400542int lynq_wifi_ap_start(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500543{
qs.xiongf1b525b2022-03-31 00:58:23 -0400544 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400545 char lynq_wifi_cmd[MAX_CMD]={0};
546 char lynq_cmd_quit[MAX_CMD]="quit";
547 if(idx<0||idx>9){
548 return -1;
549 }
550 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiongf1b525b2022-03-31 00:58:23 -0400551
qs.xiong97fa59b2022-04-07 05:41:29 -0400552 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
qs.xiong1af5daf2022-03-14 09:12:12 -0400553 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500554 perror("popen error!");
555 return -1;
556 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500557
qs.xiong97fa59b2022-04-07 05:41:29 -0400558 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
559 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400560
qs.xiong7a105ce2022-03-02 09:43:11 -0500561 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400562 if(ret==-1)
563 {
564 perror("close file faild");
565 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500566 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500567 return 0;
568}
569
qs.xiongf1b525b2022-03-31 00:58:23 -0400570int lynq_wifi_ap_restart(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500571{
qs.xiong1af5daf2022-03-14 09:12:12 -0400572 int lynq_stop;
573 int lynq_start;
qs.xiong97fa59b2022-04-07 05:41:29 -0400574 if(idx<0||idx>9){
575 return -1;
576 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400577 lynq_stop = lynq_wifi_ap_stop(idx);
qs.xiong1af5daf2022-03-14 09:12:12 -0400578 if ( lynq_stop != 0 )
579 {
580 return -1;
581 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400582
qs.xiongf1b525b2022-03-31 00:58:23 -0400583 lynq_start = lynq_wifi_ap_start(idx);
qs.xiong1af5daf2022-03-14 09:12:12 -0400584 if ( lynq_start != 0 )
585 {
586 return -1;
587 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400588
qs.xiong7a105ce2022-03-02 09:43:11 -0500589 return 0;
590
591}
592
qs.xiongf1b525b2022-03-31 00:58:23 -0400593int lynq_wifi_ap_stop(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500594{
595 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400596 char lynq_wifi_cmd[MAX_CMD]={0};
597 char lynq_cmd_quit[MAX_CMD]="quit";
598 if(idx<0||idx>9){
599 return -1;
600 }
601 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
qs.xiong1af5daf2022-03-14 09:12:12 -0400602
qs.xiong97fa59b2022-04-07 05:41:29 -0400603 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
604 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500605 perror("popen error!");
606 return -1;
607 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400608
609 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
610 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
611
qs.xiong7a105ce2022-03-02 09:43:11 -0500612 int ret=pclose(fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400613 if(ret==-1)
614 {
615 perror("close file faild");
616 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500617 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500618 return 0;
619}
qs.xiong1af5daf2022-03-14 09:12:12 -0400620
qs.xiongf1b525b2022-03-31 00:58:23 -0400621int lynq_wifi_ap_hide_ssid(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500622{
623 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400624 char lynq_disable_cmd[MAX_CMD]={0};
625 char lynq_select_cmd[MAX_CMD]={0};
qs.xiong1af5daf2022-03-14 09:12:12 -0400626 char lynq_hide_cmd[]="IFNAME=wlan0 SET HIDE_SSID 1\n";
qs.xiong97fa59b2022-04-07 05:41:29 -0400627 if(idx<0||idx>9){
628 return -1;
629 }
630
qs.xiongf1b525b2022-03-31 00:58:23 -0400631 sprintf(lynq_disable_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
632 sprintf(lynq_select_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiong7a105ce2022-03-02 09:43:11 -0500633 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
634 perror("popen error!");
635 return -1;
636 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500637
638 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
639 fwrite(lynq_hide_cmd,sizeof(lynq_hide_cmd),1,fp);
640 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400641
qs.xiong7a105ce2022-03-02 09:43:11 -0500642 int ret=pclose(fp);
643 if(ret==-1){
644 perror("close file faild");
645 return -1;
646 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400647
648 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500649}
650
qs.xiongf1b525b2022-03-31 00:58:23 -0400651int lynq_wifi_ap_unhide_ssid(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500652{
653 FILE *fp;
654 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
655 perror("popen error!");
656 return -1;
657 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400658 char lynq_disable_cmd[MAX_CMD]={0};
659 char lynq_select_cmd[MAX_CMD]={0};
660 char lynq_unhide_cmd[MAX_CMD]="IFNAME=wlan0 SET HIDE_SSID 0\n";
661 if(idx<0||idx>9){
662 return -1;
663 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400664
665 sprintf(lynq_disable_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
666 sprintf(lynq_select_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiong7a105ce2022-03-02 09:43:11 -0500667
668 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
669 fwrite(lynq_unhide_cmd,sizeof(lynq_unhide_cmd),1,fp);
670 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400671
qs.xiong7a105ce2022-03-02 09:43:11 -0500672 int ret=pclose(fp);
673 if(ret==-1){
674 perror("close file faild");
675 return -1;
676 }
677
678 return 0;
679}
qs.xiongf1b525b2022-03-31 00:58:23 -0400680
681int lynq_ap_ssid_pass_set(lynq_wifi_index_e idx,char *password)
qs.xiong7a105ce2022-03-02 09:43:11 -0500682{
683 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -0400684 int ret;
685 int pass_len;
qs.xiong0fb469a2022-04-14 03:50:45 -0400686 CHECK_NULL_RETURN_VALUE(password,"password is null",-1);
qs.xiongf1b525b2022-03-31 00:58:23 -0400687 pass_len=strlen(password);
qs.xiong0fb469a2022-04-14 03:50:45 -0400688 if(((pass_len+1) > MAX_CMD) || (pass_len<8)){
qs.xiong97fa59b2022-04-07 05:41:29 -0400689 PRINT_AND_RETURN_VALUE("password is illgal",-1);
690 }else if((lynq_get_wifi_space(password))== 1){
691 PRINT_AND_RETURN_VALUE("password is illgal",-1);
692 }
693 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400694 return -1;
695 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400696 char lynq_tmp_cmd[300]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400697 char lynq_pass_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400698 char lynq_cmd_quit[12]="quit\n";
699 sprintf(lynq_tmp_cmd,"%s%d%s%s%s%s%s","IFNAME=wlan0 set_net ",idx," psk ","\"",password,"\"","\n");
700
701 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
702 perror("popen error!");
703 return -1;
704 }
705
706 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
707 fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
708 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400709
qs.xiongf1b525b2022-03-31 00:58:23 -0400710 ret=pclose(fp);
711 if(ret==-1){
712 perror("close file faild");
713 return -1;
714 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400715
qs.xiongf1b525b2022-03-31 00:58:23 -0400716 return 0;
717}
718
719int lynq_sta_ssid_pass_set(lynq_wifi_index_e idx,char *password)
720{
721 FILE *fp;
722 int pass_len;
qs.xiong0fb469a2022-04-14 03:50:45 -0400723 CHECK_NULL_RETURN_VALUE(password,"password is null",-1);
qs.xiongf1b525b2022-03-31 00:58:23 -0400724 pass_len=strlen(password);
qs.xiong97fa59b2022-04-07 05:41:29 -0400725 if(((pass_len+1) > MAX_CMD) || pass_len<8){
726 PRINT_AND_RETURN_VALUE("password is illgal",-1);
727 }else if((lynq_get_wifi_space(password))== 1){
728 PRINT_AND_RETURN_VALUE("password is illgal",-1);
729 }
730 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400731 return -1;
732 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500733 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400734 char lynq_pass_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400735 char lynq_cmd_quit[12]="quit\n";
736 sprintf(lynq_tmp_cmd,"%s%d%s%s%s%s%s","IFNAME=wlan0 set_net ",idx," psk ","\"",password,"\"","\n");
qs.xiong97fa59b2022-04-07 05:41:29 -0400737
qs.xiong7a105ce2022-03-02 09:43:11 -0500738 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
739 perror("popen error!");
740 return -1;
741 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400742
qs.xiong7a105ce2022-03-02 09:43:11 -0500743 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
744 fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400745 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400746
qs.xiong7a105ce2022-03-02 09:43:11 -0500747 int ret=pclose(fp);
748 if(ret==-1){
749 perror("close file faild");
750 return -1;
751 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400752
qs.xiong7a105ce2022-03-02 09:43:11 -0500753 return 0;
754}
755
qs.xiong97fa59b2022-04-07 05:41:29 -0400756
qs.xiongf1b525b2022-03-31 00:58:23 -0400757int lynq_wifi_sta_ssid_set(lynq_wifi_index_e idx,char *sta_ssid)
qs.xiong7a105ce2022-03-02 09:43:11 -0500758{
qs.xiongf1b525b2022-03-31 00:58:23 -0400759 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400760 char lynq_wifi_ssid_cmd[80]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500761 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400762 char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
763 sprintf(lynq_tmp_cmd,"%s%d%s","IFNAME=wlan0 set_network ",idx," ssid ");
qs.xiongf1b525b2022-03-31 00:58:23 -0400764 sprintf(lynq_wifi_ssid_cmd,"%s%s%s%s%s",lynq_tmp_cmd,"\"",sta_ssid,"\"","\n");
qs.xiong97fa59b2022-04-07 05:41:29 -0400765 if(idx<0||idx>9){
766 return -1;
767 }
qs.xiong0fb469a2022-04-14 03:50:45 -0400768 CHECK_NULL_RETURN_VALUE(sta_ssid,"sta_ssid is null",-1);
qs.xiong97fa59b2022-04-07 05:41:29 -0400769 if(((strlen(sta_ssid))>32)){
770 PRINT_AND_RETURN_VALUE("ssid is illgal",-1);
771 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400772 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
773 perror("popen error!");
774 return -1;
775 }
776
777 fwrite(lynq_wifi_ssid_cmd,sizeof(lynq_wifi_ssid_cmd),1,fp);
778 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400779
780 int ret=pclose(fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500781 if(ret==-1){
782 perror("close file faild");
783 return -1;
784 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400785
qs.xiong97fa59b2022-04-07 05:41:29 -0400786 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500787}
788
qs.xiongf1b525b2022-03-31 00:58:23 -0400789int lynq_wifi_sta_ssid_get(lynq_wifi_index_e idx,char* sta_ssid)
qs.xiong7a105ce2022-03-02 09:43:11 -0500790{
qs.xiong97fa59b2022-04-07 05:41:29 -0400791 CHECK_NULL_RETURN_VALUE(sta_ssid,"ap_ssid is null",-1);
792 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -0400793 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong7a105ce2022-03-02 09:43:11 -0500794 char lynq_cmd_ret[MAX_RET]={0};
795 char *strcn="ssid=";
qs.xiongf1b525b2022-03-31 00:58:23 -0400796 if(idx>10||idx<0){
797 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400798 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500799 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
800 perror("popen error!");
qs.xiong97fa59b2022-04-07 05:41:29 -0400801 return -1;
802 }
803 while(1){
804 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
805 if((strncmp(lynq_cmd_ret,strcn,5))==0)
qs.xiong1af5daf2022-03-14 09:12:12 -0400806 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400807 sscanf(lynq_cmd_ret,"%*[^=]=%s",sta_ssid);
808 }
809 }
810 if(feof(fp)){
811 break;
812 }
813 }
814
815 if((pclose(fp))==-1){
816 perror("close file faild");
817 return -1;
818 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500819 return 0;
820
821}
822
qs.xiongf1b525b2022-03-31 00:58:23 -0400823int lynq_wifi_sta_auth_set(lynq_wifi_index_e idx, lynq_wifi_sta_auth_s auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500824{
qs.xiong1af5daf2022-03-14 09:12:12 -0400825 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400826 int ret;
827 if(idx<0||idx>9){
828 return -1;
829 }
qs.xiong0fb469a2022-04-14 03:50:45 -0400830 PRINT_AND_RETURN_VALUE("set auth is error",auth);
831 if((auth !=0) && (auth !=1)){
832 PRINT_AND_RETURN_VALUE("set auth is error",-1);
833 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400834 switch(auth){
835 case LYNQ_WIFI_STA_AUTH_OPEN:
836 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400837 char lynq_auth_cmd[MAX_CMD]={0};
838 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
839 char lynq_cmd_quit[12]="quit\n";
840 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d key_mgmt NONE\n",idx);
841
qs.xiongf1b525b2022-03-31 00:58:23 -0400842 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400843 perror("popen error!");
844 return -1;
845 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400846
qs.xiong1af5daf2022-03-14 09:12:12 -0400847 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
848 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400849 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
850
851 ret=pclose(fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400852 if(ret==-1){
853 perror("close file faild");
854 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400855 }
856 break;
857 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400858 case LYNQ_WIFI_STA_AUTH_WPA_PSK:
859 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400860 char lynq_auth_cmd[MAX_CMD]={0};
861 char lynq_psk_cmd[MAX_CMD]={0};
862 char lynq_pairwise_cmd[MAX_CMD]={0};
863 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
864 char lynq_cmd_quit[12]="quit\n";
865
866 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d proto WPA2\n",idx);
867 sprintf(lynq_psk_cmd,"IFNAME=wlan0 set_net %d key_mgmt WPA-PSK\n",idx);
868 sprintf(lynq_pairwise_cmd,"IFNAME=wlan0 set_net %d pairwise CCMP\n",idx);
869
qs.xiongf1b525b2022-03-31 00:58:23 -0400870 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
871 perror("popen error!");
872 return -1;
873 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400874
qs.xiongf1b525b2022-03-31 00:58:23 -0400875 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
876 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
877 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
878 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400879 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
880
881 ret=pclose(fp);
882 if(ret==-1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400883 perror("close file faild");
884 return -1;
885 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400886 break;
qs.xiong97fa59b2022-04-07 05:41:29 -0400887 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400888 default:
889 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400890 }
891
qs.xiongf1b525b2022-03-31 00:58:23 -0400892 return 0;
qs.xiong1af5daf2022-03-14 09:12:12 -0400893}
qs.xiong7a105ce2022-03-02 09:43:11 -0500894
qs.xiongf1b525b2022-03-31 00:58:23 -0400895int lynq_wifi_sta_auth_get(lynq_wifi_index_e idx, lynq_wifi_sta_auth_s* auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500896{
qs.xiong0fb469a2022-04-14 03:50:45 -0400897 CHECK_NULL_RETURN_VALUE(auth,"the auth is null",-1);
qs.xiong97fa59b2022-04-07 05:41:29 -0400898 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong1af5daf2022-03-14 09:12:12 -0400899 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400900 char get_str_auth[20]={0};
901 char use_to_cmp[4]="WPA";
902 char strcn[20]="key_mgmt=";
qs.xiongf1b525b2022-03-31 00:58:23 -0400903
qs.xiong97fa59b2022-04-07 05:41:29 -0400904 FILE *fp;
905 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400906 perror("popen error!");
qs.xiong97fa59b2022-04-07 05:41:29 -0400907 return -1;
qs.xiong1af5daf2022-03-14 09:12:12 -0400908 }
909 while(1){
qs.xiong97fa59b2022-04-07 05:41:29 -0400910 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400911 if((strncmp(lynq_cmd_ret,strcn,9))==0)
912 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400913 sscanf(lynq_cmd_ret,"%*[^=]=%s",get_str_auth);
914 if((strncmp(get_str_auth,use_to_cmp,3))==0){
915 *auth=LYNQ_WIFI_AUTH_WPA_PSK;
916 break;
qs.xiongf1b525b2022-03-31 00:58:23 -0400917 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400918 }
919 }
920 if(feof(fp)){
921 break;
922 }
923 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400924 if(*auth!=LYNQ_WIFI_AUTH_WPA_PSK){
925 *auth=LYNQ_WIFI_AUTH_OPEN;
926 }
927 if((pclose(fp))==-1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400928 perror("close file faild");
929 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400930 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500931
932}
933
qs.xiong97fa59b2022-04-07 05:41:29 -0400934int lynq_wifi_sta_connect(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500935{
936 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400937 char lynq_wifi_cmd[MAX_CMD]={0};
938 char lynq_cmd_quit[MAX_CMD]="quit\n";
939 if(idx<0||idx>9){
940 return -1;
941 }
942 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiongf1b525b2022-03-31 00:58:23 -0400943
qs.xiong97fa59b2022-04-07 05:41:29 -0400944 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
945 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500946 perror("popen error!");
947 return -1;
948 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500949
qs.xiong97fa59b2022-04-07 05:41:29 -0400950 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
951 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500952
953 int ret=pclose(fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400954 if(ret==-1)
955 {
956 perror("close file faild");
957 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500958 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500959 return 0;
960}
961
qs.xiongf1b525b2022-03-31 00:58:23 -0400962int lynq_wifi_sta_disconnect(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500963{
964 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400965 char lynq_wifi_cmd[MAX_CMD]={0};
966 char lynq_cmd_quit[MAX_CMD]="quit\n";
967 if(idx<0||idx>9){
968 return -1;
969 }
970 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
971
972 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
973 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500974 perror("popen error!");
975 return -1;
976 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500977
qs.xiong97fa59b2022-04-07 05:41:29 -0400978 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
979 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
980
qs.xiong7a105ce2022-03-02 09:43:11 -0500981 int ret=pclose(fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400982 if(ret==-1)
983 {
984 perror("close file faild");
985 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500986 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400987
qs.xiong7a105ce2022-03-02 09:43:11 -0500988 return 0;
989}
qs.xiong97fa59b2022-04-07 05:41:29 -0400990
qs.xiong7a105ce2022-03-02 09:43:11 -0500991int lynq_wifi_wpa_start(void){
qs.xiong9c99fa92022-03-15 08:03:26 -0400992 int ret;
qs.xiongf1b525b2022-03-31 00:58:23 -0400993 pthread_t pth;
qs.xiong7a105ce2022-03-02 09:43:11 -0500994
qs.xiongf1b525b2022-03-31 00:58:23 -0400995 ret=pthread_create(&pth,NULL,StartThread,NULL);
996 if(ret<0){
997 return -1;
998 }
999 pthread_join(pth,NULL);
qs.xiong9c99fa92022-03-15 08:03:26 -04001000
qs.xiong7a105ce2022-03-02 09:43:11 -05001001 return 0;
1002}
1003
1004int lynq_wifi_wpacli_start(void){
qs.xiong7a105ce2022-03-02 09:43:11 -05001005 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -04001006 int i=0;
qs.xiong7a105ce2022-03-02 09:43:11 -05001007 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -04001008 char add_cmd[MAX_CMD]="IFNAME=wlan0 add_net\n";
1009 char save_cmd[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -04001010 char exit_cmd[20]="quit\n";
qs.xiong7a105ce2022-03-02 09:43:11 -05001011
qs.xiong97fa59b2022-04-07 05:41:29 -04001012 if(lynq_get_idx_number() == 1){
1013 PRINT_AND_RETURN_VALUE("don't need add idx agin\n",0);
1014 }
qs.xiong7a105ce2022-03-02 09:43:11 -05001015 fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w");
1016 if(fp==NULL){
1017 perror("start wpa_supplicant faild!");
1018 return -1;
1019 }
qs.xiong1af5daf2022-03-14 09:12:12 -04001020
qs.xiong97fa59b2022-04-07 05:41:29 -04001021 for(i=0;i<10;i++){
qs.xiongf1b525b2022-03-31 00:58:23 -04001022 fwrite(add_cmd,sizeof(add_cmd),1,fp);
1023 }
qs.xiong1af5daf2022-03-14 09:12:12 -04001024 fwrite(save_cmd,sizeof(save_cmd),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -04001025 fwrite(exit_cmd,sizeof(exit_cmd),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -04001026
qs.xiong7a105ce2022-03-02 09:43:11 -05001027 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -04001028 if(ret==-1)
1029 {
1030 perror("close file faild");
1031 return -1;
1032 }
qs.xiong97fa59b2022-04-07 05:41:29 -04001033
qs.xiong1af5daf2022-03-14 09:12:12 -04001034 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -05001035}
1036
qs.xiongf1b525b2022-03-31 00:58:23 -04001037pid_t GetPIDbyName(char* ps_name)
qs.xiong97fa59b2022-04-07 05:41:29 -04001038{
qs.xiongf1b525b2022-03-31 00:58:23 -04001039 FILE *fp;
1040 char *cmd=(char*)calloc(1,200);
1041 sprintf(cmd,"pidof %s",ps_name);
1042 fp=popen(cmd,"r");
1043 fread(cmd,1,200,fp);
1044 fclose(fp);
1045 return atoi(cmd);
1046}
qs.xiong7a105ce2022-03-02 09:43:11 -05001047
qs.xiong97fa59b2022-04-07 05:41:29 -04001048int lynq_get_idx_number(void)
1049{
1050 FILE *fp;
1051 const char* number="9";
1052 char lynq_wifi_ssid_cmd[MAX_CMD]="wpa_cli -iwlan0 -p/var/run/wpa_supplicant list_net";
1053 char lynq_cmd_ret[MAX_RET]={0};
1054
1055 if((fp=popen(lynq_wifi_ssid_cmd,"r"))==NULL){
1056 perror("popen error!");
1057 return -1;
1058 }
1059 while(1){
1060 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
1061 if((strncmp(lynq_cmd_ret,number,1))==0)
1062 {
1063 CLOSE_FP_RETURN_VALUE(fp,"don't need add idx",1);
1064 }
1065 }
1066 if(feof(fp)){
1067 break;
1068 }
1069 }
1070
1071 if((pclose(fp))==-1){
1072 perror("close file faild");
1073 return -1;
1074 }
1075
1076 return 0;
1077}
1078
1079
1080int lynq_get_wifi_mac(char* wifi_mac)
1081{
1082 FILE * fp;
1083 char lynq_cmd_ret[MAX_RET]={0};
1084 char lynq_tmp_cmd[MAX_CMD]={0};
1085
you.chen65fdcdf2022-04-09 17:50:09 +08001086 if((fp=popen("wl cur_etheraddr","r"))==NULL)
qs.xiong97fa59b2022-04-07 05:41:29 -04001087 {
1088 perror("popen error!");
1089 return -1;
1090 }
1091 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
1092 {
1093 perror("fread fail!");
1094 return -1;
1095 }
1096 strncpy(wifi_mac,lynq_cmd_ret+14,18);
1097 int ret=pclose(fp);
1098 if(ret==-1)
1099 {
1100 perror("close file faild");
1101 return -1;
1102 }
1103
1104 return 0;
1105}
1106int lynq_get_wifi_space(char* password){
1107 int i;
1108 for(i=0;password[i];i++){
1109 if(isspace(password[i])){
1110 return 1;
1111 }
1112 }
1113
1114 return 0;
1115}