xref: /OK3568_Linux_fs/external/rkwifibt-app/test/main.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * Copyright (c) 2017 Rockchip, Inc. All Rights Reserved.
3  *
4  *  Licensed under the Apache License, Version 2.0 (the "License");
5  *  you may not use this file except in compliance with the License.
6  *  You may obtain a copy of the License at
7  *
8  *	 http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an "AS IS" BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License.
15  */
16 
17 #include <string.h>
18 #include <pthread.h>
19 #include <fcntl.h>
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <unistd.h>
23 #include <math.h>
24 #include <sys/select.h>
25 #include <linux/input.h>
26 #include <linux/rtc.h>
27 
28 #include "bt_test.h"
29 #include "rk_ble_app.h"
30 #include "rk_wifi_test.h"
31 
32 static void rkwifibt_test_bluetooth();
33 static void rkwifibt_test_wifi_config();
34 #ifdef BLUEZ_USE
35 static void rkwifibt_test_bluetooth_1s2();
36 #endif
37 
38 typedef struct {
39 	const char *cmd;
40 	const char *desc;
41 	void (*action)(void);
42 } menu_command_t;
43 
44 static menu_command_t menu_command_table[] = {
45 	{"bluetooth", "show bluetooth test cmd menu", rkwifibt_test_bluetooth},
46 	{"wificonfig", "show wifi config test cmd menu", rkwifibt_test_wifi_config},
47 };
48 
49 static void show_bt_cmd();
50 static void show_wifi_config_cmd();
51 
52 typedef struct {
53 	const char *cmd;
54 	void (*action)(void *data);
55 } command_t;
56 
57 typedef struct {
58 	const char *cmd;
59 	void (*action)(char *data);
60 } command_bt_t;
61 
62 static command_t wifi_config_command_table[] = {
63 	{"", NULL},
64 	{"ble_wifi_config_start", rk_ble_wifi_init},
65 	{"ble_wifi_config_stop", rk_ble_wifi_deinit},
66 	{"softap_wifi_config_start", rk_wifi_softap_start},
67 	{"softap_wifi_config_stop", rk_wifi_softap_stop},
68 	{"wifi_open", rk_wifi_open},
69 	{"wifi_onoff_test", rk_wifi_openoff_test},
70 	{"wifi_close", rk_wifi_close},
71 	{"wifi_connect", rk_wifi_connect},
72 	{"wifi_ping", rk_wifi_ping},
73 	{"wifi_scan", rk_wifi_scan},
74 	{"wifi_getSavedInfo", rk_wifi_getSavedInfo},
75 	{"rk_wifi_getConnectionInfo", rk_wifi_getConnectionInfo},
76 	{"wifi_connect_with_ssid", rk_wifi_connect_with_ssid},
77 	{"wifi_cancel", rk_wifi_cancel},
78 	{"wifi_forget_with_ssid", rk_wifi_forget_with_ssid},
79 	{"wifi_connect1", rk_wifi_connect1},
80 	{"rk_wifi_disconnect", rk_wifi_disconnect},
81 };
82 
83 static command_bt_t bt_command_table[] = {
84 	{"", NULL},
85 	{"bt_server_open", bt_test_bluetooth_init},
86 	{"bt_onoff_test", bt_test_bluetooth_onff_init},
87 	{"bt_test_set_class", bt_test_set_class},
88 	{"bt_test_get_device_name", bt_test_get_device_name},
89 	{"bt_test_get_device_addr", bt_test_get_device_addr},
90 	{"bt_test_set_device_name", bt_test_set_device_name},
91 	{"bt_test_enable_reconnect", bt_test_enable_reconnect},
92 	{"bt_test_disable_reconnect", bt_test_disable_reconnect},
93 	{"bt_test_start_discovery", bt_test_start_discovery},
94 	{"bt_test_start_discovery_le", bt_test_start_discovery_le},
95 	{"bt_test_start_discovery_bredr", bt_test_start_discovery_bredr},
96 	{"bt_test_start_discovery_pan", bt_test_start_discovery_pan},
97 	{"bt_test_cancel_discovery", bt_test_cancel_discovery},
98 	{"bt_test_is_discovering", bt_test_is_discovering},
99 	{"bt_test_display_devices", bt_test_display_devices},
100 	{"bt_test_read_remote_device_name", bt_test_read_remote_device_name},
101 	{"bt_test_get_scaned_devices", bt_test_get_scaned_devices},
102 	{"bt_test_display_paired_devices", bt_test_display_paired_devices},
103 	{"bt_test_get_paired_devices", bt_test_get_paired_devices},
104 	{"bt_test_free_paired_devices", bt_test_free_paired_devices},
105 	{"bt_test_pair_by_addr", bt_test_pair_by_addr},
106 	{"bt_test_unpair_by_addr", bt_test_unpair_by_addr},
107 	{"bt_test_get_connected_properties", bt_test_get_connected_properties},
108 	{"bt_test_source_auto_start", bt_test_source_auto_start},
109 	{"bt_test_source_connect_status", bt_test_source_connect_status},
110 	{"bt_test_source_auto_stop", bt_test_source_auto_stop},
111 	{"bt_test_source_open", bt_test_source_open},
112 	{"bt_test_source_close", bt_test_source_close},
113 	{"bt_test_source_connect_by_addr", bt_test_source_connect_by_addr},
114 	{"bt_test_source_disconnect", bt_test_source_disconnect},
115 	{"bt_test_source_disconnect_by_addr", bt_test_source_disconnect_by_addr},
116 	{"bt_test_source_remove_by_addr", bt_test_source_remove_by_addr},
117 	{"bt_test_sink_open", bt_test_sink_open},
118 	{"bt_test_sink_visibility00", bt_test_sink_visibility00},
119 	{"bt_test_sink_visibility01", bt_test_sink_visibility01},
120 	{"bt_test_sink_visibility10", bt_test_sink_visibility10},
121 	{"bt_test_sink_visibility11", bt_test_sink_visibility11},
122 	{"bt_test_ble_visibility00", bt_test_ble_visibility00},
123 	{"bt_test_ble_visibility11", bt_test_ble_visibility11},
124 	{"bt_test_sink_status", bt_test_sink_status},
125 	{"bt_test_sink_music_play", bt_test_sink_music_play},
126 	{"bt_test_sink_music_pause", bt_test_sink_music_pause},
127 	{"bt_test_sink_music_next", bt_test_sink_music_next},
128 	{"bt_test_sink_music_previous", bt_test_sink_music_previous},
129 	{"bt_test_sink_music_stop", bt_test_sink_music_stop},
130 	{"bt_test_sink_set_volume", bt_test_sink_set_volume},
131 	{"bt_test_sink_connect_by_addr", bt_test_sink_connect_by_addr},
132 	{"bt_test_sink_disconnect_by_addr", bt_test_sink_disconnect_by_addr},
133 	{"bt_test_sink_get_play_status", bt_test_sink_get_play_status},
134 	{"bt_test_sink_get_poschange", bt_test_sink_get_poschange},
135 	{"bt_test_sink_disconnect", bt_test_sink_disconnect},
136 	{"bt_test_sink_close", bt_test_sink_close},
137 	{"bt_test_ble_start", bt_test_ble_start},
138 	{"bt_test_ble_set_address", bt_test_ble_set_address},
139 	{"bt_test_ble_set_adv_interval", bt_test_ble_set_adv_interval},
140 	{"bt_test_ble_write", bt_test_ble_write},
141 	{"bt_test_ble_disconnect", bt_test_ble_disconnect},
142 	{"bt_test_ble_stop", bt_test_ble_stop},
143 	{"bt_test_ble_get_status", bt_test_ble_get_status},
144 	{"bt_test_ble_client_open", bt_test_ble_client_open},
145 	{"bt_test_ble_client_close", bt_test_ble_client_close},
146 	{"bt_test_ble_client_connect", bt_test_ble_client_connect},
147 	{"bt_test_ble_client_disconnect", bt_test_ble_client_disconnect},
148 	{"bt_test_ble_client_get_status", bt_test_ble_client_get_status},
149 	{"bt_test_ble_client_get_service_info", bt_test_ble_client_get_service_info},
150 	{"bt_test_ble_client_read", bt_test_ble_client_read},
151 	{"bt_test_ble_client_write", bt_test_ble_client_write},
152 	{"bt_test_ble_client_is_notify", bt_test_ble_client_is_notify},
153 	{"bt_test_ble_client_notify_on", bt_test_ble_client_notify_on},
154 	{"bt_test_ble_client_notify_off", bt_test_ble_client_notify_off},
155 	{"bt_test_ble_client_indicate_on", bt_test_ble_client_indicate_on},
156 	{"bt_test_ble_client_indicate_off", bt_test_ble_client_indicate_off},
157 	{"bt_test_ble_client_get_eir_data", bt_test_ble_client_get_eir_data},
158 	{"bt_test_spp_open", bt_test_spp_open},
159 	{"bt_test_spp_write", bt_test_spp_write},
160 	{"bt_test_spp_close", bt_test_spp_close},
161 	{"bt_test_spp_status", bt_test_spp_status},
162 	{"bt_test_spp_listen", bt_test_spp_listen},
163 	{"bt_test_spp_connect", bt_test_spp_connect},
164 	{"bt_test_spp_disconnect", bt_test_spp_disconnect},
165 	{"bt_test_start_discovery_spp", bt_test_start_discovery_spp},
166 	{"bt_test_hfp_sink_open", bt_test_hfp_sink_open},
167 	{"bt_test_hfp_hp_open", bt_test_hfp_hp_open},
168 	{"bt_test_hfp_hp_accept", bt_test_hfp_hp_accept},
169 	{"bt_test_hfp_hp_hungup", bt_test_hfp_hp_hungup},
170 	{"bt_test_hfp_hp_redail", bt_test_hfp_hp_redial},
171 	{"bt_test_hfp_hp_dial_number", bt_test_hfp_hp_dial_number},
172 	{"bt_test_hfp_hp_report_battery", bt_test_hfp_hp_report_battery},
173 	{"bt_test_hfp_hp_set_volume", bt_test_hfp_hp_set_volume},
174 	{"bt_test_hfp_hp_close", bt_test_hfp_hp_close},
175 	{"bt_test_hfp_hp_disconnect", bt_test_hfp_hp_disconnect},
176 	{"bt_test_obex_init", bt_test_obex_init},
177 	{"bt_test_obex_pbap_init", bt_test_obex_pbap_init},
178 	{"bt_test_obex_pbap_connect", bt_test_obex_pbap_connect},
179 	{"bt_test_obex_pbap_get_pb_vcf", bt_test_obex_pbap_get_pb_vcf},
180 	{"bt_test_obex_pbap_get_ich_vcf", bt_test_obex_pbap_get_ich_vcf},
181 	{"bt_test_obex_pbap_get_och_vcf", bt_test_obex_pbap_get_och_vcf},
182 	{"bt_test_obex_pbap_get_mch_vcf", bt_test_obex_pbap_get_mch_vcf},
183 	{"bt_test_obex_pbap_get_spd_vcf", bt_test_obex_pbap_get_spd_vcf},
184 	{"bt_test_obex_pbap_get_fav_vcf", bt_test_obex_pbap_get_fav_vcf},
185 	{"bt_test_obex_pbap_disconnect", bt_test_obex_pbap_disconnect},
186 	{"bt_test_obex_pbap_deinit", bt_test_obex_pbap_deinit},
187 	{"bt_test_obex_deinit", bt_test_obex_deinit},
188 	{"bt_test_pan_init", bt_test_pan_init},
189 	{"bt_test_pan_deinit", bt_test_pan_deinit},
190 	{"bt_test_pan_connect", bt_test_pan_connect},
191 	{"bt_test_pan_disconnect", bt_test_pan_disconnect},
192 	{"bt_test_get_eir_data", bt_test_get_eir_data},
193 	{"bt_server_close", bt_test_bluetooth_deinit},
194 };
195 
show_wifi_config_cmd()196 static void show_wifi_config_cmd() {
197 	unsigned int i;
198 	for (i = 1; i < sizeof(wifi_config_command_table) / sizeof(wifi_config_command_table[0]); i++) {
199 		printf("%02d.  %s \n", i, wifi_config_command_table[i].cmd);
200 	}
201 }
202 
show_bt_cmd()203 static void show_bt_cmd() {
204 	unsigned int i;
205 	for (i = 1; i < sizeof(bt_command_table) / sizeof(bt_command_table[0]); i++) {
206 		printf("%02d.  %s \n", i, bt_command_table[i].cmd);
207 	}
208 }
209 
show_help(char * bin_name)210 static void show_help(char *bin_name) {
211 	unsigned int i;
212 	printf("%s [Usage]:\n", bin_name);
213 	for (i = 0; i < sizeof(menu_command_table)/sizeof(menu_command_t); i++)
214 		printf("\t\"%s %s\":%s.\n", bin_name, menu_command_table[i].cmd, menu_command_table[i].desc);
215 }
216 
rkwifibt_test_wifi_config()217 static void rkwifibt_test_wifi_config()
218 {
219 	int i, item_cnt;
220 	char *input_start;
221 	char cmdBuf[64] = {0};
222 	char szBuf[64] = {0};
223 	char szBuf_space[64] = {0};
224 
225 	item_cnt = sizeof(wifi_config_command_table) / sizeof(command_t);
226 	show_wifi_config_cmd();
227 
228 	while(true) {
229 		printf("Please input number or help to run: ");
230 
231 		memset(szBuf, 0, sizeof(szBuf));
232 		if (fgets(szBuf_space, 64, stdin) == NULL)
233 			continue;
234 
235 		if (!strncmp("help", szBuf_space, 4) || !strncmp("h", szBuf_space, 1))
236 			show_wifi_config_cmd();
237 
238 		//printf("szBuf_space: %s:len\n", szBuf_space, sizeof(szBuf_space));
239 		strncpy(szBuf, szBuf_space, strlen(szBuf_space) - 1);
240 
241 		input_start = strstr(szBuf, "input");
242 		if(input_start == NULL) {
243 			i = atoi(szBuf);
244 			if ((i >= 1) && (i < item_cnt))
245 				wifi_config_command_table[i].action(NULL);
246 		} else {
247 			memset(cmdBuf, 0, sizeof(cmdBuf));
248 			strncpy(cmdBuf, szBuf, strlen(szBuf) - strlen(input_start) - 1);
249 			i = atoi(cmdBuf);
250 			printf("%s: i = %d\n", __func__, i);
251 			if ((i >= 1) && (i < item_cnt))
252 				wifi_config_command_table[i].action(input_start + strlen("input") + 1);
253 		}
254 	}
255 
256 	return;
257 }
258 
rkwifibt_test_bluetooth()259 static void rkwifibt_test_bluetooth()
260 {
261 	int i, item_cnt;
262 	char *input_start;
263 	char cmdBuf[64] = {0};
264 	char szBuf[64] = {0};
265 	char szBuf_space[64] = {0};
266 
267 	item_cnt = sizeof(bt_command_table) / sizeof(command_bt_t);
268 	show_bt_cmd();
269 
270 	while(true) {
271 		memset(szBuf, 0, sizeof(szBuf));
272 		printf("Please input number or help to run: ");
273 
274 		if (fgets(szBuf_space, 64, stdin) == NULL)
275 			continue;
276 
277 		if (!strncmp("help", szBuf_space, 4) || !strncmp("h", szBuf_space, 1))
278 			show_bt_cmd();
279 
280 		///printf("szBuf_space: %s:len\n", szBuf_space, sizeof(szBuf_space));
281 		strncpy(szBuf, szBuf_space, strlen(szBuf_space) - 1);
282 
283 		input_start = strstr(szBuf, "input");
284 		if(input_start == NULL) {
285 			i = atoi(szBuf);
286 			//printf("%s: select %d\n", __func__, i);
287 			if ((i >= 1) && (i < item_cnt))
288 				bt_command_table[i].action(NULL);
289 		} else {
290 			memset(cmdBuf, 0, sizeof(cmdBuf));
291 			strncpy(cmdBuf, szBuf, strlen(szBuf) - strlen(input_start) - 1);
292 			//printf("%s: cmdBuf = %s\n", __func__, cmdBuf);
293 			i = atoi(cmdBuf);
294 			printf("%s: i = %d\n", __func__, i);
295 			if ((i >= 1) && (i < item_cnt))
296 				bt_command_table[i].action(input_start + strlen("input") + 1);
297 		}
298 	}
299 
300 	return;
301 }
302 
main(int argc,char * argv[])303 int main(int argc, char *argv[])
304 {
305 	int i, item_cnt;
306 	char version[64] = {0};
307 
308 	//RK_read_version(version, 64);
309 	item_cnt = sizeof(menu_command_table) / sizeof(menu_command_t);
310 
311 	if (argc < 2) {
312 		printf("ERROR:invalid argument.\n");
313 		show_help(argv[0]);
314 		return -1;
315 	}
316 
317 	if ((!strncmp(argv[1], "-h", 2)) || (!strncmp(argv[1], "help", 4))) {
318 		show_help(argv[0]);
319 		return 0;
320 	}
321 
322 	for (i = 0; i < item_cnt; i++) {
323 		if (!strncmp(argv[1], menu_command_table[i].cmd, strlen(menu_command_table[i].cmd)))
324 			break;
325 	}
326 
327 	if (i >= item_cnt) {
328 		printf("ERROR:invalid menu cmd.\n");
329 		show_help(argv[0]);
330 		return -1;
331 	}
332 
333 	menu_command_table[i].action();
334 
335 	while(true)
336 		sleep(1);
337 
338 	return 0;
339 }
340