blob: 1a79ce5bc2479f7f5a2505751b2a484d1cb8b0da [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.xiong99b48d62022-04-07 05:41:29 -040016#include <ctype.h>
qs.xiong8d42bb92022-03-02 09:43:11 -050017#include "libwifi6.h"
18
qs.xiong799dab02022-03-14 09:12:12 -040019#ifdef __cplusplus
20extern "C" {
21#endif
22#ifdef __cplusplus
23}
24#endif
qs.xiong99b48d62022-04-07 05:41:29 -040025//max len of cmd include password len
26#define MAX_CMD 256
qs.xiong8d42bb92022-03-02 09:43:11 -050027#define MAX_RET 1024
qs.xiongd189c542022-03-31 00:58:23 -040028#define MODE_LEN 10
qs.xiong99b48d62022-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.xiong799dab02022-03-14 09:12:12 -040050char g_lynq_wifi_ok[3]="OK";
qs.xiongd189c542022-03-31 00:58:23 -040051
52
53void StartThread()
54{
qs.xiongd189c542022-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.xiong99b48d62022-04-07 05:41:29 -040059 }
qs.xiongd189c542022-03-31 00:58:23 -040060 system(start_cmd);
61 for(int i=0;i<5;i++){
qs.xiong99b48d62022-04-07 05:41:29 -040062 sleep(2);
qs.xiongd189c542022-03-31 00:58:23 -040063 if((GetPIDbyName(get_pid_cmd))>0){
64 break;
qs.xiong99b48d62022-04-07 05:41:29 -040065 }
qs.xiongd189c542022-03-31 00:58:23 -040066 if(i==4){
qs.xiong99b48d62022-04-07 05:41:29 -040067 return;
qs.xiongd189c542022-03-31 00:58:23 -040068 }
69 }
70 return;
71}
72
73
qs.xionge5164a82022-03-15 08:03:26 -040074
qs.xiong799dab02022-03-14 09:12:12 -040075int lynq_wifi_enable(void)
76{
qs.xiong8b529cd2022-03-17 14:31:33 -040077 system("chmod 777 /data/wl");
qs.xiong8d42bb92022-03-02 09:43:11 -050078 char *lynq_wifi_enable[]={"insmod /lib/modules/4.19.98/kernel/drivers/net/wireless/bcmdhd/bcmdhd.ko "
qs.xiong799dab02022-03-14 09:12:12 -040079 "firmware_path=/system/etc/firmware/wifi/wg870/w870_rtecdc_mfg.trxs "
qs.xionge5164a82022-03-15 08:03:26 -040080 "nvram_path=/system/etc/firmware/wifi/wg870/cyw955572fcipa_rev2.52.txt\n"};
qs.xiong799dab02022-03-14 09:12:12 -040081 if(system(lynq_wifi_enable[0])==-1){
qs.xiong8d42bb92022-03-02 09:43:11 -050082 return -1;
83 }
qs.xiong799dab02022-03-14 09:12:12 -040084
qs.xiong8d42bb92022-03-02 09:43:11 -050085 return 0;
86}
87
qs.xiong799dab02022-03-14 09:12:12 -040088int lynq_wifi_disable(void)
89{
qs.xiong99b48d62022-04-07 05:41:29 -040090 system("rmmod bcmdhd.ko");
qs.xiong8d42bb92022-03-02 09:43:11 -050091 return 0;
92}
qs.xiongd189c542022-03-31 00:58:23 -040093/*
94int lynq_wifi_work_mode_set(lynq_wifi_work_mode_m mode)
qs.xiong8d42bb92022-03-02 09:43:11 -050095{
96 FILE *fp;
qs.xiong799dab02022-03-14 09:12:12 -040097
qs.xiong8d42bb92022-03-02 09:43:11 -050098 switch(mode){
99 case LYNQ_WIFI_WORK_MODE_STA:
qs.xiong799dab02022-03-14 09:12:12 -0400100 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong8d42bb92022-03-02 09:43:11 -0500101 perror("popen error!");
102 return -1;
103 }
104 break;
105 case LYNQ_WIFI_WORK_MODE_AP:
qs.xiong799dab02022-03-14 09:12:12 -0400106 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong8d42bb92022-03-02 09:43:11 -0500107 perror("popen error!");
108 return -1;
109 }
110 break;
qs.xiong8d42bb92022-03-02 09:43:11 -0500111 default:
112 return -1;
113 }
114 return 0;
115}
qs.xiongd189c542022-03-31 00:58:23 -0400116*/
117int lynq_wifi_work_mode_get(lynq_wifi_work_mode_m *mode)
qs.xiong99b48d62022-04-07 05:41:29 -0400118{
119 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiongd189c542022-03-31 00:58:23 -0400120 char lynq_cmd_ret[MAX_RET]={0};
121 char lynq_mode[10]={0};
qs.xiong8d42bb92022-03-02 09:43:11 -0500122 char *strcn="mode=";
qs.xiong99b48d62022-04-07 05:41:29 -0400123 char sta[MAX_CMD]="station";
124 char ap[MAX_CMD]="AP";
qs.xiong8d42bb92022-03-02 09:43:11 -0500125
qs.xiong799dab02022-03-14 09:12:12 -0400126 FILE *fp;
qs.xiong99b48d62022-04-07 05:41:29 -0400127 CHECK_NULL_RETURN_VALUE(mode,"mode is null",-1);
128 if ((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
129 return -1;
qs.xiong799dab02022-03-14 09:12:12 -0400130 }
131
132 while(1){
133 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
134 if((strncmp(lynq_cmd_ret,strcn,5))==0)
135 {
qs.xiongd189c542022-03-31 00:58:23 -0400136 sscanf(lynq_cmd_ret,"%*[^=]=%s",lynq_mode);
137 if(strcmp(lynq_mode,sta)==0){
138 *mode=LYNQ_WIFI_WORK_MODE_STA;
139 }else if((strcmp(lynq_mode,ap))==0){
140 *mode=LYNQ_WIFI_WORK_MODE_AP;
141 }
qs.xiong799dab02022-03-14 09:12:12 -0400142 }
143 }
144 if(feof(fp)){
145 break;
146 }
147 }
148
qs.xiong99b48d62022-04-07 05:41:29 -0400149 if((pclose(fp))==-1){
150 perror("close file faild");
151 return -1;
152 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500153
qs.xiong99b48d62022-04-07 05:41:29 -0400154 return 0;
qs.xiong8d42bb92022-03-02 09:43:11 -0500155}
156
qs.xiongd189c542022-03-31 00:58:23 -0400157int lynq_wifi_ap_ssid_set(lynq_wifi_index_e idx,char *ap_ssid)
qs.xiong8d42bb92022-03-02 09:43:11 -0500158{
159 FILE *fp;
qs.xiongd189c542022-03-31 00:58:23 -0400160 char lynq_wifi_ssid_cmd[80]={0};
qs.xiong8d42bb92022-03-02 09:43:11 -0500161 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong8d42bb92022-03-02 09:43:11 -0500162 char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
qs.xiong99b48d62022-04-07 05:41:29 -0400163 if(idx<0||idx>9){
164 return -1;
165 }
qs.xiongd2689cd2022-04-13 20:46:56 -0400166 CHECK_NULL_RETURN_VALUE(ap_ssid,"ap_ssid is null",-1);
167 if(((strlen(ap_ssid))>32)){
qs.xiong99b48d62022-04-07 05:41:29 -0400168 PRINT_AND_RETURN_VALUE("ssid is illgal",-1);
169 }
qs.xiongd2689cd2022-04-13 20:46:56 -0400170
qs.xiongd189c542022-03-31 00:58:23 -0400171 sprintf(lynq_tmp_cmd,"%s%d%s","IFNAME=wlan0 set_network ",idx," ssid ");
172 sprintf(lynq_wifi_ssid_cmd,"%s%s%s%s%s",lynq_tmp_cmd,"\"",ap_ssid,"\"","\n");
qs.xiong8d42bb92022-03-02 09:43:11 -0500173
174 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
175 perror("popen error!");
176 return -1;
177 }
qs.xiong799dab02022-03-14 09:12:12 -0400178
qs.xiongd189c542022-03-31 00:58:23 -0400179 fwrite(lynq_wifi_ssid_cmd,sizeof(lynq_wifi_ssid_cmd),1,fp);
qs.xiong799dab02022-03-14 09:12:12 -0400180 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
181
qs.xiong8d42bb92022-03-02 09:43:11 -0500182 int ret=pclose(fp);
183 if(ret==-1){
184 perror("close file faild");
185 return -1;
186 }
qs.xiong99b48d62022-04-07 05:41:29 -0400187
qs.xiong8d42bb92022-03-02 09:43:11 -0500188 return 0;
qs.xiong8d42bb92022-03-02 09:43:11 -0500189}
190
qs.xiongd189c542022-03-31 00:58:23 -0400191int lynq_wifi_ap_ssid_get(lynq_wifi_index_e idx,char* ap_ssid)
qs.xiong8d42bb92022-03-02 09:43:11 -0500192{
qs.xiong99b48d62022-04-07 05:41:29 -0400193 CHECK_NULL_RETURN_VALUE(ap_ssid,"ap_ssid is null",-1);
qs.xiong799dab02022-03-14 09:12:12 -0400194 FILE *fp;
195 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong8d42bb92022-03-02 09:43:11 -0500196 char lynq_cmd_ret[MAX_RET]={0};
197 char *strcn="ssid=";
qs.xiongd189c542022-03-31 00:58:23 -0400198 if(idx>10||idx<0){
199 return -1;
200 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500201 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
202 perror("popen error!");
203 return -1;
204 }
205 while(1){
qs.xiong799dab02022-03-14 09:12:12 -0400206 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
207 if((strncmp(lynq_cmd_ret,strcn,5))==0)
208 {
qs.xiongd189c542022-03-31 00:58:23 -0400209 sscanf(lynq_cmd_ret,"%*[^=]=%s",ap_ssid);
qs.xiong799dab02022-03-14 09:12:12 -0400210 }
211 }
212 if(feof(fp)){
213 break;
214 }
215 }
qs.xiongd189c542022-03-31 00:58:23 -0400216
qs.xiong799dab02022-03-14 09:12:12 -0400217 if((pclose(fp))==-1){
218 perror("close file faild");
219 return -1;
220 }
qs.xiong799dab02022-03-14 09:12:12 -0400221 return 0;
qs.xiong8d42bb92022-03-02 09:43:11 -0500222}
223
qs.xiongd189c542022-03-31 00:58:23 -0400224int lynq_wifi_ap_frequency_set(lynq_wifi_index_e idx,int lynq_wifi_frequency)
qs.xiong8d42bb92022-03-02 09:43:11 -0500225{
226 FILE *fp;
qs.xiong99b48d62022-04-07 05:41:29 -0400227 char lynq_wifi_frequency_cmd[MAX_CMD]={0};
228 char lynq_cmd_mode[MAX_CMD]={0};
229 char lynq_cmd_slect[MAX_CMD]={0};
230 char lynq_cmd_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
231 if(idx<0||idx>9){
232 return -1;
233 }
qs.xiongfc383ec2022-04-10 22:02:24 -0400234 if((lynq_wifi_frequency != 2437) && (lynq_wifi_frequency != 5180)){
qs.xiong99b48d62022-04-07 05:41:29 -0400235 PRINT_AND_RETURN_VALUE("set frequency not in range",-1);
236 }
qs.xiongd2689cd2022-04-13 20:46:56 -0400237
qs.xiongd189c542022-03-31 00:58:23 -0400238 sprintf(lynq_wifi_frequency_cmd,"IFNAME=wlan0 set_net %d frequency %d\n", idx, lynq_wifi_frequency);
239 sprintf(lynq_cmd_mode, "IFNAME=wlan0 set_net %d mode 2\n", idx);
240 sprintf(lynq_cmd_slect, "IFNAME=wlan0 select_net %d\n", idx);
qs.xiong8d42bb92022-03-02 09:43:11 -0500241
242 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
243 perror("popen error!");
244 return -1;
245 }
qs.xiong99b48d62022-04-07 05:41:29 -0400246
qs.xiongd189c542022-03-31 00:58:23 -0400247 fwrite(lynq_wifi_frequency_cmd,sizeof(lynq_wifi_frequency_cmd),1,fp);
qs.xiong799dab02022-03-14 09:12:12 -0400248 fwrite(lynq_cmd_mode,sizeof(lynq_cmd_mode),1,fp);
249 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
250 fwrite(lynq_cmd_slect,sizeof(lynq_cmd_slect),1,fp);
251
qs.xiong8d42bb92022-03-02 09:43:11 -0500252 int ret=pclose(fp);
253 if(ret==-1){
254 perror("close file faild");
255 return -1;
256 }
257
qs.xiong799dab02022-03-14 09:12:12 -0400258 return 0;
qs.xiong8d42bb92022-03-02 09:43:11 -0500259}
260
qs.xiongd189c542022-03-31 00:58:23 -0400261int lynq_wifi_ap_frequency_get(lynq_wifi_index_e idx,int *lynq_wifi_frequency)
qs.xiong8d42bb92022-03-02 09:43:11 -0500262{
qs.xiong99b48d62022-04-07 05:41:29 -0400263 CHECK_NULL_RETURN_VALUE(lynq_wifi_frequency,"frequency is null",-1);
264
qs.xiong799dab02022-03-14 09:12:12 -0400265 FILE *fp;
qs.xiong99b48d62022-04-07 05:41:29 -0400266 char lynq_wifi_ssid_cmd[MAX_CMD]="wpa_cli -iwlan0 -p/var/run/wpa_supplicant status";
267 char lynq_cmd_ret[MAX_RET]={0};
qs.xiongd189c542022-03-31 00:58:23 -0400268 char *strcn="freq=";
qs.xiong99b48d62022-04-07 05:41:29 -0400269 char freq[MAX_CMD]={0};
270 if(idx<0||idx>9){
271 return -1;
272 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500273
qs.xiong99b48d62022-04-07 05:41:29 -0400274 if((fp=popen(lynq_wifi_ssid_cmd,"r"))==NULL){
275 perror("popen error!");
276 return -1;
277 }
278 while(1){
279 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiongd189c542022-03-31 00:58:23 -0400280 if((strncmp(lynq_cmd_ret,strcn,5))==0)
qs.xiong99b48d62022-04-07 05:41:29 -0400281 {
qs.xiongd189c542022-03-31 00:58:23 -0400282 sscanf(lynq_cmd_ret,"%*[^=]=%s",freq);
283 *lynq_wifi_frequency=atoi(freq);
284 }
285 }
286 if(feof(fp)){
287 break;
288 }
289 }
290
291 if((pclose(fp))==-1){
292 perror("close file faild");
293 return -1;
294 }
295
296 return 0;
297}
298
299/*
300int lynq_wifi_ap_bandwidth_set(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m bandwidth)
301{
302
303
304
305 return 0;
306}
307*/
308int lynq_wifi_ap_bandwidth_get(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m* bandwidth)
309{
qs.xiong99b48d62022-04-07 05:41:29 -0400310 if(bandwidth==NULL){
311 PRINT_AND_RETURN_VALUE("call falure",-1);
312 }
qs.xiongd189c542022-03-31 00:58:23 -0400313 FILE *fp;
314 char aim[MAX_CMD]={0};
315 char number[10]="80";
qs.xiong99b48d62022-04-07 05:41:29 -0400316 char lynq_wifi_bandwidth_cmd[MAX_CMD]="/data/wl chanspec\n";
qs.xiongd189c542022-03-31 00:58:23 -0400317 char lynq_cmd_ret[MAX_CMD]={0};
qs.xiong99b48d62022-04-07 05:41:29 -0400318 if(idx<0||idx>9){
319 return -1;
320 }
qs.xiongd189c542022-03-31 00:58:23 -0400321
qs.xiong99b48d62022-04-07 05:41:29 -0400322 if((fp=popen(lynq_wifi_bandwidth_cmd,"r"))==NULL){
qs.xiongd189c542022-03-31 00:58:23 -0400323 perror("popen error!");
324 return -1;
qs.xiong99b48d62022-04-07 05:41:29 -0400325 }
qs.xiongd189c542022-03-31 00:58:23 -0400326
327 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
328 strncpy(aim,lynq_cmd_ret+3,2);
qs.xiongd189c542022-03-31 00:58:23 -0400329 if((strncmp(aim,number,2))==0){
330 *bandwidth=1;
331 }else{
332 *bandwidth=0;
333 }
334 }
qs.xiong99b48d62022-04-07 05:41:29 -0400335 if((pclose(fp))==-1){
336 perror("close file faild");
337 return -1;
qs.xiongd189c542022-03-31 00:58:23 -0400338 }
339
qs.xiong8d42bb92022-03-02 09:43:11 -0500340 return 0;
341
342}
qs.xiongd2689cd2022-04-13 20:46:56 -0400343
qs.xiongd189c542022-03-31 00:58:23 -0400344int lynq_wifi_ap_channel_set( lynq_wifi_index_e idx,int channel)
qs.xiong8d42bb92022-03-02 09:43:11 -0500345{
346 FILE *fp;
qs.xiongd2689cd2022-04-13 20:46:56 -0400347 int ret;
348 if(idx<0||idx>9){
qs.xiongd189c542022-03-31 00:58:23 -0400349 return -1;
350 }
qs.xiongd2689cd2022-04-13 20:46:56 -0400351 char lynq_cmd_ret[MAX_RET]="";
352 char lynq_cmd_channel[MAX_CMD]="";
353 sprintf(lynq_cmd_channel,"/data/wl chanspec %d\n",channel);
qs.xiong8b529cd2022-03-17 14:31:33 -0400354 system("/data/wl down");
qs.xiong799dab02022-03-14 09:12:12 -0400355
qs.xiongd2689cd2022-04-13 20:46:56 -0400356 fp=popen(lynq_cmd_channel,"r");
357 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
358 if(strncmp(lynq_cmd_ret,g_lynq_wifi_ok,2) != 0){
359 PRINT_AND_RETURN_VALUE("set channel error",-1);
360 }
361 system("/data/wl up");
362 }
363
qs.xiong8d42bb92022-03-02 09:43:11 -0500364 return 0;
365}
qs.xiongd2689cd2022-04-13 20:46:56 -0400366
qs.xiongd189c542022-03-31 00:58:23 -0400367int lynq_wifi_ap_channel_get( lynq_wifi_index_e idx,int* channel)
qs.xiong8d42bb92022-03-02 09:43:11 -0500368{
qs.xiong99b48d62022-04-07 05:41:29 -0400369 CHECK_NULL_RETURN_VALUE(channel,"channel is null",-1);
qs.xiongd189c542022-03-31 00:58:23 -0400370 FILE *fp;
371 char lynq_cmd_set[MAX_CMD]={0};
qs.xiong99b48d62022-04-07 05:41:29 -0400372 char channel_str[MAX_CMD]={0};
qs.xiongd189c542022-03-31 00:58:23 -0400373 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong99b48d62022-04-07 05:41:29 -0400374 if(idx<0||idx>9){
375 return -1;
376 }
qs.xiongd189c542022-03-31 00:58:23 -0400377
qs.xiong99b48d62022-04-07 05:41:29 -0400378 if((fp=popen("/data/wl chanspec","r"))==NULL){
379 perror("popen error!");
qs.xiong799dab02022-03-14 09:12:12 -0400380 return -1;
381 }
qs.xiongd189c542022-03-31 00:58:23 -0400382
383 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
384 strncpy(channel_str,lynq_cmd_ret,2);
385 *channel=atoi(channel_str);
qs.xiong799dab02022-03-14 09:12:12 -0400386 }
387 if((pclose(fp))==-1){
qs.xiong99b48d62022-04-07 05:41:29 -0400388 perror("close file faild");
qs.xiong799dab02022-03-14 09:12:12 -0400389 return -1;
390 }
391
qs.xiong8d42bb92022-03-02 09:43:11 -0500392 return 0;
393}
394
395
qs.xiong99b48d62022-04-07 05:41:29 -0400396int lynq_wifi_ap_auth_set(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s auth)
qs.xiong8d42bb92022-03-02 09:43:11 -0500397{
398 FILE *fp;
qs.xiong99b48d62022-04-07 05:41:29 -0400399 int ret;
400 if(idx<0||idx>9){
401 return -1;
402 }
qs.xiongd2689cd2022-04-13 20:46:56 -0400403 if((auth !=0) && (auth !=1)){
404 PRINT_AND_RETURN_VALUE("set auth is null",-1);
405 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500406 switch(auth){
qs.xiongd189c542022-03-31 00:58:23 -0400407 case LYNQ_WIFI_AUTH_OPEN:
qs.xiong8d42bb92022-03-02 09:43:11 -0500408 {
qs.xiong99b48d62022-04-07 05:41:29 -0400409 char lynq_auth_cmd[MAX_CMD]={0};
410 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongd189c542022-03-31 00:58:23 -0400411 char lynq_cmd_quit[12]="quit\n";
412 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d key_mgmt NONE\n",idx);
413
qs.xiong8d42bb92022-03-02 09:43:11 -0500414 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
415 perror("popen error!");
416 return -1;
417 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500418
419 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
420 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiongd189c542022-03-31 00:58:23 -0400421 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong8d42bb92022-03-02 09:43:11 -0500422
qs.xiong99b48d62022-04-07 05:41:29 -0400423 ret=pclose(fp);
qs.xiong8d42bb92022-03-02 09:43:11 -0500424 if(ret==-1){
425 perror("close file faild");
426 return -1;
427 }
428 break;
429 }
qs.xiongd189c542022-03-31 00:58:23 -0400430 case LYNQ_WIFI_AUTH_WPA_PSK:
qs.xiong8d42bb92022-03-02 09:43:11 -0500431 {
qs.xiongd189c542022-03-31 00:58:23 -0400432
qs.xiong99b48d62022-04-07 05:41:29 -0400433 char lynq_auth_cmd[MAX_CMD]={0};
434 char lynq_psk_cmd[MAX_CMD]={0};
435 char lynq_pairwise_cmd[MAX_CMD]={0};
436 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongd189c542022-03-31 00:58:23 -0400437 char lynq_cmd_quit[12]="quit\n";
438
439 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d proto WPA2\n",idx);
440 sprintf(lynq_psk_cmd,"IFNAME=wlan0 set_net %d key_mgmt WPA-PSK\n",idx);
441 sprintf(lynq_pairwise_cmd,"IFNAME=wlan0 set_net %d pairwise CCMP\n",idx);
qs.xiong8d42bb92022-03-02 09:43:11 -0500442
qs.xiong8d42bb92022-03-02 09:43:11 -0500443 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
444 perror("popen error!");
445 return -1;
446 }
447
qs.xiongd189c542022-03-31 00:58:23 -0400448 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
qs.xiong8d42bb92022-03-02 09:43:11 -0500449 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
450 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
451 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiongd189c542022-03-31 00:58:23 -0400452 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong8d42bb92022-03-02 09:43:11 -0500453
qs.xiong99b48d62022-04-07 05:41:29 -0400454 ret=pclose(fp);
qs.xiong8d42bb92022-03-02 09:43:11 -0500455 if(ret==-1){
456 perror("close file faild");
457 return -1;
458 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500459 break;
qs.xiong99b48d62022-04-07 05:41:29 -0400460 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500461 default:
462 return -1;
463 }
464
qs.xiong8d42bb92022-03-02 09:43:11 -0500465 return 0;
466}
467
qs.xiongd189c542022-03-31 00:58:23 -0400468int lynq_wifi_ap_auth_get(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s *auth)
qs.xiong8d42bb92022-03-02 09:43:11 -0500469{
qs.xiongd2689cd2022-04-13 20:46:56 -0400470 CHECK_NULL_RETURN_VALUE(auth,"the auth is null",-1);
qs.xiong799dab02022-03-14 09:12:12 -0400471 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiongd189c542022-03-31 00:58:23 -0400472 char lynq_cmd_ret[MAX_RET]={0};
473 char get_str_auth[20]={0};
474 char use_to_cmp[4]="WPA";
475 char strcn[20]="key_mgmt=";
qs.xiong99b48d62022-04-07 05:41:29 -0400476 if(idx<0||idx>9){
477 return -1;
478 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500479
qs.xiong799dab02022-03-14 09:12:12 -0400480 FILE *fp;
481 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
482 perror("popen error!");
qs.xiong99b48d62022-04-07 05:41:29 -0400483 return -1;
484 }
485 while(1){
qs.xiong799dab02022-03-14 09:12:12 -0400486 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiong799dab02022-03-14 09:12:12 -0400487 if((strncmp(lynq_cmd_ret,strcn,9))==0)
488 {
qs.xiongd189c542022-03-31 00:58:23 -0400489 sscanf(lynq_cmd_ret,"%*[^=]=%s",get_str_auth);
490 if((strncmp(get_str_auth,use_to_cmp,3))==0){
491 *auth=LYNQ_WIFI_AUTH_WPA_PSK;
492 break;
493 }
qs.xiong799dab02022-03-14 09:12:12 -0400494 }
495 }
496 if(feof(fp)){
497 break;
498 }
499 }
qs.xiongd189c542022-03-31 00:58:23 -0400500 if(*auth!=LYNQ_WIFI_AUTH_WPA_PSK){
501 *auth=LYNQ_WIFI_AUTH_OPEN;
502 }
qs.xiong799dab02022-03-14 09:12:12 -0400503 if((pclose(fp))==-1){
504 perror("close file faild");
505 return -1;
506 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500507
qs.xiong799dab02022-03-14 09:12:12 -0400508 return 0;
qs.xiong8d42bb92022-03-02 09:43:11 -0500509}
qs.xiong799dab02022-03-14 09:12:12 -0400510
qs.xiongd189c542022-03-31 00:58:23 -0400511int lynq_wifi_ap_max_sta_get(lynq_wifi_index_e idx,int* max_sta_num)
qs.xiong8d42bb92022-03-02 09:43:11 -0500512{
qs.xiong99b48d62022-04-07 05:41:29 -0400513 CHECK_NULL_RETURN_VALUE(max_sta_num,"max_sta_num is null",-1);
qs.xiong8d42bb92022-03-02 09:43:11 -0500514 FILE *fp;
qs.xiongd189c542022-03-31 00:58:23 -0400515 char get_str_num[5]={0};
qs.xiong8d42bb92022-03-02 09:43:11 -0500516 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong99b48d62022-04-07 05:41:29 -0400517 if(idx<0||idx>9){
qs.xiongd189c542022-03-31 00:58:23 -0400518 return -1;
519 }
qs.xiong8b529cd2022-03-17 14:31:33 -0400520 if((fp=popen("/data/wl maxassoc","r"))==NULL)
qs.xiong799dab02022-03-14 09:12:12 -0400521 {
qs.xiong8d42bb92022-03-02 09:43:11 -0500522 perror("popen error!");
523 return -1;
524 }
qs.xiong799dab02022-03-14 09:12:12 -0400525 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
526 {
qs.xiong8d42bb92022-03-02 09:43:11 -0500527 perror("fread fail!");
528 return -1;
529 }
qs.xiongd189c542022-03-31 00:58:23 -0400530 strcpy(get_str_num,lynq_cmd_ret);
531 *max_sta_num=atoi(get_str_num);
qs.xiong799dab02022-03-14 09:12:12 -0400532
qs.xiong8d42bb92022-03-02 09:43:11 -0500533 int ret=pclose(fp);
qs.xiong799dab02022-03-14 09:12:12 -0400534 if(ret==-1)
535 {
qs.xiong8d42bb92022-03-02 09:43:11 -0500536 perror("close file faild");
537 return -1;
qs.xiong799dab02022-03-14 09:12:12 -0400538 }
539
qs.xiong8d42bb92022-03-02 09:43:11 -0500540 return 0;
541}
542
qs.xiongd189c542022-03-31 00:58:23 -0400543int lynq_wifi_ap_start(lynq_wifi_index_e idx)
qs.xiong8d42bb92022-03-02 09:43:11 -0500544{
qs.xiongd189c542022-03-31 00:58:23 -0400545 FILE *fp;
qs.xiong99b48d62022-04-07 05:41:29 -0400546 char lynq_wifi_cmd[MAX_CMD]={0};
547 char lynq_cmd_quit[MAX_CMD]="quit";
548 if(idx<0||idx>9){
549 return -1;
550 }
551 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiongd189c542022-03-31 00:58:23 -0400552
qs.xiong99b48d62022-04-07 05:41:29 -0400553 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==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.xiong99b48d62022-04-07 05:41:29 -0400559 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
560 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong799dab02022-03-14 09:12:12 -0400561
qs.xiong8d42bb92022-03-02 09:43:11 -0500562 int ret=pclose(fp);
qs.xiong799dab02022-03-14 09:12:12 -0400563 if(ret==-1)
564 {
565 perror("close file faild");
566 return -1;
qs.xiong8d42bb92022-03-02 09:43:11 -0500567 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500568 return 0;
569}
570
qs.xiongd189c542022-03-31 00:58:23 -0400571int lynq_wifi_ap_restart(lynq_wifi_index_e idx)
qs.xiong8d42bb92022-03-02 09:43:11 -0500572{
qs.xiong799dab02022-03-14 09:12:12 -0400573 int lynq_stop;
574 int lynq_start;
qs.xiong99b48d62022-04-07 05:41:29 -0400575 if(idx<0||idx>9){
576 return -1;
577 }
qs.xiongd189c542022-03-31 00:58:23 -0400578 lynq_stop = lynq_wifi_ap_stop(idx);
qs.xiong799dab02022-03-14 09:12:12 -0400579 if ( lynq_stop != 0 )
580 {
581 return -1;
582 }
qs.xiong99b48d62022-04-07 05:41:29 -0400583
qs.xiongd189c542022-03-31 00:58:23 -0400584 lynq_start = lynq_wifi_ap_start(idx);
qs.xiong799dab02022-03-14 09:12:12 -0400585 if ( lynq_start != 0 )
586 {
587 return -1;
588 }
qs.xiong99b48d62022-04-07 05:41:29 -0400589
qs.xiong8d42bb92022-03-02 09:43:11 -0500590 return 0;
591
592}
593
qs.xiongd189c542022-03-31 00:58:23 -0400594int lynq_wifi_ap_stop(lynq_wifi_index_e idx)
qs.xiong8d42bb92022-03-02 09:43:11 -0500595{
596 FILE *fp;
qs.xiong99b48d62022-04-07 05:41:29 -0400597 char lynq_wifi_cmd[MAX_CMD]={0};
598 char lynq_cmd_quit[MAX_CMD]="quit";
599 if(idx<0||idx>9){
600 return -1;
601 }
602 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
qs.xiong799dab02022-03-14 09:12:12 -0400603
qs.xiong99b48d62022-04-07 05:41:29 -0400604 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
605 {
qs.xiong8d42bb92022-03-02 09:43:11 -0500606 perror("popen error!");
607 return -1;
608 }
qs.xiong99b48d62022-04-07 05:41:29 -0400609
610 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
611 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
612
qs.xiong8d42bb92022-03-02 09:43:11 -0500613 int ret=pclose(fp);
qs.xiong99b48d62022-04-07 05:41:29 -0400614 if(ret==-1)
615 {
616 perror("close file faild");
617 return -1;
qs.xiong8d42bb92022-03-02 09:43:11 -0500618 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500619 return 0;
620}
qs.xiong799dab02022-03-14 09:12:12 -0400621
qs.xiongd189c542022-03-31 00:58:23 -0400622int lynq_wifi_ap_hide_ssid(lynq_wifi_index_e idx)
qs.xiong8d42bb92022-03-02 09:43:11 -0500623{
624 FILE *fp;
qs.xiong99b48d62022-04-07 05:41:29 -0400625 char lynq_disable_cmd[MAX_CMD]={0};
626 char lynq_select_cmd[MAX_CMD]={0};
qs.xiong799dab02022-03-14 09:12:12 -0400627 char lynq_hide_cmd[]="IFNAME=wlan0 SET HIDE_SSID 1\n";
qs.xiong99b48d62022-04-07 05:41:29 -0400628 if(idx<0||idx>9){
629 return -1;
630 }
631
qs.xiongd189c542022-03-31 00:58:23 -0400632 sprintf(lynq_disable_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
633 sprintf(lynq_select_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiong8d42bb92022-03-02 09:43:11 -0500634 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
635 perror("popen error!");
636 return -1;
637 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500638
639 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
640 fwrite(lynq_hide_cmd,sizeof(lynq_hide_cmd),1,fp);
641 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
qs.xiong99b48d62022-04-07 05:41:29 -0400642
qs.xiong8d42bb92022-03-02 09:43:11 -0500643 int ret=pclose(fp);
644 if(ret==-1){
645 perror("close file faild");
646 return -1;
647 }
qs.xiong799dab02022-03-14 09:12:12 -0400648
649 return 0;
qs.xiong8d42bb92022-03-02 09:43:11 -0500650}
651
qs.xiongd189c542022-03-31 00:58:23 -0400652int lynq_wifi_ap_unhide_ssid(lynq_wifi_index_e idx)
qs.xiong8d42bb92022-03-02 09:43:11 -0500653{
654 FILE *fp;
655 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
656 perror("popen error!");
657 return -1;
658 }
qs.xiong99b48d62022-04-07 05:41:29 -0400659 char lynq_disable_cmd[MAX_CMD]={0};
660 char lynq_select_cmd[MAX_CMD]={0};
661 char lynq_unhide_cmd[MAX_CMD]="IFNAME=wlan0 SET HIDE_SSID 0\n";
662 if(idx<0||idx>9){
663 return -1;
664 }
qs.xiongd189c542022-03-31 00:58:23 -0400665
666 sprintf(lynq_disable_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
667 sprintf(lynq_select_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiong8d42bb92022-03-02 09:43:11 -0500668
669 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
670 fwrite(lynq_unhide_cmd,sizeof(lynq_unhide_cmd),1,fp);
671 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
qs.xiong99b48d62022-04-07 05:41:29 -0400672
qs.xiong8d42bb92022-03-02 09:43:11 -0500673 int ret=pclose(fp);
674 if(ret==-1){
675 perror("close file faild");
676 return -1;
677 }
678
679 return 0;
680}
qs.xiongd189c542022-03-31 00:58:23 -0400681
682int lynq_ap_ssid_pass_set(lynq_wifi_index_e idx,char *password)
qs.xiong8d42bb92022-03-02 09:43:11 -0500683{
684 FILE *fp;
qs.xiongd189c542022-03-31 00:58:23 -0400685 int ret;
686 int pass_len;
qs.xiongd2689cd2022-04-13 20:46:56 -0400687 CHECK_NULL_RETURN_VALUE(password,"password is null",-1);
qs.xiongd189c542022-03-31 00:58:23 -0400688 pass_len=strlen(password);
qs.xiongd2689cd2022-04-13 20:46:56 -0400689 if(((pass_len+1) > MAX_CMD) || (pass_len<8)){
qs.xiong99b48d62022-04-07 05:41:29 -0400690 PRINT_AND_RETURN_VALUE("password is illgal",-1);
691 }else if((lynq_get_wifi_space(password))== 1){
692 PRINT_AND_RETURN_VALUE("password is illgal",-1);
693 }
694 if(idx<0||idx>9){
qs.xiongd189c542022-03-31 00:58:23 -0400695 return -1;
696 }
qs.xiongd189c542022-03-31 00:58:23 -0400697 char lynq_tmp_cmd[300]={0};
qs.xiong99b48d62022-04-07 05:41:29 -0400698 char lynq_pass_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongd189c542022-03-31 00:58:23 -0400699 char lynq_cmd_quit[12]="quit\n";
700 sprintf(lynq_tmp_cmd,"%s%d%s%s%s%s%s","IFNAME=wlan0 set_net ",idx," psk ","\"",password,"\"","\n");
701
702 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
703 perror("popen error!");
704 return -1;
705 }
706
707 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
708 fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
709 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong99b48d62022-04-07 05:41:29 -0400710
qs.xiongd189c542022-03-31 00:58:23 -0400711 ret=pclose(fp);
712 if(ret==-1){
713 perror("close file faild");
714 return -1;
715 }
qs.xiong99b48d62022-04-07 05:41:29 -0400716
qs.xiongd189c542022-03-31 00:58:23 -0400717 return 0;
718}
719
720int lynq_sta_ssid_pass_set(lynq_wifi_index_e idx,char *password)
721{
722 FILE *fp;
723 int pass_len;
qs.xiongd2689cd2022-04-13 20:46:56 -0400724 CHECK_NULL_RETURN_VALUE(password,"password is null",-1);
qs.xiongd189c542022-03-31 00:58:23 -0400725 pass_len=strlen(password);
qs.xiongd2689cd2022-04-13 20:46:56 -0400726 if(((pass_len+1) > MAX_CMD) && (pass_len<8)){
qs.xiong99b48d62022-04-07 05:41:29 -0400727 PRINT_AND_RETURN_VALUE("password is illgal",-1);
728 }else if((lynq_get_wifi_space(password))== 1){
729 PRINT_AND_RETURN_VALUE("password is illgal",-1);
730 }
731 if(idx<0||idx>9){
qs.xiongd189c542022-03-31 00:58:23 -0400732 return -1;
733 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500734 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong99b48d62022-04-07 05:41:29 -0400735 char lynq_pass_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongd189c542022-03-31 00:58:23 -0400736 char lynq_cmd_quit[12]="quit\n";
737 sprintf(lynq_tmp_cmd,"%s%d%s%s%s%s%s","IFNAME=wlan0 set_net ",idx," psk ","\"",password,"\"","\n");
qs.xiong99b48d62022-04-07 05:41:29 -0400738
qs.xiong8d42bb92022-03-02 09:43:11 -0500739 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
740 perror("popen error!");
741 return -1;
742 }
qs.xiong99b48d62022-04-07 05:41:29 -0400743
qs.xiong8d42bb92022-03-02 09:43:11 -0500744 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
745 fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
qs.xiongd189c542022-03-31 00:58:23 -0400746 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong99b48d62022-04-07 05:41:29 -0400747
qs.xiong8d42bb92022-03-02 09:43:11 -0500748 int ret=pclose(fp);
749 if(ret==-1){
750 perror("close file faild");
751 return -1;
752 }
qs.xiong99b48d62022-04-07 05:41:29 -0400753
qs.xiong8d42bb92022-03-02 09:43:11 -0500754 return 0;
755}
756
qs.xiong99b48d62022-04-07 05:41:29 -0400757
qs.xiongd189c542022-03-31 00:58:23 -0400758int lynq_wifi_sta_ssid_set(lynq_wifi_index_e idx,char *sta_ssid)
qs.xiong8d42bb92022-03-02 09:43:11 -0500759{
qs.xiongd189c542022-03-31 00:58:23 -0400760 FILE *fp;
qs.xiong99b48d62022-04-07 05:41:29 -0400761 char lynq_wifi_ssid_cmd[80]={0};
qs.xiong8d42bb92022-03-02 09:43:11 -0500762 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong99b48d62022-04-07 05:41:29 -0400763 char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
764 sprintf(lynq_tmp_cmd,"%s%d%s","IFNAME=wlan0 set_network ",idx," ssid ");
qs.xiongd189c542022-03-31 00:58:23 -0400765 sprintf(lynq_wifi_ssid_cmd,"%s%s%s%s%s",lynq_tmp_cmd,"\"",sta_ssid,"\"","\n");
qs.xiong99b48d62022-04-07 05:41:29 -0400766 if(idx<0||idx>9){
767 return -1;
768 }
qs.xiongd2689cd2022-04-13 20:46:56 -0400769 CHECK_NULL_RETURN_VALUE(sta_ssid,"sta_ssid is null",-1);
qs.xiong99b48d62022-04-07 05:41:29 -0400770 if(((strlen(sta_ssid))>32)){
771 PRINT_AND_RETURN_VALUE("ssid is illgal",-1);
772 }
qs.xiongd2689cd2022-04-13 20:46:56 -0400773
qs.xiongd189c542022-03-31 00:58:23 -0400774 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
775 perror("popen error!");
776 return -1;
777 }
778
779 fwrite(lynq_wifi_ssid_cmd,sizeof(lynq_wifi_ssid_cmd),1,fp);
780 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
qs.xiong99b48d62022-04-07 05:41:29 -0400781
782 int ret=pclose(fp);
qs.xiong8d42bb92022-03-02 09:43:11 -0500783 if(ret==-1){
784 perror("close file faild");
785 return -1;
786 }
qs.xiongd189c542022-03-31 00:58:23 -0400787
qs.xiong99b48d62022-04-07 05:41:29 -0400788 return 0;
qs.xiong8d42bb92022-03-02 09:43:11 -0500789}
790
qs.xiongd189c542022-03-31 00:58:23 -0400791int lynq_wifi_sta_ssid_get(lynq_wifi_index_e idx,char* sta_ssid)
qs.xiong8d42bb92022-03-02 09:43:11 -0500792{
qs.xiong99b48d62022-04-07 05:41:29 -0400793 CHECK_NULL_RETURN_VALUE(sta_ssid,"ap_ssid is null",-1);
794 FILE *fp;
qs.xiong799dab02022-03-14 09:12:12 -0400795 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong8d42bb92022-03-02 09:43:11 -0500796 char lynq_cmd_ret[MAX_RET]={0};
797 char *strcn="ssid=";
qs.xiongd189c542022-03-31 00:58:23 -0400798 if(idx>10||idx<0){
799 return -1;
qs.xiong99b48d62022-04-07 05:41:29 -0400800 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500801 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
802 perror("popen error!");
qs.xiong99b48d62022-04-07 05:41:29 -0400803 return -1;
804 }
805 while(1){
806 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
807 if((strncmp(lynq_cmd_ret,strcn,5))==0)
qs.xiong799dab02022-03-14 09:12:12 -0400808 {
qs.xiong99b48d62022-04-07 05:41:29 -0400809 sscanf(lynq_cmd_ret,"%*[^=]=%s",sta_ssid);
810 }
811 }
812 if(feof(fp)){
813 break;
814 }
815 }
816
817 if((pclose(fp))==-1){
818 perror("close file faild");
819 return -1;
820 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500821 return 0;
822
823}
824
qs.xiongd189c542022-03-31 00:58:23 -0400825int lynq_wifi_sta_auth_set(lynq_wifi_index_e idx, lynq_wifi_sta_auth_s auth)
qs.xiong8d42bb92022-03-02 09:43:11 -0500826{
qs.xiong799dab02022-03-14 09:12:12 -0400827 FILE *fp;
qs.xiong99b48d62022-04-07 05:41:29 -0400828 int ret;
829 if(idx<0||idx>9){
830 return -1;
831 }
qs.xiongd2689cd2022-04-13 20:46:56 -0400832 PRINT_AND_RETURN_VALUE("set auth is error",auth);
833 if((auth !=0) && (auth !=1)){
834 PRINT_AND_RETURN_VALUE("set auth is error",-1);
835 }
qs.xiong799dab02022-03-14 09:12:12 -0400836 switch(auth){
837 case LYNQ_WIFI_STA_AUTH_OPEN:
838 {
qs.xiong99b48d62022-04-07 05:41:29 -0400839 char lynq_auth_cmd[MAX_CMD]={0};
840 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
841 char lynq_cmd_quit[12]="quit\n";
842 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d key_mgmt NONE\n",idx);
843
qs.xiongd189c542022-03-31 00:58:23 -0400844 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
qs.xiong799dab02022-03-14 09:12:12 -0400845 perror("popen error!");
846 return -1;
847 }
qs.xiong99b48d62022-04-07 05:41:29 -0400848
qs.xiong799dab02022-03-14 09:12:12 -0400849 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
850 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiong99b48d62022-04-07 05:41:29 -0400851 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
852
853 ret=pclose(fp);
qs.xiongd189c542022-03-31 00:58:23 -0400854 if(ret==-1){
855 perror("close file faild");
856 return -1;
qs.xiong99b48d62022-04-07 05:41:29 -0400857 }
858 break;
859 }
qs.xiongd189c542022-03-31 00:58:23 -0400860 case LYNQ_WIFI_STA_AUTH_WPA_PSK:
861 {
qs.xiong99b48d62022-04-07 05:41:29 -0400862 char lynq_auth_cmd[MAX_CMD]={0};
863 char lynq_psk_cmd[MAX_CMD]={0};
864 char lynq_pairwise_cmd[MAX_CMD]={0};
865 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
866 char lynq_cmd_quit[12]="quit\n";
867
868 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d proto WPA2\n",idx);
869 sprintf(lynq_psk_cmd,"IFNAME=wlan0 set_net %d key_mgmt WPA-PSK\n",idx);
870 sprintf(lynq_pairwise_cmd,"IFNAME=wlan0 set_net %d pairwise CCMP\n",idx);
871
qs.xiongd189c542022-03-31 00:58:23 -0400872 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
873 perror("popen error!");
874 return -1;
875 }
qs.xiong99b48d62022-04-07 05:41:29 -0400876
qs.xiongd189c542022-03-31 00:58:23 -0400877 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
878 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
879 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
880 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiong99b48d62022-04-07 05:41:29 -0400881 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
882
883 ret=pclose(fp);
884 if(ret==-1){
qs.xiong799dab02022-03-14 09:12:12 -0400885 perror("close file faild");
886 return -1;
887 }
qs.xiongd189c542022-03-31 00:58:23 -0400888 break;
qs.xiong99b48d62022-04-07 05:41:29 -0400889 }
qs.xiongd189c542022-03-31 00:58:23 -0400890 default:
891 return -1;
qs.xiong99b48d62022-04-07 05:41:29 -0400892 }
893
qs.xiongd189c542022-03-31 00:58:23 -0400894 return 0;
qs.xiong799dab02022-03-14 09:12:12 -0400895}
qs.xiong8d42bb92022-03-02 09:43:11 -0500896
qs.xiongd189c542022-03-31 00:58:23 -0400897int lynq_wifi_sta_auth_get(lynq_wifi_index_e idx, lynq_wifi_sta_auth_s* auth)
qs.xiong8d42bb92022-03-02 09:43:11 -0500898{
qs.xiongd2689cd2022-04-13 20:46:56 -0400899 CHECK_NULL_RETURN_VALUE(auth,"the auth is null",-1);
qs.xiong99b48d62022-04-07 05:41:29 -0400900 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong799dab02022-03-14 09:12:12 -0400901 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong99b48d62022-04-07 05:41:29 -0400902 char get_str_auth[20]={0};
903 char use_to_cmp[4]="WPA";
904 char strcn[20]="key_mgmt=";
qs.xiongd189c542022-03-31 00:58:23 -0400905
qs.xiong99b48d62022-04-07 05:41:29 -0400906 FILE *fp;
907 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
qs.xiong799dab02022-03-14 09:12:12 -0400908 perror("popen error!");
qs.xiong99b48d62022-04-07 05:41:29 -0400909 return -1;
qs.xiong799dab02022-03-14 09:12:12 -0400910 }
911 while(1){
qs.xiong99b48d62022-04-07 05:41:29 -0400912 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiong799dab02022-03-14 09:12:12 -0400913 if((strncmp(lynq_cmd_ret,strcn,9))==0)
914 {
qs.xiong99b48d62022-04-07 05:41:29 -0400915 sscanf(lynq_cmd_ret,"%*[^=]=%s",get_str_auth);
916 if((strncmp(get_str_auth,use_to_cmp,3))==0){
917 *auth=LYNQ_WIFI_AUTH_WPA_PSK;
918 break;
qs.xiongd189c542022-03-31 00:58:23 -0400919 }
qs.xiong799dab02022-03-14 09:12:12 -0400920 }
921 }
922 if(feof(fp)){
923 break;
924 }
925 }
qs.xiong99b48d62022-04-07 05:41:29 -0400926 if(*auth!=LYNQ_WIFI_AUTH_WPA_PSK){
927 *auth=LYNQ_WIFI_AUTH_OPEN;
928 }
929 if((pclose(fp))==-1){
qs.xiong799dab02022-03-14 09:12:12 -0400930 perror("close file faild");
931 return -1;
qs.xiong99b48d62022-04-07 05:41:29 -0400932 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500933
934}
935
qs.xiong99b48d62022-04-07 05:41:29 -0400936int lynq_wifi_sta_connect(lynq_wifi_index_e idx)
qs.xiong8d42bb92022-03-02 09:43:11 -0500937{
938 FILE *fp;
qs.xiong99b48d62022-04-07 05:41:29 -0400939 char lynq_wifi_cmd[MAX_CMD]={0};
940 char lynq_cmd_quit[MAX_CMD]="quit\n";
941 if(idx<0||idx>9){
942 return -1;
943 }
944 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiongd189c542022-03-31 00:58:23 -0400945
qs.xiong99b48d62022-04-07 05:41:29 -0400946 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
947 {
qs.xiong8d42bb92022-03-02 09:43:11 -0500948 perror("popen error!");
949 return -1;
950 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500951
qs.xiong99b48d62022-04-07 05:41:29 -0400952 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
953 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong8d42bb92022-03-02 09:43:11 -0500954
955 int ret=pclose(fp);
qs.xiong99b48d62022-04-07 05:41:29 -0400956 if(ret==-1)
957 {
958 perror("close file faild");
959 return -1;
qs.xiong8d42bb92022-03-02 09:43:11 -0500960 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500961 return 0;
962}
963
qs.xiongd189c542022-03-31 00:58:23 -0400964int lynq_wifi_sta_disconnect(lynq_wifi_index_e idx)
qs.xiong8d42bb92022-03-02 09:43:11 -0500965{
966 FILE *fp;
qs.xiong99b48d62022-04-07 05:41:29 -0400967 char lynq_wifi_cmd[MAX_CMD]={0};
968 char lynq_cmd_quit[MAX_CMD]="quit\n";
969 if(idx<0||idx>9){
970 return -1;
971 }
972 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
973
974 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
975 {
qs.xiong8d42bb92022-03-02 09:43:11 -0500976 perror("popen error!");
977 return -1;
978 }
qs.xiong8d42bb92022-03-02 09:43:11 -0500979
qs.xiong99b48d62022-04-07 05:41:29 -0400980 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
981 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
982
qs.xiong8d42bb92022-03-02 09:43:11 -0500983 int ret=pclose(fp);
qs.xiong99b48d62022-04-07 05:41:29 -0400984 if(ret==-1)
985 {
986 perror("close file faild");
987 return -1;
qs.xiong8d42bb92022-03-02 09:43:11 -0500988 }
qs.xiong799dab02022-03-14 09:12:12 -0400989
qs.xiong8d42bb92022-03-02 09:43:11 -0500990 return 0;
991}
qs.xiong99b48d62022-04-07 05:41:29 -0400992
qs.xiong8d42bb92022-03-02 09:43:11 -0500993int lynq_wifi_wpa_start(void){
qs.xionge5164a82022-03-15 08:03:26 -0400994 int ret;
qs.xiongd189c542022-03-31 00:58:23 -0400995 pthread_t pth;
qs.xiong8d42bb92022-03-02 09:43:11 -0500996
qs.xiongd189c542022-03-31 00:58:23 -0400997 ret=pthread_create(&pth,NULL,StartThread,NULL);
998 if(ret<0){
999 return -1;
1000 }
1001 pthread_join(pth,NULL);
qs.xionge5164a82022-03-15 08:03:26 -04001002
qs.xiong8d42bb92022-03-02 09:43:11 -05001003 return 0;
1004}
1005
1006int lynq_wifi_wpacli_start(void){
qs.xiong8d42bb92022-03-02 09:43:11 -05001007 FILE *fp;
qs.xiongd189c542022-03-31 00:58:23 -04001008 int i=0;
qs.xiong8d42bb92022-03-02 09:43:11 -05001009 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong99b48d62022-04-07 05:41:29 -04001010 char add_cmd[MAX_CMD]="IFNAME=wlan0 add_net\n";
1011 char save_cmd[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongd189c542022-03-31 00:58:23 -04001012 char exit_cmd[20]="quit\n";
qs.xiong8d42bb92022-03-02 09:43:11 -05001013
qs.xiong99b48d62022-04-07 05:41:29 -04001014 if(lynq_get_idx_number() == 1){
1015 PRINT_AND_RETURN_VALUE("don't need add idx agin\n",0);
1016 }
qs.xiong8d42bb92022-03-02 09:43:11 -05001017 fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w");
1018 if(fp==NULL){
1019 perror("start wpa_supplicant faild!");
1020 return -1;
1021 }
qs.xiong799dab02022-03-14 09:12:12 -04001022
qs.xiong99b48d62022-04-07 05:41:29 -04001023 for(i=0;i<10;i++){
qs.xiongd189c542022-03-31 00:58:23 -04001024 fwrite(add_cmd,sizeof(add_cmd),1,fp);
1025 }
qs.xiong799dab02022-03-14 09:12:12 -04001026 fwrite(save_cmd,sizeof(save_cmd),1,fp);
qs.xiongd189c542022-03-31 00:58:23 -04001027 fwrite(exit_cmd,sizeof(exit_cmd),1,fp);
qs.xiong99b48d62022-04-07 05:41:29 -04001028
qs.xiong8d42bb92022-03-02 09:43:11 -05001029 int ret=pclose(fp);
qs.xiong799dab02022-03-14 09:12:12 -04001030 if(ret==-1)
1031 {
1032 perror("close file faild");
1033 return -1;
1034 }
qs.xiong99b48d62022-04-07 05:41:29 -04001035
qs.xiong799dab02022-03-14 09:12:12 -04001036 return 0;
qs.xiong8d42bb92022-03-02 09:43:11 -05001037}
1038
qs.xiongd189c542022-03-31 00:58:23 -04001039pid_t GetPIDbyName(char* ps_name)
qs.xiong99b48d62022-04-07 05:41:29 -04001040{
qs.xiongd189c542022-03-31 00:58:23 -04001041 FILE *fp;
1042 char *cmd=(char*)calloc(1,200);
1043 sprintf(cmd,"pidof %s",ps_name);
1044 fp=popen(cmd,"r");
1045 fread(cmd,1,200,fp);
1046 fclose(fp);
1047 return atoi(cmd);
1048}
qs.xiong8d42bb92022-03-02 09:43:11 -05001049
qs.xiong99b48d62022-04-07 05:41:29 -04001050int lynq_get_idx_number(void)
1051{
1052 FILE *fp;
1053 const char* number="9";
1054 char lynq_wifi_ssid_cmd[MAX_CMD]="wpa_cli -iwlan0 -p/var/run/wpa_supplicant list_net";
1055 char lynq_cmd_ret[MAX_RET]={0};
1056
1057 if((fp=popen(lynq_wifi_ssid_cmd,"r"))==NULL){
1058 perror("popen error!");
1059 return -1;
1060 }
1061 while(1){
1062 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
1063 if((strncmp(lynq_cmd_ret,number,1))==0)
1064 {
1065 CLOSE_FP_RETURN_VALUE(fp,"don't need add idx",1);
1066 }
1067 }
1068 if(feof(fp)){
1069 break;
1070 }
1071 }
1072
1073 if((pclose(fp))==-1){
1074 perror("close file faild");
1075 return -1;
1076 }
1077
1078 return 0;
1079}
1080
1081
1082int lynq_get_wifi_mac(char* wifi_mac)
1083{
1084 FILE * fp;
1085 char lynq_cmd_ret[MAX_RET]={0};
1086 char lynq_tmp_cmd[MAX_CMD]={0};
1087
1088 if((fp=popen("/data/wl cur_etheraddr","r"))==NULL)
1089 {
1090 perror("popen error!");
1091 return -1;
1092 }
1093 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
1094 {
1095 perror("fread fail!");
1096 return -1;
1097 }
1098 strncpy(wifi_mac,lynq_cmd_ret+14,18);
1099 int ret=pclose(fp);
1100 if(ret==-1)
1101 {
1102 perror("close file faild");
1103 return -1;
1104 }
1105
1106 return 0;
1107}
1108int lynq_get_wifi_space(char* password){
1109 int i;
1110 for(i=0;password[i];i++){
1111 if(isspace(password[i])){
1112 return 1;
1113 }
1114 }
1115
1116 return 0;
1117}