2 * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
22 #include <sys/socket.h>
34 extern struct menu_data menu_mesh_device[];
35 extern struct menu_data menu_mesh_network[];
37 /* Scanned Mesh Network */
38 extern GList *g_found_network_list;
40 const char* mesh_error_to_string(mesh_error_e err)
43 /* CHECK: List all enum values here */
44 CASE_TO_STR(MESH_ERROR_NONE)
45 CASE_TO_STR(MESH_ERROR_INVALID_PARAMETER)
46 CASE_TO_STR(MESH_ERROR_OUT_OF_MEMORY)
47 CASE_TO_STR(MESH_ERROR_NO_DATA)
48 CASE_TO_STR(MESH_ERROR_INVALID_OPERATION)
49 CASE_TO_STR(MESH_ERROR_ALREADY_IN_PROGRESS)
50 CASE_TO_STR(MESH_ERROR_NOW_IN_PROGRESS)
51 CASE_TO_STR(MESH_ERROR_PERMISSION_DENIED)
52 CASE_TO_STR(MESH_ERROR_IO_ERROR)
53 CASE_TO_STR(MESH_ERROR_NOT_SUPPORTED)
54 CASE_TO_STR(MESH_ERROR_OPERATION_FAILED)
55 CASE_TO_STR(MESH_ERROR_OPERATION_ABORTED)
57 return "Unknown Error";
61 static const char* _mesh_event_to_string(mesh_event_e e)
64 /* CHECK: List all enum values here */
65 CASE_TO_STR(MESH_MESH_ENABLED_EVENT)
66 CASE_TO_STR(MESH_SCAN_DONE_EVENT)
67 CASE_TO_STR(MESH_JOIN_NETWORK_EVENT)
68 CASE_TO_STR(MESH_LEFT_NETWORK_EVENT)
69 CASE_TO_STR(MESH_STATION_JOIN_EVENT)
70 CASE_TO_STR(MESH_STATION_LEFT_EVENT)
71 CASE_TO_STR(MESH_CONNECTED_EVENT)
73 return "MESH_EVENT_UNKNOWN";
77 void event_cb(mesh_event_e event_type, mesh_event_data_s* event)
80 msgp("Event received [%s]", _mesh_event_to_string(event_type));
83 case MESH_MESH_ENABLED_EVENT: {
84 msgp(" Mesh Network Enabled Result = %d", event->data.mesh_enable->result);
86 case MESH_SCAN_DONE_EVENT: {
87 msgp(" Mesh Scan Done");
89 case MESH_JOIN_NETWORK_EVENT:{
90 msgp(" Joined Network");
92 case MESH_LEFT_NETWORK_EVENT: {
93 msgp(" Left Current Network");
95 case MESH_STATION_JOIN_EVENT: {
96 msgp(" New Station Joined = %s", event->data.sta_info->bssid);
98 case MESH_STATION_LEFT_EVENT: {
99 msgp(" A Station Left = %s", event->data.sta_info->bssid);
101 case MESH_CONNECTED_EVENT: {
102 msgp(" Connection sequence finished [%s]",
103 mesh_error_to_string(event->data.connected_result->result));
108 static int __init_func(MManager *mm, struct menu_data *menu)
113 ret = mesh_initialize(&mesh);
115 msg("Failed to initialize mesh: [%s(0x%X)]",
116 mesh_error_to_string(ret), ret);
123 static struct menu_data menu_main[] = {
124 { "1", "Device", menu_mesh_device, NULL, NULL },
125 { "2", "Mesh network", menu_mesh_network, NULL, NULL },
129 static gboolean __create_init_menu(struct menu_data init_menu[1])
131 init_menu[0].key = "1";
132 init_menu[0].title = "Init";
133 init_menu[0].sub_menu = menu_main;
134 init_menu[0].callback = __init_func;
135 init_menu[0].data = NULL;
140 int main(int arg, char **argv)
142 GMainLoop *mainloop = NULL;
143 GIOChannel *channel = g_io_channel_unix_new(STDIN_FILENO);
145 struct menu_data init_menu[1+1] = { {NULL, NULL, } };
147 #if !GLIB_CHECK_VERSION(2, 35, 0)
150 mainloop = g_main_loop_new(NULL, FALSE);
153 msg("* Mesh Test application ");
154 msg("* Build On: %s %s", __DATE__, __TIME__);
156 if (__create_init_menu(init_menu) == FALSE)
159 manager = menu_manager_new(init_menu, mainloop);
163 menu_manager_run(manager);
165 g_io_add_watch(channel, (G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL),
166 on_menu_manager_keyboard, manager);
167 g_main_loop_run(mainloop);
170 if (g_found_network_list)
171 g_list_free(g_found_network_list);
174 mesh_deinitialize(mesh);
176 g_main_loop_unref(mainloop);
177 msg("******* Bye bye *******");