blob: 7865f56966cc929e71541b61998b740162c5d93c [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]="";
qs.xiong9c99fa92022-03-15 08:03:26 -040033
qs.xiong1af5daf2022-03-14 09:12:12 -040034int lynq_wifi_enable(void)
35{
qs.xiongc36178b2022-03-17 14:31:33 -040036 system("chmod 777 /data/wl");
qs.xiong7a105ce2022-03-02 09:43:11 -050037 char *lynq_wifi_enable[]={"insmod /lib/modules/4.19.98/kernel/drivers/net/wireless/bcmdhd/bcmdhd.ko "
qs.xiong1af5daf2022-03-14 09:12:12 -040038 "firmware_path=/system/etc/firmware/wifi/wg870/w870_rtecdc_mfg.trxs "
qs.xiong9c99fa92022-03-15 08:03:26 -040039 "nvram_path=/system/etc/firmware/wifi/wg870/cyw955572fcipa_rev2.52.txt\n"};
qs.xiong1af5daf2022-03-14 09:12:12 -040040 if(system(lynq_wifi_enable[0])==-1){
qs.xiong7a105ce2022-03-02 09:43:11 -050041 return -1;
42 }
qs.xiong1af5daf2022-03-14 09:12:12 -040043
qs.xiong7a105ce2022-03-02 09:43:11 -050044 return 0;
45}
46
qs.xiong1af5daf2022-03-14 09:12:12 -040047int lynq_wifi_disable(void)
48{
qs.xiong7a105ce2022-03-02 09:43:11 -050049 FILE *fp;
50 if((popen("rmmod bcmdhd.ko","w"))==NULL){
51 perror("poepn error!");
52 return -1;
53 }
54 int ret=pclose(fp);
55 if(ret==-1){
56 perror("close file faild");
57 return -1;
58 }
59 return 0;
60}
61
62int lynq_wifi_work_mode_set(int mode)
63{
64 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -040065
qs.xiong7a105ce2022-03-02 09:43:11 -050066 switch(mode){
67 case LYNQ_WIFI_WORK_MODE_STA:
qs.xiong1af5daf2022-03-14 09:12:12 -040068 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -050069 perror("popen error!");
70 return -1;
71 }
72 break;
73 case LYNQ_WIFI_WORK_MODE_AP:
qs.xiong1af5daf2022-03-14 09:12:12 -040074 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -050075 perror("popen error!");
76 return -1;
77 }
78 break;
79 case LYNQ_WIFI_WORK_MODE_AP_STA:
qs.xiong1af5daf2022-03-14 09:12:12 -040080 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -050081 perror("popen error!");
82 return -1;
83 }
84 break;
85 default:
86 return -1;
87 }
88 return 0;
89}
90
91int lynq_wifi_work_mode_get(void)
92{
qs.xiong1af5daf2022-03-14 09:12:12 -040093
94 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong7a105ce2022-03-02 09:43:11 -050095 char lynq_cmd_ret[MAX_RET]={0};
96 char *strcn="mode=";
97
qs.xiong1af5daf2022-03-14 09:12:12 -040098 FILE *fp;
99
100 if ((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -0500101 return -1;
qs.xiong1af5daf2022-03-14 09:12:12 -0400102 }
103
104 while(1){
105 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
106 if((strncmp(lynq_cmd_ret,strcn,5))==0)
107 {
108 sscanf(lynq_cmd_ret,"%*[^=]=%s",g_wifi_mode);
109 }
110 }
111 if(feof(fp)){
112 break;
113 }
114 }
115
qs.xiong7a105ce2022-03-02 09:43:11 -0500116 if((pclose(fp))==-1){
117 perror("close file faild");
118 return -1;
119 }
120 return 0;
121
122}
123
124int lynq_wifi_ap_ssid_set(char *ssid)
125{
126 FILE *fp;
127 char lynq_tmp_cmd[MAX_CMD]={0};
128 char lynq_cmd_ret[MAX_CMD]={0};
129 char *lynq_wifi_ssid_cmd[]={"IFNAME=wlan0 set_network 0 ssid "};
130 char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
qs.xiong1af5daf2022-03-14 09:12:12 -0400131
qs.xiong7a105ce2022-03-02 09:43:11 -0500132 sprintf(lynq_tmp_cmd,"%s%s%s%s%s",lynq_wifi_ssid_cmd[0],"\"",ssid,"\"","\n");
133
134 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
135 perror("popen error!");
136 return -1;
137 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400138
139 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
140 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
141
qs.xiong7a105ce2022-03-02 09:43:11 -0500142 int ret=pclose(fp);
143 if(ret==-1){
144 perror("close file faild");
145 return -1;
146 }
147 return 0;
148
149}
150
151int lynq_wifi_ap_ssid_get(void)
152{
qs.xiong1af5daf2022-03-14 09:12:12 -0400153 FILE *fp;
154 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong7a105ce2022-03-02 09:43:11 -0500155 char lynq_cmd_ret[MAX_RET]={0};
156 char *strcn="ssid=";
157
qs.xiong7a105ce2022-03-02 09:43:11 -0500158 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
159 perror("popen error!");
160 return -1;
161 }
162 while(1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400163 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
164 if((strncmp(lynq_cmd_ret,strcn,5))==0)
165 {
166 sscanf(lynq_cmd_ret,"%*[^=]=%s",g_wifi_ssid);
167 }
168 }
169 if(feof(fp)){
170 break;
171 }
172 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500173
qs.xiong1af5daf2022-03-14 09:12:12 -0400174 if((pclose(fp))==-1){
175 perror("close file faild");
176 return -1;
177 }
178
179 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500180}
181
182int lynq_wifi_ap_bandwidth_set(char *bandwidth)
183{
184 FILE *fp;
185 char lynq_tmp_cmd[MAX_CMD]={0};
186 char lynq_cmd_ret[MAX_CMD]={0};
187 char *lynq_wifi_bandwidth_cmd[]={"IFNAME=wlan0 set_network 0 frequency "};
188 char lynq_cmd_mode[]="IFNAME=wlan0 set_net 0 mode 2\n";
189 char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
190 char lynq_cmd_slect[]="IFNAME=wlan0 select_net 0\n";
191
192 sprintf(lynq_tmp_cmd,"%s%s%s",lynq_wifi_bandwidth_cmd[0],bandwidth,"\n");;
193
194 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
195 perror("popen error!");
196 return -1;
197 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500198
qs.xiong1af5daf2022-03-14 09:12:12 -0400199 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
200 fwrite(lynq_cmd_mode,sizeof(lynq_cmd_mode),1,fp);
201 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
202 fwrite(lynq_cmd_slect,sizeof(lynq_cmd_slect),1,fp);
203
qs.xiong7a105ce2022-03-02 09:43:11 -0500204 int ret=pclose(fp);
205 if(ret==-1){
206 perror("close file faild");
207 return -1;
208 }
209
qs.xiong7a105ce2022-03-02 09:43:11 -0500210
qs.xiong1af5daf2022-03-14 09:12:12 -0400211 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500212}
213
214int lynq_wifi_ap_bandwidth_get(void)
215{
qs.xiong1af5daf2022-03-14 09:12:12 -0400216 FILE *fp;
qs.xiongc36178b2022-03-17 14:31:33 -0400217 char *lynq_wifi_bandwidth_cmd[]={"/data/wl -i wlan0 status"};
qs.xiong7a105ce2022-03-02 09:43:11 -0500218 char lynq_cmd_ret[MAX_RET]={0};
219 char *strcn=" Chanspec:";
220
qs.xiong1af5daf2022-03-14 09:12:12 -0400221 if((fp=popen(lynq_wifi_bandwidth_cmd[0],"w"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -0500222 perror("popen error!");
223 return -1;
224 }
225 while(1){
226 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400227
qs.xiong7a105ce2022-03-02 09:43:11 -0500228 if((strncmp(lynq_cmd_ret,strcn,17))==0)
229 {
qs.xiong1af5daf2022-03-14 09:12:12 -0400230 strncpy(g_wifi_bandwidth,lynq_cmd_ret+34,5);
qs.xiong7a105ce2022-03-02 09:43:11 -0500231 }
232 }
233 if(feof(fp)){
234 break;
235 }
236 }
237 if((pclose(fp))==-1){
238 perror("close file faild");
239 return -1;
240 }
241 return 0;
242
243}
244
245int lynq_wifi_ap_channel_set(char *channel)
246{
247 FILE *fp;
qs.xiongc36178b2022-03-17 14:31:33 -0400248 char lynq_tmp_cmd[MAX_RET]={0};
249 char lynq_change_cmd[24]="/data/wl chanspec ";
qs.xiong1af5daf2022-03-14 09:12:12 -0400250
qs.xiongc36178b2022-03-17 14:31:33 -0400251 sprintf(lynq_tmp_cmd,"%s%s",lynq_change_cmd[1],channel);
252 system("/data/wl down");
qs.xiong7a105ce2022-03-02 09:43:11 -0500253 if((fp=popen(lynq_tmp_cmd,"w"))==NULL){
254 perror("popen error!");
255 return -1;
qs.xiongc36178b2022-03-17 14:31:33 -0400256 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400257
qs.xiong7a105ce2022-03-02 09:43:11 -0500258 int ret=pclose(fp);
259 if(ret==-1){
260 perror("close file faild");
261 return -1;
262 }
qs.xiongc36178b2022-03-17 14:31:33 -0400263 system("/data/wl up");
qs.xiong7a105ce2022-03-02 09:43:11 -0500264 return 0;
265}
266
267int lynq_wifi_ap_channel_get(void)
268{
qs.xiong1af5daf2022-03-14 09:12:12 -0400269
270 char lynq_cmd_ret[MAX_RET]={0};
271 char *strcn=" Primary channel: ";
272 FILE *fp;
qs.xiongc36178b2022-03-17 14:31:33 -0400273 if((fp=popen("/data/wl -i wlan0 status","r"))==NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400274 perror("popen error!");
275 return -1;
276 }
277 while(1){
278 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
279 if((strncmp(lynq_cmd_ret,strcn,24))==0)
280 {
281 strncpy(g_wifi_channel,lynq_cmd_ret+24,3);
282 }
283 }
284 if(feof(fp)){
285 break;
286 }
287 }
288 if((pclose(fp))==-1){
289 perror("close file faild");
290 return -1;
291 }
292
qs.xiong7a105ce2022-03-02 09:43:11 -0500293 return 0;
294}
295
296
297int lynq_wifi_ap_auth_set(int auth,char *lynq_auth)
298{
299 FILE *fp;
300 switch(auth){
301 case LYNQ_WIFI_STA_AUTH_OPEN:
302 {
303 char lynq_cmd_ret[MAX_RET]={0};
304 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
305 perror("popen error!");
306 return -1;
307 }
308 char lynq_auth_cmd[]="IFNAME=wlan0 set_net 0 key_mgmt NONE\n";
309 char lynq_auth_save[]="IFNAME=wlan0 save_config\n";
310
311 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
312 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
313
314 int ret=pclose(fp);
315 if(ret==-1){
316 perror("close file faild");
317 return -1;
318 }
319 break;
320 }
321 case LYNQ_WIFI_STA_AUTH_WPA_PSK:
322 {
323 char lynq_tmp_cmd[MAX_CMD]={0};
324 char lynq_cmd_ret[MAX_CMD]={0};
325 char *lynq_auth_cmd[]={"wlan0 set_net 0 proto "};
326
327 char lynq_psk_cmd[]="IFNAME=wlan0 set_net 0 key_mgmt WPA-PSK\n";
328 char lynq_pairwise_cmd[]="IFNAME=wlan0 set_net 0 pairwise CCMP\n";
329 char lynq_auth_save[]="IFNAME=wlan0 save_config\n";
330 sprintf(lynq_tmp_cmd,"%s%s%s",lynq_auth_cmd[0],lynq_auth,"\n");
331
qs.xiong7a105ce2022-03-02 09:43:11 -0500332 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
333 perror("popen error!");
334 return -1;
335 }
336
337 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
338 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
339 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
340 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
341
342 int ret=pclose(fp);
343 if(ret==-1){
344 perror("close file faild");
345 return -1;
346 }
347
348 break;
349 }
350 default:
351 return -1;
352 }
353
354
355 return 0;
356}
357
358int lynq_wifi_ap_auth_get(void)
359{
qs.xiong1af5daf2022-03-14 09:12:12 -0400360 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong7a105ce2022-03-02 09:43:11 -0500361 char lynq_cmd_ret[MAX_RET]={0};
362 char *strcn="key_mgmt=";
363
qs.xiong1af5daf2022-03-14 09:12:12 -0400364 FILE *fp;
365 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
366 perror("popen error!");
qs.xiong7a105ce2022-03-02 09:43:11 -0500367 return -1;
368 }
369 while(1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400370 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
371 printf("cmd_ret is:%s",lynq_cmd_ret);
372 if((strncmp(lynq_cmd_ret,strcn,9))==0)
373 {
374 sscanf(lynq_cmd_ret,"%*[^=]=%s",g_wifi_key_mgmt);
375 }
376 }
377 if(feof(fp)){
378 break;
379 }
380 }
381 if((pclose(fp))==-1){
382 perror("close file faild");
383 return -1;
384 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500385
qs.xiong1af5daf2022-03-14 09:12:12 -0400386 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500387}
388
389int lynq_wifi_ap_max_sta_set(char *max_sta_num)
390{
qs.xiong7a105ce2022-03-02 09:43:11 -0500391 FILE * fp;
392 char lynq_cmd_ret[MAX_RET]={0};
393 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiongc36178b2022-03-17 14:31:33 -0400394 char *lynq_max_sta_cmd[]={"/data/wl maxassoc "};
qs.xiong7a105ce2022-03-02 09:43:11 -0500395 sprintf(lynq_tmp_cmd,"%s%s%s",lynq_max_sta_cmd[0],max_sta_num,"\n");
396 lynq_max_sta_cmd[0]=lynq_tmp_cmd;
qs.xiong1af5daf2022-03-14 09:12:12 -0400397
398 if((fp=popen(lynq_max_sta_cmd[0],"w"))==NULL)
399 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500400 perror("popen error!");
401 return -1;
402 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400403 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
404 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500405 perror("fread fail!");
406 return -1;
407 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400408
qs.xiong7a105ce2022-03-02 09:43:11 -0500409 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400410 if(ret==-1)
411 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500412 perror("close file faild");
413 return -1;
414 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400415
qs.xiong7a105ce2022-03-02 09:43:11 -0500416 return 0;
417}
418
419int lynq_wifi_ap_max_sta_get(void)
420{
421 FILE *fp;
422 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong1af5daf2022-03-14 09:12:12 -0400423
qs.xiongc36178b2022-03-17 14:31:33 -0400424 if((fp=popen("/data/wl maxassoc","r"))==NULL)
qs.xiong1af5daf2022-03-14 09:12:12 -0400425 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500426 perror("popen error!");
427 return -1;
428 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400429 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
430 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500431 perror("fread fail!");
432 return -1;
433 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400434 strcpy(g_max_sta_num,lynq_cmd_ret);
435
qs.xiong7a105ce2022-03-02 09:43:11 -0500436 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400437 if(ret==-1)
438 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500439 perror("close file faild");
440 return -1;
qs.xiong1af5daf2022-03-14 09:12:12 -0400441 }
442
qs.xiong7a105ce2022-03-02 09:43:11 -0500443 return 0;
444}
445
446int lynq_wifi_ap_start(void)
447{
448 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -0400449 char LYNQ_CMD_RET[MAX_CMD]={0};
450
451 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant enable_net 0","r"))==NULL)
452 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500453 perror("popen error!");
454 return -1;
455 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500456
qs.xiong1af5daf2022-03-14 09:12:12 -0400457 fgets(LYNQ_CMD_RET,sizeof(LYNQ_CMD_RET),fp);
458
459 if((strncmp(LYNQ_CMD_RET,g_lynq_wifi_ok,sizeof(g_lynq_wifi_ok)))!=0)
460 {
461 return -1;
462 }
463
qs.xiong7a105ce2022-03-02 09:43:11 -0500464 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400465 if(ret==-1)
466 {
467 perror("close file faild");
468 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500469 }
470
471 return 0;
472}
473
474int lynq_wifi_ap_restart(void)
475{
qs.xiong1af5daf2022-03-14 09:12:12 -0400476 int lynq_stop;
477 int lynq_start;
478
479 lynq_stop = lynq_wifi_ap_stop();
480 if ( lynq_stop != 0 )
481 {
482 return -1;
483 }
484
485 lynq_start = lynq_wifi_ap_start();
486 if ( lynq_start != 0 )
487 {
488 return -1;
489 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500490
qs.xiong7a105ce2022-03-02 09:43:11 -0500491 return 0;
492
493}
494
495int lynq_wifi_ap_stop(void)
496{
497 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -0400498 char LYNQ_CMD_RET[MAX_CMD]={0};
499
500 if( (fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant disable_net 0","r")) == NULL ){
qs.xiong7a105ce2022-03-02 09:43:11 -0500501 perror("popen error!");
502 return -1;
503 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400504
505 fgets( LYNQ_CMD_RET,sizeof(LYNQ_CMD_RET),fp );
506
507 if((strncmp(LYNQ_CMD_RET,g_lynq_wifi_ok,sizeof(g_lynq_wifi_ok)))!=0){
508 return -1;
509 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500510
511 int ret=pclose(fp);
512 if(ret==-1){
513 perror("close file faild");
514 return -1;
515 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400516
qs.xiong7a105ce2022-03-02 09:43:11 -0500517 return 0;
518}
qs.xiong1af5daf2022-03-14 09:12:12 -0400519
qs.xiong7a105ce2022-03-02 09:43:11 -0500520int lynq_wifi_ap_hide_ssid(void)
521{
522 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -0400523 char lynq_disable_cmd[]="IFNAME=wlan0 disable_net 0\n";
524 char lynq_hide_cmd[]="IFNAME=wlan0 SET HIDE_SSID 1\n";
525 char lynq_select_cmd[]="IFNAME=wlan0 select_net 0\n";
526
qs.xiong7a105ce2022-03-02 09:43:11 -0500527 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
528 perror("popen error!");
529 return -1;
530 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500531
532 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
533 fwrite(lynq_hide_cmd,sizeof(lynq_hide_cmd),1,fp);
534 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
535
536 int ret=pclose(fp);
537 if(ret==-1){
538 perror("close file faild");
539 return -1;
540 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400541
542 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500543}
544
545int lynq_wifi_ap_unhide_ssid(void)
546{
547 FILE *fp;
548 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
549 perror("popen error!");
550 return -1;
551 }
552 char lynq_disable_cmd[]="IFNAME=wlan0 disable_net 0\n";
553 char lynq_unhide_cmd[]="IFNAME=wlan0 SET HIDE_SSID 0\n";
554 char lynq_select_cmd[]="IFNAME=wlan0 select_net 0\n";
555
556 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
557 fwrite(lynq_unhide_cmd,sizeof(lynq_unhide_cmd),1,fp);
558 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400559
qs.xiong7a105ce2022-03-02 09:43:11 -0500560 int ret=pclose(fp);
561 if(ret==-1){
562 perror("close file faild");
563 return -1;
564 }
565
566 return 0;
567}
568int lynq_wifi_ssid_pass_set(char * password)
569{
570 FILE *fp;
571 char lynq_tmp_cmd[MAX_CMD]={0};
572 char *lynq_pass_ssid_cmd[]={"IFNAME=wlan0 set_net 0 psk ","IFNAME=wlan0 save_config"};
573 sprintf(lynq_tmp_cmd,"%s%s%s%s%s",lynq_pass_ssid_cmd[0],"\"",password,"\"","\n");
574
575 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
576 perror("popen error!");
577 return -1;
578 }
579
580 char lynq_pass_save[]="IFNAME=wlan0 save_config\n";
581
582 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
583 fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
584
585 int ret=pclose(fp);
586 if(ret==-1){
587 perror("close file faild");
588 return -1;
589 }
590
591 return 0;
592}
593
594
595int lynq_wifi_sta_ssid_set(char *ssid)
596{
597
598 char lynq_tmp_cmd[MAX_CMD]={0};
599 char lynq_cmd_ret[MAX_CMD]={0};
600 char *lynq_wifi_ssid_cmd[]={"IFNAME=wlan0 set_network 0 ssid ","IFNAME=wlan0 save_config"};
601 sprintf(lynq_tmp_cmd,"%s%s%s%s",lynq_wifi_ssid_cmd[0],"\"",ssid,"\"");
602 lynq_wifi_ssid_cmd[0]=lynq_tmp_cmd;
603
604 for(int i=0;i<2;i++){
605 FILE *fp;
606 if((fp=popen(lynq_wifi_ssid_cmd[i],"r"))==NULL){
607 perror("popen error!");
608 return -1;
609 }
610 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))==NULL){
611 perror("popen error!");
612 return -1;
613 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400614 if((strncmp(lynq_cmd_ret,g_lynq_wifi_ok,2))==0){
qs.xiong7a105ce2022-03-02 09:43:11 -0500615 }else{
qs.xiong1af5daf2022-03-14 09:12:12 -0400616 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500617 }
618
619 int ret=pclose(fp);
620 if(ret==-1){
621 perror("close file faild");
622 return -1;
623 }
624 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400625
qs.xiong7a105ce2022-03-02 09:43:11 -0500626 return 0;
627}
628
629int lynq_wifi_sta_ssid_get(void)
630{
qs.xiong1af5daf2022-03-14 09:12:12 -0400631 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong7a105ce2022-03-02 09:43:11 -0500632 char lynq_cmd_ret[MAX_RET]={0};
633 char *strcn="ssid=";
634
635 FILE *fp;
636 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
637 perror("popen error!");
638 return -1;
639 }
640 while(1){
641 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
642 if((strncmp(lynq_cmd_ret,strcn,5))==0)
qs.xiong1af5daf2022-03-14 09:12:12 -0400643 {
644 sscanf(lynq_cmd_ret,"%*[^=]=%s",g_wifi_ssid);
645 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500646 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400647 if(feof(fp))
648 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500649 break;
qs.xiong1af5daf2022-03-14 09:12:12 -0400650 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500651 }
652 if((pclose(fp))==-1){
653 perror("close file faild");
654 return -1;
655 }
656 return 0;
657
658}
659
660int lynq_wifi_sta_auth_set(int auth,char *lynq_auth)
661{
qs.xiong1af5daf2022-03-14 09:12:12 -0400662 FILE *fp;
663 switch(auth){
664 case LYNQ_WIFI_STA_AUTH_OPEN:
665 {
666 char lynq_cmd_ret[MAX_RET]={0};
667 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
qs.xiong7a105ce2022-03-02 09:43:11 -0500668 {
qs.xiong1af5daf2022-03-14 09:12:12 -0400669 perror("popen error!");
670 return -1;
671 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500672
qs.xiong1af5daf2022-03-14 09:12:12 -0400673 char lynq_auth_cmd[]="IFNAME=wlan0 set_net 0 key_mgmt NONE\n";
674 char lynq_auth_save[]="IFNAME=wlan0 save_config\n";
675
676 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
677 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500678
qs.xiong1af5daf2022-03-14 09:12:12 -0400679 int ret=pclose(fp);
680 if(ret==-1)
681 {
682 perror("close file faild");
683 return -1;
684 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500685 break;
686 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400687 case LYNQ_WIFI_STA_AUTH_WPA_PSK:
688 {
689 char lynq_tmp_cmd[MAX_CMD]={0};
690 char lynq_cmd_ret[MAX_CMD]={0};
691 char *lynq_auth_cmd[]={"wlan0 set_net 0 proto "};
692 char lynq_psk_cmd[]="IFNAME=wlan0 set_net 0 key_mgmt WPA-PSK\n";
693 char lynq_pairwise_cmd[]="IFNAME=wlan0 set_net 0 pairwise CCMP\n";
694 char lynq_auth_save[]="IFNAME=wlan0 save_config\n";
695 sprintf(lynq_tmp_cmd,"%s%s%s",lynq_auth_cmd[0],lynq_auth,"\n");
696
697 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
qs.xiong7a105ce2022-03-02 09:43:11 -0500698 {
qs.xiong1af5daf2022-03-14 09:12:12 -0400699 perror("popen error!");
700 return -1;
701 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500702
qs.xiong1af5daf2022-03-14 09:12:12 -0400703 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
704 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
705 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
706 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500707
708 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400709 if(ret==-1)
710 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500711 perror("close file faild");
712 return -1;
713 }
714
715 break;
716 }
717 default:
718 return -1;
719 }
720
qs.xiong1af5daf2022-03-14 09:12:12 -0400721 return 0;
722}
qs.xiong7a105ce2022-03-02 09:43:11 -0500723
724int lynq_wifi_sta_auth_get(void)
725{
qs.xiong1af5daf2022-03-14 09:12:12 -0400726 char *lynq_wifi_auth_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
727 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500728 char *strcn="key_mgmt=";
729
730 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -0400731 if((fp=popen(lynq_wifi_auth_cmd[0],"r"))==NULL){
732 perror("popen error!");
733 return -1;
734 }
735 while(1){
736 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL)
737 {
738 if((strncmp(lynq_cmd_ret,strcn,9))==0)
739 {
740 sscanf(lynq_cmd_ret,"%*[^=]=%s",g_wifi_key_mgmt);
741 }
742 }
743 if(feof(fp)){
744 break;
745 }
746 }
747 if((pclose(fp))==-1)
748 {
749 perror("close file faild");
750 return -1;
751 }
752
qs.xiong7a105ce2022-03-02 09:43:11 -0500753 return 0;
754
755}
756
757int lynq_wifi_sta_connect(void)
758{
759 FILE *fp;
760 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong1af5daf2022-03-14 09:12:12 -0400761 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant reconnect","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -0500762 perror("popen error!");
763 return -1;
764 }
765 fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp);
766
qs.xiong1af5daf2022-03-14 09:12:12 -0400767 if((strncmp(lynq_cmd_ret,g_lynq_wifi_ok,sizeof(g_lynq_wifi_ok)))!=0){
768 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500769 }
770
771 int ret=pclose(fp);
772 if(ret==-1){
773 perror("close file faild");
774 return -1;
775 }
776
777 return 0;
778}
779
780int lynq_wifi_sta_disconnect(void)
781{
782 FILE *fp;
783 char LYNQ_CMD_RET[MAX_CMD]={0};
qs.xiong1af5daf2022-03-14 09:12:12 -0400784 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant disconnect","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -0500785 perror("popen error!");
786 return -1;
787 }
788 fgets(LYNQ_CMD_RET,sizeof(LYNQ_CMD_RET),fp);
789
qs.xiong1af5daf2022-03-14 09:12:12 -0400790 if((strncmp(LYNQ_CMD_RET,g_lynq_wifi_ok,sizeof(g_lynq_wifi_ok)))!=0){
791 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500792 }
793 int ret=pclose(fp);
794 if(ret==-1){
795 perror("close file faild");
796 return -1;
797 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400798
qs.xiong7a105ce2022-03-02 09:43:11 -0500799 return 0;
800}
qs.xiong7a105ce2022-03-02 09:43:11 -0500801int lynq_wifi_wpa_start(void){
qs.xiong9c99fa92022-03-15 08:03:26 -0400802 int ret;
qs.xiong7a105ce2022-03-02 09:43:11 -0500803 FILE *fp;
qs.xiong9c99fa92022-03-15 08:03:26 -0400804 char LYNQ_CMD_RET[MAX_RET];
805 system("wpa_supplicant -iwlan0 -Dnl80211 -c /data/wifi/wg870/wpa_supplicant.conf -g/var/run/wpa_wlan0_cmd -dd -t -B");
806
807 while(1)
808 {
809 fp=popen("ps -ef | grep wpa_supplicant","r");
810 if(fp==NULL){
811 perror("start wpa_supplicant faild!");
812 return -1;
813 }
814 memset(LYNQ_CMD_RET,'\0',sizeof(LYNQ_CMD_RET));
815 fgets(LYNQ_CMD_RET,sizeof(LYNQ_CMD_RET),fp);
816 if(strlen(LYNQ_CMD_RET) > 85){
817 ret=pclose(fp);
818 if(ret==-1){
819 perror("close faild");
820 return -1;
821 }
822 break;
823 }
824 ret=pclose(fp);
825 if(ret==-1){
826 perror("close faild");
827 return -1;
828 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500829
qs.xiong9c99fa92022-03-15 08:03:26 -0400830 }
831
qs.xiong7a105ce2022-03-02 09:43:11 -0500832 return 0;
833}
834
835int lynq_wifi_wpacli_start(void){
836
837 FILE *fp;
qs.xiong7a105ce2022-03-02 09:43:11 -0500838 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong1af5daf2022-03-14 09:12:12 -0400839 char rm_cmd[128]="IFNAME=wlan0 remove_net all\n";
840 char add_cmd[128]="IFNAME=wlan0 add_net\n";
841 char save_cmd[128]="IFNAME=wlan0 save_config\n";
qs.xiong7a105ce2022-03-02 09:43:11 -0500842
843 fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w");
844 if(fp==NULL){
845 perror("start wpa_supplicant faild!");
846 return -1;
847 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400848
849 fwrite(rm_cmd,sizeof(rm_cmd),1,fp);
850 fwrite(add_cmd,sizeof(add_cmd),1,fp);
851 fwrite(save_cmd,sizeof(save_cmd),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500852
853 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400854 if(ret==-1)
855 {
856 perror("close file faild");
857 return -1;
858 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500859
qs.xiong1af5daf2022-03-14 09:12:12 -0400860 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500861}
862
863