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