Add wifi_direct_foreach_supported_channel() API
[platform/core/api/wifi-direct.git] / src / wifi-direct-client-proxy.c
index 475c0a4..dbe636c 100755 (executable)
@@ -2357,6 +2357,59 @@ EXPORT_API int wifi_direct_get_operating_channel(int *channel)
        return WIFI_DIRECT_ERROR_NONE;
 }
 
+int wifi_direct_foreach_supported_channel(wifi_direct_supported_channel_cb cb, void* user_data)
+{
+       __WDC_LOG_FUNC_START__;
+
+       CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
+
+       GError* error = NULL;
+       GVariant *reply = NULL;
+       GVariantIter *iter = NULL;
+       int ret = WIFI_DIRECT_ERROR_NONE;
+       unsigned int channel;
+
+       if (g_client_info.is_registered == false) {
+               WDC_LOGE("Client is NOT registered");
+               __WDC_LOG_FUNC_END__;
+               return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
+       }
+
+       if (!cb) {
+               WDC_LOGE("NULL Param [callback]!");
+               __WDC_LOG_FUNC_END__;
+               return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
+       }
+
+       reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
+                                         "GetSupportedChannels",
+                                         NULL,
+                                         &error);
+
+       ret = __net_wifidirect_gerror_to_enum(error);
+       if (ret != WIFI_DIRECT_ERROR_NONE)
+               return ret;
+
+       g_variant_get(reply, "(iau)", &ret, &iter);
+       if (ret != WIFI_DIRECT_ERROR_NONE) {
+               __WDC_LOG_FUNC_END__;
+               return WIFI_DIRECT_ERROR_OPERATION_FAILED;
+       }
+
+       WDC_LOGD("wifi_direct_foreach_supported_channel() SUCCESS");
+
+       while (g_variant_iter_loop(iter, "u", &channel)) {
+               if (!cb(channel, user_data))
+                       break;
+       }
+       g_variant_iter_free(iter);
+       g_variant_unref(reply);
+
+       WDC_LOGD("%s() return : [%d]", __func__, ret);
+       __WDC_LOG_FUNC_END__;
+       return ret;
+}
+
 EXPORT_API int wifi_direct_activate_pushbutton(void)
 {
        __WDC_LOG_FUNC_START__;