blob: 09baa205d6b4a83b7ef77b00fab851ec558b1e5f [file] [log] [blame]
qs.xiong799dab02022-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.xiong8d42bb92022-03-02 09:43:11 -050010#include <stdio.h>
11#include <sys/types.h>
12#include <string.h>
qs.xiong799dab02022-03-14 09:12:12 -040013#include <stdlib.h>
14#include <stdlib.h>
qs.xiongd189c542022-03-31 00:58:23 -040015#include <pthread.h>
qs.xiong8d42bb92022-03-02 09:43:11 -050016#include "libwifi6.h"
17
qs.xiong799dab02022-03-14 09:12:12 -040018#ifdef __cplusplus
19extern "C" {
20#endif
21#ifdef __cplusplus
22}
23#endif
qs.xiong8d42bb92022-03-02 09:43:11 -050024
qs.xiongd189c542022-03-31 00:58:23 -040025#define MAX_CMD 256
qs.xiong8d42bb92022-03-02 09:43:11 -050026#define MAX_RET 1024
qs.xiongd189c542022-03-31 00:58:23 -040027#define MODE_LEN 10
qs.xiong799dab02022-03-14 09:12:12 -040028char g_lynq_wifi_ok[3]="OK";
qs.xiongd189c542022-03-31 00:58:23 -040029
30
31void StartThread()
32{
33
34 char start_cmd[120]="wpa_supplicant -iwlan0 -Dnl80211 -c /data/wifi/wg870/wpa_supplicant.conf -g/var/run/wpa_wlan0_cmd -dd -t -B";
35 char get_pid_cmd[20]="wpa_supplicant";
36 if((GetPIDbyName(get_pid_cmd))>0){
37 return;
38 }
39 system(start_cmd);
40 for(int i=0;i<5;i++){
41 if((GetPIDbyName(get_pid_cmd))>0){
42 break;
43 }else{
44 sleep(2);
45 }
46 if(i==4){
47 printf("start timeout\n");
48 }
49 }
50 return;
51}
52
53
qs.xionge5164a82022-03-15 08:03:26 -040054
qs.xiong799dab02022-03-14 09:12:12 -040055int lynq_wifi_enable(void)
56{
qs.xiong8b529cd2022-03-17 14:31:33 -040057 system("chmod 777 /data/wl");
qs.xiong8d42bb92022-03-02 09:43:11 -050058 char *lynq_wifi_enable[]={"insmod /lib/modules/4.19.98/kernel/drivers/net/wireless/bcmdhd/bcmdhd.ko "
qs.xiong799dab02022-03-14 09:12:12 -040059 "firmware_path=/system/etc/firmware/wifi/wg870/w870_rtecdc_mfg.trxs "
qs.xionge5164a82022-03-15 08:03:26 -040060 "nvram_path=/system/etc/firmware/wifi/wg870/cyw955572fcipa_rev2.52.txt\n"};
qs.xiong799dab02022-03-14 09:12:12 -040061 if(system(lynq_wifi_enable[0])==-1){
qs.xiong8d42bb92022-03-02 09:43:11 -050062 return -1;
63 }
qs.xiong799dab02022-03-14 09:12:12 -040064
qs.xiong8d42bb92022-03-02 09:43:11 -050065 return 0;
66}
67
qs.xiong799dab02022-03-14 09:12:12 -040068int lynq_wifi_disable(void)
69{
qs.xiong8d42bb92022-03-02 09:43:11 -050070 FILE *fp;
71 if((popen("rmmod bcmdhd.ko","w"))==NULL){
72 perror("poepn error!");
73 return -1;
74 }
75 int ret=pclose(fp);
76 if(ret==-1){
77 perror("close file faild");
78 return -1;
79 }
80 return 0;
81}
qs.xiongd189c542022-03-31 00:58:23 -040082/*
83int lynq_wifi_work_mode_set(lynq_wifi_work_mode_m mode)
qs.xiong8d42bb92022-03-02 09:43:11 -050084{
85 FILE *fp;
qs.xiong799dab02022-03-14 09:12:12 -040086
qs.xiong8d42bb92022-03-02 09:43:11 -050087 switch(mode){
88 case LYNQ_WIFI_WORK_MODE_STA:
qs.xiong799dab02022-03-14 09:12:12 -040089 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong8d42bb92022-03-02 09:43:11 -050090 perror("popen error!");
91 return -1;
92 }
93 break;
94 case LYNQ_WIFI_WORK_MODE_AP:
qs.xiong799dab02022-03-14 09:12:12 -040095 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong8d42bb92022-03-02 09:43:11 -050096 perror("popen error!");
97 return -1;
98 }
99 break;
qs.xiong8d42bb92022-03-02 09:43:11 -0500100 default:
101 return -1;
102 }
103 return 0;
104}
qs.xiongd189c542022-03-31 00:58:23 -0400105*/
106int lynq_wifi_work_mode_get(lynq_wifi_work_mode_m *mode)
qs.xiong8d42bb92022-03-02 09:43:11 -0500107{
qs.xiong799dab02022-03-14 09:12:12 -0400108
109 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiongd189c542022-03-31 00:58:23 -0400110 char lynq_cmd_ret[MAX_RET]={0};
111 char lynq_mode[10]={0};
qs.xiong8d42bb92022-03-02 09:43:11 -0500112 char *strcn="mode=";
qs.xiongd189c542022-03-31 00:58:23 -0400113 char sta[64]="station";
114 char ap[64]="AP";
qs.xiong8d42bb92022-03-02 09:43:11 -0500115
qs.xiong799dab02022-03-14 09:12:12 -0400116 FILE *fp;
117
118 if ((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
qs.xiong8d42bb92022-03-02 09:43:11 -0500119 return -1;
qs.xiong799dab02022-03-14 09:12:12 -0400120 }
121
122 while(1){
123 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
124 if((strncmp(lynq_cmd_ret,strcn,5))==0)
125 {
qs.xiongd189c542022-03-31 00:58:23 -0400126 sscanf(lynq_cmd_ret,"%*[^=]=%s",lynq_mode);
127 if(strcmp(lynq_mode,sta)==0){
128 *mode=LYNQ_WIFI_WORK_MODE_STA;
129 }else if((strcmp(lynq_mode,ap))==0){
130 *mode=LYNQ_WIFI_WORK_MODE_AP;
131 }
qs.xiong799dab02022-03-14 09:12:12 -0400132 }
133 }
134 if(feof(fp)){
135 break;
136 }
137 }
138
qs.xiong8d42bb92022-03-02 09:43:11 -0500139 if((pclose(fp))==-1){
140 perror("close file faild");
141 return -1;
142 }
143 return 0;
144
145}
146
qs.xiongd189c542022-03-31 00:58:23 -0400147int lynq_wifi_ap_ssid_set(lynq_wifi_index_e idx,char *ap_ssid)
qs.xiong8d42bb92022-03-02 09:43:11 -0500148{
149 FILE *fp;
qs.xiongd189c542022-03-31 00:58:23 -0400150 char lynq_wifi_ssid_cmd[80]={0};
qs.xiong8d42bb92022-03-02 09:43:11 -0500151 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong8d42bb92022-03-02 09:43:11 -0500152 char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
qs.xiongd189c542022-03-31 00:58:23 -0400153 sprintf(lynq_tmp_cmd,"%s%d%s","IFNAME=wlan0 set_network ",idx," ssid ");
154 sprintf(lynq_wifi_ssid_cmd,"%s%s%s%s%s",lynq_tmp_cmd,"\"",ap_ssid,"\"","\n");
qs.xiong8d42bb92022-03-02 09:43:11 -0500155
156 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
157 perror("popen error!");
158 return -1;
159 }
qs.xiong799dab02022-03-14 09:12:12 -0400160
qs.xiongd189c542022-03-31 00:58:23 -0400161 fwrite(lynq_wifi_ssid_cmd,sizeof(lynq_wifi_ssid_cmd),1,fp);
qs.xiong799dab02022-03-14 09:12:12 -0400162 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
163
qs.xiong8d42bb92022-03-02 09:43:11 -0500164 int ret=pclose(fp);
165 if(ret==-1){
166 perror("close file faild");
167 return -1;
168 }
169 return 0;
170
171}
172
qs.xiongd189c542022-03-31 00:58:23 -0400173int lynq_wifi_ap_ssid_get(lynq_wifi_index_e idx,char* ap_ssid)
qs.xiong8d42bb92022-03-02 09:43:11 -0500174{
qs.xiong799dab02022-03-14 09:12:12 -0400175 FILE *fp;
176 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong8d42bb92022-03-02 09:43:11 -0500177 char lynq_cmd_ret[MAX_RET]={0};
178 char *strcn="ssid=";
qs.xiongd189c542022-03-31 00:58:23 -0400179 if(idx>10||idx<0){
180 return -1;
181 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500182 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
183 perror("popen error!");
184 return -1;
185 }
186 while(1){
qs.xiong799dab02022-03-14 09:12:12 -0400187 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
188 if((strncmp(lynq_cmd_ret,strcn,5))==0)
189 {
qs.xiongd189c542022-03-31 00:58:23 -0400190 sscanf(lynq_cmd_ret,"%*[^=]=%s",ap_ssid);
qs.xiong799dab02022-03-14 09:12:12 -0400191 }
192 }
193 if(feof(fp)){
194 break;
195 }
196 }
qs.xiongd189c542022-03-31 00:58:23 -0400197
qs.xiong799dab02022-03-14 09:12:12 -0400198 if((pclose(fp))==-1){
199 perror("close file faild");
200 return -1;
201 }
qs.xiongd189c542022-03-31 00:58:23 -0400202 printf("after pclose ssid get\n");
qs.xiong799dab02022-03-14 09:12:12 -0400203 return 0;
qs.xiong8d42bb92022-03-02 09:43:11 -0500204}
205
qs.xiongd189c542022-03-31 00:58:23 -0400206int lynq_wifi_ap_frequency_set(lynq_wifi_index_e idx,int lynq_wifi_frequency)
qs.xiong8d42bb92022-03-02 09:43:11 -0500207{
208 FILE *fp;
qs.xiongd189c542022-03-31 00:58:23 -0400209
210 char lynq_wifi_frequency_cmd[128]={0};
211 char lynq_cmd_mode[128]={0};
212 char lynq_cmd_slect[128]={0};
213 char lynq_cmd_save[128]="IFNAME=wlan0 save_config\n";
qs.xiong8d42bb92022-03-02 09:43:11 -0500214
qs.xiongd189c542022-03-31 00:58:23 -0400215
216 sprintf(lynq_wifi_frequency_cmd,"IFNAME=wlan0 set_net %d frequency %d\n", idx, lynq_wifi_frequency);
217 sprintf(lynq_cmd_mode, "IFNAME=wlan0 set_net %d mode 2\n", idx);
218 sprintf(lynq_cmd_slect, "IFNAME=wlan0 select_net %d\n", idx);
qs.xiong8d42bb92022-03-02 09:43:11 -0500219
220 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
221 perror("popen error!");
222 return -1;
223 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500224
qs.xiongd189c542022-03-31 00:58:23 -0400225 fwrite(lynq_wifi_frequency_cmd,sizeof(lynq_wifi_frequency_cmd),1,fp);
qs.xiong799dab02022-03-14 09:12:12 -0400226 fwrite(lynq_cmd_mode,sizeof(lynq_cmd_mode),1,fp);
227 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
228 fwrite(lynq_cmd_slect,sizeof(lynq_cmd_slect),1,fp);
229
qs.xiong8d42bb92022-03-02 09:43:11 -0500230 int ret=pclose(fp);
231 if(ret==-1){
232 perror("close file faild");
233 return -1;
234 }
235
qs.xiong8d42bb92022-03-02 09:43:11 -0500236
qs.xiong799dab02022-03-14 09:12:12 -0400237 return 0;
qs.xiong8d42bb92022-03-02 09:43:11 -0500238}
239
qs.xiongd189c542022-03-31 00:58:23 -0400240int lynq_wifi_ap_frequency_get(lynq_wifi_index_e idx,int *lynq_wifi_frequency)
qs.xiong8d42bb92022-03-02 09:43:11 -0500241{
qs.xiong799dab02022-03-14 09:12:12 -0400242 FILE *fp;
qs.xiongd189c542022-03-31 00:58:23 -0400243 printf("into libwifi6 frequency get\n");
244 char lynq_wifi_ssid_cmd[128]="wpa_cli -iwlan0 -p/var/run/wpa_supplicant status";
qs.xiong8d42bb92022-03-02 09:43:11 -0500245 char lynq_cmd_ret[MAX_RET]={0};
qs.xiongd189c542022-03-31 00:58:23 -0400246 char *strcn="freq=";
247 char freq[128]={0};
qs.xiong8d42bb92022-03-02 09:43:11 -0500248
qs.xiongd189c542022-03-31 00:58:23 -0400249 if((fp=popen(lynq_wifi_ssid_cmd,"r"))==NULL){
250 perror("popen error!");
qs.xiong8d42bb92022-03-02 09:43:11 -0500251 return -1;
252 }
253 while(1){
qs.xiongd189c542022-03-31 00:58:23 -0400254 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
255 if((strncmp(lynq_cmd_ret,strcn,5))==0)
256 {
257 sscanf(lynq_cmd_ret,"%*[^=]=%s",freq);
258 *lynq_wifi_frequency=atoi(freq);
259 }
260 }
261 if(feof(fp)){
262 break;
263 }
264 }
265
266 if((pclose(fp))==-1){
267 perror("close file faild");
268 return -1;
269 }
270
271 return 0;
272}
273
274/*
275int lynq_wifi_ap_bandwidth_set(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m bandwidth)
276{
277
278
279
280 return 0;
281}
282*/
283int lynq_wifi_ap_bandwidth_get(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m* bandwidth)
284{
285 printf("into lynq_wifi_ap_bandwidth_get*******\n");
286 FILE *fp;
287 char aim[MAX_CMD]={0};
288 char number[10]="80";
289 char lynq_wifi_bandwidth_cmd[64]="/data/wl chanspec\n";
290 char lynq_cmd_ret[MAX_CMD]={0};
291
292 if((fp=popen(lynq_wifi_bandwidth_cmd,"r"))==NULL){
293 perror("popen error!");
294 return -1;
qs.xiong8d42bb92022-03-02 09:43:11 -0500295 }
qs.xiongd189c542022-03-31 00:58:23 -0400296
297 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
298 strncpy(aim,lynq_cmd_ret+3,2);
299 printf("************band aim string is %s\n",aim);
300 if((strncmp(aim,number,2))==0){
301 *bandwidth=1;
302 }else{
303 *bandwidth=0;
304 }
305 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500306 if((pclose(fp))==-1){
307 perror("close file faild");
308 return -1;
qs.xiongd189c542022-03-31 00:58:23 -0400309 }
310
qs.xiong8d42bb92022-03-02 09:43:11 -0500311 return 0;
312
313}
qs.xiongd189c542022-03-31 00:58:23 -0400314/*
315int lynq_wifi_ap_channel_set( lynq_wifi_index_e idx,int channel)
qs.xiong8d42bb92022-03-02 09:43:11 -0500316{
317 FILE *fp;
qs.xiongd189c542022-03-31 00:58:23 -0400318 FILE *fg;
319 char lynq_cmd_ret[MAX_CMD]={0};
qs.xiong8b529cd2022-03-17 14:31:33 -0400320 char lynq_tmp_cmd[MAX_RET]={0};
qs.xiongd189c542022-03-31 00:58:23 -0400321 char lynq_change_cmd[64]="/data/wl chanspec ";
322 char chose_idx_cmd[64]="";
323 sprintf(chose_idx_cmd,"%s%d%s","IFNAME=wlan0 slecet_net ",idx,"\n");
324 if((fg=popen(chose_idx_cmd,"r"))==NULL){
325 perror("popen error!");
326 return -1;
327 }
328 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
329 if((strcmp(lynq_cmd_ret,g_lynq_wifi_ok))!=0){
330 return -1;
331 }
332 }
333 if((pclose(fg))==-1){
334 perror("close file faild");
335 return -1;
336 }
337 sprintf(lynq_tmp_cmd,"%s%d",lynq_change_cmd[1],channel);
qs.xiong8b529cd2022-03-17 14:31:33 -0400338 system("/data/wl down");
qs.xiong8d42bb92022-03-02 09:43:11 -0500339 if((fp=popen(lynq_tmp_cmd,"w"))==NULL){
qs.xiongd189c542022-03-31 00:58:23 -0400340 perror("popen error!");
341 return -1;
qs.xiong8b529cd2022-03-17 14:31:33 -0400342 }
qs.xiong799dab02022-03-14 09:12:12 -0400343
qs.xiong8d42bb92022-03-02 09:43:11 -0500344 int ret=pclose(fp);
345 if(ret==-1){
346 perror("close file faild");
347 return -1;
348 }
qs.xiong8b529cd2022-03-17 14:31:33 -0400349 system("/data/wl up");
qs.xiong8d42bb92022-03-02 09:43:11 -0500350 return 0;
351}
qs.xiongd189c542022-03-31 00:58:23 -0400352*/
353int lynq_wifi_ap_channel_get( lynq_wifi_index_e idx,int* channel)
qs.xiong8d42bb92022-03-02 09:43:11 -0500354{
qs.xiongd189c542022-03-31 00:58:23 -0400355 FILE *fp;
356 char lynq_cmd_set[MAX_CMD]={0};
357 char channel_str[64]={0};
358 char lynq_cmd_ret[MAX_RET]={0};
359
360 if((fp=popen("/data/wl chanspec","r"))==NULL){
qs.xiong799dab02022-03-14 09:12:12 -0400361 perror("popen error!");
362 return -1;
363 }
qs.xiongd189c542022-03-31 00:58:23 -0400364
365 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
366 strncpy(channel_str,lynq_cmd_ret,2);
367 *channel=atoi(channel_str);
qs.xiong799dab02022-03-14 09:12:12 -0400368 }
369 if((pclose(fp))==-1){
370 perror("close file faild");
371 return -1;
372 }
373
qs.xiong8d42bb92022-03-02 09:43:11 -0500374 return 0;
375}
376
377
qs.xiongd189c542022-03-31 00:58:23 -0400378int lynq_wifi_ap_auth_set(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s auth)
qs.xiong8d42bb92022-03-02 09:43:11 -0500379{
380 FILE *fp;
381 switch(auth){
qs.xiongd189c542022-03-31 00:58:23 -0400382 case LYNQ_WIFI_AUTH_OPEN:
qs.xiong8d42bb92022-03-02 09:43:11 -0500383 {
qs.xiongd189c542022-03-31 00:58:23 -0400384 char lynq_auth_cmd[64]={0};
385 char lynq_auth_save[64]="IFNAME=wlan0 save_config\n";
386 char lynq_cmd_quit[12]="quit\n";
387 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d key_mgmt NONE\n",idx);
388
qs.xiong8d42bb92022-03-02 09:43:11 -0500389 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
390 perror("popen error!");
391 return -1;
392 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500393
394 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
395 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiongd189c542022-03-31 00:58:23 -0400396 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong8d42bb92022-03-02 09:43:11 -0500397
398 int ret=pclose(fp);
399 if(ret==-1){
400 perror("close file faild");
401 return -1;
402 }
403 break;
404 }
qs.xiongd189c542022-03-31 00:58:23 -0400405 case LYNQ_WIFI_AUTH_WPA_PSK:
qs.xiong8d42bb92022-03-02 09:43:11 -0500406 {
qs.xiongd189c542022-03-31 00:58:23 -0400407
408 char lynq_auth_cmd[64]={0};
409 char lynq_psk_cmd[64]={0};
410 char lynq_pairwise_cmd[64]={0};
411 char lynq_auth_save[64]="IFNAME=wlan0 save_config\n";
412 char lynq_cmd_quit[12]="quit\n";
413
414 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d proto WPA2\n",idx);
415 sprintf(lynq_psk_cmd,"IFNAME=wlan0 set_net %d key_mgmt WPA-PSK\n",idx);
416 sprintf(lynq_pairwise_cmd,"IFNAME=wlan0 set_net %d pairwise CCMP\n",idx);
qs.xiong8d42bb92022-03-02 09:43:11 -0500417
qs.xiong8d42bb92022-03-02 09:43:11 -0500418 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
419 perror("popen error!");
420 return -1;
421 }
422
qs.xiongd189c542022-03-31 00:58:23 -0400423 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
qs.xiong8d42bb92022-03-02 09:43:11 -0500424 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
425 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
426 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiongd189c542022-03-31 00:58:23 -0400427 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong8d42bb92022-03-02 09:43:11 -0500428
429 int ret=pclose(fp);
430 if(ret==-1){
431 perror("close file faild");
432 return -1;
433 }
434
435 break;
436 }
437 default:
438 return -1;
439 }
440
441
442 return 0;
443}
444
qs.xiongd189c542022-03-31 00:58:23 -0400445int lynq_wifi_ap_auth_get(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s *auth)
qs.xiong8d42bb92022-03-02 09:43:11 -0500446{
qs.xiong799dab02022-03-14 09:12:12 -0400447 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiongd189c542022-03-31 00:58:23 -0400448 char lynq_cmd_ret[MAX_RET]={0};
449 char get_str_auth[20]={0};
450 char use_to_cmp[4]="WPA";
451 char strcn[20]="key_mgmt=";
qs.xiong8d42bb92022-03-02 09:43:11 -0500452
qs.xiong799dab02022-03-14 09:12:12 -0400453 FILE *fp;
454 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
455 perror("popen error!");
qs.xiong8d42bb92022-03-02 09:43:11 -0500456 return -1;
457 }
458 while(1){
qs.xiong799dab02022-03-14 09:12:12 -0400459 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiong799dab02022-03-14 09:12:12 -0400460 if((strncmp(lynq_cmd_ret,strcn,9))==0)
461 {
qs.xiongd189c542022-03-31 00:58:23 -0400462 sscanf(lynq_cmd_ret,"%*[^=]=%s",get_str_auth);
463 if((strncmp(get_str_auth,use_to_cmp,3))==0){
464 *auth=LYNQ_WIFI_AUTH_WPA_PSK;
465 break;
466 }
qs.xiong799dab02022-03-14 09:12:12 -0400467 }
468 }
469 if(feof(fp)){
470 break;
471 }
472 }
qs.xiongd189c542022-03-31 00:58:23 -0400473 if(*auth!=LYNQ_WIFI_AUTH_WPA_PSK){
474 *auth=LYNQ_WIFI_AUTH_OPEN;
475 }
qs.xiong799dab02022-03-14 09:12:12 -0400476 if((pclose(fp))==-1){
477 perror("close file faild");
478 return -1;
479 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500480
qs.xiong799dab02022-03-14 09:12:12 -0400481 return 0;
qs.xiong8d42bb92022-03-02 09:43:11 -0500482}
qs.xiongd189c542022-03-31 00:58:23 -0400483/*
484int lynq_wifi_ap_max_sta_set(lynq_wifi_index_e idx,int max_sta_num)
qs.xiong8d42bb92022-03-02 09:43:11 -0500485{
qs.xiong8d42bb92022-03-02 09:43:11 -0500486 FILE * fp;
487 char lynq_cmd_ret[MAX_RET]={0};
qs.xiongd189c542022-03-31 00:58:23 -0400488 char lynq_tmp_cmd[MAX_CMD]={0};
489 sprintf(lynq_tmp_cmd,"%s%d%s","/data/wl maxassoc ",max_sta_num,"\n");
490 if(idx<0||idx>10){
491 return -1;
492 }
493 if((fp=popen(lynq_tmp_cmd,"r"))==NULL)
qs.xiong799dab02022-03-14 09:12:12 -0400494 {
qs.xiong8d42bb92022-03-02 09:43:11 -0500495 perror("popen error!");
496 return -1;
497 }
qs.xiong799dab02022-03-14 09:12:12 -0400498 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
499 {
qs.xiong8d42bb92022-03-02 09:43:11 -0500500 perror("fread fail!");
501 return -1;
502 }
qs.xiong799dab02022-03-14 09:12:12 -0400503
qs.xiong8d42bb92022-03-02 09:43:11 -0500504 int ret=pclose(fp);
qs.xiong799dab02022-03-14 09:12:12 -0400505 if(ret==-1)
506 {
qs.xiong8d42bb92022-03-02 09:43:11 -0500507 perror("close file faild");
508 return -1;
509 }
qs.xiong799dab02022-03-14 09:12:12 -0400510
qs.xiong8d42bb92022-03-02 09:43:11 -0500511 return 0;
512}
qs.xiongd189c542022-03-31 00:58:23 -0400513*/
514int lynq_wifi_ap_max_sta_get(lynq_wifi_index_e idx,int* max_sta_num)
qs.xiong8d42bb92022-03-02 09:43:11 -0500515{
516 FILE *fp;
qs.xiongd189c542022-03-31 00:58:23 -0400517 char get_str_num[5]={0};
qs.xiong8d42bb92022-03-02 09:43:11 -0500518 char lynq_cmd_ret[MAX_RET]={0};
qs.xiongd189c542022-03-31 00:58:23 -0400519 if(idx<0||idx>10){
520 return -1;
521 }
qs.xiong8b529cd2022-03-17 14:31:33 -0400522 if((fp=popen("/data/wl maxassoc","r"))==NULL)
qs.xiong799dab02022-03-14 09:12:12 -0400523 {
qs.xiong8d42bb92022-03-02 09:43:11 -0500524 perror("popen error!");
525 return -1;
526 }
qs.xiong799dab02022-03-14 09:12:12 -0400527 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
528 {
qs.xiong8d42bb92022-03-02 09:43:11 -0500529 perror("fread fail!");
530 return -1;
531 }
qs.xiongd189c542022-03-31 00:58:23 -0400532 strcpy(get_str_num,lynq_cmd_ret);
533 *max_sta_num=atoi(get_str_num);
qs.xiong799dab02022-03-14 09:12:12 -0400534
qs.xiong8d42bb92022-03-02 09:43:11 -0500535 int ret=pclose(fp);
qs.xiong799dab02022-03-14 09:12:12 -0400536 if(ret==-1)
537 {
qs.xiong8d42bb92022-03-02 09:43:11 -0500538 perror("close file faild");
539 return -1;
qs.xiong799dab02022-03-14 09:12:12 -0400540 }
541
qs.xiong8d42bb92022-03-02 09:43:11 -0500542 return 0;
543}
544
qs.xiongd189c542022-03-31 00:58:23 -0400545int lynq_wifi_ap_start(lynq_wifi_index_e idx)
qs.xiong8d42bb92022-03-02 09:43:11 -0500546{
qs.xiong799dab02022-03-14 09:12:12 -0400547
qs.xiongd189c542022-03-31 00:58:23 -0400548 FILE *fp;
549 char LYNQ_WIFI_CMD[128]={0};
550 char LYNQ_CMD_RET[MAX_CMD]={0};
551 sprintf(LYNQ_WIFI_CMD,"wpa_cli -iwlan0 -p/var/run/wpa_supplicant select_net %d\n",idx);
552
553 if((fp=popen(LYNQ_WIFI_CMD,"r"))==NULL)
qs.xiong799dab02022-03-14 09:12:12 -0400554 {
qs.xiong8d42bb92022-03-02 09:43:11 -0500555 perror("popen error!");
556 return -1;
557 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500558
qs.xiong799dab02022-03-14 09:12:12 -0400559 fgets(LYNQ_CMD_RET,sizeof(LYNQ_CMD_RET),fp);
560
qs.xiongd189c542022-03-31 00:58:23 -0400561 if((strncmp(LYNQ_CMD_RET,g_lynq_wifi_ok,strlen(g_lynq_wifi_ok)))!=0)
qs.xiong799dab02022-03-14 09:12:12 -0400562 {
563 return -1;
564 }
565
qs.xiong8d42bb92022-03-02 09:43:11 -0500566 int ret=pclose(fp);
qs.xiong799dab02022-03-14 09:12:12 -0400567 if(ret==-1)
568 {
569 perror("close file faild");
570 return -1;
qs.xiong8d42bb92022-03-02 09:43:11 -0500571 }
572
573 return 0;
574}
575
qs.xiongd189c542022-03-31 00:58:23 -0400576int lynq_wifi_ap_restart(lynq_wifi_index_e idx)
qs.xiong8d42bb92022-03-02 09:43:11 -0500577{
qs.xiong799dab02022-03-14 09:12:12 -0400578 int lynq_stop;
579 int lynq_start;
580
qs.xiongd189c542022-03-31 00:58:23 -0400581 lynq_stop = lynq_wifi_ap_stop(idx);
qs.xiong799dab02022-03-14 09:12:12 -0400582 if ( lynq_stop != 0 )
583 {
584 return -1;
585 }
586
qs.xiongd189c542022-03-31 00:58:23 -0400587 lynq_start = lynq_wifi_ap_start(idx);
qs.xiong799dab02022-03-14 09:12:12 -0400588 if ( lynq_start != 0 )
589 {
590 return -1;
591 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500592
qs.xiong8d42bb92022-03-02 09:43:11 -0500593 return 0;
594
595}
596
qs.xiongd189c542022-03-31 00:58:23 -0400597int lynq_wifi_ap_stop(lynq_wifi_index_e idx)
qs.xiong8d42bb92022-03-02 09:43:11 -0500598{
599 FILE *fp;
qs.xiongd189c542022-03-31 00:58:23 -0400600 char LYNQ_WIFI_CMD[128]={0};
qs.xiong799dab02022-03-14 09:12:12 -0400601 char LYNQ_CMD_RET[MAX_CMD]={0};
qs.xiongd189c542022-03-31 00:58:23 -0400602 sprintf(LYNQ_WIFI_CMD,"wpa_cli -iwlan0 -p/var/run/wpa_supplicant disable_net %d\n",idx);
qs.xiong799dab02022-03-14 09:12:12 -0400603
qs.xiongd189c542022-03-31 00:58:23 -0400604 if( (fp=popen(LYNQ_WIFI_CMD,"r")) == NULL ){
qs.xiong8d42bb92022-03-02 09:43:11 -0500605 perror("popen error!");
606 return -1;
607 }
qs.xiong799dab02022-03-14 09:12:12 -0400608
609 fgets( LYNQ_CMD_RET,sizeof(LYNQ_CMD_RET),fp );
610
611 if((strncmp(LYNQ_CMD_RET,g_lynq_wifi_ok,sizeof(g_lynq_wifi_ok)))!=0){
612 return -1;
613 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500614
615 int ret=pclose(fp);
616 if(ret==-1){
617 perror("close file faild");
618 return -1;
619 }
qs.xiong799dab02022-03-14 09:12:12 -0400620
qs.xiong8d42bb92022-03-02 09:43:11 -0500621 return 0;
622}
qs.xiong799dab02022-03-14 09:12:12 -0400623
qs.xiongd189c542022-03-31 00:58:23 -0400624int lynq_wifi_ap_hide_ssid(lynq_wifi_index_e idx)
qs.xiong8d42bb92022-03-02 09:43:11 -0500625{
626 FILE *fp;
qs.xiongd189c542022-03-31 00:58:23 -0400627 char lynq_disable_cmd[128]={0};
628 char lynq_select_cmd[128]={0};
qs.xiong799dab02022-03-14 09:12:12 -0400629 char lynq_hide_cmd[]="IFNAME=wlan0 SET HIDE_SSID 1\n";
qs.xiong799dab02022-03-14 09:12:12 -0400630
qs.xiongd189c542022-03-31 00:58:23 -0400631 sprintf(lynq_disable_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
632 sprintf(lynq_select_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiong8d42bb92022-03-02 09:43:11 -0500633 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
634 perror("popen error!");
635 return -1;
636 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500637
638 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
639 fwrite(lynq_hide_cmd,sizeof(lynq_hide_cmd),1,fp);
640 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
641
642 int ret=pclose(fp);
643 if(ret==-1){
644 perror("close file faild");
645 return -1;
646 }
qs.xiong799dab02022-03-14 09:12:12 -0400647
648 return 0;
qs.xiong8d42bb92022-03-02 09:43:11 -0500649}
650
qs.xiongd189c542022-03-31 00:58:23 -0400651int lynq_wifi_ap_unhide_ssid(lynq_wifi_index_e idx)
qs.xiong8d42bb92022-03-02 09:43:11 -0500652{
653 FILE *fp;
654 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
655 perror("popen error!");
656 return -1;
657 }
qs.xiongd189c542022-03-31 00:58:23 -0400658 char lynq_disable_cmd[128]={0};
659 char lynq_select_cmd[128]={0};
660 char lynq_unhide_cmd[128]="IFNAME=wlan0 SET HIDE_SSID 0\n";
661
662 sprintf(lynq_disable_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
663 sprintf(lynq_select_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiong8d42bb92022-03-02 09:43:11 -0500664
665 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
666 fwrite(lynq_unhide_cmd,sizeof(lynq_unhide_cmd),1,fp);
667 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
qs.xiong799dab02022-03-14 09:12:12 -0400668
qs.xiong8d42bb92022-03-02 09:43:11 -0500669 int ret=pclose(fp);
670 if(ret==-1){
671 perror("close file faild");
672 return -1;
673 }
674
675 return 0;
676}
qs.xiongd189c542022-03-31 00:58:23 -0400677
678int lynq_ap_ssid_pass_set(lynq_wifi_index_e idx,char *password)
qs.xiong8d42bb92022-03-02 09:43:11 -0500679{
680 FILE *fp;
qs.xiongd189c542022-03-31 00:58:23 -0400681 int ret;
682 int pass_len;
683 pass_len=strlen(password);
684 if(pass_len< 0 || pass_len > 256){
685 return -1;
686 }
687
688 char lynq_tmp_cmd[300]={0};
689 char lynq_pass_save[64]="IFNAME=wlan0 save_config\n";
690 char lynq_cmd_quit[12]="quit\n";
691 sprintf(lynq_tmp_cmd,"%s%d%s%s%s%s%s","IFNAME=wlan0 set_net ",idx," psk ","\"",password,"\"","\n");
692
693 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
694 perror("popen error!");
695 return -1;
696 }
697
698 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
699 fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
700 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
701
702 ret=pclose(fp);
703 if(ret==-1){
704 perror("close file faild");
705 return -1;
706 }
707 return 0;
708}
709
710int lynq_sta_ssid_pass_set(lynq_wifi_index_e idx,char *password)
711{
712 FILE *fp;
713 int pass_len;
714 pass_len=strlen(password);
715 if(pass_len< 0 || pass_len > 256){
716 return -1;
717 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500718 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiongd189c542022-03-31 00:58:23 -0400719 char lynq_pass_save[64]="IFNAME=wlan0 save_config\n";
720 char lynq_cmd_quit[12]="quit\n";
721 sprintf(lynq_tmp_cmd,"%s%d%s%s%s%s%s","IFNAME=wlan0 set_net ",idx," psk ","\"",password,"\"","\n");
qs.xiong8d42bb92022-03-02 09:43:11 -0500722
723 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
724 perror("popen error!");
725 return -1;
726 }
727
qs.xiong8d42bb92022-03-02 09:43:11 -0500728 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
729 fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
qs.xiongd189c542022-03-31 00:58:23 -0400730 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong8d42bb92022-03-02 09:43:11 -0500731
732 int ret=pclose(fp);
733 if(ret==-1){
734 perror("close file faild");
735 return -1;
736 }
737
738 return 0;
739}
740
qs.xiongd189c542022-03-31 00:58:23 -0400741/*
742int lynq_wifi_sta_ssid_set(lynq_wifi_index_e idx,char *sta_ssid)
qs.xiong8d42bb92022-03-02 09:43:11 -0500743{
qs.xiongd189c542022-03-31 00:58:23 -0400744 printf("*******into lynq_wifi_sta_ssid_set\n");
745 FILE *fp;
746 char lynq_wifi_ssid_cmd[128]={0};
qs.xiong8d42bb92022-03-02 09:43:11 -0500747 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiongd189c542022-03-31 00:58:23 -0400748 char lynq_cmd_save[128]="IFNAME=wlan0 save_config\n";
qs.xiong8d42bb92022-03-02 09:43:11 -0500749
qs.xiongd189c542022-03-31 00:58:23 -0400750 sprintf(lynq_tmp_cmd,"IFNAME=wlan0 set_network %d ssid ",idx);
751 sprintf(lynq_wifi_ssid_cmd,"%s%s%s%s%s",lynq_tmp_cmd,"\"",sta_ssid,"\"","\n");
752 printf("set sta ssid cmd: %s\n",lynq_wifi_ssid_cmd);
753 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
754 perror("popen error!");
755 return -1;
756 }
757
758 fwrite(lynq_wifi_ssid_cmd,sizeof(lynq_wifi_ssid_cmd),1,fp);
759 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
qs.xiong8d42bb92022-03-02 09:43:11 -0500760
761 int ret=pclose(fp);
762 if(ret==-1){
763 perror("close file faild");
764 return -1;
765 }
qs.xiong799dab02022-03-14 09:12:12 -0400766
qs.xiong8d42bb92022-03-02 09:43:11 -0500767 return 0;
qs.xiongd189c542022-03-31 00:58:23 -0400768
qs.xiong8d42bb92022-03-02 09:43:11 -0500769}
770
qs.xiongd189c542022-03-31 00:58:23 -0400771int lynq_wifi_sta_ssid_get(lynq_wifi_index_e idx,char* sta_ssid)
qs.xiong8d42bb92022-03-02 09:43:11 -0500772{
qs.xiongd189c542022-03-31 00:58:23 -0400773 FILE *fp;
774 char get_ssid[108]={0};
qs.xiong799dab02022-03-14 09:12:12 -0400775 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong8d42bb92022-03-02 09:43:11 -0500776 char lynq_cmd_ret[MAX_RET]={0};
777 char *strcn="ssid=";
qs.xiongd189c542022-03-31 00:58:23 -0400778 if(idx>10||idx<0){
779 return -1;
780 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500781 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
782 perror("popen error!");
783 return -1;
784 }
785 while(1){
786 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
787 if((strncmp(lynq_cmd_ret,strcn,5))==0)
qs.xiong799dab02022-03-14 09:12:12 -0400788 {
qs.xiongd189c542022-03-31 00:58:23 -0400789 sscanf(lynq_cmd_ret,"%*[^=]=%s",get_ssid);
790 strcpy(sta_ssid,get_ssid);
qs.xiong799dab02022-03-14 09:12:12 -0400791 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500792 }
qs.xiong799dab02022-03-14 09:12:12 -0400793 if(feof(fp))
794 {
qs.xiong8d42bb92022-03-02 09:43:11 -0500795 break;
qs.xiong799dab02022-03-14 09:12:12 -0400796 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500797 }
798 if((pclose(fp))==-1){
799 perror("close file faild");
800 return -1;
801 }
802 return 0;
803
804}
805
qs.xiongd189c542022-03-31 00:58:23 -0400806int lynq_wifi_sta_auth_set(lynq_wifi_index_e idx, lynq_wifi_sta_auth_s auth)
qs.xiong8d42bb92022-03-02 09:43:11 -0500807{
qs.xiong799dab02022-03-14 09:12:12 -0400808 FILE *fp;
809 switch(auth){
810 case LYNQ_WIFI_STA_AUTH_OPEN:
811 {
qs.xiongd189c542022-03-31 00:58:23 -0400812 char lynq_auth_cmd[128]={0};
813 char lynq_auth_save[]="IFNAME=wlan0 save_config\n";
814 sprintf(lynq_auth_cmd,"%s%d%s","IFNAME=wlan0 set_net ",idx," key_mgmt NONE\n");
815 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
qs.xiong799dab02022-03-14 09:12:12 -0400816 perror("popen error!");
817 return -1;
818 }
qs.xiongd189c542022-03-31 00:58:23 -0400819
qs.xiong799dab02022-03-14 09:12:12 -0400820 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
821 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiong8d42bb92022-03-02 09:43:11 -0500822
qs.xiong799dab02022-03-14 09:12:12 -0400823 int ret=pclose(fp);
qs.xiongd189c542022-03-31 00:58:23 -0400824 if(ret==-1){
825 perror("close file faild");
826 return -1;
827 }
828 break;
829 }
830 case LYNQ_WIFI_STA_AUTH_WPA_PSK:
831 {
832 char lynq_auth_cmd[128]={0};
833 char lynq_psk_cmd[128]={0};
834 char lynq_pairwise_cmd[50]={0};
835 char lynq_auth_save[128]="IFNAME=wlan0 save_config\n";
836 sprintf(lynq_auth_cmd,"%s%d%s","IFNAME=wlan0 set_net ",idx," proto WPA2\n");
837 sprintf(lynq_psk_cmd,"%s%d%s","IFNAME=wlan0 set_net ",idx," key_mgmt WPA-PSK\n");
838 sprintf(lynq_pairwise_cmd,"%s%d%s","IFNAME=wlan0 set_net ",idx," pairwise CCMP\n");
839
840 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
841 perror("popen error!");
842 return -1;
843 }
844
845 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
846 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
847 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
848 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
849
850 int ret=pclose(fp);
qs.xiong799dab02022-03-14 09:12:12 -0400851 if(ret==-1)
852 {
853 perror("close file faild");
854 return -1;
855 }
qs.xiongd189c542022-03-31 00:58:23 -0400856
857 break;
858 }
859 default:
860 return -1;
861 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500862
qs.xiongd189c542022-03-31 00:58:23 -0400863 return 0;
qs.xiong799dab02022-03-14 09:12:12 -0400864}
qs.xiong8d42bb92022-03-02 09:43:11 -0500865
qs.xiongd189c542022-03-31 00:58:23 -0400866int lynq_wifi_sta_auth_get(lynq_wifi_index_e idx, lynq_wifi_sta_auth_s* auth)
qs.xiong8d42bb92022-03-02 09:43:11 -0500867{
qs.xiongd189c542022-03-31 00:58:23 -0400868 FILE *fp;
qs.xiong799dab02022-03-14 09:12:12 -0400869 char *lynq_wifi_auth_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
870 char lynq_cmd_ret[MAX_RET]={0};
qs.xiongd189c542022-03-31 00:58:23 -0400871 char get_auth[12]={0};
872 char strcn[12]="key_mgmt=";
873 char open[12]="NONE";
874
875 if(idx<0||idx>10){
876 return -1;
877 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500878
qs.xiong799dab02022-03-14 09:12:12 -0400879 if((fp=popen(lynq_wifi_auth_cmd[0],"r"))==NULL){
880 perror("popen error!");
881 return -1;
882 }
883 while(1){
884 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL)
885 {
886 if((strncmp(lynq_cmd_ret,strcn,9))==0)
887 {
qs.xiongd189c542022-03-31 00:58:23 -0400888 sscanf(lynq_cmd_ret,"%*[^=]=%s",get_auth);
889 if((strcmp(open,get_auth))==0){
890 *auth=LYNQ_WIFI_AUTH_OPEN;
891 }else{
892 *auth=LYNQ_WIFI_AUTH_WPA_PSK;
893 }
qs.xiong799dab02022-03-14 09:12:12 -0400894 }
895 }
896 if(feof(fp)){
897 break;
898 }
899 }
900 if((pclose(fp))==-1)
901 {
902 perror("close file faild");
903 return -1;
904 }
905
qs.xiong8d42bb92022-03-02 09:43:11 -0500906 return 0;
907
908}
909
910int lynq_wifi_sta_connect(void)
911{
qs.xiongd189c542022-03-31 00:58:23 -0400912
qs.xiong8d42bb92022-03-02 09:43:11 -0500913 FILE *fp;
qs.xiongd189c542022-03-31 00:58:23 -0400914 char lynq_wifi_cmd[128]={0};
915 char lynq_cmd_ret[MAX_RET]={0};
916 sprintf(lynq_wifi_cmd,"wpa_cli -iwlan0 -p/var/run/wpa_supplicant select_net %d\n",idx);
917
918 if((fp=popen(lynq_wifi_cmd,"r"))==NULL){
qs.xiong8d42bb92022-03-02 09:43:11 -0500919 perror("popen error!");
920 return -1;
921 }
922 fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp);
923
qs.xiongd189c542022-03-31 00:58:23 -0400924 if((strncmp(lynq_cmd_ret,g_lynq_wifi_ok,strlen(g_lynq_wifi_ok)))!=0){
qs.xiong799dab02022-03-14 09:12:12 -0400925 return -1;
qs.xiong8d42bb92022-03-02 09:43:11 -0500926 }
927
928 int ret=pclose(fp);
929 if(ret==-1){
930 perror("close file faild");
931 return -1;
932 }
933
934 return 0;
935}
936
qs.xiongd189c542022-03-31 00:58:23 -0400937int lynq_wifi_sta_disconnect(lynq_wifi_index_e idx)
qs.xiong8d42bb92022-03-02 09:43:11 -0500938{
939 FILE *fp;
qs.xiongd189c542022-03-31 00:58:23 -0400940 char LYNQ_WIFI_CMD[128]={0};
qs.xiong8d42bb92022-03-02 09:43:11 -0500941 char LYNQ_CMD_RET[MAX_CMD]={0};
qs.xiongd189c542022-03-31 00:58:23 -0400942 sprintf(LYNQ_WIFI_CMD,"wpa_cli -iwlan0 -p/var/run/wpa_supplicant disable_net %d\n",idx);
943 if((fp=popen(LYNQ_WIFI_CMD,"r"))==NULL){
qs.xiong8d42bb92022-03-02 09:43:11 -0500944 perror("popen error!");
945 return -1;
946 }
947 fgets(LYNQ_CMD_RET,sizeof(LYNQ_CMD_RET),fp);
948
qs.xiongd189c542022-03-31 00:58:23 -0400949 if((strncmp(LYNQ_CMD_RET,g_lynq_wifi_ok,strlen(g_lynq_wifi_ok)))!=0){
qs.xiong799dab02022-03-14 09:12:12 -0400950 return -1;
qs.xiong8d42bb92022-03-02 09:43:11 -0500951 }
952 int ret=pclose(fp);
953 if(ret==-1){
954 perror("close file faild");
955 return -1;
956 }
qs.xiong799dab02022-03-14 09:12:12 -0400957
qs.xiong8d42bb92022-03-02 09:43:11 -0500958 return 0;
959}
qs.xiongd189c542022-03-31 00:58:23 -0400960*/
qs.xiong8d42bb92022-03-02 09:43:11 -0500961int lynq_wifi_wpa_start(void){
qs.xionge5164a82022-03-15 08:03:26 -0400962 int ret;
qs.xiongd189c542022-03-31 00:58:23 -0400963 pthread_t pth;
qs.xiong8d42bb92022-03-02 09:43:11 -0500964
qs.xiongd189c542022-03-31 00:58:23 -0400965 ret=pthread_create(&pth,NULL,StartThread,NULL);
966 if(ret<0){
967 return -1;
968 }
969 pthread_join(pth,NULL);
qs.xionge5164a82022-03-15 08:03:26 -0400970
qs.xiong8d42bb92022-03-02 09:43:11 -0500971 return 0;
972}
973
974int lynq_wifi_wpacli_start(void){
975
976 FILE *fp;
qs.xiongd189c542022-03-31 00:58:23 -0400977 int i=0;
qs.xiong8d42bb92022-03-02 09:43:11 -0500978 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong799dab02022-03-14 09:12:12 -0400979 char add_cmd[128]="IFNAME=wlan0 add_net\n";
980 char save_cmd[128]="IFNAME=wlan0 save_config\n";
qs.xiongd189c542022-03-31 00:58:23 -0400981 char exit_cmd[20]="quit\n";
qs.xiong8d42bb92022-03-02 09:43:11 -0500982
qs.xiongd189c542022-03-31 00:58:23 -0400983
qs.xiong8d42bb92022-03-02 09:43:11 -0500984 fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w");
985 if(fp==NULL){
986 perror("start wpa_supplicant faild!");
987 return -1;
988 }
qs.xiong799dab02022-03-14 09:12:12 -0400989
qs.xiongd189c542022-03-31 00:58:23 -0400990 for(i=0;i<9;i++){
991 fwrite(add_cmd,sizeof(add_cmd),1,fp);
992 }
qs.xiong799dab02022-03-14 09:12:12 -0400993 fwrite(save_cmd,sizeof(save_cmd),1,fp);
qs.xiongd189c542022-03-31 00:58:23 -0400994 fwrite(exit_cmd,sizeof(exit_cmd),1,fp);
qs.xiong8d42bb92022-03-02 09:43:11 -0500995
996 int ret=pclose(fp);
qs.xiong799dab02022-03-14 09:12:12 -0400997 if(ret==-1)
998 {
999 perror("close file faild");
1000 return -1;
1001 }
qs.xiongd189c542022-03-31 00:58:23 -04001002
qs.xiong799dab02022-03-14 09:12:12 -04001003 return 0;
qs.xiong8d42bb92022-03-02 09:43:11 -05001004}
1005
qs.xiongd189c542022-03-31 00:58:23 -04001006pid_t GetPIDbyName(char* ps_name)
1007{
1008 FILE *fp;
1009 char *cmd=(char*)calloc(1,200);
1010 sprintf(cmd,"pidof %s",ps_name);
1011 fp=popen(cmd,"r");
1012 fread(cmd,1,200,fp);
1013 fclose(fp);
1014 return atoi(cmd);
1015}
qs.xiong8d42bb92022-03-02 09:43:11 -05001016