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