blob: 746c2efed6e26f7de5db1d9e8726076310ca59be [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.xiongc36178b2022-03-17 14:31:33 -040077 system("chmod 777 /data/wl");
qs.xiong7a105ce2022-03-02 09:43:11 -050078 char *lynq_wifi_enable[]={"insmod /lib/modules/4.19.98/kernel/drivers/net/wireless/bcmdhd/bcmdhd.ko "
qs.xiong1af5daf2022-03-14 09:12:12 -040079 "firmware_path=/system/etc/firmware/wifi/wg870/w870_rtecdc_mfg.trxs "
qs.xiong9c99fa92022-03-15 08:03:26 -040080 "nvram_path=/system/etc/firmware/wifi/wg870/cyw955572fcipa_rev2.52.txt\n"};
qs.xiong1af5daf2022-03-14 09:12:12 -040081 if(system(lynq_wifi_enable[0])==-1){
qs.xiong7a105ce2022-03-02 09:43:11 -050082 return -1;
83 }
qs.xiong1af5daf2022-03-14 09:12:12 -040084
qs.xiong7a105ce2022-03-02 09:43:11 -050085 return 0;
86}
87
qs.xiong1af5daf2022-03-14 09:12:12 -040088int lynq_wifi_disable(void)
89{
qs.xiong97fa59b2022-04-07 05:41:29 -040090 system("rmmod bcmdhd.ko");
qs.xiong7a105ce2022-03-02 09:43:11 -050091 return 0;
92}
qs.xiongf1b525b2022-03-31 00:58:23 -040093/*
94int lynq_wifi_work_mode_set(lynq_wifi_work_mode_m mode)
qs.xiong7a105ce2022-03-02 09:43:11 -050095{
96 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -040097
qs.xiong7a105ce2022-03-02 09:43:11 -050098 switch(mode){
99 case LYNQ_WIFI_WORK_MODE_STA:
qs.xiong1af5daf2022-03-14 09:12:12 -0400100 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -0500101 perror("popen error!");
102 return -1;
103 }
104 break;
105 case LYNQ_WIFI_WORK_MODE_AP:
qs.xiong1af5daf2022-03-14 09:12:12 -0400106 if((fp=popen("wpa_cli -iwlan0 -p/var/run/wpa_supplicant remove_net all","r"))==NULL){
qs.xiong7a105ce2022-03-02 09:43:11 -0500107 perror("popen error!");
108 return -1;
109 }
110 break;
qs.xiong7a105ce2022-03-02 09:43:11 -0500111 default:
112 return -1;
113 }
114 return 0;
115}
qs.xiongf1b525b2022-03-31 00:58:23 -0400116*/
117int lynq_wifi_work_mode_get(lynq_wifi_work_mode_m *mode)
qs.xiong97fa59b2022-04-07 05:41:29 -0400118{
119 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiongf1b525b2022-03-31 00:58:23 -0400120 char lynq_cmd_ret[MAX_RET]={0};
121 char lynq_mode[10]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500122 char *strcn="mode=";
qs.xiong97fa59b2022-04-07 05:41:29 -0400123 char sta[MAX_CMD]="station";
124 char ap[MAX_CMD]="AP";
qs.xiong7a105ce2022-03-02 09:43:11 -0500125
qs.xiong1af5daf2022-03-14 09:12:12 -0400126 FILE *fp;
qs.xiong97fa59b2022-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.xiong1af5daf2022-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.xiongf1b525b2022-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.xiong1af5daf2022-03-14 09:12:12 -0400142 }
143 }
144 if(feof(fp)){
145 break;
146 }
147 }
148
qs.xiong97fa59b2022-04-07 05:41:29 -0400149 if((pclose(fp))==-1){
150 perror("close file faild");
151 return -1;
152 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500153
qs.xiong97fa59b2022-04-07 05:41:29 -0400154 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500155}
156
qs.xiongf1b525b2022-03-31 00:58:23 -0400157int lynq_wifi_ap_ssid_set(lynq_wifi_index_e idx,char *ap_ssid)
qs.xiong7a105ce2022-03-02 09:43:11 -0500158{
159 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -0400160 char lynq_wifi_ssid_cmd[80]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500161 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500162 char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
qs.xiong97fa59b2022-04-07 05:41:29 -0400163 if(idx<0||idx>9){
164 return -1;
165 }
166 if(((strlen(ap_ssid))<8) || ((strlen(ap_ssid))>32)){
167 PRINT_AND_RETURN_VALUE("ssid is illgal",-1);
168 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400169 sprintf(lynq_tmp_cmd,"%s%d%s","IFNAME=wlan0 set_network ",idx," ssid ");
170 sprintf(lynq_wifi_ssid_cmd,"%s%s%s%s%s",lynq_tmp_cmd,"\"",ap_ssid,"\"","\n");
qs.xiong7a105ce2022-03-02 09:43:11 -0500171
172 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
173 perror("popen error!");
174 return -1;
175 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400176
qs.xiongf1b525b2022-03-31 00:58:23 -0400177 fwrite(lynq_wifi_ssid_cmd,sizeof(lynq_wifi_ssid_cmd),1,fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400178 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
179
qs.xiong7a105ce2022-03-02 09:43:11 -0500180 int ret=pclose(fp);
181 if(ret==-1){
182 perror("close file faild");
183 return -1;
184 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400185
qs.xiong7a105ce2022-03-02 09:43:11 -0500186 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500187}
188
qs.xiongf1b525b2022-03-31 00:58:23 -0400189int lynq_wifi_ap_ssid_get(lynq_wifi_index_e idx,char* ap_ssid)
qs.xiong7a105ce2022-03-02 09:43:11 -0500190{
qs.xiong97fa59b2022-04-07 05:41:29 -0400191 CHECK_NULL_RETURN_VALUE(ap_ssid,"ap_ssid is null",-1);
qs.xiong1af5daf2022-03-14 09:12:12 -0400192 FILE *fp;
193 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong7a105ce2022-03-02 09:43:11 -0500194 char lynq_cmd_ret[MAX_RET]={0};
195 char *strcn="ssid=";
qs.xiongf1b525b2022-03-31 00:58:23 -0400196 if(idx>10||idx<0){
197 return -1;
198 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500199 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
200 perror("popen error!");
201 return -1;
202 }
203 while(1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400204 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
205 if((strncmp(lynq_cmd_ret,strcn,5))==0)
206 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400207 sscanf(lynq_cmd_ret,"%*[^=]=%s",ap_ssid);
qs.xiong1af5daf2022-03-14 09:12:12 -0400208 }
209 }
210 if(feof(fp)){
211 break;
212 }
213 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400214
qs.xiong1af5daf2022-03-14 09:12:12 -0400215 if((pclose(fp))==-1){
216 perror("close file faild");
217 return -1;
218 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400219 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500220}
221
qs.xiongf1b525b2022-03-31 00:58:23 -0400222int lynq_wifi_ap_frequency_set(lynq_wifi_index_e idx,int lynq_wifi_frequency)
qs.xiong7a105ce2022-03-02 09:43:11 -0500223{
224 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400225 char lynq_wifi_frequency_cmd[MAX_CMD]={0};
226 char lynq_cmd_mode[MAX_CMD]={0};
227 char lynq_cmd_slect[MAX_CMD]={0};
228 char lynq_cmd_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
229 if(idx<0||idx>9){
230 return -1;
231 }
qs.xiong4c91f012022-04-08 06:16:45 -0400232 if((lynq_wifi_frequency != 2437) && (lynq_wifi_frequency != 5180)){
qs.xiong97fa59b2022-04-07 05:41:29 -0400233 PRINT_AND_RETURN_VALUE("set frequency not in range",-1);
234 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400235 sprintf(lynq_wifi_frequency_cmd,"IFNAME=wlan0 set_net %d frequency %d\n", idx, lynq_wifi_frequency);
236 sprintf(lynq_cmd_mode, "IFNAME=wlan0 set_net %d mode 2\n", idx);
237 sprintf(lynq_cmd_slect, "IFNAME=wlan0 select_net %d\n", idx);
qs.xiong7a105ce2022-03-02 09:43:11 -0500238
239 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
240 perror("popen error!");
241 return -1;
242 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400243
qs.xiongf1b525b2022-03-31 00:58:23 -0400244 fwrite(lynq_wifi_frequency_cmd,sizeof(lynq_wifi_frequency_cmd),1,fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400245 fwrite(lynq_cmd_mode,sizeof(lynq_cmd_mode),1,fp);
246 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
247 fwrite(lynq_cmd_slect,sizeof(lynq_cmd_slect),1,fp);
248
qs.xiong7a105ce2022-03-02 09:43:11 -0500249 int ret=pclose(fp);
250 if(ret==-1){
251 perror("close file faild");
252 return -1;
253 }
254
qs.xiong1af5daf2022-03-14 09:12:12 -0400255 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500256}
257
qs.xiongf1b525b2022-03-31 00:58:23 -0400258int lynq_wifi_ap_frequency_get(lynq_wifi_index_e idx,int *lynq_wifi_frequency)
qs.xiong7a105ce2022-03-02 09:43:11 -0500259{
qs.xiong97fa59b2022-04-07 05:41:29 -0400260 CHECK_NULL_RETURN_VALUE(lynq_wifi_frequency,"frequency is null",-1);
261
qs.xiong1af5daf2022-03-14 09:12:12 -0400262 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400263 char lynq_wifi_ssid_cmd[MAX_CMD]="wpa_cli -iwlan0 -p/var/run/wpa_supplicant status";
264 char lynq_cmd_ret[MAX_RET]={0};
qs.xiongf1b525b2022-03-31 00:58:23 -0400265 char *strcn="freq=";
qs.xiong97fa59b2022-04-07 05:41:29 -0400266 char freq[MAX_CMD]={0};
267 if(idx<0||idx>9){
268 return -1;
269 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500270
qs.xiong97fa59b2022-04-07 05:41:29 -0400271 if((fp=popen(lynq_wifi_ssid_cmd,"r"))==NULL){
272 perror("popen error!");
273 return -1;
274 }
275 while(1){
276 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiongf1b525b2022-03-31 00:58:23 -0400277 if((strncmp(lynq_cmd_ret,strcn,5))==0)
qs.xiong97fa59b2022-04-07 05:41:29 -0400278 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400279 sscanf(lynq_cmd_ret,"%*[^=]=%s",freq);
280 *lynq_wifi_frequency=atoi(freq);
281 }
282 }
283 if(feof(fp)){
284 break;
285 }
286 }
287
288 if((pclose(fp))==-1){
289 perror("close file faild");
290 return -1;
291 }
292
293 return 0;
294}
295
296/*
297int lynq_wifi_ap_bandwidth_set(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m bandwidth)
298{
299
300
301
302 return 0;
303}
304*/
305int lynq_wifi_ap_bandwidth_get(lynq_wifi_index_e idx,lynq_wifi_bandwidth_type_m* bandwidth)
306{
qs.xiong97fa59b2022-04-07 05:41:29 -0400307 if(bandwidth==NULL){
308 PRINT_AND_RETURN_VALUE("call falure",-1);
309 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400310 FILE *fp;
311 char aim[MAX_CMD]={0};
312 char number[10]="80";
qs.xiong97fa59b2022-04-07 05:41:29 -0400313 char lynq_wifi_bandwidth_cmd[MAX_CMD]="/data/wl chanspec\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400314 char lynq_cmd_ret[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400315 if(idx<0||idx>9){
316 return -1;
317 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400318
qs.xiong97fa59b2022-04-07 05:41:29 -0400319 if((fp=popen(lynq_wifi_bandwidth_cmd,"r"))==NULL){
qs.xiongf1b525b2022-03-31 00:58:23 -0400320 perror("popen error!");
321 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400322 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400323
324 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
325 strncpy(aim,lynq_cmd_ret+3,2);
qs.xiongf1b525b2022-03-31 00:58:23 -0400326 if((strncmp(aim,number,2))==0){
327 *bandwidth=1;
328 }else{
329 *bandwidth=0;
330 }
331 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400332 if((pclose(fp))==-1){
333 perror("close file faild");
334 return -1;
qs.xiongf1b525b2022-03-31 00:58:23 -0400335 }
336
qs.xiong7a105ce2022-03-02 09:43:11 -0500337 return 0;
338
339}
qs.xiongf1b525b2022-03-31 00:58:23 -0400340/*
341int lynq_wifi_ap_channel_set( lynq_wifi_index_e idx,int channel)
qs.xiong7a105ce2022-03-02 09:43:11 -0500342{
343 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -0400344 FILE *fg;
345 char lynq_cmd_ret[MAX_CMD]={0};
qs.xiongc36178b2022-03-17 14:31:33 -0400346 char lynq_tmp_cmd[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400347 char lynq_change_cmd[MAX_CMD]="/data/wl chanspec ";
348 char chose_idx_cmd[MAX_CMD]="";
qs.xiongf1b525b2022-03-31 00:58:23 -0400349 sprintf(chose_idx_cmd,"%s%d%s","IFNAME=wlan0 slecet_net ",idx,"\n");
350 if((fg=popen(chose_idx_cmd,"r"))==NULL){
351 perror("popen error!");
352 return -1;
353 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400354 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiongf1b525b2022-03-31 00:58:23 -0400355 if((strcmp(lynq_cmd_ret,g_lynq_wifi_ok))!=0){
qs.xiong97fa59b2022-04-07 05:41:29 -0400356 CLOSE_FP_RETURN_VALUE(fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400357 return -1;
358 }
359 }
360 if((pclose(fg))==-1){
361 perror("close file faild");
362 return -1;
363 }
364 sprintf(lynq_tmp_cmd,"%s%d",lynq_change_cmd[1],channel);
qs.xiongc36178b2022-03-17 14:31:33 -0400365 system("/data/wl down");
qs.xiong7a105ce2022-03-02 09:43:11 -0500366 if((fp=popen(lynq_tmp_cmd,"w"))==NULL){
qs.xiongf1b525b2022-03-31 00:58:23 -0400367 perror("popen error!");
368 return -1;
qs.xiongc36178b2022-03-17 14:31:33 -0400369 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400370
qs.xiong7a105ce2022-03-02 09:43:11 -0500371 int ret=pclose(fp);
372 if(ret==-1){
373 perror("close file faild");
374 return -1;
375 }
qs.xiongc36178b2022-03-17 14:31:33 -0400376 system("/data/wl up");
qs.xiong7a105ce2022-03-02 09:43:11 -0500377 return 0;
378}
qs.xiongf1b525b2022-03-31 00:58:23 -0400379*/
380int lynq_wifi_ap_channel_get( lynq_wifi_index_e idx,int* channel)
qs.xiong7a105ce2022-03-02 09:43:11 -0500381{
qs.xiong97fa59b2022-04-07 05:41:29 -0400382 CHECK_NULL_RETURN_VALUE(channel,"channel is null",-1);
qs.xiongf1b525b2022-03-31 00:58:23 -0400383 FILE *fp;
384 char lynq_cmd_set[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400385 char channel_str[MAX_CMD]={0};
qs.xiongf1b525b2022-03-31 00:58:23 -0400386 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400387 if(idx<0||idx>9){
388 return -1;
389 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400390
qs.xiong97fa59b2022-04-07 05:41:29 -0400391 if((fp=popen("/data/wl chanspec","r"))==NULL){
392 perror("popen error!");
qs.xiong1af5daf2022-03-14 09:12:12 -0400393 return -1;
394 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400395
396 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
397 strncpy(channel_str,lynq_cmd_ret,2);
398 *channel=atoi(channel_str);
qs.xiong1af5daf2022-03-14 09:12:12 -0400399 }
400 if((pclose(fp))==-1){
qs.xiong97fa59b2022-04-07 05:41:29 -0400401 perror("close file faild");
qs.xiong1af5daf2022-03-14 09:12:12 -0400402 return -1;
403 }
404
qs.xiong7a105ce2022-03-02 09:43:11 -0500405 return 0;
406}
407
408
qs.xiong97fa59b2022-04-07 05:41:29 -0400409int lynq_wifi_ap_auth_set(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500410{
411 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400412 int ret;
413 if(idx<0||idx>9){
414 return -1;
415 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500416 switch(auth){
qs.xiongf1b525b2022-03-31 00:58:23 -0400417 case LYNQ_WIFI_AUTH_OPEN:
qs.xiong7a105ce2022-03-02 09:43:11 -0500418 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400419 char lynq_auth_cmd[MAX_CMD]={0};
420 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400421 char lynq_cmd_quit[12]="quit\n";
422 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d key_mgmt NONE\n",idx);
423
qs.xiong7a105ce2022-03-02 09:43:11 -0500424 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
425 perror("popen error!");
426 return -1;
427 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500428
429 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
430 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400431 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500432
qs.xiong97fa59b2022-04-07 05:41:29 -0400433 ret=pclose(fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500434 if(ret==-1){
435 perror("close file faild");
436 return -1;
437 }
438 break;
439 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400440 case LYNQ_WIFI_AUTH_WPA_PSK:
qs.xiong7a105ce2022-03-02 09:43:11 -0500441 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400442
qs.xiong97fa59b2022-04-07 05:41:29 -0400443 char lynq_auth_cmd[MAX_CMD]={0};
444 char lynq_psk_cmd[MAX_CMD]={0};
445 char lynq_pairwise_cmd[MAX_CMD]={0};
446 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400447 char lynq_cmd_quit[12]="quit\n";
448
449 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d proto WPA2\n",idx);
450 sprintf(lynq_psk_cmd,"IFNAME=wlan0 set_net %d key_mgmt WPA-PSK\n",idx);
451 sprintf(lynq_pairwise_cmd,"IFNAME=wlan0 set_net %d pairwise CCMP\n",idx);
qs.xiong7a105ce2022-03-02 09:43:11 -0500452
qs.xiong7a105ce2022-03-02 09:43:11 -0500453 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
454 perror("popen error!");
455 return -1;
456 }
457
qs.xiongf1b525b2022-03-31 00:58:23 -0400458 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500459 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
460 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
461 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400462 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500463
qs.xiong97fa59b2022-04-07 05:41:29 -0400464 ret=pclose(fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500465 if(ret==-1){
466 perror("close file faild");
467 return -1;
468 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500469 break;
qs.xiong97fa59b2022-04-07 05:41:29 -0400470 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500471 default:
472 return -1;
473 }
474
qs.xiong7a105ce2022-03-02 09:43:11 -0500475 return 0;
476}
477
qs.xiongf1b525b2022-03-31 00:58:23 -0400478int lynq_wifi_ap_auth_get(lynq_wifi_index_e idx, lynq_wifi_ap_auth_s *auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500479{
qs.xiong97fa59b2022-04-07 05:41:29 -0400480 CHECK_NULL_RETURN_VALUE(auth,"chanauthnel is null",-1);
qs.xiong1af5daf2022-03-14 09:12:12 -0400481 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiongf1b525b2022-03-31 00:58:23 -0400482 char lynq_cmd_ret[MAX_RET]={0};
483 char get_str_auth[20]={0};
484 char use_to_cmp[4]="WPA";
485 char strcn[20]="key_mgmt=";
qs.xiong97fa59b2022-04-07 05:41:29 -0400486 if(idx<0||idx>9){
487 return -1;
488 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500489
qs.xiong1af5daf2022-03-14 09:12:12 -0400490 FILE *fp;
491 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
492 perror("popen error!");
qs.xiong97fa59b2022-04-07 05:41:29 -0400493 return -1;
494 }
495 while(1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400496 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400497 if((strncmp(lynq_cmd_ret,strcn,9))==0)
498 {
qs.xiongf1b525b2022-03-31 00:58:23 -0400499 sscanf(lynq_cmd_ret,"%*[^=]=%s",get_str_auth);
500 if((strncmp(get_str_auth,use_to_cmp,3))==0){
501 *auth=LYNQ_WIFI_AUTH_WPA_PSK;
502 break;
503 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400504 }
505 }
506 if(feof(fp)){
507 break;
508 }
509 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400510 if(*auth!=LYNQ_WIFI_AUTH_WPA_PSK){
511 *auth=LYNQ_WIFI_AUTH_OPEN;
512 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400513 if((pclose(fp))==-1){
514 perror("close file faild");
515 return -1;
516 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500517
qs.xiong1af5daf2022-03-14 09:12:12 -0400518 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500519}
qs.xiongf1b525b2022-03-31 00:58:23 -0400520/*
521int lynq_wifi_ap_max_sta_set(lynq_wifi_index_e idx,int max_sta_num)
qs.xiong7a105ce2022-03-02 09:43:11 -0500522{
qs.xiong7a105ce2022-03-02 09:43:11 -0500523 FILE * fp;
524 char lynq_cmd_ret[MAX_RET]={0};
qs.xiongf1b525b2022-03-31 00:58:23 -0400525 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400526 sprintf(lynq_tmp_cmd,"/data/wl maxassoc %d%s",max_sta_num,"\n");
527 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400528 return -1;
529 }
530 if((fp=popen(lynq_tmp_cmd,"r"))==NULL)
qs.xiong1af5daf2022-03-14 09:12:12 -0400531 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500532 perror("popen error!");
533 return -1;
534 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400535 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
536 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500537 perror("fread fail!");
538 return -1;
539 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400540
qs.xiong7a105ce2022-03-02 09:43:11 -0500541 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400542 if(ret==-1)
543 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500544 perror("close file faild");
545 return -1;
546 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400547
qs.xiong7a105ce2022-03-02 09:43:11 -0500548 return 0;
549}
qs.xiongf1b525b2022-03-31 00:58:23 -0400550*/
551int lynq_wifi_ap_max_sta_get(lynq_wifi_index_e idx,int* max_sta_num)
qs.xiong7a105ce2022-03-02 09:43:11 -0500552{
qs.xiong97fa59b2022-04-07 05:41:29 -0400553 CHECK_NULL_RETURN_VALUE(max_sta_num,"max_sta_num is null",-1);
qs.xiong7a105ce2022-03-02 09:43:11 -0500554 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -0400555 char get_str_num[5]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500556 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400557 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400558 return -1;
559 }
qs.xiongc36178b2022-03-17 14:31:33 -0400560 if((fp=popen("/data/wl maxassoc","r"))==NULL)
qs.xiong1af5daf2022-03-14 09:12:12 -0400561 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500562 perror("popen error!");
563 return -1;
564 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400565 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
566 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500567 perror("fread fail!");
568 return -1;
569 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400570 strcpy(get_str_num,lynq_cmd_ret);
571 *max_sta_num=atoi(get_str_num);
qs.xiong1af5daf2022-03-14 09:12:12 -0400572
qs.xiong7a105ce2022-03-02 09:43:11 -0500573 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400574 if(ret==-1)
575 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500576 perror("close file faild");
577 return -1;
qs.xiong1af5daf2022-03-14 09:12:12 -0400578 }
579
qs.xiong7a105ce2022-03-02 09:43:11 -0500580 return 0;
581}
582
qs.xiongf1b525b2022-03-31 00:58:23 -0400583int lynq_wifi_ap_start(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500584{
qs.xiongf1b525b2022-03-31 00:58:23 -0400585 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400586 char lynq_wifi_cmd[MAX_CMD]={0};
587 char lynq_cmd_quit[MAX_CMD]="quit";
588 if(idx<0||idx>9){
589 return -1;
590 }
591 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiongf1b525b2022-03-31 00:58:23 -0400592
qs.xiong97fa59b2022-04-07 05:41:29 -0400593 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
qs.xiong1af5daf2022-03-14 09:12:12 -0400594 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500595 perror("popen error!");
596 return -1;
597 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500598
qs.xiong97fa59b2022-04-07 05:41:29 -0400599 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
600 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400601
qs.xiong7a105ce2022-03-02 09:43:11 -0500602 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -0400603 if(ret==-1)
604 {
605 perror("close file faild");
606 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500607 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500608 return 0;
609}
610
qs.xiongf1b525b2022-03-31 00:58:23 -0400611int lynq_wifi_ap_restart(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500612{
qs.xiong1af5daf2022-03-14 09:12:12 -0400613 int lynq_stop;
614 int lynq_start;
qs.xiong97fa59b2022-04-07 05:41:29 -0400615 if(idx<0||idx>9){
616 return -1;
617 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400618 lynq_stop = lynq_wifi_ap_stop(idx);
qs.xiong1af5daf2022-03-14 09:12:12 -0400619 if ( lynq_stop != 0 )
620 {
621 return -1;
622 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400623
qs.xiongf1b525b2022-03-31 00:58:23 -0400624 lynq_start = lynq_wifi_ap_start(idx);
qs.xiong1af5daf2022-03-14 09:12:12 -0400625 if ( lynq_start != 0 )
626 {
627 return -1;
628 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400629
qs.xiong7a105ce2022-03-02 09:43:11 -0500630 return 0;
631
632}
633
qs.xiongf1b525b2022-03-31 00:58:23 -0400634int lynq_wifi_ap_stop(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500635{
636 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400637 char lynq_wifi_cmd[MAX_CMD]={0};
638 char lynq_cmd_quit[MAX_CMD]="quit";
639 if(idx<0||idx>9){
640 return -1;
641 }
642 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
qs.xiong1af5daf2022-03-14 09:12:12 -0400643
qs.xiong97fa59b2022-04-07 05:41:29 -0400644 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
645 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500646 perror("popen error!");
647 return -1;
648 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400649
650 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
651 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
652
qs.xiong7a105ce2022-03-02 09:43:11 -0500653 int ret=pclose(fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400654 if(ret==-1)
655 {
656 perror("close file faild");
657 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500658 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500659 return 0;
660}
qs.xiong1af5daf2022-03-14 09:12:12 -0400661
qs.xiongf1b525b2022-03-31 00:58:23 -0400662int lynq_wifi_ap_hide_ssid(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500663{
664 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400665 char lynq_disable_cmd[MAX_CMD]={0};
666 char lynq_select_cmd[MAX_CMD]={0};
qs.xiong1af5daf2022-03-14 09:12:12 -0400667 char lynq_hide_cmd[]="IFNAME=wlan0 SET HIDE_SSID 1\n";
qs.xiong97fa59b2022-04-07 05:41:29 -0400668 if(idx<0||idx>9){
669 return -1;
670 }
671
qs.xiongf1b525b2022-03-31 00:58:23 -0400672 sprintf(lynq_disable_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
673 sprintf(lynq_select_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiong7a105ce2022-03-02 09:43:11 -0500674 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
675 perror("popen error!");
676 return -1;
677 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500678
679 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
680 fwrite(lynq_hide_cmd,sizeof(lynq_hide_cmd),1,fp);
681 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400682
qs.xiong7a105ce2022-03-02 09:43:11 -0500683 int ret=pclose(fp);
684 if(ret==-1){
685 perror("close file faild");
686 return -1;
687 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400688
689 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500690}
691
qs.xiongf1b525b2022-03-31 00:58:23 -0400692int lynq_wifi_ap_unhide_ssid(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500693{
694 FILE *fp;
695 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
696 perror("popen error!");
697 return -1;
698 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400699 char lynq_disable_cmd[MAX_CMD]={0};
700 char lynq_select_cmd[MAX_CMD]={0};
701 char lynq_unhide_cmd[MAX_CMD]="IFNAME=wlan0 SET HIDE_SSID 0\n";
702 if(idx<0||idx>9){
703 return -1;
704 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400705
706 sprintf(lynq_disable_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
707 sprintf(lynq_select_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiong7a105ce2022-03-02 09:43:11 -0500708
709 fwrite(lynq_disable_cmd,sizeof(lynq_disable_cmd),1,fp);
710 fwrite(lynq_unhide_cmd,sizeof(lynq_unhide_cmd),1,fp);
711 fwrite(lynq_select_cmd,sizeof(lynq_select_cmd),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400712
qs.xiong7a105ce2022-03-02 09:43:11 -0500713 int ret=pclose(fp);
714 if(ret==-1){
715 perror("close file faild");
716 return -1;
717 }
718
719 return 0;
720}
qs.xiongf1b525b2022-03-31 00:58:23 -0400721
722int lynq_ap_ssid_pass_set(lynq_wifi_index_e idx,char *password)
qs.xiong7a105ce2022-03-02 09:43:11 -0500723{
724 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -0400725 int ret;
726 int pass_len;
727 pass_len=strlen(password);
qs.xiong97fa59b2022-04-07 05:41:29 -0400728 if(((pass_len+1) > MAX_CMD) || pass_len<8){
729 PRINT_AND_RETURN_VALUE("password is illgal",-1);
730 }else if((lynq_get_wifi_space(password))== 1){
731 PRINT_AND_RETURN_VALUE("password is illgal",-1);
732 }
733 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400734 return -1;
735 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400736 char lynq_tmp_cmd[300]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400737 char lynq_pass_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400738 char lynq_cmd_quit[12]="quit\n";
739 sprintf(lynq_tmp_cmd,"%s%d%s%s%s%s%s","IFNAME=wlan0 set_net ",idx," psk ","\"",password,"\"","\n");
740
741 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
742 perror("popen error!");
743 return -1;
744 }
745
746 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
747 fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
748 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400749
qs.xiongf1b525b2022-03-31 00:58:23 -0400750 ret=pclose(fp);
751 if(ret==-1){
752 perror("close file faild");
753 return -1;
754 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400755
qs.xiongf1b525b2022-03-31 00:58:23 -0400756 return 0;
757}
758
759int lynq_sta_ssid_pass_set(lynq_wifi_index_e idx,char *password)
760{
761 FILE *fp;
762 int pass_len;
763 pass_len=strlen(password);
qs.xiong97fa59b2022-04-07 05:41:29 -0400764 if(((pass_len+1) > MAX_CMD) || pass_len<8){
765 PRINT_AND_RETURN_VALUE("password is illgal",-1);
766 }else if((lynq_get_wifi_space(password))== 1){
767 PRINT_AND_RETURN_VALUE("password is illgal",-1);
768 }
769 if(idx<0||idx>9){
qs.xiongf1b525b2022-03-31 00:58:23 -0400770 return -1;
771 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500772 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400773 char lynq_pass_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -0400774 char lynq_cmd_quit[12]="quit\n";
775 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 -0400776
qs.xiong7a105ce2022-03-02 09:43:11 -0500777 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
778 perror("popen error!");
779 return -1;
780 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400781
qs.xiong7a105ce2022-03-02 09:43:11 -0500782 fwrite(lynq_tmp_cmd,sizeof(lynq_tmp_cmd),1,fp);
783 fwrite(lynq_pass_save,sizeof(lynq_pass_save),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400784 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400785
qs.xiong7a105ce2022-03-02 09:43:11 -0500786 int ret=pclose(fp);
787 if(ret==-1){
788 perror("close file faild");
789 return -1;
790 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400791
qs.xiong7a105ce2022-03-02 09:43:11 -0500792 return 0;
793}
794
qs.xiong97fa59b2022-04-07 05:41:29 -0400795
qs.xiongf1b525b2022-03-31 00:58:23 -0400796int lynq_wifi_sta_ssid_set(lynq_wifi_index_e idx,char *sta_ssid)
qs.xiong7a105ce2022-03-02 09:43:11 -0500797{
qs.xiongf1b525b2022-03-31 00:58:23 -0400798 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400799 char lynq_wifi_ssid_cmd[80]={0};
qs.xiong7a105ce2022-03-02 09:43:11 -0500800 char lynq_tmp_cmd[MAX_CMD]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400801 char lynq_cmd_save[]="IFNAME=wlan0 save_config\n";
802 sprintf(lynq_tmp_cmd,"%s%d%s","IFNAME=wlan0 set_network ",idx," ssid ");
qs.xiongf1b525b2022-03-31 00:58:23 -0400803 sprintf(lynq_wifi_ssid_cmd,"%s%s%s%s%s",lynq_tmp_cmd,"\"",sta_ssid,"\"","\n");
qs.xiong97fa59b2022-04-07 05:41:29 -0400804 if(idx<0||idx>9){
805 return -1;
806 }
807 if(((strlen(sta_ssid))>32)){
808 PRINT_AND_RETURN_VALUE("ssid is illgal",-1);
809 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400810 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
811 perror("popen error!");
812 return -1;
813 }
814
815 fwrite(lynq_wifi_ssid_cmd,sizeof(lynq_wifi_ssid_cmd),1,fp);
816 fwrite(lynq_cmd_save,sizeof(lynq_cmd_save),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400817
818 int ret=pclose(fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500819 if(ret==-1){
820 perror("close file faild");
821 return -1;
822 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400823
qs.xiong97fa59b2022-04-07 05:41:29 -0400824 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -0500825}
826
qs.xiongf1b525b2022-03-31 00:58:23 -0400827int lynq_wifi_sta_ssid_get(lynq_wifi_index_e idx,char* sta_ssid)
qs.xiong7a105ce2022-03-02 09:43:11 -0500828{
qs.xiong97fa59b2022-04-07 05:41:29 -0400829 CHECK_NULL_RETURN_VALUE(sta_ssid,"ap_ssid is null",-1);
830 FILE *fp;
qs.xiong1af5daf2022-03-14 09:12:12 -0400831 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong7a105ce2022-03-02 09:43:11 -0500832 char lynq_cmd_ret[MAX_RET]={0};
833 char *strcn="ssid=";
qs.xiongf1b525b2022-03-31 00:58:23 -0400834 if(idx>10||idx<0){
835 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400836 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500837 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
838 perror("popen error!");
qs.xiong97fa59b2022-04-07 05:41:29 -0400839 return -1;
840 }
841 while(1){
842 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
843 if((strncmp(lynq_cmd_ret,strcn,5))==0)
qs.xiong1af5daf2022-03-14 09:12:12 -0400844 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400845 sscanf(lynq_cmd_ret,"%*[^=]=%s",sta_ssid);
846 }
847 }
848 if(feof(fp)){
849 break;
850 }
851 }
852
853 if((pclose(fp))==-1){
854 perror("close file faild");
855 return -1;
856 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500857 return 0;
858
859}
860
qs.xiongf1b525b2022-03-31 00:58:23 -0400861int lynq_wifi_sta_auth_set(lynq_wifi_index_e idx, lynq_wifi_sta_auth_s auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500862{
qs.xiong1af5daf2022-03-14 09:12:12 -0400863 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400864 int ret;
865 if(idx<0||idx>9){
866 return -1;
867 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400868 switch(auth){
869 case LYNQ_WIFI_STA_AUTH_OPEN:
870 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400871 char lynq_auth_cmd[MAX_CMD]={0};
872 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
873 char lynq_cmd_quit[12]="quit\n";
874 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d key_mgmt NONE\n",idx);
875
qs.xiongf1b525b2022-03-31 00:58:23 -0400876 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400877 perror("popen error!");
878 return -1;
879 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400880
qs.xiong1af5daf2022-03-14 09:12:12 -0400881 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
882 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400883 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
884
885 ret=pclose(fp);
qs.xiongf1b525b2022-03-31 00:58:23 -0400886 if(ret==-1){
887 perror("close file faild");
888 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400889 }
890 break;
891 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400892 case LYNQ_WIFI_STA_AUTH_WPA_PSK:
893 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400894 char lynq_auth_cmd[MAX_CMD]={0};
895 char lynq_psk_cmd[MAX_CMD]={0};
896 char lynq_pairwise_cmd[MAX_CMD]={0};
897 char lynq_auth_save[MAX_CMD]="IFNAME=wlan0 save_config\n";
898 char lynq_cmd_quit[12]="quit\n";
899
900 sprintf(lynq_auth_cmd,"IFNAME=wlan0 set_net %d proto WPA2\n",idx);
901 sprintf(lynq_psk_cmd,"IFNAME=wlan0 set_net %d key_mgmt WPA-PSK\n",idx);
902 sprintf(lynq_pairwise_cmd,"IFNAME=wlan0 set_net %d pairwise CCMP\n",idx);
903
qs.xiongf1b525b2022-03-31 00:58:23 -0400904 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL){
905 perror("popen error!");
906 return -1;
907 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400908
qs.xiongf1b525b2022-03-31 00:58:23 -0400909 fwrite(lynq_auth_cmd,sizeof(lynq_auth_cmd),1,fp);
910 fwrite(lynq_psk_cmd,sizeof(lynq_psk_cmd),1,fp);
911 fwrite(lynq_pairwise_cmd,sizeof(lynq_pairwise_cmd),1,fp);
912 fwrite(lynq_auth_save,sizeof(lynq_auth_save),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400913 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
914
915 ret=pclose(fp);
916 if(ret==-1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400917 perror("close file faild");
918 return -1;
919 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400920 break;
qs.xiong97fa59b2022-04-07 05:41:29 -0400921 }
qs.xiongf1b525b2022-03-31 00:58:23 -0400922 default:
923 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400924 }
925
qs.xiongf1b525b2022-03-31 00:58:23 -0400926 return 0;
qs.xiong1af5daf2022-03-14 09:12:12 -0400927}
qs.xiong7a105ce2022-03-02 09:43:11 -0500928
qs.xiongf1b525b2022-03-31 00:58:23 -0400929int lynq_wifi_sta_auth_get(lynq_wifi_index_e idx, lynq_wifi_sta_auth_s* auth)
qs.xiong7a105ce2022-03-02 09:43:11 -0500930{
qs.xiong97fa59b2022-04-07 05:41:29 -0400931 CHECK_NULL_RETURN_VALUE(auth,"chanauthnel is null",-1);
932 char *lynq_wifi_ssid_cmd[]={"wpa_cli -iwlan0 -p/var/run/wpa_supplicant status"};
qs.xiong1af5daf2022-03-14 09:12:12 -0400933 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -0400934 char get_str_auth[20]={0};
935 char use_to_cmp[4]="WPA";
936 char strcn[20]="key_mgmt=";
qs.xiongf1b525b2022-03-31 00:58:23 -0400937
qs.xiong97fa59b2022-04-07 05:41:29 -0400938 FILE *fp;
939 if((fp=popen(lynq_wifi_ssid_cmd[0],"r"))==NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400940 perror("popen error!");
qs.xiong97fa59b2022-04-07 05:41:29 -0400941 return -1;
qs.xiong1af5daf2022-03-14 09:12:12 -0400942 }
943 while(1){
qs.xiong97fa59b2022-04-07 05:41:29 -0400944 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
qs.xiong1af5daf2022-03-14 09:12:12 -0400945 if((strncmp(lynq_cmd_ret,strcn,9))==0)
946 {
qs.xiong97fa59b2022-04-07 05:41:29 -0400947 sscanf(lynq_cmd_ret,"%*[^=]=%s",get_str_auth);
948 if((strncmp(get_str_auth,use_to_cmp,3))==0){
949 *auth=LYNQ_WIFI_AUTH_WPA_PSK;
950 break;
qs.xiongf1b525b2022-03-31 00:58:23 -0400951 }
qs.xiong1af5daf2022-03-14 09:12:12 -0400952 }
953 }
954 if(feof(fp)){
955 break;
956 }
957 }
qs.xiong97fa59b2022-04-07 05:41:29 -0400958 if(*auth!=LYNQ_WIFI_AUTH_WPA_PSK){
959 *auth=LYNQ_WIFI_AUTH_OPEN;
960 }
961 if((pclose(fp))==-1){
qs.xiong1af5daf2022-03-14 09:12:12 -0400962 perror("close file faild");
963 return -1;
qs.xiong97fa59b2022-04-07 05:41:29 -0400964 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500965
966}
967
qs.xiong97fa59b2022-04-07 05:41:29 -0400968int lynq_wifi_sta_connect(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500969{
970 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400971 char lynq_wifi_cmd[MAX_CMD]={0};
972 char lynq_cmd_quit[MAX_CMD]="quit\n";
973 if(idx<0||idx>9){
974 return -1;
975 }
976 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 select_net %d\n",idx);
qs.xiongf1b525b2022-03-31 00:58:23 -0400977
qs.xiong97fa59b2022-04-07 05:41:29 -0400978 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
979 {
qs.xiong7a105ce2022-03-02 09:43:11 -0500980 perror("popen error!");
981 return -1;
982 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500983
qs.xiong97fa59b2022-04-07 05:41:29 -0400984 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
985 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
qs.xiong7a105ce2022-03-02 09:43:11 -0500986
987 int ret=pclose(fp);
qs.xiong97fa59b2022-04-07 05:41:29 -0400988 if(ret==-1)
989 {
990 perror("close file faild");
991 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -0500992 }
qs.xiong7a105ce2022-03-02 09:43:11 -0500993 return 0;
994}
995
qs.xiongf1b525b2022-03-31 00:58:23 -0400996int lynq_wifi_sta_disconnect(lynq_wifi_index_e idx)
qs.xiong7a105ce2022-03-02 09:43:11 -0500997{
998 FILE *fp;
qs.xiong97fa59b2022-04-07 05:41:29 -0400999 char lynq_wifi_cmd[MAX_CMD]={0};
1000 char lynq_cmd_quit[MAX_CMD]="quit\n";
1001 if(idx<0||idx>9){
1002 return -1;
1003 }
1004 sprintf(lynq_wifi_cmd,"IFNAME=wlan0 disable_net %d\n",idx);
1005
1006 if((fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w"))==NULL)
1007 {
qs.xiong7a105ce2022-03-02 09:43:11 -05001008 perror("popen error!");
1009 return -1;
1010 }
qs.xiong7a105ce2022-03-02 09:43:11 -05001011
qs.xiong97fa59b2022-04-07 05:41:29 -04001012 fwrite(lynq_wifi_cmd,sizeof(lynq_wifi_cmd),1,fp);
1013 fwrite(lynq_cmd_quit,sizeof(lynq_cmd_quit),1,fp);
1014
qs.xiong7a105ce2022-03-02 09:43:11 -05001015 int ret=pclose(fp);
qs.xiong97fa59b2022-04-07 05:41:29 -04001016 if(ret==-1)
1017 {
1018 perror("close file faild");
1019 return -1;
qs.xiong7a105ce2022-03-02 09:43:11 -05001020 }
qs.xiong1af5daf2022-03-14 09:12:12 -04001021
qs.xiong7a105ce2022-03-02 09:43:11 -05001022 return 0;
1023}
qs.xiong97fa59b2022-04-07 05:41:29 -04001024
qs.xiong7a105ce2022-03-02 09:43:11 -05001025int lynq_wifi_wpa_start(void){
qs.xiong9c99fa92022-03-15 08:03:26 -04001026 int ret;
qs.xiongf1b525b2022-03-31 00:58:23 -04001027 pthread_t pth;
qs.xiong7a105ce2022-03-02 09:43:11 -05001028
qs.xiongf1b525b2022-03-31 00:58:23 -04001029 ret=pthread_create(&pth,NULL,StartThread,NULL);
1030 if(ret<0){
1031 return -1;
1032 }
1033 pthread_join(pth,NULL);
qs.xiong9c99fa92022-03-15 08:03:26 -04001034
qs.xiong7a105ce2022-03-02 09:43:11 -05001035 return 0;
1036}
1037
1038int lynq_wifi_wpacli_start(void){
qs.xiong7a105ce2022-03-02 09:43:11 -05001039 FILE *fp;
qs.xiongf1b525b2022-03-31 00:58:23 -04001040 int i=0;
qs.xiong7a105ce2022-03-02 09:43:11 -05001041 char lynq_cmd_ret[MAX_RET]={0};
qs.xiong97fa59b2022-04-07 05:41:29 -04001042 char add_cmd[MAX_CMD]="IFNAME=wlan0 add_net\n";
1043 char save_cmd[MAX_CMD]="IFNAME=wlan0 save_config\n";
qs.xiongf1b525b2022-03-31 00:58:23 -04001044 char exit_cmd[20]="quit\n";
qs.xiong7a105ce2022-03-02 09:43:11 -05001045
qs.xiong97fa59b2022-04-07 05:41:29 -04001046 if(lynq_get_idx_number() == 1){
1047 PRINT_AND_RETURN_VALUE("don't need add idx agin\n",0);
1048 }
qs.xiong7a105ce2022-03-02 09:43:11 -05001049 fp=popen("/usr/bin/wpa_cli -iwpa_wlan0_cmd -p/var/run/","w");
1050 if(fp==NULL){
1051 perror("start wpa_supplicant faild!");
1052 return -1;
1053 }
qs.xiong1af5daf2022-03-14 09:12:12 -04001054
qs.xiong97fa59b2022-04-07 05:41:29 -04001055 for(i=0;i<10;i++){
qs.xiongf1b525b2022-03-31 00:58:23 -04001056 fwrite(add_cmd,sizeof(add_cmd),1,fp);
1057 }
qs.xiong1af5daf2022-03-14 09:12:12 -04001058 fwrite(save_cmd,sizeof(save_cmd),1,fp);
qs.xiongf1b525b2022-03-31 00:58:23 -04001059 fwrite(exit_cmd,sizeof(exit_cmd),1,fp);
qs.xiong97fa59b2022-04-07 05:41:29 -04001060
qs.xiong7a105ce2022-03-02 09:43:11 -05001061 int ret=pclose(fp);
qs.xiong1af5daf2022-03-14 09:12:12 -04001062 if(ret==-1)
1063 {
1064 perror("close file faild");
1065 return -1;
1066 }
qs.xiong97fa59b2022-04-07 05:41:29 -04001067
qs.xiong1af5daf2022-03-14 09:12:12 -04001068 return 0;
qs.xiong7a105ce2022-03-02 09:43:11 -05001069}
1070
qs.xiongf1b525b2022-03-31 00:58:23 -04001071pid_t GetPIDbyName(char* ps_name)
qs.xiong97fa59b2022-04-07 05:41:29 -04001072{
qs.xiongf1b525b2022-03-31 00:58:23 -04001073 FILE *fp;
1074 char *cmd=(char*)calloc(1,200);
1075 sprintf(cmd,"pidof %s",ps_name);
1076 fp=popen(cmd,"r");
1077 fread(cmd,1,200,fp);
1078 fclose(fp);
1079 return atoi(cmd);
1080}
qs.xiong7a105ce2022-03-02 09:43:11 -05001081
qs.xiong97fa59b2022-04-07 05:41:29 -04001082int lynq_get_idx_number(void)
1083{
1084 FILE *fp;
1085 const char* number="9";
1086 char lynq_wifi_ssid_cmd[MAX_CMD]="wpa_cli -iwlan0 -p/var/run/wpa_supplicant list_net";
1087 char lynq_cmd_ret[MAX_RET]={0};
1088
1089 if((fp=popen(lynq_wifi_ssid_cmd,"r"))==NULL){
1090 perror("popen error!");
1091 return -1;
1092 }
1093 while(1){
1094 if((fgets(lynq_cmd_ret,sizeof(lynq_cmd_ret),fp))!=NULL){
1095 if((strncmp(lynq_cmd_ret,number,1))==0)
1096 {
1097 CLOSE_FP_RETURN_VALUE(fp,"don't need add idx",1);
1098 }
1099 }
1100 if(feof(fp)){
1101 break;
1102 }
1103 }
1104
1105 if((pclose(fp))==-1){
1106 perror("close file faild");
1107 return -1;
1108 }
1109
1110 return 0;
1111}
1112
1113
1114int lynq_get_wifi_mac(char* wifi_mac)
1115{
1116 FILE * fp;
1117 char lynq_cmd_ret[MAX_RET]={0};
1118 char lynq_tmp_cmd[MAX_CMD]={0};
1119
1120 if((fp=popen("/data/wl cur_etheraddr","r"))==NULL)
1121 {
1122 perror("popen error!");
1123 return -1;
1124 }
1125 if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
1126 {
1127 perror("fread fail!");
1128 return -1;
1129 }
1130 strncpy(wifi_mac,lynq_cmd_ret+14,18);
1131 int ret=pclose(fp);
1132 if(ret==-1)
1133 {
1134 perror("close file faild");
1135 return -1;
1136 }
1137
1138 return 0;
1139}
1140int lynq_get_wifi_space(char* password){
1141 int i;
1142 for(i=0;password[i];i++){
1143 if(isspace(password[i])){
1144 return 1;
1145 }
1146 }
1147
1148 return 0;
1149}