blob: d959554bd6515efcf7130def2df9fff1d551eb70 [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.xiong7a105ce2022-03-02 09:43:11 -050015#include "libwifi6.h"
16
qs.xiong1af5daf2022-03-14 09:12:12 -040017#ifdef __cplusplus
18extern "C" {
19#endif
20#ifdef __cplusplus
21}
22#endif
qs.xiong7a105ce2022-03-02 09:43:11 -050023
24#define MAX_CMD 128
25#define MAX_RET 1024
qs.xiong1af5daf2022-03-14 09:12:12 -040026char g_lynq_wifi_ok[3]="OK";
27char g_wifi_ssid[32]="";
28char g_wifi_mode[8]="";
29char g_wifi_key_mgmt[36]="";
30char g_wifi_channel[8]="";
31char g_wifi_bandwidth[8]="";
32char g_max_sta_num[24]="";
33int lynq_wifi_enable(void)
34{
qs.xiong7a105ce2022-03-02 09:43:11 -050035 char *lynq_wifi_enable[]={"insmod /lib/modules/4.19.98/kernel/drivers/net/wireless/bcmdhd/bcmdhd.ko "
qs.xiong1af5daf2022-03-14 09:12:12 -040036 "firmware_path=/system/etc/firmware/wifi/wg870/w870_rtecdc_mfg.trxs "
37 "nvram_path=/system/etc/firmware/wifi/wg870/cyw955572fcipa_rev2.52.txt"};
38
39 if(system(lynq_wifi_enable[0])==-1){
qs.xiong7a105ce2022-03-02 09:43:11 -050040 return -1;
41 }
qs.xiong1af5daf2022-03-14 09:12:12 -040042
qs.xiong7a105ce2022-03-02 09:43:11 -050043 return 0;
44}
45
qs.xiong1af5daf2022-03-14 09:12:12 -040046int lynq_wifi_disable(void)
47{
qs.xiong7a105ce2022-03-02 09:43:11 -050048 FILE *fp;
49 if((popen("rmmod bcmdhd.ko","w"))==NULL){
50 perror("poepn error!");
51 return -1;
52 }
53 int ret=pclose(fp);
54 if(ret==-1){
55 perror("close file faild");
56 return -1;
57 }
58 return 0;
59}
60
61int lynq_wifi_work_mode_set(int mode)
62{
63 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -040064
qs.xiong7a105ce2022-03-02 09:43:11 -050065 switch(mode){
66 case LYNQ_WIFI_WORK_MODE_STA:
qs.xiong1af5daf2022-03-14 09:12:12 -040067 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -050068 perror("popen error!");
69 return -1;
70 }
71 break;
72 case LYNQ_WIFI_WORK_MODE_AP:
qs.xiong1af5daf2022-03-14 09:12:12 -040073 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -050074 perror("popen error!");
75 return -1;
76 }
77 break;
78 case LYNQ_WIFI_WORK_MODE_AP_STA:
qs.xiong1af5daf2022-03-14 09:12:12 -040079 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -050080 perror("popen error!");
81 return -1;
82 }
83 break;
84 default:
85 return -1;
86 }
87 return 0;
88}
89
90int lynq_wifi_work_mode_get(void)
91{
qs.xiong1af5daf2022-03-14 09:12:12 -040092
93 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong7a105ce2022-03-02 09:43:11 -050094 char lynq_cmd_ret[MAX_RET]={0};
95 char *strcn="mode=";
96
qs.xiong1af5daf2022-03-14 09:12:12 -040097 FILE *fp;
98
99 if ((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -0500100 return -1;
qs.xiong1af5daf2022-03-14 09:12:12 -0400101 }
102
103 while(1){
104 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
105 if((strncmp(lynq_cmd_ret,strcn,5))==0)
106 {
107 sscanf(lynq_cmd_ret,"%*[^=]=%s",g_wifi_mode);
108 }
109 }
110 if(feof(fp)){
111 break;
112 }
113 }
114
qs.xiong7a105ce2022-03-02 09:43:11 -0500115 if((pclose(fp))==-1){
116 perror("close file faild");
117 return -1;
118 }
119 return 0;
120
121}
122
123int lynq_wifi_ap_ssid_set(char *ssid)
124{
125 FILE *fp;
126 char lynq_tmp_cmd[MAX_CMD]={0};
127 char lynq_cmd_ret[MAX_CMD]={0};
128 char *lynq_wifi_ssid_cmd[]={"IFNAME=wlan0 set_network 0 ssid "};
129 char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
qs.xiong1af5daf2022-03-14 09:12:12 -0400130
qs.xiong7a105ce2022-03-02 09:43:11 -0500131 sprintf(lynq_tmp_cmd,"%s%s%s%s%s",lynq_wifi_ssid_cmd[0],"\"",ssid,"\"","\n");
132
133 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
134 perror("popen error!");
135 return -1;
136 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400137
138 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
139 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
140
qs.xiong7a105ce2022-03-02 09:43:11 -0500141 int ret=pclose(fp);
142 if(ret==-1){
143 perror("close file faild");
144 return -1;
145 }
146 return 0;
147
148}
149
150int lynq_wifi_ap_ssid_get(void)
151{
qs.xiong1af5daf2022-03-14 09:12:12 -0400152 FILE *fp;
153 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong7a105ce2022-03-02 09:43:11 -0500154 char lynq_cmd_ret[MAX_RET]={0};
155 char *strcn="ssid=";
156
qs.xiong7a105ce2022-03-02 09:43:11 -0500157 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
158 perror("popen error!");
159 return -1;
160 }
161 while(1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400162 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
163 if((strncmp(lynq_cmd_ret,strcn,5))==0)
164 {
165 sscanf(lynq_cmd_ret,"%*[^=]=%s",g_wifi_ssid);
166 }
167 }
168 if(feof(fp)){
169 break;
170 }
171 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500172
qs.xiong1af5daf2022-03-14 09:12:12 -0400173 if((pclose(fp))==-1){
174 perror("close file faild");
175 return -1;
176 }
177
178 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500179}
180
181int lynq_wifi_ap_bandwidth_set(char *bandwidth)
182{
183 FILE *fp;
184 char lynq_tmp_cmd[MAX_CMD]={0};
185 char lynq_cmd_ret[MAX_CMD]={0};
186 char *lynq_wifi_bandwidth_cmd[]={"IFNAME=wlan0 set_network 0 frequency "};
187 char lynq_cmd_mode[]="IFNAME=wlan0 set_net 0 mode 2\n";
188 char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
189 char lynq_cmd_slect[]="IFNAME=wlan0 select_net 0\n";
190
191 sprintf(lynq_tmp_cmd,"%s%s%s",lynq_wifi_bandwidth_cmd[0],bandwidth,"\n");;
192
193 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
194 perror("popen error!");
195 return -1;
196 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500197
qs.xiong1af5daf2022-03-14 09:12:12 -0400198 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
199 fwrite(lynq_cmd_mode,sizeof(lynq_cmd_mode),1,fp);
200 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
201 fwrite(lynq_cmd_slect,sizeof(lynq_cmd_slect),1,fp);
202
qs.xiong7a105ce2022-03-02 09:43:11 -0500203 int ret=pclose(fp);
204 if(ret==-1){
205 perror("close file faild");
206 return -1;
207 }
208
qs.xiong7a105ce2022-03-02 09:43:11 -0500209
qs.xiong1af5daf2022-03-14 09:12:12 -0400210 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500211}
212
213int lynq_wifi_ap_bandwidth_get(void)
214{
qs.xiong1af5daf2022-03-14 09:12:12 -0400215 FILE *fp;
qs.xiong7a105ce2022-03-02 09:43:11 -0500216 char *lynq_wifi_bandwidth_cmd[]={"wl -i wlan0 status"};
217 char lynq_cmd_ret[MAX_RET]={0};
218 char *strcn=" Chanspec:";
219
qs.xiong1af5daf2022-03-14 09:12:12 -0400220 if((fp=popen(lynq_wifi_bandwidth_cmd[0],"w"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -0500221 perror("popen error!");
222 return -1;
223 }
224 while(1){
225 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400226
qs.xiong7a105ce2022-03-02 09:43:11 -0500227 if((strncmp(lynq_cmd_ret,strcn,17))==0)
228 {
qs.xiong1af5daf2022-03-14 09:12:12 -0400229 strncpy(g_wifi_bandwidth,lynq_cmd_ret+34,5);
qs.xiong7a105ce2022-03-02 09:43:11 -0500230 }
231 }
232 if(feof(fp)){
233 break;
234 }
235 }
236 if((pclose(fp))==-1){
237 perror("close file faild");
238 return -1;
239 }
240 return 0;
241
242}
243
244int lynq_wifi_ap_channel_set(char *channel)
245{
246 FILE *fp;
247
248 char lynq_tmp_cmd[MAX_CMD]={0};
249 char *lynq_channel_cmd[]={"wl down","wl chanspec ","wl up"};
qs.xiong1af5daf2022-03-14 09:12:12 -0400250
qs.xiong7a105ce2022-03-02 09:43:11 -0500251 sprintf(lynq_tmp_cmd,"%s%s",lynq_channel_cmd[1],channel);
252 lynq_channel_cmd[1]=lynq_tmp_cmd;
253 memset(lynq_tmp_cmd,0,sizeof(lynq_tmp_cmd));
254 sprintf(lynq_tmp_cmd,"%s%s%s%s%s%s",lynq_channel_cmd[0],"\n",lynq_channel_cmd[1],"\n",lynq_channel_cmd[2],"\n");
qs.xiong1af5daf2022-03-14 09:12:12 -0400255
qs.xiong7a105ce2022-03-02 09:43:11 -0500256 if((fp=popen(lynq_tmp_cmd,"w"))==NULL){
257 perror("popen error!");
258 return -1;
259 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400260
qs.xiong7a105ce2022-03-02 09:43:11 -0500261 int ret=pclose(fp);
262 if(ret==-1){
263 perror("close file faild");
264 return -1;
265 }
266
267 return 0;
268}
269
270int lynq_wifi_ap_channel_get(void)
271{
qs.xiong1af5daf2022-03-14 09:12:12 -0400272
273 char lynq_cmd_ret[MAX_RET]={0};
274 char *strcn=" Primary channel: ";
275 FILE *fp;
276 if((fp=popen("wl -i wlan0 status","r"))==NULL){
277 perror("popen error!");
278 return -1;
279 }
280 while(1){
281 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
282 if((strncmp(lynq_cmd_ret,strcn,24))==0)
283 {
284 strncpy(g_wifi_channel,lynq_cmd_ret+24,3);
285 }
286 }
287 if(feof(fp)){
288 break;
289 }
290 }
291 if((pclose(fp))==-1){
292 perror("close file faild");
293 return -1;
294 }
295
qs.xiong7a105ce2022-03-02 09:43:11 -0500296 return 0;
297}
298
299
300int lynq_wifi_ap_auth_set(int auth,char *lynq_auth)
301{
302 FILE *fp;
303 switch(auth){
304 case LYNQ_WIFI_STA_AUTH_OPEN:
305 {
306 char lynq_cmd_ret[MAX_RET]={0};
307 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
308 perror("popen error!");
309 return -1;
310 }
311 char lynq_auth_cmd[]="IFNAME=wlan0 set_net 0 key_mgmt NONE\n";
312 char lynq_auth_save[]="IFNAME=wlan0 save_config\n";
313
314 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
315 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
316
317 int ret=pclose(fp);
318 if(ret==-1){
319 perror("close file faild");
320 return -1;
321 }
322 break;
323 }
324 case LYNQ_WIFI_STA_AUTH_WPA_PSK:
325 {
326 char lynq_tmp_cmd[MAX_CMD]={0};
327 char lynq_cmd_ret[MAX_CMD]={0};
328 char *lynq_auth_cmd[]={"wlan0 set_net 0 proto "};
329
330 char lynq_psk_cmd[]="IFNAME=wlan0 set_net 0 key_mgmt WPA-PSK\n";
331 char lynq_pairwise_cmd[]="IFNAME=wlan0 set_net 0 pairwise CCMP\n";
332 char lynq_auth_save[]="IFNAME=wlan0 save_config\n";
333 sprintf(lynq_tmp_cmd,"%s%s%s",lynq_auth_cmd[0],lynq_auth,"\n");
334
qs.xiong7a105ce2022-03-02 09:43:11 -0500335 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
336 perror("popen error!");
337 return -1;
338 }
339
340 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
341 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
342 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
343 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
344
345 int ret=pclose(fp);
346 if(ret==-1){
347 perror("close file faild");
348 return -1;
349 }
350
351 break;
352 }
353 default:
354 return -1;
355 }
356
357
358 return 0;
359}
360
361int lynq_wifi_ap_auth_get(void)
362{
qs.xiong1af5daf2022-03-14 09:12:12 -0400363 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong7a105ce2022-03-02 09:43:11 -0500364 char lynq_cmd_ret[MAX_RET]={0};
365 char *strcn="key_mgmt=";
366
qs.xiong1af5daf2022-03-14 09:12:12 -0400367 FILE *fp;
368 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
369 perror("popen error!");
qs.xiong7a105ce2022-03-02 09:43:11 -0500370 return -1;
371 }
372 while(1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400373 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
374 printf("cmd_ret is:%s",lynq_cmd_ret);
375 if((strncmp(lynq_cmd_ret,strcn,9))==0)
376 {
377 sscanf(lynq_cmd_ret,"%*[^=]=%s",g_wifi_key_mgmt);
378 }
379 }
380 if(feof(fp)){
381 break;
382 }
383 }
384 if((pclose(fp))==-1){
385 perror("close file faild");
386 return -1;
387 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500388
qs.xiong1af5daf2022-03-14 09:12:12 -0400389 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500390}
391
392int lynq_wifi_ap_max_sta_set(char *max_sta_num)
393{
qs.xiong7a105ce2022-03-02 09:43:11 -0500394 FILE * fp;
395 char lynq_cmd_ret[MAX_RET]={0};
396 char lynq_tmp_cmd[MAX_CMD]={0};
397 char *lynq_max_sta_cmd[]={"wl maxassoc "};
398 sprintf(lynq_tmp_cmd,"%s%s%s",lynq_max_sta_cmd[0],max_sta_num,"\n");
399 lynq_max_sta_cmd[0]=lynq_tmp_cmd;
qs.xiong1af5daf2022-03-14 09:12:12 -0400400
401 if((fp=popen(lynq_max_sta_cmd[0],"w"))==NULL)
402 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500403 perror("popen error!");
404 return -1;
405 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400406 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
407 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500408 perror("fread fail!");
409 return -1;
410 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400411
qs.xiong7a105ce2022-03-02 09:43:11 -0500412 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400413 if(ret==-1)
414 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500415 perror("close file faild");
416 return -1;
417 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400418
qs.xiong7a105ce2022-03-02 09:43:11 -0500419 return 0;
420}
421
422int lynq_wifi_ap_max_sta_get(void)
423{
424 FILE *fp;
425 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong1af5daf2022-03-14 09:12:12 -0400426
427 if((fp=popen("wl maxassoc","r"))==NULL)
428 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500429 perror("popen error!");
430 return -1;
431 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400432 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
433 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500434 perror("fread fail!");
435 return -1;
436 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400437 strcpy(g_max_sta_num,lynq_cmd_ret);
438
qs.xiong7a105ce2022-03-02 09:43:11 -0500439 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400440 if(ret==-1)
441 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500442 perror("close file faild");
443 return -1;
qs.xiong1af5daf2022-03-14 09:12:12 -0400444 }
445
qs.xiong7a105ce2022-03-02 09:43:11 -0500446 return 0;
447}
448
449int lynq_wifi_ap_start(void)
450{
451 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -0400452 char LYNQ_CMD_RET[MAX_CMD]={0};
453
454 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant enable_net 0","r"))==NULL)
455 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500456 perror("popen error!");
457 return -1;
458 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500459
qs.xiong1af5daf2022-03-14 09:12:12 -0400460 fgets(LYNQ_CMD_RET,sizeof(LYNQ_CMD_RET),fp);
461
462 if((strncmp(LYNQ_CMD_RET,g_lynq_wifi_ok,sizeof(g_lynq_wifi_ok)))!=0)
463 {
464 return -1;
465 }
466
qs.xiong7a105ce2022-03-02 09:43:11 -0500467 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400468 if(ret==-1)
469 {
470 perror("close file faild");
471 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500472 }
473
474 return 0;
475}
476
477int lynq_wifi_ap_restart(void)
478{
qs.xiong1af5daf2022-03-14 09:12:12 -0400479 int lynq_stop;
480 int lynq_start;
481
482 lynq_stop = lynq_wifi_ap_stop();
483 if ( lynq_stop != 0 )
484 {
485 return -1;
486 }
487
488 lynq_start = lynq_wifi_ap_start();
489 if ( lynq_start != 0 )
490 {
491 return -1;
492 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500493
qs.xiong7a105ce2022-03-02 09:43:11 -0500494 return 0;
495
496}
497
498int lynq_wifi_ap_stop(void)
499{
500 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -0400501 char LYNQ_CMD_RET[MAX_CMD]={0};
502
503 if( (fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant disable_net 0","r")) == NULL ){
qs.xiong7a105ce2022-03-02 09:43:11 -0500504 perror("popen error!");
505 return -1;
506 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400507
508 fgets( LYNQ_CMD_RET,sizeof(LYNQ_CMD_RET),fp );
509
510 if((strncmp(LYNQ_CMD_RET,g_lynq_wifi_ok,sizeof(g_lynq_wifi_ok)))!=0){
511 return -1;
512 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500513
514 int ret=pclose(fp);
515 if(ret==-1){
516 perror("close file faild");
517 return -1;
518 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400519
qs.xiong7a105ce2022-03-02 09:43:11 -0500520 return 0;
521}
qs.xiong1af5daf2022-03-14 09:12:12 -0400522
qs.xiong7a105ce2022-03-02 09:43:11 -0500523int lynq_wifi_ap_hide_ssid(void)
524{
525 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -0400526 char lynq_disable_cmd[]="IFNAME=wlan0 disable_net 0\n";
527 char lynq_hide_cmd[]="IFNAME=wlan0 SET HIDE_SSID 1\n";
528 char lynq_select_cmd[]="IFNAME=wlan0 select_net 0\n";
529
qs.xiong7a105ce2022-03-02 09:43:11 -0500530 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
531 perror("popen error!");
532 return -1;
533 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500534
535 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
536 fwrite(lynq_hide_cmd,sizeof(lynq_hide_cmd),1,fp);
537 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
538
539 int ret=pclose(fp);
540 if(ret==-1){
541 perror("close file faild");
542 return -1;
543 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400544
545 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500546}
547
548int lynq_wifi_ap_unhide_ssid(void)
549{
550 FILE *fp;
551 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
552 perror("popen error!");
553 return -1;
554 }
555 char lynq_disable_cmd[]="IFNAME=wlan0 disable_net 0\n";
556 char lynq_unhide_cmd[]="IFNAME=wlan0 SET HIDE_SSID 0\n";
557 char lynq_select_cmd[]="IFNAME=wlan0 select_net 0\n";
558
559 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
560 fwrite(lynq_unhide_cmd,sizeof(lynq_unhide_cmd),1,fp);
561 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400562
qs.xiong7a105ce2022-03-02 09:43:11 -0500563 int ret=pclose(fp);
564 if(ret==-1){
565 perror("close file faild");
566 return -1;
567 }
568
569 return 0;
570}
571int lynq_wifi_ssid_pass_set(char * password)
572{
573 FILE *fp;
574 char lynq_tmp_cmd[MAX_CMD]={0};
575 char *lynq_pass_ssid_cmd[]={"IFNAME=wlan0 set_net 0 psk ","IFNAME=wlan0 save_config"};
576 sprintf(lynq_tmp_cmd,"%s%s%s%s%s",lynq_pass_ssid_cmd[0],"\"",password,"\"","\n");
577
578 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
579 perror("popen error!");
580 return -1;
581 }
582
583 char lynq_pass_save[]="IFNAME=wlan0 save_config\n";
584
585 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
586 fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
587
588 int ret=pclose(fp);
589 if(ret==-1){
590 perror("close file faild");
591 return -1;
592 }
593
594 return 0;
595}
596
597
598int lynq_wifi_sta_ssid_set(char *ssid)
599{
600
601 char lynq_tmp_cmd[MAX_CMD]={0};
602 char lynq_cmd_ret[MAX_CMD]={0};
603 char *lynq_wifi_ssid_cmd[]={"IFNAME=wlan0 set_network 0 ssid ","IFNAME=wlan0 save_config"};
604 sprintf(lynq_tmp_cmd,"%s%s%s%s",lynq_wifi_ssid_cmd[0],"\"",ssid,"\"");
605 lynq_wifi_ssid_cmd[0]=lynq_tmp_cmd;
606
607 for(int i=0;i<2;i++){
608 FILE *fp;
609 if((fp=popen(lynq_wifi_ssid_cmd[i],"r"))==NULL){
610 perror("popen error!");
611 return -1;
612 }
613 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))==NULL){
614 perror("popen error!");
615 return -1;
616 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400617 if((strncmp(lynq_cmd_ret,g_lynq_wifi_ok,2))==0){
qs.xiong7a105ce2022-03-02 09:43:11 -0500618 }else{
qs.xiong1af5daf2022-03-14 09:12:12 -0400619 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500620 }
621
622 int ret=pclose(fp);
623 if(ret==-1){
624 perror("close file faild");
625 return -1;
626 }
627 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400628
qs.xiong7a105ce2022-03-02 09:43:11 -0500629 return 0;
630}
631
632int lynq_wifi_sta_ssid_get(void)
633{
qs.xiong1af5daf2022-03-14 09:12:12 -0400634 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong7a105ce2022-03-02 09:43:11 -0500635 char lynq_cmd_ret[MAX_RET]={0};
636 char *strcn="ssid=";
637
638 FILE *fp;
639 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
640 perror("popen error!");
641 return -1;
642 }
643 while(1){
644 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
645 if((strncmp(lynq_cmd_ret,strcn,5))==0)
qs.xiong1af5daf2022-03-14 09:12:12 -0400646 {
647 sscanf(lynq_cmd_ret,"%*[^=]=%s",g_wifi_ssid);
648 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500649 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400650 if(feof(fp))
651 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500652 break;
qs.xiong1af5daf2022-03-14 09:12:12 -0400653 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500654 }
655 if((pclose(fp))==-1){
656 perror("close file faild");
657 return -1;
658 }
659 return 0;
660
661}
662
663int lynq_wifi_sta_auth_set(int auth,char *lynq_auth)
664{
qs.xiong1af5daf2022-03-14 09:12:12 -0400665 FILE *fp;
666 switch(auth){
667 case LYNQ_WIFI_STA_AUTH_OPEN:
668 {
669 char lynq_cmd_ret[MAX_RET]={0};
670 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
qs.xiong7a105ce2022-03-02 09:43:11 -0500671 {
qs.xiong1af5daf2022-03-14 09:12:12 -0400672 perror("popen error!");
673 return -1;
674 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500675
qs.xiong1af5daf2022-03-14 09:12:12 -0400676 char lynq_auth_cmd[]="IFNAME=wlan0 set_net 0 key_mgmt NONE\n";
677 char lynq_auth_save[]="IFNAME=wlan0 save_config\n";
678
679 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
680 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500681
qs.xiong1af5daf2022-03-14 09:12:12 -0400682 int ret=pclose(fp);
683 if(ret==-1)
684 {
685 perror("close file faild");
686 return -1;
687 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500688 break;
689 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400690 case LYNQ_WIFI_STA_AUTH_WPA_PSK:
691 {
692 char lynq_tmp_cmd[MAX_CMD]={0};
693 char lynq_cmd_ret[MAX_CMD]={0};
694 char *lynq_auth_cmd[]={"wlan0 set_net 0 proto "};
695 char lynq_psk_cmd[]="IFNAME=wlan0 set_net 0 key_mgmt WPA-PSK\n";
696 char lynq_pairwise_cmd[]="IFNAME=wlan0 set_net 0 pairwise CCMP\n";
697 char lynq_auth_save[]="IFNAME=wlan0 save_config\n";
698 sprintf(lynq_tmp_cmd,"%s%s%s",lynq_auth_cmd[0],lynq_auth,"\n");
699
700 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
qs.xiong7a105ce2022-03-02 09:43:11 -0500701 {
qs.xiong1af5daf2022-03-14 09:12:12 -0400702 perror("popen error!");
703 return -1;
704 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500705
qs.xiong1af5daf2022-03-14 09:12:12 -0400706 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
707 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
708 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
709 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500710
711 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400712 if(ret==-1)
713 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500714 perror("close file faild");
715 return -1;
716 }
717
718 break;
719 }
720 default:
721 return -1;
722 }
723
qs.xiong1af5daf2022-03-14 09:12:12 -0400724 return 0;
725}
qs.xiong7a105ce2022-03-02 09:43:11 -0500726
727int lynq_wifi_sta_auth_get(void)
728{
qs.xiong1af5daf2022-03-14 09:12:12 -0400729 char *lynq_wifi_auth_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
730 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500731 char *strcn="key_mgmt=";
732
733 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -0400734 if((fp=popen(lynq_wifi_auth_cmd[0],"r"))==NULL){
735 perror("popen error!");
736 return -1;
737 }
738 while(1){
739 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL)
740 {
741 if((strncmp(lynq_cmd_ret,strcn,9))==0)
742 {
743 sscanf(lynq_cmd_ret,"%*[^=]=%s",g_wifi_key_mgmt);
744 }
745 }
746 if(feof(fp)){
747 break;
748 }
749 }
750 if((pclose(fp))==-1)
751 {
752 perror("close file faild");
753 return -1;
754 }
755
qs.xiong7a105ce2022-03-02 09:43:11 -0500756 return 0;
757
758}
759
760int lynq_wifi_sta_connect(void)
761{
762 FILE *fp;
763 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong1af5daf2022-03-14 09:12:12 -0400764 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant reconnect","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -0500765 perror("popen error!");
766 return -1;
767 }
768 fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp);
769
qs.xiong1af5daf2022-03-14 09:12:12 -0400770 if((strncmp(lynq_cmd_ret,g_lynq_wifi_ok,sizeof(g_lynq_wifi_ok)))!=0){
771 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500772 }
773
774 int ret=pclose(fp);
775 if(ret==-1){
776 perror("close file faild");
777 return -1;
778 }
779
780 return 0;
781}
782
783int lynq_wifi_sta_disconnect(void)
784{
785 FILE *fp;
786 char LYNQ_CMD_RET[MAX_CMD]={0};
qs.xiong1af5daf2022-03-14 09:12:12 -0400787 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant disconnect","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -0500788 perror("popen error!");
789 return -1;
790 }
791 fgets(LYNQ_CMD_RET,sizeof(LYNQ_CMD_RET),fp);
792
qs.xiong1af5daf2022-03-14 09:12:12 -0400793 if((strncmp(LYNQ_CMD_RET,g_lynq_wifi_ok,sizeof(g_lynq_wifi_ok)))!=0){
794 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500795 }
796 int ret=pclose(fp);
797 if(ret==-1){
798 perror("close file faild");
799 return -1;
800 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400801
qs.xiong7a105ce2022-03-02 09:43:11 -0500802 return 0;
803}
804
805
qs.xiong7a105ce2022-03-02 09:43:11 -0500806int lynq_wifi_wpa_start(void){
807 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -0400808 fp=popen("wpa_supplicant -iwlan0 -Dnl80211 -c /data/wifi/wg870/wpa_supplicant.conf -g/var/run/wpa_wlan0_cmd -dd -t -B","r");
qs.xiong7a105ce2022-03-02 09:43:11 -0500809 if(fp==NULL){
810 perror("start wpa_supplicant faild!");
811 return -1;
812 }
813
814 int ret=pclose(fp);
815 if(ret==-1){
816 perror("close file faild");
817 return -1;
818 }
819 return 0;
820}
821
822int lynq_wifi_wpacli_start(void){
823
824 FILE *fp;
qs.xiong7a105ce2022-03-02 09:43:11 -0500825 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong1af5daf2022-03-14 09:12:12 -0400826 char rm_cmd[128]="IFNAME=wlan0 remove_net all\n";
827 char add_cmd[128]="IFNAME=wlan0 add_net\n";
828 char save_cmd[128]="IFNAME=wlan0 save_config\n";
qs.xiong7a105ce2022-03-02 09:43:11 -0500829
830 fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w");
831 if(fp==NULL){
832 perror("start wpa_supplicant faild!");
833 return -1;
834 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400835
836 fwrite(rm_cmd,sizeof(rm_cmd),1,fp);
837 fwrite(add_cmd,sizeof(add_cmd),1,fp);
838 fwrite(save_cmd,sizeof(save_cmd),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500839
840 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400841 if(ret==-1)
842 {
843 perror("close file faild");
844 return -1;
845 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500846
qs.xiong1af5daf2022-03-14 09:12:12 -0400847 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500848}
849
850