blob: 8e9296df4fa6c057c4dcb8b0f62382f5025f2974 [file] [log] [blame]
qs.xiong1af5daf2022-03-14 09:12:12 -04001/**@File lib_wifi6.c
2* @Brief :about function test
3* @details :
4* @Author : qs.xiong
5* @Date : 2022-3-14
6* @Version : V1.0
7* @copy ritght : Copyright (c) MobileTek
8*/
9#include <log/log.h>
qs.xiong7a105ce2022-03-02 09:43:11 -050010#include <stdio.h>
11#include <sys/types.h>
12#include <string.h>
qs.xiong1af5daf2022-03-14 09:12:12 -040013#include <stdlib.h>
14#include <stdlib.h>
qs.xiongf1b525b2022-03-31 00:58:23 -040015#include <pthread.h>
qs.xiong97fa59b2022-04-07 05:41:29 -040016#include <ctype.h>
qs.xiong7a105ce2022-03-02 09:43:11 -050017#include "libwifi6.h"
18
qs.xiong1af5daf2022-03-14 09:12:12 -040019#ifdef __cplusplus
20extern "C" {
21#endif
22#ifdef __cplusplus
23}
24#endif
qs.xiong97fa59b2022-04-07 05:41:29 -040025//max len of cmd include password len
26#define MAX_CMD 256
qs.xiong7a105ce2022-03-02 09:43:11 -050027#define MAX_RET 1024
qs.xiongf1b525b2022-03-31 00:58:23 -040028#define MODE_LEN 10
qs.xiong97fa59b2022-04-07 05:41:29 -040029
30#define PRINT_AND_RETURN_VALUE(str,value) \
31{\
32 perror((str));\
33 return (value);\
34}
35#define CLOSE_FP_RETURN_VALUE(fp,str,value)\
36{\
37 if((pclose((fp)))==-1){ \
38 perror("close fp failed");\
39 }\
40 PRINT_AND_RETURN_VALUE((str),(value));\
41}
42
43#define CHECK_NULL_RETURN_VALUE(pt,str,value)\
44{\
45 if((pt)==NULL){ \
46 PRINT_AND_RETURN_VALUE((str),(value));\
47 }\
48}
49
qs.xiong1af5daf2022-03-14 09:12:12 -040050char g_lynq_wifi_ok[3]="OK";
qs.xiongf1b525b2022-03-31 00:58:23 -040051
52
53void StartThread()
54{
qs.xiongf1b525b2022-03-31 00:58:23 -040055 char start_cmd[120]="wpa_supplicant -iwlan0 -Dnl80211 -c /data/wifi/wg870/wpa_supplicant.conf -g/var/run/wpa_wlan0_cmd -dd -t -B";
56 char get_pid_cmd[20]="wpa_supplicant";
57 if((GetPIDbyName(get_pid_cmd))>0){
58 return;
qs.xiong97fa59b2022-04-07 05:41:29 -040059 }
qs.xiongf1b525b2022-03-31 00:58:23 -040060 system(start_cmd);
61 for(int i=0;i<5;i++){
qs.xiong97fa59b2022-04-07 05:41:29 -040062 sleep(2);
qs.xiongf1b525b2022-03-31 00:58:23 -040063 if((GetPIDbyName(get_pid_cmd))>0){
64 break;
qs.xiong97fa59b2022-04-07 05:41:29 -040065 }
qs.xiongf1b525b2022-03-31 00:58:23 -040066 if(i==4){
qs.xiong97fa59b2022-04-07 05:41:29 -040067 return;
qs.xiongf1b525b2022-03-31 00:58:23 -040068 }
69 }
70 return;
71}
72
73
qs.xiong9c99fa92022-03-15 08:03:26 -040074
qs.xiong1af5daf2022-03-14 09:12:12 -040075int lynq_wifi_enable(void)
76{
qs.xiong7a105ce2022-03-02 09:43:11 -050077 char *lynq_wifi_enable[]={"insmod /lib/modules/4.19.98/kernel/drivers/net/wireless/bcmdhd/bcmdhd.ko "
qs.xiong1af5daf2022-03-14 09:12:12 -040078 "firmware_path=/system/etc/firmware/wifi/wg870/w870_rtecdc_mfg.trxs "
qs.xiong9c99fa92022-03-15 08:03:26 -040079 "nvram_path=/system/etc/firmware/wifi/wg870/cyw955572fcipa_rev2.52.txt\n"};
qs.xiong1af5daf2022-03-14 09:12:12 -040080 if(system(lynq_wifi_enable[0])==-1){
qs.xiong7a105ce2022-03-02 09:43:11 -050081 return -1;
82 }
qs.xiong1af5daf2022-03-14 09:12:12 -040083
qs.xiong7a105ce2022-03-02 09:43:11 -050084 return 0;
85}
86
qs.xiong1af5daf2022-03-14 09:12:12 -040087int lynq_wifi_disable(void)
88{
qs.xiong97fa59b2022-04-07 05:41:29 -040089 system("rmmod bcmdhd.ko");
qs.xiong7a105ce2022-03-02 09:43:11 -050090 return 0;
91}
qs.xiongf1b525b2022-03-31 00:58:23 -040092/*
93int lynq_wifi_work_mode_set(lynq_wifi_work_mode_m mode)
qs.xiong7a105ce2022-03-02 09:43:11 -050094{
95 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -040096
qs.xiong7a105ce2022-03-02 09:43:11 -050097 switch(mode){
98 case LYNQ_WIFI_WORK_MODE_STA:
qs.xiong1af5daf2022-03-14 09:12:12 -040099 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -0500100 perror("popen error!");
101 return -1;
102 }
103 break;
104 case LYNQ_WIFI_WORK_MODE_AP:
qs.xiong1af5daf2022-03-14 09:12:12 -0400105 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -0500106 perror("popen error!");
107 return -1;
108 }
109 break;
qs.xiong7a105ce2022-03-02 09:43:11 -0500110 default:
111 return -1;
112 }
113 return 0;
114}
qs.xiongf1b525b2022-03-31 00:58:23 -0400115*/
116int lynq_wifi_work_mode_get(lynq_wifi_work_mode_m *mode)
qs.xiong97fa59b2022-04-07 05:41:29 -0400117{
118 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiongf1b525b2022-03-31 00:58:23 -0400119 char lynq_cmd_ret[MAX_RET]={0};
120 char lynq_mode[10]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500121 char *strcn="mode=";
qs.xiong97fa59b2022-04-07 05:41:29 -0400122 char sta[MAX_CMD]="station";
123 char ap[MAX_CMD]="AP";
qs.xiong7a105ce2022-03-02 09:43:11 -0500124
qs.xiong1af5daf2022-03-14 09:12:12 -0400125 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400126 CHECK_NULL_RETURN_VALUE(mode,"mode is null",-1);
127 if ((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
128 return -1;
qs.xiong1af5daf2022-03-14 09:12:12 -0400129 }
130
131 while(1){
132 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
133 if((strncmp(lynq_cmd_ret,strcn,5))==0)
134 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400135 sscanf(lynq_cmd_ret,"%*[^=]=%s",lynq_mode);
136 if(strcmp(lynq_mode,sta)==0){
137 *mode=LYNQ_WIFI_WORK_MODE_STA;
138 }else if((strcmp(lynq_mode,ap))==0){
139 *mode=LYNQ_WIFI_WORK_MODE_AP;
140 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400141 }
142 }
143 if(feof(fp)){
144 break;
145 }
146 }
147
qs.xiong97fa59b2022-04-07 05:41:29 -0400148 if((pclose(fp))==-1){
149 perror("close file faild");
150 return -1;
151 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500152
qs.xiong97fa59b2022-04-07 05:41:29 -0400153 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500154}
155
qs.xiongf1b525b2022-03-31 00:58:23 -0400156int lynq_wifi_ap_ssid_set(lynq_wifi_index_e idx,char *ap_ssid)
qs.xiong7a105ce2022-03-02 09:43:11 -0500157{
158 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -0400159 char lynq_wifi_ssid_cmd[80]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500160 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500161 char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
qs.xiong97fa59b2022-04-07 05:41:29 -0400162 if(idx<0||idx>9){
163 return -1;
164 }
165 if(((strlen(ap_ssid))<8) || ((strlen(ap_ssid))>32)){
166 PRINT_AND_RETURN_VALUE("ssid is illgal",-1);
167 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400168 sprintf(lynq_tmp_cmd,"%s%d%s","IFNAME=wlan0 set_network ",idx," ssid ");
169 sprintf(lynq_wifi_ssid_cmd,"%s%s%s%s%s",lynq_tmp_cmd,"\"",ap_ssid,"\"","\n");
qs.xiong7a105ce2022-03-02 09:43:11 -0500170
171 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
172 perror("popen error!");
173 return -1;
174 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400175
qs.xiongf1b525b2022-03-31 00:58:23 -0400176 fwrite(lynq_wifi_ssid_cmd,sizeof(lynq_wifi_ssid_cmd),1,fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400177 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
178
qs.xiong7a105ce2022-03-02 09:43:11 -0500179 int ret=pclose(fp);
180 if(ret==-1){
181 perror("close file faild");
182 return -1;
183 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400184
qs.xiong7a105ce2022-03-02 09:43:11 -0500185 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500186}
187
qs.xiongf1b525b2022-03-31 00:58:23 -0400188int lynq_wifi_ap_ssid_get(lynq_wifi_index_e idx,char* ap_ssid)
qs.xiong7a105ce2022-03-02 09:43:11 -0500189{
qs.xiong97fa59b2022-04-07 05:41:29 -0400190 CHECK_NULL_RETURN_VALUE(ap_ssid,"ap_ssid is null",-1);
qs.xiong1af5daf2022-03-14 09:12:12 -0400191 FILE *fp;
192 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong7a105ce2022-03-02 09:43:11 -0500193 char lynq_cmd_ret[MAX_RET]={0};
194 char *strcn="ssid=";
qs.xiongf1b525b2022-03-31 00:58:23 -0400195 if(idx>10||idx<0){
196 return -1;
197 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500198 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
199 perror("popen error!");
200 return -1;
201 }
202 while(1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400203 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
204 if((strncmp(lynq_cmd_ret,strcn,5))==0)
205 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400206 sscanf(lynq_cmd_ret,"%*[^=]=%s",ap_ssid);
qs.xiong1af5daf2022-03-14 09:12:12 -0400207 }
208 }
209 if(feof(fp)){
210 break;
211 }
212 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400213
qs.xiong1af5daf2022-03-14 09:12:12 -0400214 if((pclose(fp))==-1){
215 perror("close file faild");
216 return -1;
217 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400218 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500219}
220
qs.xiongf1b525b2022-03-31 00:58:23 -0400221int lynq_wifi_ap_frequency_set(lynq_wifi_index_e idx,int lynq_wifi_frequency)
qs.xiong7a105ce2022-03-02 09:43:11 -0500222{
223 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400224 char lynq_wifi_frequency_cmd[MAX_CMD]={0};
225 char lynq_cmd_mode[MAX_CMD]={0};
226 char lynq_cmd_slect[MAX_CMD]={0};
227 char lynq_cmd_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
228 if(idx<0||idx>9){
229 return -1;
230 }
qs.xiong4c91f012022-04-08 06:16:45 -0400231 if((lynq_wifi_frequency != 2437) && (lynq_wifi_frequency != 5180)){
qs.xiong97fa59b2022-04-07 05:41:29 -0400232 PRINT_AND_RETURN_VALUE("set frequency not in range",-1);
233 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400234 sprintf(lynq_wifi_frequency_cmd,"IFNAME=wlan0 set_net %d frequency %d\n", idx, lynq_wifi_frequency);
235 sprintf(lynq_cmd_mode, "IFNAME=wlan0 set_net %d mode 2\n", idx);
236 sprintf(lynq_cmd_slect, "IFNAME=wlan0 select_net %d\n", idx);
qs.xiong7a105ce2022-03-02 09:43:11 -0500237
238 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
239 perror("popen error!");
240 return -1;
241 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400242
qs.xiongf1b525b2022-03-31 00:58:23 -0400243 fwrite(lynq_wifi_frequency_cmd,sizeof(lynq_wifi_frequency_cmd),1,fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400244 fwrite(lynq_cmd_mode,sizeof(lynq_cmd_mode),1,fp);
245 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
246 fwrite(lynq_cmd_slect,sizeof(lynq_cmd_slect),1,fp);
247
qs.xiong7a105ce2022-03-02 09:43:11 -0500248 int ret=pclose(fp);
249 if(ret==-1){
250 perror("close file faild");
251 return -1;
252 }
253
qs.xiong1af5daf2022-03-14 09:12:12 -0400254 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500255}
256
qs.xiongf1b525b2022-03-31 00:58:23 -0400257int lynq_wifi_ap_frequency_get(lynq_wifi_index_e idx,int *lynq_wifi_frequency)
qs.xiong7a105ce2022-03-02 09:43:11 -0500258{
qs.xiong97fa59b2022-04-07 05:41:29 -0400259 CHECK_NULL_RETURN_VALUE(lynq_wifi_frequency,"frequency is null",-1);
260
qs.xiong1af5daf2022-03-14 09:12:12 -0400261 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400262 char lynq_wifi_ssid_cmd[MAX_CMD]="wpa_cli -iwlan0 -p/var/run/wpa_supplicant status";
263 char lynq_cmd_ret[MAX_RET]={0};
qs.xiongf1b525b2022-03-31 00:58:23 -0400264 char *strcn="freq=";
qs.xiong97fa59b2022-04-07 05:41:29 -0400265 char freq[MAX_CMD]={0};
266 if(idx<0||idx>9){
267 return -1;
268 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500269
qs.xiong97fa59b2022-04-07 05:41:29 -0400270 if((fp=popen(lynq_wifi_ssid_cmd,"r"))==NULL){
271 perror("popen error!");
272 return -1;
273 }
274 while(1){
275 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiongf1b525b2022-03-31 00:58:23 -0400276 if((strncmp(lynq_cmd_ret,strcn,5))==0)
qs.xiong97fa59b2022-04-07 05:41:29 -0400277 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400278 sscanf(lynq_cmd_ret,"%*[^=]=%s",freq);
279 *lynq_wifi_frequency=atoi(freq);
280 }
281 }
282 if(feof(fp)){
283 break;
284 }
285 }
286
287 if((pclose(fp))==-1){
288 perror("close file faild");
289 return -1;
290 }
291
292 return 0;
293}
294
295/*
296int lynq_wifi_ap_bandwidth_set(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m bandwidth)
297{
298
299
300
301 return 0;
302}
303*/
304int lynq_wifi_ap_bandwidth_get(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m* bandwidth)
305{
qs.xiong97fa59b2022-04-07 05:41:29 -0400306 if(bandwidth==NULL){
307 PRINT_AND_RETURN_VALUE("call falure",-1);
308 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400309 FILE *fp;
310 char aim[MAX_CMD]={0};
311 char number[10]="80";
you.chen65fdcdf2022-04-09 17:50:09 +0800312 char lynq_wifi_bandwidth_cmd[MAX_CMD]="wl chanspec\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400313 char lynq_cmd_ret[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400314 if(idx<0||idx>9){
315 return -1;
316 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400317
qs.xiong97fa59b2022-04-07 05:41:29 -0400318 if((fp=popen(lynq_wifi_bandwidth_cmd,"r"))==NULL){
qs.xiongf1b525b2022-03-31 00:58:23 -0400319 perror("popen error!");
320 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400321 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400322
323 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
324 strncpy(aim,lynq_cmd_ret+3,2);
qs.xiongf1b525b2022-03-31 00:58:23 -0400325 if((strncmp(aim,number,2))==0){
326 *bandwidth=1;
327 }else{
328 *bandwidth=0;
329 }
330 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400331 if((pclose(fp))==-1){
332 perror("close file faild");
333 return -1;
qs.xiongf1b525b2022-03-31 00:58:23 -0400334 }
335
qs.xiong7a105ce2022-03-02 09:43:11 -0500336 return 0;
337
338}
qs.xiongf1b525b2022-03-31 00:58:23 -0400339/*
340int lynq_wifi_ap_channel_set( lynq_wifi_index_e idx,int channel)
qs.xiong7a105ce2022-03-02 09:43:11 -0500341{
342 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -0400343 FILE *fg;
344 char lynq_cmd_ret[MAX_CMD]={0};
qs.xiongc36178b2022-03-17 14:31:33 -0400345 char lynq_tmp_cmd[MAX_RET]={0};
you.chen65fdcdf2022-04-09 17:50:09 +0800346 char lynq_change_cmd[MAX_CMD]="wl chanspec ";
qs.xiong97fa59b2022-04-07 05:41:29 -0400347 char chose_idx_cmd[MAX_CMD]="";
qs.xiongf1b525b2022-03-31 00:58:23 -0400348 sprintf(chose_idx_cmd,"%s%d%s","IFNAME=wlan0 slecet_net ",idx,"\n");
349 if((fg=popen(chose_idx_cmd,"r"))==NULL){
350 perror("popen error!");
351 return -1;
352 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400353 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiongf1b525b2022-03-31 00:58:23 -0400354 if((strcmp(lynq_cmd_ret,g_lynq_wifi_ok))!=0){
qs.xiong97fa59b2022-04-07 05:41:29 -0400355 CLOSE_FP_RETURN_VALUE(fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400356 return -1;
357 }
358 }
359 if((pclose(fg))==-1){
360 perror("close file faild");
361 return -1;
362 }
363 sprintf(lynq_tmp_cmd,"%s%d",lynq_change_cmd[1],channel);
you.chen65fdcdf2022-04-09 17:50:09 +0800364 system("wl down");
qs.xiong7a105ce2022-03-02 09:43:11 -0500365 if((fp=popen(lynq_tmp_cmd,"w"))==NULL){
qs.xiongf1b525b2022-03-31 00:58:23 -0400366 perror("popen error!");
367 return -1;
qs.xiongc36178b2022-03-17 14:31:33 -0400368 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400369
qs.xiong7a105ce2022-03-02 09:43:11 -0500370 int ret=pclose(fp);
371 if(ret==-1){
372 perror("close file faild");
373 return -1;
374 }
you.chen65fdcdf2022-04-09 17:50:09 +0800375 system("wl up");
qs.xiong7a105ce2022-03-02 09:43:11 -0500376 return 0;
377}
qs.xiongf1b525b2022-03-31 00:58:23 -0400378*/
379int lynq_wifi_ap_channel_get( lynq_wifi_index_e idx,int* channel)
qs.xiong7a105ce2022-03-02 09:43:11 -0500380{
qs.xiong97fa59b2022-04-07 05:41:29 -0400381 CHECK_NULL_RETURN_VALUE(channel,"channel is null",-1);
qs.xiongf1b525b2022-03-31 00:58:23 -0400382 FILE *fp;
383 char lynq_cmd_set[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400384 char channel_str[MAX_CMD]={0};
qs.xiongf1b525b2022-03-31 00:58:23 -0400385 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400386 if(idx<0||idx>9){
387 return -1;
388 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400389
you.chen65fdcdf2022-04-09 17:50:09 +0800390 if((fp=popen("wl chanspec","r"))==NULL){
qs.xiong97fa59b2022-04-07 05:41:29 -0400391 perror("popen error!");
qs.xiong1af5daf2022-03-14 09:12:12 -0400392 return -1;
393 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400394
395 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
396 strncpy(channel_str,lynq_cmd_ret,2);
397 *channel=atoi(channel_str);
qs.xiong1af5daf2022-03-14 09:12:12 -0400398 }
399 if((pclose(fp))==-1){
qs.xiong97fa59b2022-04-07 05:41:29 -0400400 perror("close file faild");
qs.xiong1af5daf2022-03-14 09:12:12 -0400401 return -1;
402 }
403
qs.xiong7a105ce2022-03-02 09:43:11 -0500404 return 0;
405}
406
407
qs.xiong97fa59b2022-04-07 05:41:29 -0400408int lynq_wifi_ap_auth_set(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500409{
410 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400411 int ret;
412 if(idx<0||idx>9){
413 return -1;
414 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500415 switch(auth){
qs.xiongf1b525b2022-03-31 00:58:23 -0400416 case LYNQ_WIFI_AUTH_OPEN:
qs.xiong7a105ce2022-03-02 09:43:11 -0500417 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400418 char lynq_auth_cmd[MAX_CMD]={0};
419 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400420 char lynq_cmd_quit[12]="quit\n";
421 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d key_mgmt NONE\n",idx);
422
qs.xiong7a105ce2022-03-02 09:43:11 -0500423 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
424 perror("popen error!");
425 return -1;
426 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500427
428 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
429 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400430 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500431
qs.xiong97fa59b2022-04-07 05:41:29 -0400432 ret=pclose(fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500433 if(ret==-1){
434 perror("close file faild");
435 return -1;
436 }
437 break;
438 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400439 case LYNQ_WIFI_AUTH_WPA_PSK:
qs.xiong7a105ce2022-03-02 09:43:11 -0500440 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400441
qs.xiong97fa59b2022-04-07 05:41:29 -0400442 char lynq_auth_cmd[MAX_CMD]={0};
443 char lynq_psk_cmd[MAX_CMD]={0};
444 char lynq_pairwise_cmd[MAX_CMD]={0};
445 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400446 char lynq_cmd_quit[12]="quit\n";
447
448 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d proto WPA2\n",idx);
449 sprintf(lynq_psk_cmd,"IFNAME=wlan0 set_net %d key_mgmt WPA-PSK\n",idx);
450 sprintf(lynq_pairwise_cmd,"IFNAME=wlan0 set_net %d pairwise CCMP\n",idx);
qs.xiong7a105ce2022-03-02 09:43:11 -0500451
qs.xiong7a105ce2022-03-02 09:43:11 -0500452 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
453 perror("popen error!");
454 return -1;
455 }
456
qs.xiongf1b525b2022-03-31 00:58:23 -0400457 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500458 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
459 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
460 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400461 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500462
qs.xiong97fa59b2022-04-07 05:41:29 -0400463 ret=pclose(fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500464 if(ret==-1){
465 perror("close file faild");
466 return -1;
467 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500468 break;
qs.xiong97fa59b2022-04-07 05:41:29 -0400469 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500470 default:
471 return -1;
472 }
473
qs.xiong7a105ce2022-03-02 09:43:11 -0500474 return 0;
475}
476
qs.xiongf1b525b2022-03-31 00:58:23 -0400477int lynq_wifi_ap_auth_get(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s *auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500478{
qs.xiong97fa59b2022-04-07 05:41:29 -0400479 CHECK_NULL_RETURN_VALUE(auth,"chanauthnel is null",-1);
qs.xiong1af5daf2022-03-14 09:12:12 -0400480 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiongf1b525b2022-03-31 00:58:23 -0400481 char lynq_cmd_ret[MAX_RET]={0};
482 char get_str_auth[20]={0};
483 char use_to_cmp[4]="WPA";
484 char strcn[20]="key_mgmt=";
qs.xiong97fa59b2022-04-07 05:41:29 -0400485 if(idx<0||idx>9){
486 return -1;
487 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500488
qs.xiong1af5daf2022-03-14 09:12:12 -0400489 FILE *fp;
490 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
491 perror("popen error!");
qs.xiong97fa59b2022-04-07 05:41:29 -0400492 return -1;
493 }
494 while(1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400495 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400496 if((strncmp(lynq_cmd_ret,strcn,9))==0)
497 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400498 sscanf(lynq_cmd_ret,"%*[^=]=%s",get_str_auth);
499 if((strncmp(get_str_auth,use_to_cmp,3))==0){
500 *auth=LYNQ_WIFI_AUTH_WPA_PSK;
501 break;
502 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400503 }
504 }
505 if(feof(fp)){
506 break;
507 }
508 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400509 if(*auth!=LYNQ_WIFI_AUTH_WPA_PSK){
510 *auth=LYNQ_WIFI_AUTH_OPEN;
511 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400512 if((pclose(fp))==-1){
513 perror("close file faild");
514 return -1;
515 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500516
qs.xiong1af5daf2022-03-14 09:12:12 -0400517 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500518}
qs.xiongf1b525b2022-03-31 00:58:23 -0400519/*
520int lynq_wifi_ap_max_sta_set(lynq_wifi_index_e idx,int max_sta_num)
qs.xiong7a105ce2022-03-02 09:43:11 -0500521{
qs.xiong7a105ce2022-03-02 09:43:11 -0500522 FILE * fp;
523 char lynq_cmd_ret[MAX_RET]={0};
qs.xiongf1b525b2022-03-31 00:58:23 -0400524 char lynq_tmp_cmd[MAX_CMD]={0};
you.chen65fdcdf2022-04-09 17:50:09 +0800525 sprintf(lynq_tmp_cmd,"wl maxassoc %d%s",max_sta_num,"\n");
qs.xiong97fa59b2022-04-07 05:41:29 -0400526 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400527 return -1;
528 }
529 if((fp=popen(lynq_tmp_cmd,"r"))==NULL)
qs.xiong1af5daf2022-03-14 09:12:12 -0400530 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500531 perror("popen error!");
532 return -1;
533 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400534 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
535 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500536 perror("fread fail!");
537 return -1;
538 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400539
qs.xiong7a105ce2022-03-02 09:43:11 -0500540 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400541 if(ret==-1)
542 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500543 perror("close file faild");
544 return -1;
545 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400546
qs.xiong7a105ce2022-03-02 09:43:11 -0500547 return 0;
548}
qs.xiongf1b525b2022-03-31 00:58:23 -0400549*/
550int lynq_wifi_ap_max_sta_get(lynq_wifi_index_e idx,int* max_sta_num)
qs.xiong7a105ce2022-03-02 09:43:11 -0500551{
qs.xiong97fa59b2022-04-07 05:41:29 -0400552 CHECK_NULL_RETURN_VALUE(max_sta_num,"max_sta_num is null",-1);
qs.xiong7a105ce2022-03-02 09:43:11 -0500553 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -0400554 char get_str_num[5]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500555 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400556 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400557 return -1;
558 }
you.chen65fdcdf2022-04-09 17:50:09 +0800559 if((fp=popen("wl maxassoc","r"))==NULL)
qs.xiong1af5daf2022-03-14 09:12:12 -0400560 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500561 perror("popen error!");
562 return -1;
563 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400564 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
565 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500566 perror("fread fail!");
567 return -1;
568 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400569 strcpy(get_str_num,lynq_cmd_ret);
570 *max_sta_num=atoi(get_str_num);
qs.xiong1af5daf2022-03-14 09:12:12 -0400571
qs.xiong7a105ce2022-03-02 09:43:11 -0500572 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400573 if(ret==-1)
574 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500575 perror("close file faild");
576 return -1;
qs.xiong1af5daf2022-03-14 09:12:12 -0400577 }
578
qs.xiong7a105ce2022-03-02 09:43:11 -0500579 return 0;
580}
581
qs.xiongf1b525b2022-03-31 00:58:23 -0400582int lynq_wifi_ap_start(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500583{
qs.xiongf1b525b2022-03-31 00:58:23 -0400584 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400585 char lynq_wifi_cmd[MAX_CMD]={0};
586 char lynq_cmd_quit[MAX_CMD]="quit";
587 if(idx<0||idx>9){
588 return -1;
589 }
590 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiongf1b525b2022-03-31 00:58:23 -0400591
qs.xiong97fa59b2022-04-07 05:41:29 -0400592 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
qs.xiong1af5daf2022-03-14 09:12:12 -0400593 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500594 perror("popen error!");
595 return -1;
596 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500597
qs.xiong97fa59b2022-04-07 05:41:29 -0400598 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
599 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400600
qs.xiong7a105ce2022-03-02 09:43:11 -0500601 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400602 if(ret==-1)
603 {
604 perror("close file faild");
605 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500606 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500607 return 0;
608}
609
qs.xiongf1b525b2022-03-31 00:58:23 -0400610int lynq_wifi_ap_restart(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500611{
qs.xiong1af5daf2022-03-14 09:12:12 -0400612 int lynq_stop;
613 int lynq_start;
qs.xiong97fa59b2022-04-07 05:41:29 -0400614 if(idx<0||idx>9){
615 return -1;
616 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400617 lynq_stop = lynq_wifi_ap_stop(idx);
qs.xiong1af5daf2022-03-14 09:12:12 -0400618 if ( lynq_stop != 0 )
619 {
620 return -1;
621 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400622
qs.xiongf1b525b2022-03-31 00:58:23 -0400623 lynq_start = lynq_wifi_ap_start(idx);
qs.xiong1af5daf2022-03-14 09:12:12 -0400624 if ( lynq_start != 0 )
625 {
626 return -1;
627 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400628
qs.xiong7a105ce2022-03-02 09:43:11 -0500629 return 0;
630
631}
632
qs.xiongf1b525b2022-03-31 00:58:23 -0400633int lynq_wifi_ap_stop(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500634{
635 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400636 char lynq_wifi_cmd[MAX_CMD]={0};
637 char lynq_cmd_quit[MAX_CMD]="quit";
638 if(idx<0||idx>9){
639 return -1;
640 }
641 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
qs.xiong1af5daf2022-03-14 09:12:12 -0400642
qs.xiong97fa59b2022-04-07 05:41:29 -0400643 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
644 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500645 perror("popen error!");
646 return -1;
647 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400648
649 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
650 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
651
qs.xiong7a105ce2022-03-02 09:43:11 -0500652 int ret=pclose(fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400653 if(ret==-1)
654 {
655 perror("close file faild");
656 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500657 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500658 return 0;
659}
qs.xiong1af5daf2022-03-14 09:12:12 -0400660
qs.xiongf1b525b2022-03-31 00:58:23 -0400661int lynq_wifi_ap_hide_ssid(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500662{
663 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400664 char lynq_disable_cmd[MAX_CMD]={0};
665 char lynq_select_cmd[MAX_CMD]={0};
qs.xiong1af5daf2022-03-14 09:12:12 -0400666 char lynq_hide_cmd[]="IFNAME=wlan0 SET HIDE_SSID 1\n";
qs.xiong97fa59b2022-04-07 05:41:29 -0400667 if(idx<0||idx>9){
668 return -1;
669 }
670
qs.xiongf1b525b2022-03-31 00:58:23 -0400671 sprintf(lynq_disable_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
672 sprintf(lynq_select_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiong7a105ce2022-03-02 09:43:11 -0500673 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
674 perror("popen error!");
675 return -1;
676 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500677
678 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
679 fwrite(lynq_hide_cmd,sizeof(lynq_hide_cmd),1,fp);
680 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400681
qs.xiong7a105ce2022-03-02 09:43:11 -0500682 int ret=pclose(fp);
683 if(ret==-1){
684 perror("close file faild");
685 return -1;
686 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400687
688 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500689}
690
qs.xiongf1b525b2022-03-31 00:58:23 -0400691int lynq_wifi_ap_unhide_ssid(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500692{
693 FILE *fp;
694 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
695 perror("popen error!");
696 return -1;
697 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400698 char lynq_disable_cmd[MAX_CMD]={0};
699 char lynq_select_cmd[MAX_CMD]={0};
700 char lynq_unhide_cmd[MAX_CMD]="IFNAME=wlan0 SET HIDE_SSID 0\n";
701 if(idx<0||idx>9){
702 return -1;
703 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400704
705 sprintf(lynq_disable_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
706 sprintf(lynq_select_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiong7a105ce2022-03-02 09:43:11 -0500707
708 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
709 fwrite(lynq_unhide_cmd,sizeof(lynq_unhide_cmd),1,fp);
710 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400711
qs.xiong7a105ce2022-03-02 09:43:11 -0500712 int ret=pclose(fp);
713 if(ret==-1){
714 perror("close file faild");
715 return -1;
716 }
717
718 return 0;
719}
qs.xiongf1b525b2022-03-31 00:58:23 -0400720
721int lynq_ap_ssid_pass_set(lynq_wifi_index_e idx,char *password)
qs.xiong7a105ce2022-03-02 09:43:11 -0500722{
723 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -0400724 int ret;
725 int pass_len;
726 pass_len=strlen(password);
qs.xiong97fa59b2022-04-07 05:41:29 -0400727 if(((pass_len+1) > MAX_CMD) || pass_len<8){
728 PRINT_AND_RETURN_VALUE("password is illgal",-1);
729 }else if((lynq_get_wifi_space(password))== 1){
730 PRINT_AND_RETURN_VALUE("password is illgal",-1);
731 }
732 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400733 return -1;
734 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400735 char lynq_tmp_cmd[300]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400736 char lynq_pass_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400737 char lynq_cmd_quit[12]="quit\n";
738 sprintf(lynq_tmp_cmd,"%s%d%s%s%s%s%s","IFNAME=wlan0 set_net ",idx," psk ","\"",password,"\"","\n");
739
740 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
741 perror("popen error!");
742 return -1;
743 }
744
745 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
746 fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
747 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400748
qs.xiongf1b525b2022-03-31 00:58:23 -0400749 ret=pclose(fp);
750 if(ret==-1){
751 perror("close file faild");
752 return -1;
753 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400754
qs.xiongf1b525b2022-03-31 00:58:23 -0400755 return 0;
756}
757
758int lynq_sta_ssid_pass_set(lynq_wifi_index_e idx,char *password)
759{
760 FILE *fp;
761 int pass_len;
762 pass_len=strlen(password);
qs.xiong97fa59b2022-04-07 05:41:29 -0400763 if(((pass_len+1) > MAX_CMD) || pass_len<8){
764 PRINT_AND_RETURN_VALUE("password is illgal",-1);
765 }else if((lynq_get_wifi_space(password))== 1){
766 PRINT_AND_RETURN_VALUE("password is illgal",-1);
767 }
768 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400769 return -1;
770 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500771 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400772 char lynq_pass_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400773 char lynq_cmd_quit[12]="quit\n";
774 sprintf(lynq_tmp_cmd,"%s%d%s%s%s%s%s","IFNAME=wlan0 set_net ",idx," psk ","\"",password,"\"","\n");
qs.xiong97fa59b2022-04-07 05:41:29 -0400775
qs.xiong7a105ce2022-03-02 09:43:11 -0500776 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
777 perror("popen error!");
778 return -1;
779 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400780
qs.xiong7a105ce2022-03-02 09:43:11 -0500781 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
782 fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400783 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400784
qs.xiong7a105ce2022-03-02 09:43:11 -0500785 int ret=pclose(fp);
786 if(ret==-1){
787 perror("close file faild");
788 return -1;
789 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400790
qs.xiong7a105ce2022-03-02 09:43:11 -0500791 return 0;
792}
793
qs.xiong97fa59b2022-04-07 05:41:29 -0400794
qs.xiongf1b525b2022-03-31 00:58:23 -0400795int lynq_wifi_sta_ssid_set(lynq_wifi_index_e idx,char *sta_ssid)
qs.xiong7a105ce2022-03-02 09:43:11 -0500796{
qs.xiongf1b525b2022-03-31 00:58:23 -0400797 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400798 char lynq_wifi_ssid_cmd[80]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500799 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400800 char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
801 sprintf(lynq_tmp_cmd,"%s%d%s","IFNAME=wlan0 set_network ",idx," ssid ");
qs.xiongf1b525b2022-03-31 00:58:23 -0400802 sprintf(lynq_wifi_ssid_cmd,"%s%s%s%s%s",lynq_tmp_cmd,"\"",sta_ssid,"\"","\n");
qs.xiong97fa59b2022-04-07 05:41:29 -0400803 if(idx<0||idx>9){
804 return -1;
805 }
806 if(((strlen(sta_ssid))>32)){
807 PRINT_AND_RETURN_VALUE("ssid is illgal",-1);
808 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400809 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
810 perror("popen error!");
811 return -1;
812 }
813
814 fwrite(lynq_wifi_ssid_cmd,sizeof(lynq_wifi_ssid_cmd),1,fp);
815 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400816
817 int ret=pclose(fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500818 if(ret==-1){
819 perror("close file faild");
820 return -1;
821 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400822
qs.xiong97fa59b2022-04-07 05:41:29 -0400823 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500824}
825
qs.xiongf1b525b2022-03-31 00:58:23 -0400826int lynq_wifi_sta_ssid_get(lynq_wifi_index_e idx,char* sta_ssid)
qs.xiong7a105ce2022-03-02 09:43:11 -0500827{
qs.xiong97fa59b2022-04-07 05:41:29 -0400828 CHECK_NULL_RETURN_VALUE(sta_ssid,"ap_ssid is null",-1);
829 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -0400830 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong7a105ce2022-03-02 09:43:11 -0500831 char lynq_cmd_ret[MAX_RET]={0};
832 char *strcn="ssid=";
qs.xiongf1b525b2022-03-31 00:58:23 -0400833 if(idx>10||idx<0){
834 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400835 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500836 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
837 perror("popen error!");
qs.xiong97fa59b2022-04-07 05:41:29 -0400838 return -1;
839 }
840 while(1){
841 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
842 if((strncmp(lynq_cmd_ret,strcn,5))==0)
qs.xiong1af5daf2022-03-14 09:12:12 -0400843 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400844 sscanf(lynq_cmd_ret,"%*[^=]=%s",sta_ssid);
845 }
846 }
847 if(feof(fp)){
848 break;
849 }
850 }
851
852 if((pclose(fp))==-1){
853 perror("close file faild");
854 return -1;
855 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500856 return 0;
857
858}
859
qs.xiongf1b525b2022-03-31 00:58:23 -0400860int lynq_wifi_sta_auth_set(lynq_wifi_index_e idx, lynq_wifi_sta_auth_s auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500861{
qs.xiong1af5daf2022-03-14 09:12:12 -0400862 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400863 int ret;
864 if(idx<0||idx>9){
865 return -1;
866 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400867 switch(auth){
868 case LYNQ_WIFI_STA_AUTH_OPEN:
869 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400870 char lynq_auth_cmd[MAX_CMD]={0};
871 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
872 char lynq_cmd_quit[12]="quit\n";
873 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d key_mgmt NONE\n",idx);
874
qs.xiongf1b525b2022-03-31 00:58:23 -0400875 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400876 perror("popen error!");
877 return -1;
878 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400879
qs.xiong1af5daf2022-03-14 09:12:12 -0400880 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
881 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400882 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
883
884 ret=pclose(fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400885 if(ret==-1){
886 perror("close file faild");
887 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400888 }
889 break;
890 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400891 case LYNQ_WIFI_STA_AUTH_WPA_PSK:
892 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400893 char lynq_auth_cmd[MAX_CMD]={0};
894 char lynq_psk_cmd[MAX_CMD]={0};
895 char lynq_pairwise_cmd[MAX_CMD]={0};
896 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
897 char lynq_cmd_quit[12]="quit\n";
898
899 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d proto WPA2\n",idx);
900 sprintf(lynq_psk_cmd,"IFNAME=wlan0 set_net %d key_mgmt WPA-PSK\n",idx);
901 sprintf(lynq_pairwise_cmd,"IFNAME=wlan0 set_net %d pairwise CCMP\n",idx);
902
qs.xiongf1b525b2022-03-31 00:58:23 -0400903 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
904 perror("popen error!");
905 return -1;
906 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400907
qs.xiongf1b525b2022-03-31 00:58:23 -0400908 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
909 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
910 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
911 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400912 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
913
914 ret=pclose(fp);
915 if(ret==-1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400916 perror("close file faild");
917 return -1;
918 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400919 break;
qs.xiong97fa59b2022-04-07 05:41:29 -0400920 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400921 default:
922 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400923 }
924
qs.xiongf1b525b2022-03-31 00:58:23 -0400925 return 0;
qs.xiong1af5daf2022-03-14 09:12:12 -0400926}
qs.xiong7a105ce2022-03-02 09:43:11 -0500927
qs.xiongf1b525b2022-03-31 00:58:23 -0400928int lynq_wifi_sta_auth_get(lynq_wifi_index_e idx, lynq_wifi_sta_auth_s* auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500929{
qs.xiong97fa59b2022-04-07 05:41:29 -0400930 CHECK_NULL_RETURN_VALUE(auth,"chanauthnel is null",-1);
931 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong1af5daf2022-03-14 09:12:12 -0400932 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400933 char get_str_auth[20]={0};
934 char use_to_cmp[4]="WPA";
935 char strcn[20]="key_mgmt=";
qs.xiongf1b525b2022-03-31 00:58:23 -0400936
qs.xiong97fa59b2022-04-07 05:41:29 -0400937 FILE *fp;
938 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400939 perror("popen error!");
qs.xiong97fa59b2022-04-07 05:41:29 -0400940 return -1;
qs.xiong1af5daf2022-03-14 09:12:12 -0400941 }
942 while(1){
qs.xiong97fa59b2022-04-07 05:41:29 -0400943 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400944 if((strncmp(lynq_cmd_ret,strcn,9))==0)
945 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400946 sscanf(lynq_cmd_ret,"%*[^=]=%s",get_str_auth);
947 if((strncmp(get_str_auth,use_to_cmp,3))==0){
948 *auth=LYNQ_WIFI_AUTH_WPA_PSK;
949 break;
qs.xiongf1b525b2022-03-31 00:58:23 -0400950 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400951 }
952 }
953 if(feof(fp)){
954 break;
955 }
956 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400957 if(*auth!=LYNQ_WIFI_AUTH_WPA_PSK){
958 *auth=LYNQ_WIFI_AUTH_OPEN;
959 }
960 if((pclose(fp))==-1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400961 perror("close file faild");
962 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400963 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500964
965}
966
qs.xiong97fa59b2022-04-07 05:41:29 -0400967int lynq_wifi_sta_connect(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500968{
969 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400970 char lynq_wifi_cmd[MAX_CMD]={0};
971 char lynq_cmd_quit[MAX_CMD]="quit\n";
972 if(idx<0||idx>9){
973 return -1;
974 }
975 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiongf1b525b2022-03-31 00:58:23 -0400976
qs.xiong97fa59b2022-04-07 05:41:29 -0400977 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
978 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500979 perror("popen error!");
980 return -1;
981 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500982
qs.xiong97fa59b2022-04-07 05:41:29 -0400983 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
984 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500985
986 int ret=pclose(fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400987 if(ret==-1)
988 {
989 perror("close file faild");
990 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500991 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500992 return 0;
993}
994
qs.xiongf1b525b2022-03-31 00:58:23 -0400995int lynq_wifi_sta_disconnect(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500996{
997 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400998 char lynq_wifi_cmd[MAX_CMD]={0};
999 char lynq_cmd_quit[MAX_CMD]="quit\n";
1000 if(idx<0||idx>9){
1001 return -1;
1002 }
1003 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
1004
1005 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
1006 {
qs.xiong7a105ce2022-03-02 09:43:11 -05001007 perror("popen error!");
1008 return -1;
1009 }
qs.xiong7a105ce2022-03-02 09:43:11 -05001010
qs.xiong97fa59b2022-04-07 05:41:29 -04001011 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
1012 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
1013
qs.xiong7a105ce2022-03-02 09:43:11 -05001014 int ret=pclose(fp);
qs.xiong97fa59b2022-04-07 05:41:29 -04001015 if(ret==-1)
1016 {
1017 perror("close file faild");
1018 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -05001019 }
qs.xiong1af5daf2022-03-14 09:12:12 -04001020
qs.xiong7a105ce2022-03-02 09:43:11 -05001021 return 0;
1022}
qs.xiong97fa59b2022-04-07 05:41:29 -04001023
qs.xiong7a105ce2022-03-02 09:43:11 -05001024int lynq_wifi_wpa_start(void){
qs.xiong9c99fa92022-03-15 08:03:26 -04001025 int ret;
qs.xiongf1b525b2022-03-31 00:58:23 -04001026 pthread_t pth;
qs.xiong7a105ce2022-03-02 09:43:11 -05001027
qs.xiongf1b525b2022-03-31 00:58:23 -04001028 ret=pthread_create(&pth,NULL,StartThread,NULL);
1029 if(ret<0){
1030 return -1;
1031 }
1032 pthread_join(pth,NULL);
qs.xiong9c99fa92022-03-15 08:03:26 -04001033
qs.xiong7a105ce2022-03-02 09:43:11 -05001034 return 0;
1035}
1036
1037int lynq_wifi_wpacli_start(void){
qs.xiong7a105ce2022-03-02 09:43:11 -05001038 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -04001039 int i=0;
qs.xiong7a105ce2022-03-02 09:43:11 -05001040 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -04001041 char add_cmd[MAX_CMD]="IFNAME=wlan0 add_net\n";
1042 char save_cmd[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -04001043 char exit_cmd[20]="quit\n";
qs.xiong7a105ce2022-03-02 09:43:11 -05001044
qs.xiong97fa59b2022-04-07 05:41:29 -04001045 if(lynq_get_idx_number() == 1){
1046 PRINT_AND_RETURN_VALUE("don't need add idx agin\n",0);
1047 }
qs.xiong7a105ce2022-03-02 09:43:11 -05001048 fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w");
1049 if(fp==NULL){
1050 perror("start wpa_supplicant faild!");
1051 return -1;
1052 }
qs.xiong1af5daf2022-03-14 09:12:12 -04001053
qs.xiong97fa59b2022-04-07 05:41:29 -04001054 for(i=0;i<10;i++){
qs.xiongf1b525b2022-03-31 00:58:23 -04001055 fwrite(add_cmd,sizeof(add_cmd),1,fp);
1056 }
qs.xiong1af5daf2022-03-14 09:12:12 -04001057 fwrite(save_cmd,sizeof(save_cmd),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -04001058 fwrite(exit_cmd,sizeof(exit_cmd),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -04001059
qs.xiong7a105ce2022-03-02 09:43:11 -05001060 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -04001061 if(ret==-1)
1062 {
1063 perror("close file faild");
1064 return -1;
1065 }
qs.xiong97fa59b2022-04-07 05:41:29 -04001066
qs.xiong1af5daf2022-03-14 09:12:12 -04001067 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -05001068}
1069
qs.xiongf1b525b2022-03-31 00:58:23 -04001070pid_t GetPIDbyName(char* ps_name)
qs.xiong97fa59b2022-04-07 05:41:29 -04001071{
qs.xiongf1b525b2022-03-31 00:58:23 -04001072 FILE *fp;
1073 char *cmd=(char*)calloc(1,200);
1074 sprintf(cmd,"pidof %s",ps_name);
1075 fp=popen(cmd,"r");
1076 fread(cmd,1,200,fp);
1077 fclose(fp);
1078 return atoi(cmd);
1079}
qs.xiong7a105ce2022-03-02 09:43:11 -05001080
qs.xiong97fa59b2022-04-07 05:41:29 -04001081int lynq_get_idx_number(void)
1082{
1083 FILE *fp;
1084 const char* number="9";
1085 char lynq_wifi_ssid_cmd[MAX_CMD]="wpa_cli -iwlan0 -p/var/run/wpa_supplicant list_net";
1086 char lynq_cmd_ret[MAX_RET]={0};
1087
1088 if((fp=popen(lynq_wifi_ssid_cmd,"r"))==NULL){
1089 perror("popen error!");
1090 return -1;
1091 }
1092 while(1){
1093 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
1094 if((strncmp(lynq_cmd_ret,number,1))==0)
1095 {
1096 CLOSE_FP_RETURN_VALUE(fp,"don't need add idx",1);
1097 }
1098 }
1099 if(feof(fp)){
1100 break;
1101 }
1102 }
1103
1104 if((pclose(fp))==-1){
1105 perror("close file faild");
1106 return -1;
1107 }
1108
1109 return 0;
1110}
1111
1112
1113int lynq_get_wifi_mac(char* wifi_mac)
1114{
1115 FILE * fp;
1116 char lynq_cmd_ret[MAX_RET]={0};
1117 char lynq_tmp_cmd[MAX_CMD]={0};
1118
you.chen65fdcdf2022-04-09 17:50:09 +08001119 if((fp=popen("wl cur_etheraddr","r"))==NULL)
qs.xiong97fa59b2022-04-07 05:41:29 -04001120 {
1121 perror("popen error!");
1122 return -1;
1123 }
1124 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
1125 {
1126 perror("fread fail!");
1127 return -1;
1128 }
1129 strncpy(wifi_mac,lynq_cmd_ret+14,18);
1130 int ret=pclose(fp);
1131 if(ret==-1)
1132 {
1133 perror("close file faild");
1134 return -1;
1135 }
1136
1137 return 0;
1138}
1139int lynq_get_wifi_space(char* password){
1140 int i;
1141 for(i=0;password[i];i++){
1142 if(isspace(password[i])){
1143 return 1;
1144 }
1145 }
1146
1147 return 0;
1148}