xref: /OK3568_Linux_fs/external/rkwifibt-app/test/rk_wifi_test.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include <unistd.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <errno.h>
5 #include <pthread.h>
6 #include <sys/prctl.h>
7 #include <sys/time.h>
8 #include <stdbool.h>
9 
10 #include "Rk_wifi.h"
11 #include "Rk_softap.h"
12 
13 struct wifi_info {
14 	int ssid_len;
15 	char ssid[512];
16 	int psk_len;
17 	char psk[512];
18 };
19 
printf_system_time()20 static void printf_system_time()
21 {
22 	struct timeval tv;
23 	gettimeofday(&tv, NULL);
24 
25 	printf("--- time: %lld ms ---\n", tv.tv_sec * 1000 + tv.tv_usec/1000 + tv.tv_usec%1000);
26 }
27 
ping_test()28 static void ping_test()
29 {
30 	char line[2048];
31 
32 	while(1) {
33 		sleep(1);
34 #if 0
35 		if (RK_wifi_ping("www.baidu.com")) {
36 			printf("ping ok\n");
37 			printf_system_time();
38 			rk_wifi_getConnectionInfo(NULL);
39 			break;
40 		}
41 //#else
42 		memset(line, 0, sizeof(line));
43 		RK_shell_exec("ping www.baidu.com -c 1", line, sizeof(line));
44 		//RK_shell_exec("ping 8.8.8.8 -c 1", line, sizeof(line));
45 		//usleep(100000);
46 		printf("line: %s\n", line);
47 		if (strstr(line, "PING www.baidu.com") && strstr(line, "bytes from")) {
48 		//if (strstr(line, "PING 8.8.8.8") && strstr(line, "bytes from")) {
49 			printf("ping ok\n");
50 			printf_system_time();
51 			rk_wifi_getConnectionInfo(NULL);
52 			break;
53 		}
54 #endif
55 		usleep(100000);
56 	}
57 }
58 
printf_connect_info(RK_WIFI_INFO_Connection_s * info)59 static void printf_connect_info(RK_WIFI_INFO_Connection_s *info)
60 {
61 	if(!info)
62 		return;
63 
64 	printf("	id: %d\n", info->id);
65 	printf("	bssid: %s\n", info->bssid);
66 	printf("	ssid: %s\n", info->ssid);
67 	printf("	freq: %d\n", info->freq);
68 	printf("	mode: %s\n", info->mode);
69 	printf("	wpa_state: %s\n", info->wpa_state);
70 	printf("	ip_address: %s\n", info->ip_address);
71 	printf("	mac_address: %s\n", info->mac_address);
72 }
73 
74 /*****************************************************************
75  *                     wifi config                               *
76  *****************************************************************/
77 static volatile bool rkwifi_gonff = false;
78 static RK_WIFI_RUNNING_State_e wifi_state = 0;
rk_wifi_state_callback(RK_WIFI_RUNNING_State_e state,RK_WIFI_INFO_Connection_s * info)79 static int rk_wifi_state_callback(RK_WIFI_RUNNING_State_e state, RK_WIFI_INFO_Connection_s *info)
80 {
81 	printf("%s state: %d\n", __func__, state);
82 	printf_connect_info(info);
83 
84 	wifi_state = state;
85 	if (state == RK_WIFI_State_CONNECTED) {
86 		printf("RK_WIFI_State_CONNECTED\n");
87 		//ping_test();
88 		//RK_wifi_get_connected_ap_rssi();
89 	} else if (state == RK_WIFI_State_CONNECTFAILED) {
90 		printf("RK_WIFI_State_CONNECTFAILED\n");
91 	} else if (state == RK_WIFI_State_CONNECTFAILED_WRONG_KEY) {
92 		printf("RK_WIFI_State_CONNECTFAILED_WRONG_KEY\n");
93 	} else if (state == RK_WIFI_State_OPEN) {
94 		rkwifi_gonff = true;
95 		printf("RK_WIFI_State_OPEN\n");
96 	} else if (state == RK_WIFI_State_OFF) {
97 		rkwifi_gonff = false;
98 		printf("RK_WIFI_State_OFF\n");
99 	} else if (state == RK_WIFI_State_DISCONNECTED) {
100 		printf("RK_WIFI_State_DISCONNECTED\n");
101 	} else if (state == RK_WIFI_State_SCAN_RESULTS) {
102 		char *scan_r;
103 		printf("RK_WIFI_State_SCAN_RESULTS\n");
104 		scan_r = RK_wifi_scan_r();
105 		//printf("%s\n", scan_r);
106 		free(scan_r);
107 	}
108 
109 	return 0;
110 }
111 
rk_wifi_config_thread(void * arg)112 static void *rk_wifi_config_thread(void *arg)
113 {
114 	struct wifi_info *info;
115 
116 	printf("rk_config_wifi_thread\n");
117 
118 	prctl(PR_SET_NAME,"rk_config_wifi_thread");
119 
120 	wifi_state = 0;
121 
122 	info = (struct wifi_info *) arg;
123 	RK_wifi_register_callback(rk_wifi_state_callback);
124 	RK_wifi_connect(info->ssid, info->psk);
125 
126 	printf("Exit wifi config thread\n");
127 	return NULL;
128 }
129 
130 /*****************************************************************
131  *                     airkiss wifi config test                  *
132  *****************************************************************/
rk_wifi_airkiss_start(void * data)133 void rk_wifi_airkiss_start(void *data)
134 {
135 	int err  = 0;
136 	struct wifi_info info;
137 	pthread_t tid = 0;
138 
139 	memset(&info, 0, sizeof(struct wifi_info));
140 
141 	printf("===== %s =====\n", __func__);
142 
143 	//if(RK_wifi_airkiss_start(info.ssid, info.psk) < 0)
144 	//	return;
145 
146 	wifi_state = 0;
147 
148 	err = pthread_create(&tid, NULL, rk_wifi_config_thread, &info);
149 	if (err) {
150 		printf("Error - pthread_create() return code: %d\n", err);
151 		return;
152 	}
153 
154 	while (!wifi_state)
155 		sleep(1);
156 }
157 
rk_wifi_airkiss_stop(void * data)158 void rk_wifi_airkiss_stop(void *data)
159 {
160 	//RK_wifi_airkiss_stop();
161 }
162 
163 /*****************************************************************
164  *                     softap wifi config test                   *
165  *****************************************************************/
rk_wifi_softap_state_callback(RK_SOFTAP_STATE state,const char * data)166 static int rk_wifi_softap_state_callback(RK_SOFTAP_STATE state, const char* data)
167 {
168 	switch (state) {
169 	case RK_SOFTAP_STATE_CONNECTTING:
170 		printf("RK_SOFTAP_STATE_CONNECTTING\n");
171 		break;
172 	case RK_SOFTAP_STATE_DISCONNECT:
173 		printf("RK_SOFTAP_STATE_DISCONNECT\n");
174 		break;
175 	case RK_SOFTAP_STATE_FAIL:
176 		printf("RK_SOFTAP_STATE_FAIL\n");
177 		break;
178 	case RK_SOFTAP_STATE_SUCCESS:
179 		printf("RK_SOFTAP_STATE_SUCCESS\n");
180 		break;
181 	default:
182 		break;
183 	}
184 
185 	return 0;
186 }
187 
rk_wifi_softap_start(void * data)188 void rk_wifi_softap_start(void *data)
189 {
190 	printf("%s enter\n", __func__);
191 	RK_softap_register_callback(rk_wifi_softap_state_callback);
192 	if (0 != RK_softap_start("Rockchip-SoftAp", RK_SOFTAP_TCP_SERVER)) {
193 		return;
194 	}
195 }
196 
rk_wifi_softap_stop(void * data)197 void rk_wifi_softap_stop(void *data)
198 {
199 	RK_softap_stop();
200 }
201 
_rk_wifi_open(void * data)202 void _rk_wifi_open(void *data)
203 {
204 	RK_wifi_register_callback(rk_wifi_state_callback);
205 
206 	if (RK_wifi_enable(1) < 0)
207 		printf("RK_wifi_enable 1 fail!\n");
208 }
209 
rk_wifi_close(void * data)210 void rk_wifi_close(void *data)
211 {
212 	if (RK_wifi_enable(0) < 0)
213 		printf("RK_wifi_enable 0 fail!\n");
214 }
215 
216 static int wifi_cnt = 0;
wifi_test_onff_thread(void * arg)217 void *wifi_test_onff_thread(void *arg)
218 {
219 	while (1) {
220 		//open
221 		RK_wifi_register_callback(rk_wifi_state_callback);
222 		if (RK_wifi_enable(1) < 0)
223 			printf("RK_wifi_enable 1 fail!\n");
224 
225 		while (rkwifi_gonff == false) {
226 			sleep(1);
227 			printf("%s: RKWIFI TURNING ON ...\n", __func__);
228 		}
229 
230 		//scan
231 		RK_wifi_scan();
232 		sleep(1);
233 
234 		//close
235 		printf("%s: RKWIFI DEINIT\n", __func__);
236 		if (RK_wifi_enable(0) < 0)
237 			printf("RK_wifi_enable 0 fail!\n");
238 
239 		while (rkwifi_gonff == true) {
240 			sleep(1);
241 			printf("%s: RKWIFI TURNING OFF ...\n", __func__);
242 		}
243 		printf("%s: RKWIFI TURN ONOFF CNT: [%d] \n", __func__, wifi_cnt++);
244 	}
245 }
246 
247 static pthread_t rkwifi_init_thread = 0;
rk_wifi_openoff_test(char * data)248 void rk_wifi_openoff_test(char *data)
249 {
250 	printf("%s: ", __func__);
251 
252 	if (rkwifi_init_thread) {
253 		printf("rkwifi_init_thread already exist\n");
254 		return;
255 	}
256 
257 	if (pthread_create(&rkwifi_init_thread, NULL, wifi_test_onff_thread, NULL)) {
258 		printf("Createrkwifi_init_thread failed\n");
259 		return;
260 	}
261 }
262 
rk_wifi_open(char * data)263 void rk_wifi_open(char *data)
264 {
265 	printf("%s: ", __func__);
266 
267 	RK_wifi_register_callback(rk_wifi_state_callback);
268 	if (RK_wifi_enable(1) < 0)
269 		printf("RK_wifi_enable 1 fail!\n");
270 }
271 
272 //9 input fish1:rk12345678
rk_wifi_connect(void * data)273 void rk_wifi_connect(void *data)
274 {
275 	char *ssid = NULL, *psk = NULL;
276 
277 	if(data == NULL) {
278 		printf("%s: invalid input\n", __func__);
279 		return;
280 	}
281 
282 	ssid = strtok(data, ":");
283 	if(ssid)
284 		psk = strtok(NULL, ":");
285 
286 	if (RK_wifi_connect(ssid, psk) < 0)
287 		printf("RK_wifi_connect1 fail!\n");
288 }
289 
rk_wifi_connect1(void * data)290 void rk_wifi_connect1(void *data)
291 {
292 	char *ssid = NULL, *psk = NULL;
293 
294 	if (RK_wifi_connect1("1a~!@#%^*()=+]['\\\\\\\":\\/?.>,<", "12345678", WPA, 1) < 0)
295 		printf("RK_wifi_connect1 fail!\n");
296 
297 	return;
298 
299 	if(data == NULL) {
300 		printf("%s: invalid input\n", __func__);
301 		return;
302 	}
303 
304 	ssid = strtok(data, ":");
305 	if(ssid)
306 		psk = strtok(NULL, ":");
307 
308 	if (RK_wifi_connect(ssid, psk) < 0)
309 		printf("RK_wifi_connect1 fail!\n");
310 }
311 
rk_wifi_ping(void * data)312 void rk_wifi_ping(void *data)
313 {
314 	if (!RK_wifi_ping("www.baidu.com"))
315 		printf("RK_wifi_ping fail!\n");
316 }
317 
rk_wifi_scan(void * data)318 void rk_wifi_scan(void *data)
319 {
320 	if (RK_wifi_scan() < 0)
321 		printf("RK_wifi_scan fail!\n");
322 }
323 
rk_wifi_getSavedInfo(void * data)324 void rk_wifi_getSavedInfo(void *data)
325 {
326 	RK_WIFI_SAVED_INFO_s *wsi;
327 	int ap_cnt = 0;
328 
329 	RK_wifi_getSavedInfo(&wsi, &ap_cnt);
330 	if (ap_cnt <= 0) {
331 		printf("not found saved ap!\n");
332 		return;
333 	}
334 
335 	for (int i = 0; i < ap_cnt; i++) {
336 		printf("id: %d, name: %s, bssid: %s, state: %s\n",
337 					wsi[i].id,
338 					wsi[i].ssid,
339 					wsi[i].bssid,
340 					wsi[i].state);
341 	}
342 
343 	if (wsi != NULL)
344 		free(wsi);
345 }
346 
rk_wifi_getConnectionInfo(void * data)347 void rk_wifi_getConnectionInfo(void *data)
348 {
349 	RK_WIFI_INFO_Connection_s info;
350 
351 	if(!RK_wifi_running_getConnectionInfo(&info))
352 		printf_connect_info(&info);
353 }
354 
rk_wifi_connect_with_ssid(void * data)355 void rk_wifi_connect_with_ssid(void *data)
356 {
357 	if(data == NULL) {
358 		printf("%s: ssid is null\n", __func__);
359 		return;
360 	}
361 
362 	if (RK_wifi_connect_with_ssid(data) < 0)
363 		printf("RK_wifi_connect_with_ssid fail!\n");
364 }
365 
rk_wifi_cancel(void * data)366 void rk_wifi_cancel(void *data)
367 {
368 	if (RK_wifi_cancel() < 0)
369 		printf("RK_wifi_cancel fail!\n");
370 }
371 
rk_wifi_forget_with_ssid(void * data)372 void rk_wifi_forget_with_ssid(void *data)
373 {
374 	if(data == NULL) {
375 		printf("%s: ssid is null\n", __func__);
376 		return;
377 	}
378 
379 	if (RK_wifi_forget_with_ssid(data) < 0) {
380 		printf("rk_wifi_forget_with_ssid fail!\n");
381 	}
382 }
383 
rk_wifi_disconnect(void * data)384 void rk_wifi_disconnect(void *data)
385 {
386 	RK_wifi_disconnect_network();
387 }
388