blob: fad739f15b841eef0a16b93a1d28f7b0b99e8d3e [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;
345 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400346 return -1;
347 }
qs.xiong0fb469a2022-04-14 03:50:45 -0400348 char lynq_cmd_ret[MAX_RET]="";
349 char lynq_cmd_channel[MAX_CMD]="";
350 sprintf(lynq_cmd_channel,"/data/wl chanspec %d\n",channel);
351 system("/data/wl down");
qs.xiong1af5daf2022-03-14 09:12:12 -0400352
qs.xiong0fb469a2022-04-14 03:50:45 -0400353 fp=popen(lynq_cmd_channel,"r");
354 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
355 if(strncmp(lynq_cmd_ret,g_lynq_wifi_ok,2) != 0){
356 PRINT_AND_RETURN_VALUE("set channel error",-1);
357 }
358 system("/data/wl up");
359 }
360
qs.xiong7a105ce2022-03-02 09:43:11 -0500361 return 0;
362}
qs.xiong0fb469a2022-04-14 03:50:45 -0400363
qs.xiongf1b525b2022-03-31 00:58:23 -0400364int lynq_wifi_ap_channel_get( lynq_wifi_index_e idx,int* channel)
qs.xiong7a105ce2022-03-02 09:43:11 -0500365{
qs.xiong97fa59b2022-04-07 05:41:29 -0400366 CHECK_NULL_RETURN_VALUE(channel,"channel is null",-1);
qs.xiongf1b525b2022-03-31 00:58:23 -0400367 FILE *fp;
368 char lynq_cmd_set[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400369 char channel_str[MAX_CMD]={0};
qs.xiongf1b525b2022-03-31 00:58:23 -0400370 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400371 if(idx<0||idx>9){
372 return -1;
373 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400374
you.chen65fdcdf2022-04-09 17:50:09 +0800375 if((fp=popen("wl chanspec","r"))==NULL){
qs.xiong97fa59b2022-04-07 05:41:29 -0400376 perror("popen error!");
qs.xiong1af5daf2022-03-14 09:12:12 -0400377 return -1;
378 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400379
380 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
381 strncpy(channel_str,lynq_cmd_ret,2);
382 *channel=atoi(channel_str);
qs.xiong1af5daf2022-03-14 09:12:12 -0400383 }
384 if((pclose(fp))==-1){
qs.xiong97fa59b2022-04-07 05:41:29 -0400385 perror("close file faild");
qs.xiong1af5daf2022-03-14 09:12:12 -0400386 return -1;
387 }
388
qs.xiong7a105ce2022-03-02 09:43:11 -0500389 return 0;
390}
391
392
qs.xiong97fa59b2022-04-07 05:41:29 -0400393int lynq_wifi_ap_auth_set(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500394{
395 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400396 int ret;
397 if(idx<0||idx>9){
398 return -1;
399 }
qs.xiong0fb469a2022-04-14 03:50:45 -0400400 if((auth !=0) && (auth !=1)){
401 PRINT_AND_RETURN_VALUE("set auth is null",-1);
402 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500403 switch(auth){
qs.xiongf1b525b2022-03-31 00:58:23 -0400404 case LYNQ_WIFI_AUTH_OPEN:
qs.xiong7a105ce2022-03-02 09:43:11 -0500405 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400406 char lynq_auth_cmd[MAX_CMD]={0};
407 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400408 char lynq_cmd_quit[12]="quit\n";
409 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d key_mgmt NONE\n",idx);
410
qs.xiong7a105ce2022-03-02 09:43:11 -0500411 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
412 perror("popen error!");
413 return -1;
414 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500415
416 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
417 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400418 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500419
qs.xiong97fa59b2022-04-07 05:41:29 -0400420 ret=pclose(fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500421 if(ret==-1){
422 perror("close file faild");
423 return -1;
424 }
425 break;
426 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400427 case LYNQ_WIFI_AUTH_WPA_PSK:
qs.xiong7a105ce2022-03-02 09:43:11 -0500428 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400429
qs.xiong97fa59b2022-04-07 05:41:29 -0400430 char lynq_auth_cmd[MAX_CMD]={0};
431 char lynq_psk_cmd[MAX_CMD]={0};
432 char lynq_pairwise_cmd[MAX_CMD]={0};
433 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400434 char lynq_cmd_quit[12]="quit\n";
435
436 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d proto WPA2\n",idx);
437 sprintf(lynq_psk_cmd,"IFNAME=wlan0 set_net %d key_mgmt WPA-PSK\n",idx);
438 sprintf(lynq_pairwise_cmd,"IFNAME=wlan0 set_net %d pairwise CCMP\n",idx);
qs.xiong7a105ce2022-03-02 09:43:11 -0500439
qs.xiong7a105ce2022-03-02 09:43:11 -0500440 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
441 perror("popen error!");
442 return -1;
443 }
444
qs.xiongf1b525b2022-03-31 00:58:23 -0400445 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500446 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
447 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
448 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400449 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500450
qs.xiong97fa59b2022-04-07 05:41:29 -0400451 ret=pclose(fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500452 if(ret==-1){
453 perror("close file faild");
454 return -1;
455 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500456 break;
qs.xiong97fa59b2022-04-07 05:41:29 -0400457 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500458 default:
459 return -1;
460 }
461
qs.xiong7a105ce2022-03-02 09:43:11 -0500462 return 0;
463}
464
qs.xiongf1b525b2022-03-31 00:58:23 -0400465int lynq_wifi_ap_auth_get(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s *auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500466{
qs.xiong0fb469a2022-04-14 03:50:45 -0400467 CHECK_NULL_RETURN_VALUE(auth,"the auth is null",-1);
qs.xiong1af5daf2022-03-14 09:12:12 -0400468 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiongf1b525b2022-03-31 00:58:23 -0400469 char lynq_cmd_ret[MAX_RET]={0};
470 char get_str_auth[20]={0};
471 char use_to_cmp[4]="WPA";
472 char strcn[20]="key_mgmt=";
qs.xiong97fa59b2022-04-07 05:41:29 -0400473 if(idx<0||idx>9){
474 return -1;
475 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500476
qs.xiong1af5daf2022-03-14 09:12:12 -0400477 FILE *fp;
478 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
479 perror("popen error!");
qs.xiong97fa59b2022-04-07 05:41:29 -0400480 return -1;
481 }
482 while(1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400483 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400484 if((strncmp(lynq_cmd_ret,strcn,9))==0)
485 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400486 sscanf(lynq_cmd_ret,"%*[^=]=%s",get_str_auth);
487 if((strncmp(get_str_auth,use_to_cmp,3))==0){
488 *auth=LYNQ_WIFI_AUTH_WPA_PSK;
489 break;
490 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400491 }
492 }
493 if(feof(fp)){
494 break;
495 }
496 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400497 if(*auth!=LYNQ_WIFI_AUTH_WPA_PSK){
498 *auth=LYNQ_WIFI_AUTH_OPEN;
499 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400500 if((pclose(fp))==-1){
501 perror("close file faild");
502 return -1;
503 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500504
qs.xiong1af5daf2022-03-14 09:12:12 -0400505 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500506}
qs.xiong1af5daf2022-03-14 09:12:12 -0400507
qs.xiongf1b525b2022-03-31 00:58:23 -0400508int lynq_wifi_ap_max_sta_get(lynq_wifi_index_e idx,int* max_sta_num)
qs.xiong7a105ce2022-03-02 09:43:11 -0500509{
qs.xiong97fa59b2022-04-07 05:41:29 -0400510 CHECK_NULL_RETURN_VALUE(max_sta_num,"max_sta_num is null",-1);
qs.xiong7a105ce2022-03-02 09:43:11 -0500511 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -0400512 char get_str_num[5]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500513 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400514 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400515 return -1;
516 }
you.chen65fdcdf2022-04-09 17:50:09 +0800517 if((fp=popen("wl maxassoc","r"))==NULL)
qs.xiong1af5daf2022-03-14 09:12:12 -0400518 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500519 perror("popen error!");
520 return -1;
521 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400522 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
523 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500524 perror("fread fail!");
525 return -1;
526 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400527 strcpy(get_str_num,lynq_cmd_ret);
528 *max_sta_num=atoi(get_str_num);
qs.xiong1af5daf2022-03-14 09:12:12 -0400529
qs.xiong7a105ce2022-03-02 09:43:11 -0500530 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400531 if(ret==-1)
532 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500533 perror("close file faild");
534 return -1;
qs.xiong1af5daf2022-03-14 09:12:12 -0400535 }
536
qs.xiong7a105ce2022-03-02 09:43:11 -0500537 return 0;
538}
539
qs.xiongf1b525b2022-03-31 00:58:23 -0400540int lynq_wifi_ap_start(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500541{
qs.xiongf1b525b2022-03-31 00:58:23 -0400542 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400543 char lynq_wifi_cmd[MAX_CMD]={0};
544 char lynq_cmd_quit[MAX_CMD]="quit";
545 if(idx<0||idx>9){
546 return -1;
547 }
548 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiongf1b525b2022-03-31 00:58:23 -0400549
qs.xiong97fa59b2022-04-07 05:41:29 -0400550 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
qs.xiong1af5daf2022-03-14 09:12:12 -0400551 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500552 perror("popen error!");
553 return -1;
554 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500555
qs.xiong97fa59b2022-04-07 05:41:29 -0400556 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
557 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400558
qs.xiong7a105ce2022-03-02 09:43:11 -0500559 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400560 if(ret==-1)
561 {
562 perror("close file faild");
563 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500564 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500565 return 0;
566}
567
qs.xiongf1b525b2022-03-31 00:58:23 -0400568int lynq_wifi_ap_restart(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500569{
qs.xiong1af5daf2022-03-14 09:12:12 -0400570 int lynq_stop;
571 int lynq_start;
qs.xiong97fa59b2022-04-07 05:41:29 -0400572 if(idx<0||idx>9){
573 return -1;
574 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400575 lynq_stop = lynq_wifi_ap_stop(idx);
qs.xiong1af5daf2022-03-14 09:12:12 -0400576 if ( lynq_stop != 0 )
577 {
578 return -1;
579 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400580
qs.xiongf1b525b2022-03-31 00:58:23 -0400581 lynq_start = lynq_wifi_ap_start(idx);
qs.xiong1af5daf2022-03-14 09:12:12 -0400582 if ( lynq_start != 0 )
583 {
584 return -1;
585 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400586
qs.xiong7a105ce2022-03-02 09:43:11 -0500587 return 0;
588
589}
590
qs.xiongf1b525b2022-03-31 00:58:23 -0400591int lynq_wifi_ap_stop(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500592{
593 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400594 char lynq_wifi_cmd[MAX_CMD]={0};
595 char lynq_cmd_quit[MAX_CMD]="quit";
596 if(idx<0||idx>9){
597 return -1;
598 }
599 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
qs.xiong1af5daf2022-03-14 09:12:12 -0400600
qs.xiong97fa59b2022-04-07 05:41:29 -0400601 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
602 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500603 perror("popen error!");
604 return -1;
605 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400606
607 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
608 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
609
qs.xiong7a105ce2022-03-02 09:43:11 -0500610 int ret=pclose(fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400611 if(ret==-1)
612 {
613 perror("close file faild");
614 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500615 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500616 return 0;
617}
qs.xiong1af5daf2022-03-14 09:12:12 -0400618
qs.xiongf1b525b2022-03-31 00:58:23 -0400619int lynq_wifi_ap_hide_ssid(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500620{
621 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400622 char lynq_disable_cmd[MAX_CMD]={0};
623 char lynq_select_cmd[MAX_CMD]={0};
qs.xiong1af5daf2022-03-14 09:12:12 -0400624 char lynq_hide_cmd[]="IFNAME=wlan0 SET HIDE_SSID 1\n";
qs.xiong97fa59b2022-04-07 05:41:29 -0400625 if(idx<0||idx>9){
626 return -1;
627 }
628
qs.xiongf1b525b2022-03-31 00:58:23 -0400629 sprintf(lynq_disable_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
630 sprintf(lynq_select_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiong7a105ce2022-03-02 09:43:11 -0500631 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
632 perror("popen error!");
633 return -1;
634 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500635
636 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
637 fwrite(lynq_hide_cmd,sizeof(lynq_hide_cmd),1,fp);
638 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400639
qs.xiong7a105ce2022-03-02 09:43:11 -0500640 int ret=pclose(fp);
641 if(ret==-1){
642 perror("close file faild");
643 return -1;
644 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400645
646 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500647}
648
qs.xiongf1b525b2022-03-31 00:58:23 -0400649int lynq_wifi_ap_unhide_ssid(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500650{
651 FILE *fp;
652 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
653 perror("popen error!");
654 return -1;
655 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400656 char lynq_disable_cmd[MAX_CMD]={0};
657 char lynq_select_cmd[MAX_CMD]={0};
658 char lynq_unhide_cmd[MAX_CMD]="IFNAME=wlan0 SET HIDE_SSID 0\n";
659 if(idx<0||idx>9){
660 return -1;
661 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400662
663 sprintf(lynq_disable_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
664 sprintf(lynq_select_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiong7a105ce2022-03-02 09:43:11 -0500665
666 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
667 fwrite(lynq_unhide_cmd,sizeof(lynq_unhide_cmd),1,fp);
668 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400669
qs.xiong7a105ce2022-03-02 09:43:11 -0500670 int ret=pclose(fp);
671 if(ret==-1){
672 perror("close file faild");
673 return -1;
674 }
675
676 return 0;
677}
qs.xiongf1b525b2022-03-31 00:58:23 -0400678
679int lynq_ap_ssid_pass_set(lynq_wifi_index_e idx,char *password)
qs.xiong7a105ce2022-03-02 09:43:11 -0500680{
681 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -0400682 int ret;
683 int pass_len;
qs.xiong0fb469a2022-04-14 03:50:45 -0400684 CHECK_NULL_RETURN_VALUE(password,"password is null",-1);
qs.xiongf1b525b2022-03-31 00:58:23 -0400685 pass_len=strlen(password);
qs.xiong0fb469a2022-04-14 03:50:45 -0400686 if(((pass_len+1) > MAX_CMD) || (pass_len<8)){
qs.xiong97fa59b2022-04-07 05:41:29 -0400687 PRINT_AND_RETURN_VALUE("password is illgal",-1);
688 }else if((lynq_get_wifi_space(password))== 1){
689 PRINT_AND_RETURN_VALUE("password is illgal",-1);
690 }
691 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400692 return -1;
693 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400694 char lynq_tmp_cmd[300]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400695 char lynq_pass_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400696 char lynq_cmd_quit[12]="quit\n";
697 sprintf(lynq_tmp_cmd,"%s%d%s%s%s%s%s","IFNAME=wlan0 set_net ",idx," psk ","\"",password,"\"","\n");
698
699 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
700 perror("popen error!");
701 return -1;
702 }
703
704 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
705 fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
706 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400707
qs.xiongf1b525b2022-03-31 00:58:23 -0400708 ret=pclose(fp);
709 if(ret==-1){
710 perror("close file faild");
711 return -1;
712 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400713
qs.xiongf1b525b2022-03-31 00:58:23 -0400714 return 0;
715}
716
717int lynq_sta_ssid_pass_set(lynq_wifi_index_e idx,char *password)
718{
719 FILE *fp;
720 int pass_len;
qs.xiong0fb469a2022-04-14 03:50:45 -0400721 CHECK_NULL_RETURN_VALUE(password,"password is null",-1);
qs.xiongf1b525b2022-03-31 00:58:23 -0400722 pass_len=strlen(password);
qs.xiong97fa59b2022-04-07 05:41:29 -0400723 if(((pass_len+1) > MAX_CMD) || pass_len<8){
724 PRINT_AND_RETURN_VALUE("password is illgal",-1);
725 }else if((lynq_get_wifi_space(password))== 1){
726 PRINT_AND_RETURN_VALUE("password is illgal",-1);
727 }
728 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400729 return -1;
730 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500731 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400732 char lynq_pass_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400733 char lynq_cmd_quit[12]="quit\n";
734 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 -0400735
qs.xiong7a105ce2022-03-02 09:43:11 -0500736 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
737 perror("popen error!");
738 return -1;
739 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400740
qs.xiong7a105ce2022-03-02 09:43:11 -0500741 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
742 fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400743 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400744
qs.xiong7a105ce2022-03-02 09:43:11 -0500745 int ret=pclose(fp);
746 if(ret==-1){
747 perror("close file faild");
748 return -1;
749 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400750
qs.xiong7a105ce2022-03-02 09:43:11 -0500751 return 0;
752}
753
qs.xiong97fa59b2022-04-07 05:41:29 -0400754
qs.xiongf1b525b2022-03-31 00:58:23 -0400755int lynq_wifi_sta_ssid_set(lynq_wifi_index_e idx,char *sta_ssid)
qs.xiong7a105ce2022-03-02 09:43:11 -0500756{
qs.xiongf1b525b2022-03-31 00:58:23 -0400757 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400758 char lynq_wifi_ssid_cmd[80]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500759 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400760 char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
761 sprintf(lynq_tmp_cmd,"%s%d%s","IFNAME=wlan0 set_network ",idx," ssid ");
qs.xiongf1b525b2022-03-31 00:58:23 -0400762 sprintf(lynq_wifi_ssid_cmd,"%s%s%s%s%s",lynq_tmp_cmd,"\"",sta_ssid,"\"","\n");
qs.xiong97fa59b2022-04-07 05:41:29 -0400763 if(idx<0||idx>9){
764 return -1;
765 }
qs.xiong0fb469a2022-04-14 03:50:45 -0400766 CHECK_NULL_RETURN_VALUE(sta_ssid,"sta_ssid is null",-1);
qs.xiong97fa59b2022-04-07 05:41:29 -0400767 if(((strlen(sta_ssid))>32)){
768 PRINT_AND_RETURN_VALUE("ssid is illgal",-1);
769 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400770 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
771 perror("popen error!");
772 return -1;
773 }
774
775 fwrite(lynq_wifi_ssid_cmd,sizeof(lynq_wifi_ssid_cmd),1,fp);
776 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400777
778 int ret=pclose(fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500779 if(ret==-1){
780 perror("close file faild");
781 return -1;
782 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400783
qs.xiong97fa59b2022-04-07 05:41:29 -0400784 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500785}
786
qs.xiongf1b525b2022-03-31 00:58:23 -0400787int lynq_wifi_sta_ssid_get(lynq_wifi_index_e idx,char* sta_ssid)
qs.xiong7a105ce2022-03-02 09:43:11 -0500788{
qs.xiong97fa59b2022-04-07 05:41:29 -0400789 CHECK_NULL_RETURN_VALUE(sta_ssid,"ap_ssid is null",-1);
790 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -0400791 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong7a105ce2022-03-02 09:43:11 -0500792 char lynq_cmd_ret[MAX_RET]={0};
793 char *strcn="ssid=";
qs.xiongf1b525b2022-03-31 00:58:23 -0400794 if(idx>10||idx<0){
795 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400796 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500797 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
798 perror("popen error!");
qs.xiong97fa59b2022-04-07 05:41:29 -0400799 return -1;
800 }
801 while(1){
802 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
803 if((strncmp(lynq_cmd_ret,strcn,5))==0)
qs.xiong1af5daf2022-03-14 09:12:12 -0400804 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400805 sscanf(lynq_cmd_ret,"%*[^=]=%s",sta_ssid);
806 }
807 }
808 if(feof(fp)){
809 break;
810 }
811 }
812
813 if((pclose(fp))==-1){
814 perror("close file faild");
815 return -1;
816 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500817 return 0;
818
819}
820
qs.xiongf1b525b2022-03-31 00:58:23 -0400821int lynq_wifi_sta_auth_set(lynq_wifi_index_e idx, lynq_wifi_sta_auth_s auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500822{
qs.xiong1af5daf2022-03-14 09:12:12 -0400823 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400824 int ret;
825 if(idx<0||idx>9){
826 return -1;
827 }
qs.xiong0fb469a2022-04-14 03:50:45 -0400828 PRINT_AND_RETURN_VALUE("set auth is error",auth);
829 if((auth !=0) && (auth !=1)){
830 PRINT_AND_RETURN_VALUE("set auth is error",-1);
831 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400832 switch(auth){
833 case LYNQ_WIFI_STA_AUTH_OPEN:
834 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400835 char lynq_auth_cmd[MAX_CMD]={0};
836 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
837 char lynq_cmd_quit[12]="quit\n";
838 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d key_mgmt NONE\n",idx);
839
qs.xiongf1b525b2022-03-31 00:58:23 -0400840 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400841 perror("popen error!");
842 return -1;
843 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400844
qs.xiong1af5daf2022-03-14 09:12:12 -0400845 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
846 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400847 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
848
849 ret=pclose(fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400850 if(ret==-1){
851 perror("close file faild");
852 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400853 }
854 break;
855 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400856 case LYNQ_WIFI_STA_AUTH_WPA_PSK:
857 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400858 char lynq_auth_cmd[MAX_CMD]={0};
859 char lynq_psk_cmd[MAX_CMD]={0};
860 char lynq_pairwise_cmd[MAX_CMD]={0};
861 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
862 char lynq_cmd_quit[12]="quit\n";
863
864 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d proto WPA2\n",idx);
865 sprintf(lynq_psk_cmd,"IFNAME=wlan0 set_net %d key_mgmt WPA-PSK\n",idx);
866 sprintf(lynq_pairwise_cmd,"IFNAME=wlan0 set_net %d pairwise CCMP\n",idx);
867
qs.xiongf1b525b2022-03-31 00:58:23 -0400868 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
869 perror("popen error!");
870 return -1;
871 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400872
qs.xiongf1b525b2022-03-31 00:58:23 -0400873 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
874 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
875 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
876 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400877 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
878
879 ret=pclose(fp);
880 if(ret==-1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400881 perror("close file faild");
882 return -1;
883 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400884 break;
qs.xiong97fa59b2022-04-07 05:41:29 -0400885 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400886 default:
887 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400888 }
889
qs.xiongf1b525b2022-03-31 00:58:23 -0400890 return 0;
qs.xiong1af5daf2022-03-14 09:12:12 -0400891}
qs.xiong7a105ce2022-03-02 09:43:11 -0500892
qs.xiongf1b525b2022-03-31 00:58:23 -0400893int lynq_wifi_sta_auth_get(lynq_wifi_index_e idx, lynq_wifi_sta_auth_s* auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500894{
qs.xiong0fb469a2022-04-14 03:50:45 -0400895 CHECK_NULL_RETURN_VALUE(auth,"the auth is null",-1);
qs.xiong97fa59b2022-04-07 05:41:29 -0400896 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong1af5daf2022-03-14 09:12:12 -0400897 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400898 char get_str_auth[20]={0};
899 char use_to_cmp[4]="WPA";
900 char strcn[20]="key_mgmt=";
qs.xiongf1b525b2022-03-31 00:58:23 -0400901
qs.xiong97fa59b2022-04-07 05:41:29 -0400902 FILE *fp;
903 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400904 perror("popen error!");
qs.xiong97fa59b2022-04-07 05:41:29 -0400905 return -1;
qs.xiong1af5daf2022-03-14 09:12:12 -0400906 }
907 while(1){
qs.xiong97fa59b2022-04-07 05:41:29 -0400908 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400909 if((strncmp(lynq_cmd_ret,strcn,9))==0)
910 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400911 sscanf(lynq_cmd_ret,"%*[^=]=%s",get_str_auth);
912 if((strncmp(get_str_auth,use_to_cmp,3))==0){
913 *auth=LYNQ_WIFI_AUTH_WPA_PSK;
914 break;
qs.xiongf1b525b2022-03-31 00:58:23 -0400915 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400916 }
917 }
918 if(feof(fp)){
919 break;
920 }
921 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400922 if(*auth!=LYNQ_WIFI_AUTH_WPA_PSK){
923 *auth=LYNQ_WIFI_AUTH_OPEN;
924 }
925 if((pclose(fp))==-1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400926 perror("close file faild");
927 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400928 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500929
930}
931
qs.xiong97fa59b2022-04-07 05:41:29 -0400932int lynq_wifi_sta_connect(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500933{
934 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400935 char lynq_wifi_cmd[MAX_CMD]={0};
936 char lynq_cmd_quit[MAX_CMD]="quit\n";
937 if(idx<0||idx>9){
938 return -1;
939 }
940 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiongf1b525b2022-03-31 00:58:23 -0400941
qs.xiong97fa59b2022-04-07 05:41:29 -0400942 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
943 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500944 perror("popen error!");
945 return -1;
946 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500947
qs.xiong97fa59b2022-04-07 05:41:29 -0400948 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
949 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500950
951 int ret=pclose(fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400952 if(ret==-1)
953 {
954 perror("close file faild");
955 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500956 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500957 return 0;
958}
959
qs.xiongf1b525b2022-03-31 00:58:23 -0400960int lynq_wifi_sta_disconnect(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500961{
962 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400963 char lynq_wifi_cmd[MAX_CMD]={0};
964 char lynq_cmd_quit[MAX_CMD]="quit\n";
965 if(idx<0||idx>9){
966 return -1;
967 }
968 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
969
970 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
971 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500972 perror("popen error!");
973 return -1;
974 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500975
qs.xiong97fa59b2022-04-07 05:41:29 -0400976 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
977 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
978
qs.xiong7a105ce2022-03-02 09:43:11 -0500979 int ret=pclose(fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400980 if(ret==-1)
981 {
982 perror("close file faild");
983 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500984 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400985
qs.xiong7a105ce2022-03-02 09:43:11 -0500986 return 0;
987}
qs.xiong97fa59b2022-04-07 05:41:29 -0400988
qs.xiong7a105ce2022-03-02 09:43:11 -0500989int lynq_wifi_wpa_start(void){
qs.xiong9c99fa92022-03-15 08:03:26 -0400990 int ret;
qs.xiongf1b525b2022-03-31 00:58:23 -0400991 pthread_t pth;
qs.xiong7a105ce2022-03-02 09:43:11 -0500992
qs.xiongf1b525b2022-03-31 00:58:23 -0400993 ret=pthread_create(&pth,NULL,StartThread,NULL);
994 if(ret<0){
995 return -1;
996 }
997 pthread_join(pth,NULL);
qs.xiong9c99fa92022-03-15 08:03:26 -0400998
qs.xiong7a105ce2022-03-02 09:43:11 -0500999 return 0;
1000}
1001
1002int lynq_wifi_wpacli_start(void){
qs.xiong7a105ce2022-03-02 09:43:11 -05001003 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -04001004 int i=0;
qs.xiong7a105ce2022-03-02 09:43:11 -05001005 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -04001006 char add_cmd[MAX_CMD]="IFNAME=wlan0 add_net\n";
1007 char save_cmd[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -04001008 char exit_cmd[20]="quit\n";
qs.xiong7a105ce2022-03-02 09:43:11 -05001009
qs.xiong97fa59b2022-04-07 05:41:29 -04001010 if(lynq_get_idx_number() == 1){
1011 PRINT_AND_RETURN_VALUE("don't need add idx agin\n",0);
1012 }
qs.xiong7a105ce2022-03-02 09:43:11 -05001013 fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w");
1014 if(fp==NULL){
1015 perror("start wpa_supplicant faild!");
1016 return -1;
1017 }
qs.xiong1af5daf2022-03-14 09:12:12 -04001018
qs.xiong97fa59b2022-04-07 05:41:29 -04001019 for(i=0;i<10;i++){
qs.xiongf1b525b2022-03-31 00:58:23 -04001020 fwrite(add_cmd,sizeof(add_cmd),1,fp);
1021 }
qs.xiong1af5daf2022-03-14 09:12:12 -04001022 fwrite(save_cmd,sizeof(save_cmd),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -04001023 fwrite(exit_cmd,sizeof(exit_cmd),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -04001024
qs.xiong7a105ce2022-03-02 09:43:11 -05001025 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -04001026 if(ret==-1)
1027 {
1028 perror("close file faild");
1029 return -1;
1030 }
qs.xiong97fa59b2022-04-07 05:41:29 -04001031
qs.xiong1af5daf2022-03-14 09:12:12 -04001032 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -05001033}
1034
qs.xiongf1b525b2022-03-31 00:58:23 -04001035pid_t GetPIDbyName(char* ps_name)
qs.xiong97fa59b2022-04-07 05:41:29 -04001036{
qs.xiongf1b525b2022-03-31 00:58:23 -04001037 FILE *fp;
1038 char *cmd=(char*)calloc(1,200);
1039 sprintf(cmd,"pidof %s",ps_name);
1040 fp=popen(cmd,"r");
1041 fread(cmd,1,200,fp);
1042 fclose(fp);
1043 return atoi(cmd);
1044}
qs.xiong7a105ce2022-03-02 09:43:11 -05001045
qs.xiong97fa59b2022-04-07 05:41:29 -04001046int lynq_get_idx_number(void)
1047{
1048 FILE *fp;
1049 const char* number="9";
1050 char lynq_wifi_ssid_cmd[MAX_CMD]="wpa_cli -iwlan0 -p/var/run/wpa_supplicant list_net";
1051 char lynq_cmd_ret[MAX_RET]={0};
1052
1053 if((fp=popen(lynq_wifi_ssid_cmd,"r"))==NULL){
1054 perror("popen error!");
1055 return -1;
1056 }
1057 while(1){
1058 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
1059 if((strncmp(lynq_cmd_ret,number,1))==0)
1060 {
1061 CLOSE_FP_RETURN_VALUE(fp,"don't need add idx",1);
1062 }
1063 }
1064 if(feof(fp)){
1065 break;
1066 }
1067 }
1068
1069 if((pclose(fp))==-1){
1070 perror("close file faild");
1071 return -1;
1072 }
1073
1074 return 0;
1075}
1076
1077
1078int lynq_get_wifi_mac(char* wifi_mac)
1079{
1080 FILE * fp;
1081 char lynq_cmd_ret[MAX_RET]={0};
1082 char lynq_tmp_cmd[MAX_CMD]={0};
1083
you.chen65fdcdf2022-04-09 17:50:09 +08001084 if((fp=popen("wl cur_etheraddr","r"))==NULL)
qs.xiong97fa59b2022-04-07 05:41:29 -04001085 {
1086 perror("popen error!");
1087 return -1;
1088 }
1089 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
1090 {
1091 perror("fread fail!");
1092 return -1;
1093 }
1094 strncpy(wifi_mac,lynq_cmd_ret+14,18);
1095 int ret=pclose(fp);
1096 if(ret==-1)
1097 {
1098 perror("close file faild");
1099 return -1;
1100 }
1101
1102 return 0;
1103}
1104int lynq_get_wifi_space(char* password){
1105 int i;
1106 for(i=0;password[i];i++){
1107 if(isspace(password[i])){
1108 return 1;
1109 }
1110 }
1111
1112 return 0;
1113}