*
* @param[out] event_type The event identification
* @param[out] event parameter data pointer
+ * @param[in] user_data The user data passed from callback registration function
*
* @pre The callback must be registered with wifi_mesh_enable()
*
* @see wifi_mesh_set_event_cb()
*/
-typedef void (*wifi_mesh_event_cb)(wifi_mesh_event_e event_type, wifi_mesh_event_data_s* event);
+typedef void (*wifi_mesh_event_cb)(wifi_mesh_event_e event_type,
+ wifi_mesh_event_data_s* event, void *user_data);
/**
* @brief Sets event handler for the Wi-Fi mesh network service.
*
* @param[in] handle The Wi-Fi mesh handle
* @param[in] event_handler The event handler
+ * @param[in] user_data The user data to be paased to event handler
*
* @return 0 on success, otherwise a negative error value.
* @retval #WIFI_MESH_ERROR_NONE Successful
* @see wifi_mesh_deinitialize()
*
*/
-int wifi_mesh_set_event_cb(wifi_mesh_h handle, wifi_mesh_event_cb event_handler);
+int wifi_mesh_set_event_cb(wifi_mesh_h handle,
+ wifi_mesh_event_cb event_handler, void *user_data);
/**
* @brief Enable the Wi-Fi mesh service.
int _mesh_dbus_start(wifi_mesh_h m);
int _mesh_dbus_stop(wifi_mesh_h m);
-int _wifi_mesh_set_event_cb(wifi_mesh_h handle, wifi_mesh_event_cb event_handler);
+int _wifi_mesh_set_event_cb(wifi_mesh_h handle,
+ wifi_mesh_event_cb event_handler, void *user_data);
int _wifi_mesh_enable(wifi_mesh_h handle);
int _wifi_mesh_disable(wifi_mesh_h handle);
int _wifi_mesh_scan(wifi_mesh_h handle);
GCancellable *ca;
GList *dbus_sub_ids;
wifi_mesh_event_cb event_handler;
+ void *event_handler_user_data;
/* TODO: Below members are related with event callback
* Need to be considered
*/
ev.data.wifi_mesh_enable->result = __convert_service_error_type(result);
- h->event_handler(WIFI_MESH_EVENT_ENABLED, &ev);
+ h->event_handler(WIFI_MESH_EVENT_ENABLED, &ev,
+ h->event_handler_user_data);
free(ev.data.wifi_mesh_enable);
} else if (0 == g_strcmp0(signal_name, "scan_done")) {
- h->event_handler(WIFI_MESH_EVENT_SCAN_DONE, NULL);
+ h->event_handler(WIFI_MESH_EVENT_SCAN_DONE, NULL,
+ h->event_handler_user_data);
} else if (0 == g_strcmp0(signal_name, "connection_state")) {
char *mesh_id = NULL;
char *bssid = NULL;
ev.data.connection_state->security = (wifi_mesh_security_type_e)security;
ev.data.connection_state->state = (wifi_mesh_connection_state_e)state;
- h->event_handler(WIFI_MESH_EVENT_CONNECTION_STATE, &ev);
+ h->event_handler(WIFI_MESH_EVENT_CONNECTION_STATE, &ev,
+ h->event_handler_user_data);
free(ev.data.connection_state);
} else if (0 == g_strcmp0(signal_name, "sta_joined")) {
char *bssid = NULL;
LOGE("Failed to memory allocation !"); // LCOV_EXCL_LINE
g_variant_get(parameters, "(s)", &bssid);
memcpy(ev.data.sta_info->bssid, bssid, MAX_BSSID_LEN);
- h->event_handler(WIFI_MESH_EVENT_STATION_JOIN, &ev);
+ h->event_handler(WIFI_MESH_EVENT_STATION_JOIN, &ev,
+ h->event_handler_user_data);
free(ev.data.sta_info);
} else if (0 == g_strcmp0(signal_name, "sta_left")) {
char *bssid = NULL;
LOGE("Failed to memory allocation !"); // LCOV_EXCL_LINE
g_variant_get(parameters, "(s)", &bssid);
memcpy(ev.data.sta_info->bssid, bssid, MAX_BSSID_LEN);
- h->event_handler(WIFI_MESH_EVENT_STATION_LEFT, &ev);
+ h->event_handler(WIFI_MESH_EVENT_STATION_LEFT, &ev,
+ h->event_handler_user_data);
free(ev.data.sta_info);
}
}
g_mpath.count = 0;
}
-int _wifi_mesh_set_event_cb(wifi_mesh_h handle, wifi_mesh_event_cb event_handler)
+int _wifi_mesh_set_event_cb(wifi_mesh_h handle,
+ wifi_mesh_event_cb event_handler, void *user_data)
{
struct mesh_handle *h = handle;
/* LCOV_EXCL_START */
RETV_IF(NULL == h, WIFI_MESH_ERROR_INVALID_PARAMETER);
/* LCOV_EXCL_STOP */
h->event_handler = event_handler;
+ h->event_handler_user_data = user_data;
return WIFI_MESH_ERROR_NONE;
}
return rv;
}
-EXPORT_API int wifi_mesh_set_event_cb(wifi_mesh_h handle, wifi_mesh_event_cb event_handler)
+EXPORT_API int wifi_mesh_set_event_cb(wifi_mesh_h handle,
+ wifi_mesh_event_cb event_handler, void *user_data)
{
int rv = 0;
CHECK_FEATURE_SUPPORTED(MESH_FEATURE);
/* LCOV_EXCL_STOP */
}
- rv = _wifi_mesh_set_event_cb(handle, event_handler);
+ rv = _wifi_mesh_set_event_cb(handle, event_handler, user_data);
return rv;
}
}
}
-void event_cb(wifi_mesh_event_e event_type, wifi_mesh_event_data_s* event)
+void event_cb(wifi_mesh_event_e event_type, wifi_mesh_event_data_s* event,
+ void *user_data)
{
msg("");
msgp("Event received [%s]", _wifi_mesh_event_to_string(event_type));
#include "common.h"
extern wifi_mesh_h mesh;
-extern void event_cb(wifi_mesh_event_e event_type, wifi_mesh_event_data_s* event);
+extern void event_cb(wifi_mesh_event_e event_type,
+ wifi_mesh_event_data_s* event, void *user_data);
static int run_mesh_create(MManager *mm, struct menu_data *menu)
{
int ret;
msg("enable");
- ret = wifi_mesh_set_event_cb(mesh, event_cb);
+ ret = wifi_mesh_set_event_cb(mesh, event_cb, NULL);
if (WIFI_MESH_ERROR_NONE != ret) {
msgr("Failed to set callback for mesh network: [%s(0x%X)]",
wifi_mesh_error_to_string(ret), ret);