From: Seonah Moon Date: Fri, 14 Feb 2020 07:56:12 +0000 (+0900) Subject: Implement disable function X-Git-Tag: submit/tizen/20200403.050222~2^2~59^2~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e9e996a00ff1ed171b2911dc4df3f29cc382ac85;p=platform%2Fcore%2Fapi%2Fwifi-aware.git Implement disable function --- diff --git a/include/wifi-aware.h b/include/wifi-aware.h index ccdcbef..07004ce 100644 --- a/include/wifi-aware.h +++ b/include/wifi-aware.h @@ -383,6 +383,29 @@ int wifi_aware_enable(wifi_aware_h wifi_aware, wifi_aware_enabled_cb callback, void *user_data); /** + * @brief + * @since_tizen 6.0 + * @param[in] error + * @param[in] user_data + * @return 0 on success, otherwise a negative error value + * @retval #WIFI_AWARE_ERROR_NONE + */ +typedef void(*wifi_aware_disabled_cb)(wifi_aware_error_e error, void *user_data); + +/** + * @brief Disable Wi-Fi Aware functions. + * @remark If Wi-Fi Aware has not been enabled, an error is immediately returend without invoking the callback. + * @since_tizen 6.0 + * @param[in] wifi_aware The handle for the Wi-Fi aware + * @param[in] callback The result of disable request is asynchrously delivered + * @param[in] user_data User data + * @return 0 on success, otherwise a negative error value + * @retval #WIFI_AWARE_ERROR_NONE + */ +int wifi_aware_disable(wifi_aware_h wifi_aware, + wifi_aware_disabled_cb callback, void *user_data); + +/** * @brief This callback delivers the result of a Publish request. * If the request is successfully done, @a publish_id is set to the Wi-Fi Aware service. * @a publish_id can be used to update or cancel the service. diff --git a/src/include/wifi-aware-gdbus.h b/src/include/wifi-aware-gdbus.h index 5524c10..680b0d0 100644 --- a/src/include/wifi-aware-gdbus.h +++ b/src/include/wifi-aware-gdbus.h @@ -56,6 +56,7 @@ guint wifi_aware_gdbus_register_signal(wifi_aware_signal_e signal, int wifi_aware_gdbus_enable(wifi_aware_h wifi_aware, wifi_aware_enable_request_s *req, GAsyncReadyCallback cb); +int wifi_aware_gdbus_disable(wifi_aware_h wifi_aware, GAsyncReadyCallback cb); int wifi_aware_gdbus_publish(wifi_aware_publish_h publish, int client_id, GAsyncReadyCallback cb); int wifi_aware_gdbus_cancel_publish(wifi_aware_publish_h publish, int client_id); int wifi_aware_gdbus_update_publish(wifi_aware_publish_h publish, int client_id, GAsyncReadyCallback cb); diff --git a/src/include/wifi-aware-private.h b/src/include/wifi-aware-private.h index 21aa696..5d05915 100644 --- a/src/include/wifi-aware-private.h +++ b/src/include/wifi-aware-private.h @@ -38,6 +38,10 @@ int _wifi_aware_handle_create(wifi_aware_h *wifi_aware); int _wifi_aware_init(); void _add_enabled_callback(wifi_aware_h wifi_aware, wifi_aware_enabled_cb callback, void *user_data); int _wifi_aware_enable_request(wifi_aware_h wifi_aware); +int _wifi_aware_is_enabled(wifi_aware_h wifi_aware); + +void _add_disabled_callback(wifi_aware_h wifi_aware, wifi_aware_disabled_cb callback, void *user_data); +int _wifi_aware_disable_request(wifi_aware_h wifi_aware); int _wifi_aware_publish_handle_create(wifi_aware_h wifi_aware, wifi_aware_publish_h *publish); void _wifi_aware_publish_request_set_default_values(wifi_aware_publish_h publish); diff --git a/src/wifi-aware-gdbus.c b/src/wifi-aware-gdbus.c index 48dfe6d..196cf22 100644 --- a/src/wifi-aware-gdbus.c +++ b/src/wifi-aware-gdbus.c @@ -332,6 +332,26 @@ int wifi_aware_gdbus_enable(wifi_aware_h wifi_aware, return ret; } +int wifi_aware_gdbus_disable(wifi_aware_h wifi_aware, GAsyncReadyCallback cb) +{ + __WIFI_AWARE_FUNC_ENTER__; + int ret = WIFI_AWARE_ERROR_NONE; + + ret = __wifi_aware_dbus_method_call_async( + WIFI_AWARE_DISCOVERY_INTERFACE, + WIFI_AWARE_DISCOVERY_PATH, + "Disable", NULL, cb, wifi_aware); + + if (ret != WIFI_AWARE_ERROR_NONE) { + WIFI_AWARE_LOGE("wifi_aware_dbus_method_call_async() failed"); + __WIFI_AWARE_FUNC_EXIT__; + return ret; + } + + __WIFI_AWARE_FUNC_EXIT__; + return ret; +} + int wifi_aware_gdbus_publish(wifi_aware_publish_h publish, int client_id, GAsyncReadyCallback cb) { __WIFI_AWARE_FUNC_ENTER__; diff --git a/src/wifi-aware-private.c b/src/wifi-aware-private.c index 9b4f6a0..0c68a59 100644 --- a/src/wifi-aware-private.c +++ b/src/wifi-aware-private.c @@ -56,8 +56,12 @@ enum { typedef struct { int client_id; + wifi_aware_enabled_cb enabled_cb; void *enabled_cb_data; + + wifi_aware_disabled_cb disabled_cb; + void *disabled_cb_data; } wifi_aware_s; typedef struct { @@ -212,6 +216,44 @@ static void __enable_request_reply(GObject *src, GAsyncResult *res, gpointer use aware->enabled_cb(error, aware->enabled_cb_data); } +static wifi_aware_error_e __parse_disable_reply(GVariant *reply, wifi_aware_s *aware) +{ + int ret; + wifi_aware_error_e error; + + g_variant_get(reply, "(i)", &ret); + error = _wifi_aware_convert_nan_manager_error(ret); + if (error == WIFI_AWARE_ERROR_NONE) + aware->client_id = -1; // reset client_id + + return error; +} + +static void __disable_request_reply(GObject *src, GAsyncResult *res, gpointer user_data) +{ + GDBusConnection *conn = NULL; + GError *dbus_error = NULL; + GVariant *reply = NULL; + wifi_aware_s *aware = (wifi_aware_s *)user_data; + wifi_aware_error_e error = WIFI_AWARE_ERROR_NONE; + + WIFI_AWARE_LOGI("Reply for Disable Request"); + + conn = G_DBUS_CONNECTION(src); + reply = g_dbus_connection_call_finish(conn, res, &dbus_error); + + if (dbus_error != NULL) { + WIFI_AWARE_LOGE("Disable Request failure: %s", dbus_error->message); + error = _wifi_aware_convert_error_string_to_enum(dbus_error->message); + g_error_free(dbus_error); + } + + error = __parse_disable_reply(reply, aware); + + if (aware->disabled_cb) + aware->disabled_cb(error, aware->enabled_cb_data); +} + static void __add_published_callback(wifi_aware_publish_h publish, wifi_aware_published_cb callback, void *user_data) { @@ -390,6 +432,25 @@ int _wifi_aware_enable_request(wifi_aware_h wifi_aware) return wifi_aware_gdbus_enable(wifi_aware, req, __enable_request_reply); } +int _wifi_aware_is_enabled(wifi_aware_h wifi_aware) +{ + wifi_aware_s *aware = (wifi_aware_s *)wifi_aware; + return (aware->client_id > 0 ? 1 : 0); +} + +void _add_disabled_callback(wifi_aware_h wifi_aware, + wifi_aware_disabled_cb callback, void *user_data) +{ + wifi_aware_s *aware = (wifi_aware_s *)wifi_aware; + aware->disabled_cb = callback; + aware->disabled_cb_data = user_data; +} + +int _wifi_aware_disable_request(wifi_aware_h wifi_aware) +{ + return wifi_aware_gdbus_disable(wifi_aware, __disable_request_reply); +} + int _wifi_aware_publish_handle_create(wifi_aware_h wifi_aware, wifi_aware_publish_h *publish) { wifi_aware_s *handle = (wifi_aware_s *)wifi_aware; diff --git a/src/wifi-aware.c b/src/wifi-aware.c index 63f1a38..711ba27 100644 --- a/src/wifi-aware.c +++ b/src/wifi-aware.c @@ -84,6 +84,27 @@ API int wifi_aware_enable(wifi_aware_h wifi_aware, return WIFI_AWARE_ERROR_NONE; } +API int wifi_aware_diable(wifi_aware_h wifi_aware, + wifi_aware_disabled_cb callback, void *user_data) +{ + int ret = WIFI_AWARE_ERROR_NONE; + + __WIFI_AWARE_FUNC_ENTER__; + CHECK_FEATURE_SUPPORTED(TIZEN_FEATURE_WIFI_AWARE); + + RET_VAL_IF(_wifi_aware_is_enabled(wifi_aware) == 0, + WIFI_AWARE_ERROR_INVALID_OPERATION, + "_wifi_aware_is_enabled"); + + _add_disabled_callback(wifi_aware, callback, user_data); + + ret = _wifi_aware_disable_request(wifi_aware); + RET_VAL_IF(ret != WIFI_AWARE_ERROR_NONE, ret, "_wifi_aware_disable_request"); + + __WIFI_AWARE_FUNC_EXIT__; + return WIFI_AWARE_ERROR_NONE; +} + API int wifi_aware_publish_create(wifi_aware_h wifi_aware, wifi_aware_publish_h *publish) { int ret = WIFI_AWARE_ERROR_NONE;