4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Sungsik Jang <sungsik.jang@samsung.com>, Dongwook Lee <dwmax.lee@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
23 /*****************************************************************************
25 *****************************************************************************/
32 #include <sys/socket.h>
37 #include <sys/ioctl.h>
39 #include <linux/unistd.h>
47 /*****************************************************************************
49 *****************************************************************************/
51 #include <system_info.h>
53 /*****************************************************************************
54 * Wi-Fi Direct Service headers
55 *****************************************************************************/
56 #include "wifi-direct.h"
57 #include "wifi-direct-internal.h"
58 #include "wifi-direct-client-proxy.h"
59 #include "wifi-direct-ipc.h"
60 #include "wifi-direct-log.h"
61 #include "wifi-direct-dbus.h"
63 /*****************************************************************************
65 *****************************************************************************/
67 /*****************************************************************************
69 *****************************************************************************/
70 wifi_direct_client_info_s g_client_info = {
71 .is_registered = FALSE,
75 .activation_cb = NULL,
77 .connection_cb = NULL,
78 .ip_assigned_cb = NULL,
79 .peer_found_cb = NULL,
80 .user_data_for_cb_activation = NULL,
81 .user_data_for_cb_discover = NULL,
82 .user_data_for_cb_connection = NULL,
83 .user_data_for_cb_ip_assigned = NULL,
84 .user_data_for_cb_peer_found = NULL,
85 .user_data_for_cb_device_name = NULL,
86 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
88 .user_data_for_cb_service = NULL,
89 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
91 .mutex = PTHREAD_MUTEX_INITIALIZER
94 /*****************************************************************************
95 * Local Functions Definition
96 *****************************************************************************/
98 static wifi_direct_client_info_s *__wfd_get_control()
100 return &g_client_info;
103 static int __net_wifidirect_gerror_to_enum(GError* error)
105 int ret = WIFI_DIRECT_ERROR_NONE;
107 WDC_LOGI("GError is NULL!!");
111 WDC_LOGE("wifi_direct_dbus_method_call_sync() failed. error [%d: %s]",
112 error->code, error->message);
114 if (NULL == strstr(error->message, "net.wifidirect.Error")) {
116 if (NULL != strstr(error->message, ".AccessDenied")) {
117 WDC_LOGE("Client doesn't have wifidirect privilege");
118 ret = WIFI_DIRECT_ERROR_PERMISSION_DENIED;
120 WDC_LOGE("DBus failure");
121 ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
125 if (NULL != strstr(error->message, "InvalidParameter"))
126 ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
127 else if (NULL != strstr(error->message, "NotPermitted"))
128 ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
129 else if (NULL != strstr(error->message, "OperationFailed"))
130 ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
132 else if (NULL != strstr(error->message, "TooManyClient"))
133 ret = WIFI_DIRECT_ERROR_TOO_MANY_CLIENT;
135 ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
143 void wifi_direct_process_manage_activation(GDBusConnection *connection,
144 const gchar *object_path, GVariant *parameters)
146 __WDC_LOG_FUNC_START__;
148 wifi_direct_client_info_s *client = __wfd_get_control();
150 if (!client->activation_cb) {
151 WDC_LOGI("activation_cb is NULL!!");
152 return; //LCOV_EXCL_LINE
156 __WDC_LOG_FUNC_END__;
160 g_variant_get(parameters, "(i)", &error_code);
162 client->activation_cb(error_code,
163 WIFI_DIRECT_DEVICE_STATE_ACTIVATED,
164 client->user_data_for_cb_activation);
166 __WDC_LOG_FUNC_END__;
169 void wifi_direct_process_manage_deactivation(GDBusConnection *connection,
170 const gchar *object_path, GVariant *parameters)
172 __WDC_LOG_FUNC_START__;
174 wifi_direct_client_info_s *client = __wfd_get_control();
177 __WDC_LOG_FUNC_END__;
178 return; //LCOV_EXCL_LINE
181 if (!client->activation_cb) {
182 WDC_LOGI("activation_cb is NULL!!");
183 __WDC_LOG_FUNC_END__;
187 g_variant_get(parameters, "(i)", &error_code);
189 client->activation_cb(error_code,
190 WIFI_DIRECT_DEVICE_STATE_DEACTIVATED,
191 client->user_data_for_cb_activation);
193 __WDC_LOG_FUNC_END__;
197 void wifi_direct_process_manage_connection(GDBusConnection *connection,
198 const gchar *object_path, GVariant *parameters)
200 __WDC_LOG_FUNC_START__;
202 wifi_direct_connection_state_e connection_state;
203 const gchar *peer_mac_address = NULL;
204 wifi_direct_client_info_s *client = __wfd_get_control();
207 __WDC_LOG_FUNC_END__;
211 if (!client->connection_cb) {
212 WDC_LOGI("connection_cb is NULL!!");
213 __WDC_LOG_FUNC_END__;
217 g_variant_get(parameters, "(ii&s)",
218 &error_code, &connection_state, &peer_mac_address);
220 client->connection_cb(error_code,
223 client->user_data_for_cb_connection);
225 __WDC_LOG_FUNC_END__;
228 void wifi_direct_process_manage_disconnection(GDBusConnection *connection,
229 const gchar *object_path, GVariant *parameters)
231 __WDC_LOG_FUNC_START__;
233 wifi_direct_connection_state_e connection_state;
234 const gchar *peer_mac_address = NULL;
235 wifi_direct_client_info_s *client = __wfd_get_control();
238 __WDC_LOG_FUNC_END__;
242 if (!client->connection_cb) {
243 WDC_LOGI("connection_cb is NULL!!");
244 __WDC_LOG_FUNC_END__;
248 g_variant_get(parameters, "(ii&s)",
249 &error_code, &connection_state, &peer_mac_address);
251 client->connection_cb(error_code,
254 client->user_data_for_cb_connection);
256 __WDC_LOG_FUNC_END__;
259 void wifi_direct_process_manage_peer_ip_assigned(GDBusConnection *connection,
260 const gchar *object_path, GVariant *parameters)
262 __WDC_LOG_FUNC_START__;
263 char *get_str = NULL;
264 GError* error = NULL;
265 GVariant *reply = NULL;
266 const gchar *peer_mac_address = NULL;
267 const gchar *assigned_ip_address = NULL;
269 wifi_direct_client_info_s *client = __wfd_get_control();
272 __WDC_LOG_FUNC_END__;
276 g_variant_get(parameters, "(&s&s)",
277 &peer_mac_address, &assigned_ip_address);
279 if (!client->ip_assigned_cb) {
280 WDC_LOGI("ip_assigned_cb is NULL!!");
281 __WDC_LOG_FUNC_END__;
285 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
290 WDC_LOGE("wifi_direct_dbus_method_call_sync() failed."
291 "error [%d: %s]", error->code, error->message);
293 __WDC_LOG_FUNC_END__;
297 g_variant_get(reply, "(i&s)", ret, &get_str);
298 g_variant_unref(reply);
300 WDC_LOGD("Interface Name = [%s]", get_str);
301 WDC_LOGD("%s() return : [%d]", __func__, ret);
303 client->ip_assigned_cb(peer_mac_address, assigned_ip_address, get_str,
304 client->user_data_for_cb_ip_assigned);
306 __WDC_LOG_FUNC_END__;
309 void wifi_direct_process_manage_listen_started(GDBusConnection *connection,
310 const gchar *object_path, GVariant *parameters)
312 __WDC_LOG_FUNC_START__;
313 wifi_direct_client_info_s *client = __wfd_get_control();
315 if (!client->discover_cb) {
316 WDC_LOGI("discover_cb is NULL!!");
317 __WDC_LOG_FUNC_END__;
321 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
322 WIFI_DIRECT_ONLY_LISTEN_STARTED,
323 client->user_data_for_cb_discover);
325 __WDC_LOG_FUNC_END__;
328 void wifi_direct_process_manage_discovery_started(GDBusConnection *connection,
329 const gchar *object_path, GVariant *parameters)
331 __WDC_LOG_FUNC_START__;
332 wifi_direct_client_info_s *client = __wfd_get_control();
334 if (!client->discover_cb) {
335 WDC_LOGI("discover_cb is NULL!!");
336 __WDC_LOG_FUNC_END__;
340 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
341 WIFI_DIRECT_DISCOVERY_STARTED,
342 client->user_data_for_cb_discover);
344 __WDC_LOG_FUNC_END__;
347 void wifi_direct_process_manage_discovery_finished(GDBusConnection *connection,
348 const gchar *object_path, GVariant *parameters)
350 __WDC_LOG_FUNC_START__;
351 wifi_direct_client_info_s *client = __wfd_get_control();
353 if (!client->discover_cb) {
354 WDC_LOGI("discover_cb is NULL!!");
355 __WDC_LOG_FUNC_END__;
359 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
360 WIFI_DIRECT_DISCOVERY_FINISHED,
361 client->user_data_for_cb_discover);
363 __WDC_LOG_FUNC_END__;
366 void wifi_direct_process_manage_peer_found(GDBusConnection *connection,
367 const gchar *object_path, GVariant *parameters)
369 __WDC_LOG_FUNC_START__;
370 const gchar *peer_mac_address = NULL;
371 wifi_direct_client_info_s *client = __wfd_get_control();
374 __WDC_LOG_FUNC_END__;
378 g_variant_get(parameters, "(&s)", &peer_mac_address);
380 if (client->peer_found_cb) {
381 client->peer_found_cb(WIFI_DIRECT_ERROR_NONE,
382 WIFI_DIRECT_DISCOVERY_FOUND,
384 client->user_data_for_cb_discover);
386 WDC_LOGI("peer_found_cb is NULL!!");
389 if (!client->discover_cb) {
390 WDC_LOGI("discover_cb is NULL!!");
391 __WDC_LOG_FUNC_END__;
395 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
396 WIFI_DIRECT_DISCOVERY_FOUND,
397 client->user_data_for_cb_discover);
399 __WDC_LOG_FUNC_END__;
402 void wifi_direct_process_manage_peer_lost(GDBusConnection *connection,
403 const gchar *object_path, GVariant *parameters)
405 __WDC_LOG_FUNC_START__;
406 const gchar *peer_mac_address = NULL;
407 wifi_direct_client_info_s *client = __wfd_get_control();
410 __WDC_LOG_FUNC_END__;
414 g_variant_get(parameters, "(&s)", &peer_mac_address);
416 if (client->peer_found_cb) {
417 client->peer_found_cb(WIFI_DIRECT_ERROR_NONE,
418 WIFI_DIRECT_DISCOVERY_LOST,
420 client->user_data_for_cb_discover);
422 WDC_LOGI("peer_found_cb is NULL!!");
425 if (!client->discover_cb) {
426 WDC_LOGI("discover_cb is NULL!!");
427 __WDC_LOG_FUNC_END__;
431 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
432 WIFI_DIRECT_DISCOVERY_LOST,
433 client->user_data_for_cb_discover);
435 __WDC_LOG_FUNC_END__;
439 void wifi_direct_process_group_created(GDBusConnection *connection,
440 const gchar *object_path, GVariant *parameters)
442 __WDC_LOG_FUNC_START__;
443 wifi_direct_client_info_s *client = __wfd_get_control();
445 if (!client->connection_cb) {
446 WDC_LOGI("connection_cb is NULL!!");
447 __WDC_LOG_FUNC_END__;
451 client->connection_cb(WIFI_DIRECT_ERROR_NONE,
452 WIFI_DIRECT_GROUP_CREATED,
454 client->user_data_for_cb_connection);
456 __WDC_LOG_FUNC_END__;
459 void wifi_direct_process_group_destroyed(GDBusConnection *connection,
460 const gchar *object_path, GVariant *parameters)
462 __WDC_LOG_FUNC_START__;
463 wifi_direct_client_info_s *client = __wfd_get_control();
465 if (!client->connection_cb) {
466 WDC_LOGI("connection_cb is NULL!!");
467 __WDC_LOG_FUNC_END__;
471 client->connection_cb(WIFI_DIRECT_ERROR_NONE,
472 WIFI_DIRECT_GROUP_DESTROYED,
474 client->user_data_for_cb_connection);
476 __WDC_LOG_FUNC_END__;
479 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
481 void wifi_direct_process_service_discovery_started(GDBusConnection *connection,
482 const gchar *object_path, GVariant *parameters)
484 __WDC_LOG_FUNC_START__;
485 wifi_direct_client_info_s *client = __wfd_get_control();
487 if (!client->service_cb) {
488 WDC_LOGI("service_cb is NULL!!\n");
489 __WDC_LOG_FUNC_END__;
493 client->service_cb(WIFI_DIRECT_ERROR_NONE,
494 WIFI_DIRECT_SERVICE_DISCOVERY_STARTED,
495 WIFI_DIRECT_SERVICE_TYPE_ALL,
498 client->user_data_for_cb_service);
500 __WDC_LOG_FUNC_END__;
503 void wifi_direct_process_service_discovery_found(GDBusConnection *connection,
504 const gchar *object_path, GVariant *parameters)
506 __WDC_LOG_FUNC_START__;
507 wifi_direct_service_type_e service_type;
508 const gchar* response_data = NULL;
509 const gchar* peer_mac_address = NULL;
510 wifi_direct_client_info_s *client = __wfd_get_control();
513 __WDC_LOG_FUNC_END__;
517 g_variant_get(parameters, "(i&s&s)",
518 &service_type, &response_data, &peer_mac_address);
520 if (!client->service_cb) {
521 WDC_LOGI("service_cb is NULL!!\n");
522 __WDC_LOG_FUNC_END__;
526 client->service_cb(WIFI_DIRECT_ERROR_NONE,
527 WIFI_DIRECT_SERVICE_DISCOVERY_FOUND,
529 (void *) response_data,
531 client->user_data_for_cb_service);
533 __WDC_LOG_FUNC_END__;
536 void wifi_direct_process_service_discovery_finished(GDBusConnection *connection,
537 const gchar *object_path, GVariant *parameters)
539 __WDC_LOG_FUNC_START__;
540 wifi_direct_client_info_s *client = __wfd_get_control();
542 if (!client->service_cb) {
543 WDC_LOGI("service_cb is NULL!!\n");
544 __WDC_LOG_FUNC_END__;
548 client->service_cb(WIFI_DIRECT_ERROR_NONE,
549 WIFI_DIRECT_SERVICE_DISCOVERY_FINISHED,
550 WIFI_DIRECT_SERVICE_TYPE_ALL,
553 client->user_data_for_cb_service);
555 __WDC_LOG_FUNC_END__;
557 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
559 void __wfd_client_print_entry_list(wfd_discovery_entry_s *list, int num)
563 WDC_LOGD("------------------------------------------");
564 for (i = 0; i < num; i++) {
565 WDC_LOGD("== Peer index : %d ==", i);
566 WDC_LOGD("is Group Owner ? %s", list[i].is_group_owner ? "YES" : "NO");
567 WDC_LOGD("device_name : %s", list[i].device_name);
568 WDC_LOGD("MAC address : "MACSECSTR, MAC2SECSTR(list[i].mac_address));
569 WDC_LOGD("wps cfg method : %x", list[i].wps_cfg_methods);
570 WDC_LOGD("Device Type: %d - %d", list[i].category, list[i].subcategory);
571 WDC_LOGD("Listen channel: %d", list[i].channel);
573 WDC_LOGD("------------------------------------------");
576 void __wfd_client_print_connected_peer_info(wfd_connected_peer_info_s *list, int num)
580 WDC_LOGD("------------------------------------------\n");
581 for (i = 0; i < num; i++) {
582 WDC_LOGD("== Peer index : %d ==\n", i);
583 WDC_LOGD("device_name : %s\n", list[i].device_name);
584 WDC_LOGD("Device MAC : " MACSECSTR "\n", MAC2SECSTR(list[i].mac_address));
585 WDC_LOGD("Device Type: %d - %d", list[i].category, list[i].subcategory);
586 WDC_LOGD("channel : %d\n", list[i].channel);
587 WDC_LOGD("IP ["IPSECSTR"]\n", IP2SECSTR(list[i].ip_address));
589 WDC_LOGD("------------------------------------------\n");
592 void __wfd_client_print_persistent_group_info(wfd_persistent_group_info_s *list, int num)
596 WDC_LOGD("------------------------------------------\n");
597 for (i = 0; i < num; i++) {
598 WDC_LOGD("== Persistent Group index : %d ==", i);
599 WDC_LOGD("ssid : %s", list[i].ssid);
600 WDC_LOGD("GO MAC : " MACSECSTR, MAC2SECSTR(list[i].go_mac_address));
602 WDC_LOGD("------------------------------------------\n");
606 int wifi_direct_initialize(void)
608 __WDC_LOG_FUNC_START__;
610 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
612 GError* error = NULL;
613 GVariant *reply = NULL;
614 bool wifi_direct_enable;
618 if (g_client_info.is_registered == TRUE) {
619 WDC_LOGW("Warning!!! Already registered\nUpdate user data and callback!");
620 __WDC_LOG_FUNC_END__;
621 return WIFI_DIRECT_ERROR_ALREADY_INITIALIZED;
624 res = system_info_get_platform_bool("tizen.org/feature/network.wifi.direct", &wifi_direct_enable);
626 WDC_LOGE("Failed to get sys info");
627 __WDC_LOG_FUNC_END__;
628 return res; //LCOV_EXCL_LINE
631 if (!wifi_direct_enable) {
632 WDC_LOGE("Wi-Fi Direct not supported");
633 return WIFI_DIRECT_ERROR_NOT_SUPPORTED; //LCOV_EXCL_LINE
636 if (wifi_direct_dbus_init() == FALSE) {
637 WDC_LOGW("Failed to initialize dbus");
638 __WDC_LOG_FUNC_END__;
639 return WIFI_DIRECT_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
642 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
643 "IsGroupOwner", NULL, &error);
645 res = __net_wifidirect_gerror_to_enum(error);
646 if (res != WIFI_DIRECT_ERROR_NONE)
649 g_variant_get(reply, "(b)", &val);
650 WDC_LOGD("is group owner [%s]", val ? "YES" : "NO");
652 g_client_info.is_registered = TRUE;
654 /* Initialize callbacks */
655 g_client_info.activation_cb = NULL;
656 g_client_info.discover_cb = NULL;
657 g_client_info.connection_cb = NULL;
658 g_client_info.ip_assigned_cb = NULL;
660 g_client_info.peer_found_cb = NULL;
661 g_client_info.user_data_for_cb_activation = NULL;
662 g_client_info.user_data_for_cb_discover = NULL;
663 g_client_info.user_data_for_cb_connection = NULL;
664 g_client_info.user_data_for_cb_ip_assigned = NULL;
665 g_client_info.user_data_for_cb_peer_found = NULL;
666 g_client_info.user_data_for_cb_device_name = NULL;
668 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
669 g_client_info.service_cb = NULL;
670 g_client_info.user_data_for_cb_service = NULL;
671 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
673 __WDC_LOG_FUNC_END__;
674 return WIFI_DIRECT_ERROR_NONE;
677 int wifi_direct_deinitialize(void)
679 __WDC_LOG_FUNC_START__;
681 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
683 if (g_client_info.is_registered == false) {
684 WDC_LOGE("Client is already deregistered");
685 __WDC_LOG_FUNC_END__;
686 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
689 wifi_direct_dbus_deinit();
691 g_client_info.activation_cb = NULL;
692 g_client_info.discover_cb = NULL;
693 g_client_info.connection_cb = NULL;
694 g_client_info.ip_assigned_cb = NULL;
695 g_client_info.peer_found_cb = NULL;
696 g_client_info.user_data_for_cb_activation = NULL;
697 g_client_info.user_data_for_cb_discover = NULL;
698 g_client_info.user_data_for_cb_connection = NULL;
699 g_client_info.user_data_for_cb_ip_assigned = NULL;
700 g_client_info.user_data_for_cb_peer_found = NULL;
702 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
703 g_client_info.service_cb = NULL;
704 g_client_info.user_data_for_cb_service = NULL;
705 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
707 g_client_info.is_registered = FALSE;
709 __WDC_LOG_FUNC_END__;
710 return WIFI_DIRECT_ERROR_NONE;
714 int wifi_direct_set_device_state_changed_cb(wifi_direct_device_state_changed_cb cb,
717 __WDC_LOG_FUNC_START__;
719 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
722 WDC_LOGE("Invalid parameter");
723 __WDC_LOG_FUNC_END__;
724 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
727 if (g_client_info.is_registered == false) {
728 WDC_LOGE("Client is not initialized.");
729 __WDC_LOG_FUNC_END__;
730 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
733 g_client_info.activation_cb = cb;
734 g_client_info.user_data_for_cb_activation = user_data;
736 __WDC_LOG_FUNC_END__;
737 return WIFI_DIRECT_ERROR_NONE;
741 int wifi_direct_unset_device_state_changed_cb(void)
743 __WDC_LOG_FUNC_START__;
745 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
747 if (g_client_info.is_registered == false) {
748 WDC_LOGE("Client is not initialized.\n");
749 __WDC_LOG_FUNC_END__;
750 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
753 g_client_info.activation_cb = NULL;
754 g_client_info.user_data_for_cb_activation = NULL;
756 __WDC_LOG_FUNC_END__;
757 return WIFI_DIRECT_ERROR_NONE;
762 wifi_direct_set_discovery_state_changed_cb(wifi_direct_discovery_state_chagned_cb cb,
765 __WDC_LOG_FUNC_START__;
767 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
770 WDC_LOGE("Callback is NULL.\n");
771 __WDC_LOG_FUNC_END__;
772 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
775 if (g_client_info.is_registered == false) {
776 WDC_LOGE("Client is not initialized.\n");
777 __WDC_LOG_FUNC_END__;
778 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
781 g_client_info.discover_cb = cb;
782 g_client_info.user_data_for_cb_discover = user_data;
784 __WDC_LOG_FUNC_END__;
785 return WIFI_DIRECT_ERROR_NONE;
789 int wifi_direct_unset_discovery_state_changed_cb(void)
791 __WDC_LOG_FUNC_START__;
793 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
795 if (g_client_info.is_registered == false) {
796 WDC_LOGE("Client is not initialized.\n");
797 __WDC_LOG_FUNC_END__;
798 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
801 g_client_info.discover_cb = NULL;
802 g_client_info.user_data_for_cb_discover = NULL;
804 __WDC_LOG_FUNC_END__;
805 return WIFI_DIRECT_ERROR_NONE;
808 int wifi_direct_set_peer_found_cb(wifi_direct_peer_found_cb cb,
811 __WDC_LOG_FUNC_START__;
813 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
816 WDC_LOGE("Callback is NULL.\n");
817 __WDC_LOG_FUNC_END__;
818 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
821 if (g_client_info.is_registered == false) {
822 WDC_LOGE("Client is not initialized.\n");
823 __WDC_LOG_FUNC_END__;
824 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
827 g_client_info.peer_found_cb = cb;
828 g_client_info.user_data_for_cb_peer_found = user_data;
830 __WDC_LOG_FUNC_END__;
831 return WIFI_DIRECT_ERROR_NONE;
835 int wifi_direct_unset_peer_found_cb(void)
837 __WDC_LOG_FUNC_START__;
839 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
841 if (g_client_info.is_registered == false) {
842 WDC_LOGE("Client is not initialized.\n");
843 __WDC_LOG_FUNC_END__;
844 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
847 g_client_info.peer_found_cb = NULL;
848 g_client_info.user_data_for_cb_peer_found = NULL;
850 __WDC_LOG_FUNC_END__;
851 return WIFI_DIRECT_ERROR_NONE;
854 int wifi_direct_set_service_state_changed_cb(wifi_direct_service_state_changed_cb cb,
857 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
858 __WDC_LOG_FUNC_START__;
860 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
864 WDC_LOGE("Callback is NULL.");
865 __WDC_LOG_FUNC_END__;
866 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
869 if (g_client_info.is_registered == false) {
870 WDC_LOGE("Client is not initialized.");
871 __WDC_LOG_FUNC_END__;
872 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
875 g_client_info.service_cb = cb;
876 g_client_info.user_data_for_cb_service = user_data;
878 __WDC_LOG_FUNC_END__;
879 return WIFI_DIRECT_ERROR_NONE;
881 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
882 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
883 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
887 int wifi_direct_unset_service_state_changed_cb(void)
889 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
890 __WDC_LOG_FUNC_START__;
892 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
895 if (g_client_info.is_registered == false) {
896 WDC_LOGE("Client is not initialized.");
897 __WDC_LOG_FUNC_END__;
898 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
901 g_client_info.service_cb = NULL;
902 g_client_info.user_data_for_cb_service = NULL;
904 __WDC_LOG_FUNC_END__;
905 return WIFI_DIRECT_ERROR_NONE;
907 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
908 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
909 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
912 int wifi_direct_set_connection_state_changed_cb(wifi_direct_connection_state_changed_cb cb,
915 __WDC_LOG_FUNC_START__;
917 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
920 WDC_LOGE("Callback is NULL.\n");
921 __WDC_LOG_FUNC_END__;
922 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
925 if (g_client_info.is_registered == false) {
926 WDC_LOGE("Client is not initialized.\n");
927 __WDC_LOG_FUNC_END__;
928 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
931 g_client_info.connection_cb = cb;
932 g_client_info.user_data_for_cb_connection = user_data;
934 __WDC_LOG_FUNC_END__;
935 return WIFI_DIRECT_ERROR_NONE;
939 int wifi_direct_unset_connection_state_changed_cb(void)
941 __WDC_LOG_FUNC_START__;
943 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
945 if (g_client_info.is_registered == false) {
946 WDC_LOGE("Client is not initialized");
947 __WDC_LOG_FUNC_END__;
948 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
951 g_client_info.connection_cb = NULL;
952 g_client_info.user_data_for_cb_connection = NULL;
954 __WDC_LOG_FUNC_END__;
955 return WIFI_DIRECT_ERROR_NONE;
959 int wifi_direct_set_client_ip_address_assigned_cb(wifi_direct_client_ip_address_assigned_cb cb,
962 __WDC_LOG_FUNC_START__;
964 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
967 WDC_LOGE("Callback is NULL");
968 __WDC_LOG_FUNC_END__;
969 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
972 if (g_client_info.is_registered == false) {
973 WDC_LOGE("Client is not initialized");
974 __WDC_LOG_FUNC_END__;
975 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
978 g_client_info.ip_assigned_cb = cb;
979 g_client_info.user_data_for_cb_ip_assigned = user_data;
981 __WDC_LOG_FUNC_END__;
982 return WIFI_DIRECT_ERROR_NONE;
985 int wifi_direct_unset_client_ip_address_assigned_cb(void)
987 __WDC_LOG_FUNC_START__;
989 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
991 if (g_client_info.is_registered == false) {
992 WDC_LOGE("Client is not initialized");
993 __WDC_LOG_FUNC_END__;
994 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
997 g_client_info.ip_assigned_cb = NULL;
998 g_client_info.user_data_for_cb_ip_assigned = NULL;
1000 __WDC_LOG_FUNC_END__;
1001 return WIFI_DIRECT_ERROR_NONE;
1004 int wifi_direct_activate(void)
1006 __WDC_LOG_FUNC_START__;
1007 GError *error = NULL;
1008 GVariant *reply = NULL;
1009 int ret = WIFI_DIRECT_ERROR_NONE;
1011 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1013 if (g_client_info.is_registered == false) {
1014 WDC_LOGE("Client is NOT registered");
1015 __WDC_LOG_FUNC_END__;
1016 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1019 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1020 "Activate", NULL, &error);
1022 ret = __net_wifidirect_gerror_to_enum(error);
1023 if (ret == WIFI_DIRECT_ERROR_NONE) {
1024 g_variant_get(reply, "(i)", &ret);
1025 g_variant_unref(reply);
1028 WDC_LOGD("%s() return : [%d]", __func__, ret);
1029 __WDC_LOG_FUNC_END__;
1033 int wifi_direct_deactivate(void)
1035 __WDC_LOG_FUNC_START__;
1036 GError *error = NULL;
1037 GVariant *reply = NULL;
1038 int ret = WIFI_DIRECT_ERROR_NONE;
1040 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1042 if (g_client_info.is_registered == false) {
1043 WDC_LOGE("Client is NOT registered");
1044 __WDC_LOG_FUNC_END__;
1045 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1048 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1049 "Deactivate", NULL, &error);
1051 ret = __net_wifidirect_gerror_to_enum(error);
1052 if (ret == WIFI_DIRECT_ERROR_NONE) {
1053 g_variant_get(reply, "(i)", &ret);
1054 g_variant_unref(reply);
1057 WDC_LOGD("%s() return : [%d]", __func__, ret);
1058 __WDC_LOG_FUNC_END__;
1062 int wifi_direct_start_discovery(bool listen_only, int timeout)
1064 __WDC_LOG_FUNC_START__;
1065 GVariantBuilder *builder = NULL;
1066 GVariant *params = NULL;
1067 GError *error = NULL;
1068 GVariant *reply = NULL;
1069 int ret = WIFI_DIRECT_ERROR_NONE;
1071 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1073 if (g_client_info.is_registered == false) {
1074 WDC_LOGE("Client is NOT registered");
1075 __WDC_LOG_FUNC_END__;
1076 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1080 WDC_LOGE("Negative value. Param [timeout]!");
1081 __WDC_LOG_FUNC_END__;
1082 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1085 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1086 g_variant_builder_add(builder, "{sv}", "Mode", g_variant_new("b", listen_only));
1087 g_variant_builder_add(builder, "{sv}", "Timeout", g_variant_new("i", timeout));
1088 params = g_variant_new("(a{sv})", builder);
1089 g_variant_builder_unref(builder);
1090 WDC_LOGI("listen only (%d) timeout (%d)", listen_only, timeout);
1092 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1093 "StartDiscovery", params, &error);
1095 ret = __net_wifidirect_gerror_to_enum(error);
1096 if (ret == WIFI_DIRECT_ERROR_NONE) {
1097 g_variant_get(reply, "(i)", &ret);
1098 g_variant_unref(reply);
1101 WDC_LOGD("%s() return : [%d]", __func__, ret);
1102 __WDC_LOG_FUNC_END__;
1106 int wifi_direct_start_discovery_specific_channel(bool listen_only,
1108 wifi_direct_discovery_channel_e channel)
1110 __WDC_LOG_FUNC_START__;
1111 GVariantBuilder *builder = NULL;
1112 GVariant *params = NULL;
1113 GError *error = NULL;
1114 GVariant *reply = NULL;
1115 int ret = WIFI_DIRECT_ERROR_NONE;
1117 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1119 if (g_client_info.is_registered == false) {
1120 WDC_LOGE("Client is NOT registered");
1121 __WDC_LOG_FUNC_END__;
1122 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1126 WDC_LOGE("Negative value. Param [timeout]!");
1127 __WDC_LOG_FUNC_END__;
1128 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1131 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
1132 g_variant_builder_add(builder, "{sv}", "Mode", g_variant_new("b", listen_only));
1133 g_variant_builder_add(builder, "{sv}", "Timeout", g_variant_new("i", timeout));
1134 g_variant_builder_add(builder, "{sv}", "Channel", g_variant_new("i", channel));
1135 params = g_variant_new("(a{sv})", builder);
1136 g_variant_builder_unref(builder);
1137 WDC_LOGI("listen only (%d) timeout (%d)", listen_only, timeout);
1139 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1140 "StartDiscovery", params, &error);
1142 ret = __net_wifidirect_gerror_to_enum(error);
1143 if (ret == WIFI_DIRECT_ERROR_NONE) {
1144 g_variant_get(reply, "(i)", &ret);
1145 g_variant_unref(reply);
1148 WDC_LOGD("%s() return : [%d]", __func__, ret);
1149 __WDC_LOG_FUNC_END__;
1153 int wifi_direct_cancel_discovery(void)
1155 __WDC_LOG_FUNC_START__;
1156 GError *error = NULL;
1157 GVariant *reply = NULL;
1158 int ret = WIFI_DIRECT_ERROR_NONE;
1160 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1162 if (g_client_info.is_registered == false) {
1163 WDC_LOGE("Client is NOT registered");
1164 __WDC_LOG_FUNC_END__;
1165 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1168 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1169 "StopDiscovery", NULL, &error);
1171 ret = __net_wifidirect_gerror_to_enum(error);
1172 if (ret == WIFI_DIRECT_ERROR_NONE) {
1173 g_variant_get(reply, "(i)", &ret);
1174 g_variant_unref(reply);
1177 WDC_LOGD("%s() return : [%d]", __func__, ret);
1178 __WDC_LOG_FUNC_END__;
1183 static char **get_service_list(char *services, unsigned int *count)
1185 __WDC_LOG_FUNC_START__;
1186 char **result = NULL;
1189 unsigned int cnt = 0;
1192 char *saveptr = NULL;
1194 if (!count || !services || (services && strlen(services) <= 0)) {
1195 WDC_LOGE("Invalid parameters.");
1196 __WDC_LOG_FUNC_END__;
1201 pos2 = g_strdup(services);
1203 pos1 = strtok_r(pos1, ",\n", &saveptr);
1206 pos1 = strtok_r(NULL, ",\n", &saveptr);
1208 WDC_LOGD("Total Service Count = %d", cnt);
1211 result = (char**) g_try_malloc0_n(cnt, sizeof(char *));
1213 WDC_LOGE("Failed to allocate memory for result");
1217 pos2 = strtok_r(pos2, ",\n", &saveptr);
1218 while (pos2 != NULL) {
1219 char *s = strchr(pos2, ' ');
1222 result[i++] = strdup(pos2);
1223 pos2 = strtok_r(NULL, ",\n", &saveptr);
1237 for (j = 0; j < i && result[j] != NULL; j++)
1244 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
1246 int wifi_direct_foreach_discovered_peers(wifi_direct_discovered_peer_cb cb,
1249 __WDC_LOG_FUNC_START__;
1251 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1253 GVariant *params = NULL;
1254 GError *error = NULL;
1255 GVariant *reply = NULL;
1256 GVariantIter *iter_peers = NULL;
1257 GVariantIter *iter_peer = NULL;
1258 GVariant *var = NULL;
1260 int ret = WIFI_DIRECT_ERROR_NONE;
1262 if (g_client_info.is_registered == false) {
1263 WDC_LOGE("Client is NOT registered");
1264 __WDC_LOG_FUNC_END__;
1265 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1269 WDC_LOGE("NULL Param [callback]!");
1270 __WDC_LOG_FUNC_END__;
1271 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1274 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1275 "GetDiscoveredPeers", params, &error);
1277 ret = __net_wifidirect_gerror_to_enum(error);
1278 if (ret != WIFI_DIRECT_ERROR_NONE)
1281 g_variant_get(reply, "(iaa{sv})", &ret, &iter_peers);
1282 if (ret != WIFI_DIRECT_ERROR_NONE) {
1283 __WDC_LOG_FUNC_END__;
1284 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1287 WDC_LOGD("wifi_direct_foreach_discovered_peers() SUCCESS");
1289 while (g_variant_iter_loop(iter_peers, "a{sv}", &iter_peer)) {
1290 wifi_direct_discovered_peer_info_s *peer_list = NULL;
1292 peer_list = (wifi_direct_discovered_peer_info_s *) g_try_malloc0(sizeof(wifi_direct_discovered_peer_info_s));
1294 WDC_LOGE("Failed to allocate memory");
1298 while (g_variant_iter_loop(iter_peer, "{sv}", &key, &var)) {
1299 if (!g_strcmp0(key, "DeviceName")) {
1300 const char *device_name = NULL;
1302 g_variant_get(var, "&s", &device_name);
1303 peer_list->device_name = g_strndup(device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
1305 } else if (!g_strcmp0(key, "DeviceAddress")) {
1306 unsigned char mac_address[MACADDR_LEN] = {0, };
1308 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
1309 peer_list->mac_address = (char*) g_try_malloc0(MACSTR_LEN);
1310 if (peer_list->mac_address)
1311 g_snprintf(peer_list->mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
1313 } else if (!g_strcmp0(key, "InterfaceAddress")) {
1314 unsigned char intf_address[MACADDR_LEN] = {0, };
1316 wifi_direct_dbus_unpack_ay(intf_address, var, MACADDR_LEN);
1317 peer_list->interface_address = (char*) g_try_malloc0(MACSTR_LEN);
1318 if (peer_list->interface_address)
1319 g_snprintf(peer_list->interface_address, MACSTR_LEN, MACSTR, MAC2STR(intf_address));
1321 } else if (!g_strcmp0(key, "Channel")) {
1322 peer_list->channel = g_variant_get_uint16(var);
1324 } else if (!g_strcmp0(key, "IsGroupOwner")) {
1325 peer_list->is_group_owner = g_variant_get_boolean(var);
1327 } else if (!g_strcmp0(key, "IsPersistentGO")) {
1328 peer_list->is_persistent_group_owner = g_variant_get_boolean(var);
1330 } else if (!g_strcmp0(key, "IsConnected")) {
1331 peer_list->is_connected = g_variant_get_boolean(var);
1333 } else if (!g_strcmp0(key, "Category")) {
1334 peer_list->primary_device_type = g_variant_get_uint16(var);
1336 } else if (!g_strcmp0(key, "SubCategory")) {
1337 peer_list->secondary_device_type = g_variant_get_uint16(var);
1339 } else if (!g_strcmp0(key, "IsWfdDevice")) {
1340 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
1341 peer_list->is_miracast_device = g_variant_get_boolean(var);
1342 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
1348 /* __wfd_client_print_entry_list(peer_list, 1); */
1349 if (!cb(peer_list, user_data)) {
1350 g_variant_iter_free(iter_peer);
1355 g_variant_iter_free(iter_peers);
1356 g_variant_unref(reply);
1357 __WDC_LOG_FUNC_END__;
1358 return WIFI_DIRECT_ERROR_NONE;
1361 int wifi_direct_connect(char *mac_address)
1363 __WDC_LOG_FUNC_START__;
1365 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1367 GVariant *params = NULL;
1368 GError *error = NULL;
1369 GVariant *reply = NULL;
1370 int ret = WIFI_DIRECT_ERROR_NONE;
1372 if (g_client_info.is_registered == false) {
1373 WDC_LOGE("Client is NOT registered");
1374 __WDC_LOG_FUNC_END__;
1375 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1379 WDC_LOGE("mac_addr is NULL");
1380 __WDC_LOG_FUNC_END__;
1381 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1384 params = g_variant_new("(s)", mac_address);
1385 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1386 "Connect", params, &error);
1388 ret = __net_wifidirect_gerror_to_enum(error);
1389 if (ret == WIFI_DIRECT_ERROR_NONE) {
1390 g_variant_get(reply, "(i)", &ret);
1391 g_variant_unref(reply);
1394 WDC_LOGD("%s() return : [%d]", __func__, ret);
1395 __WDC_LOG_FUNC_END__;
1400 int wifi_direct_cancel_connection(char *mac_address)
1402 __WDC_LOG_FUNC_START__;
1404 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1406 GVariant *params = NULL;
1407 GError *error = NULL;
1408 GVariant *reply = NULL;
1409 int ret = WIFI_DIRECT_ERROR_NONE;
1411 if (g_client_info.is_registered == false) {
1412 WDC_LOGE("Client is NOT registered");
1413 __WDC_LOG_FUNC_END__;
1414 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1418 WDC_LOGE("mac_addr is NULL");
1419 __WDC_LOG_FUNC_END__;
1420 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1423 params = g_variant_new("(s)", mac_address);
1424 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1425 "CancelConnection", params, &error);
1427 ret = __net_wifidirect_gerror_to_enum(error);
1428 if (ret == WIFI_DIRECT_ERROR_NONE) {
1429 g_variant_get(reply, "(i)", &ret);
1430 g_variant_unref(reply);
1433 WDC_LOGD("%s() return : [%d]", __func__, ret);
1434 __WDC_LOG_FUNC_END__;
1439 int wifi_direct_reject_connection(char *mac_address)
1441 __WDC_LOG_FUNC_START__;
1443 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1445 GVariant *params = NULL;
1446 GError *error = NULL;
1447 GVariant *reply = NULL;
1448 int ret = WIFI_DIRECT_ERROR_NONE;
1450 if (g_client_info.is_registered == false) {
1451 WDC_LOGE("Client is NOT registered");
1452 __WDC_LOG_FUNC_END__;
1453 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1457 WDC_LOGE("mac_addr is NULL");
1458 __WDC_LOG_FUNC_END__;
1459 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1462 params = g_variant_new("(s)", mac_address);
1463 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1464 "RejectConnection", params, &error);
1466 ret = __net_wifidirect_gerror_to_enum(error);
1467 if (ret == WIFI_DIRECT_ERROR_NONE) {
1468 g_variant_get(reply, "(i)", &ret);
1469 g_variant_unref(reply);
1472 WDC_LOGD("%s() return : [%d]", __func__, ret);
1473 __WDC_LOG_FUNC_END__;
1478 int wifi_direct_disconnect_all(void)
1480 __WDC_LOG_FUNC_START__;
1482 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1484 GError *error = NULL;
1485 GVariant *reply = NULL;
1486 int ret = WIFI_DIRECT_ERROR_NONE;
1488 if (g_client_info.is_registered == false) {
1489 WDC_LOGE("Client is NOT registered");
1490 __WDC_LOG_FUNC_END__;
1491 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1494 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1495 "DisconnectAll", NULL, &error);
1497 ret = __net_wifidirect_gerror_to_enum(error);
1498 if (ret == WIFI_DIRECT_ERROR_NONE) {
1499 g_variant_get(reply, "(i)", &ret);
1500 g_variant_unref(reply);
1503 WDC_LOGD("%s() return : [%d]", __func__, ret);
1504 __WDC_LOG_FUNC_END__;
1509 int wifi_direct_disconnect(char *mac_address)
1511 __WDC_LOG_FUNC_START__;
1513 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1515 GVariant *params = NULL;
1516 GError *error = NULL;
1517 GVariant *reply = NULL;
1518 int ret = WIFI_DIRECT_ERROR_NONE;
1520 if (g_client_info.is_registered == false) {
1521 WDC_LOGE("Client is NOT registered");
1522 __WDC_LOG_FUNC_END__;
1523 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1527 WDC_LOGE("mac_addr is NULL");
1528 __WDC_LOG_FUNC_END__;
1529 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1532 params = g_variant_new("(s)", mac_address);
1533 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1534 "Disconnect", params, &error);
1536 ret = __net_wifidirect_gerror_to_enum(error);
1537 if (ret == WIFI_DIRECT_ERROR_NONE) {
1538 g_variant_get(reply, "(i)", &ret);
1539 g_variant_unref(reply);
1542 WDC_LOGD("%s() return : [%d]", __func__, ret);
1543 __WDC_LOG_FUNC_END__;
1547 int wifi_direct_accept_connection(char *mac_address)
1549 __WDC_LOG_FUNC_START__;
1551 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1553 GVariant *params = NULL;
1554 GError *error = NULL;
1555 GVariant *reply = NULL;
1556 int ret = WIFI_DIRECT_ERROR_NONE;
1558 if (g_client_info.is_registered == false) {
1559 WDC_LOGE("Client is NOT registered");
1560 __WDC_LOG_FUNC_END__;
1561 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1565 WDC_LOGE("mac_addr is NULL");
1566 __WDC_LOG_FUNC_END__;
1567 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1570 params = g_variant_new("(s)", mac_address);
1571 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1572 "AcceptConnection", params, &error);
1574 ret = __net_wifidirect_gerror_to_enum(error);
1575 if (ret == WIFI_DIRECT_ERROR_NONE) {
1576 g_variant_get(reply, "(i)", &ret);
1577 g_variant_unref(reply);
1580 WDC_LOGD("%s() return : [%d]", __func__, ret);
1581 __WDC_LOG_FUNC_END__;
1586 int wifi_direct_foreach_connected_peers(wifi_direct_connected_peer_cb cb,
1589 __WDC_LOG_FUNC_START__;
1591 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1593 GVariant *params = NULL;
1594 GError *error = NULL;
1595 GVariant *reply = NULL;
1596 GVariantIter *iter_peers = NULL;
1597 GVariantIter *iter_peer = NULL;
1598 GVariant *var = NULL;
1600 int ret = WIFI_DIRECT_ERROR_NONE;
1602 if (g_client_info.is_registered == false) {
1603 WDC_LOGE("Client is NOT registered");
1604 __WDC_LOG_FUNC_END__;
1605 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1609 WDC_LOGE("NULL Param [callback]!");
1610 __WDC_LOG_FUNC_END__;
1611 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1615 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1616 "GetConnectedPeers", params, &error);
1618 ret = __net_wifidirect_gerror_to_enum(error);
1619 if (ret != WIFI_DIRECT_ERROR_NONE)
1622 g_variant_get(reply, "(iaa{sv})", &ret, &iter_peers);
1623 if (ret != WIFI_DIRECT_ERROR_NONE) {
1624 __WDC_LOG_FUNC_END__;
1625 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1628 WDC_LOGD("wifi_direct_foreach_connected_peers() SUCCESS");
1630 while (g_variant_iter_loop(iter_peers, "a{sv}", &iter_peer)) {
1631 wifi_direct_connected_peer_info_s *peer_list = NULL;
1633 peer_list = (wifi_direct_connected_peer_info_s *) g_try_malloc0(sizeof(wifi_direct_connected_peer_info_s));
1635 WDC_LOGE("Failed to allocate memory");
1639 while (g_variant_iter_loop(iter_peer, "{sv}", &key, &var)) {
1640 if (!g_strcmp0(key, "DeviceName")) {
1641 const char *device_name = NULL;
1643 g_variant_get(var, "&s", &device_name);
1644 peer_list->device_name = g_strndup(device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
1646 } else if (!g_strcmp0(key, "DeviceAddress")) {
1647 unsigned char mac_address[MACADDR_LEN] = {0, };
1649 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
1650 peer_list->mac_address = (char*) g_try_malloc0(MACSTR_LEN);
1651 if (peer_list->mac_address)
1652 g_snprintf(peer_list->mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
1654 } else if (!g_strcmp0(key, "InterfaceAddress")) {
1655 unsigned char intf_address[MACADDR_LEN] = {0, };
1657 wifi_direct_dbus_unpack_ay(intf_address, var, MACADDR_LEN);
1658 peer_list->interface_address = (char*) g_try_malloc0(MACSTR_LEN);
1659 if (peer_list->interface_address)
1660 g_snprintf(peer_list->interface_address, MACSTR_LEN, MACSTR, MAC2STR(intf_address));
1662 } else if (!g_strcmp0(key, "IPAddress")) {
1663 unsigned char ip_address[IPADDR_LEN] = {0, };
1665 wifi_direct_dbus_unpack_ay(ip_address, var, IPADDR_LEN);
1666 peer_list->ip_address = (char*) g_try_malloc0(IPSTR_LEN);
1667 if (peer_list->ip_address)
1668 g_snprintf(peer_list->ip_address, IPSTR_LEN, IPSTR, IP2STR(ip_address));
1670 } else if (!g_strcmp0(key, "Channel")) {
1671 peer_list->channel = g_variant_get_uint16(var);
1673 } else if (!g_strcmp0(key, "Category")) {
1674 peer_list->primary_device_type = g_variant_get_uint16(var);
1676 } else if (!g_strcmp0(key, "SubCategory")) {
1677 peer_list->secondary_device_type = g_variant_get_uint16(var);
1679 } else if (!g_strcmp0(key, "IsWfdDevice")) {
1680 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
1681 peer_list->is_miracast_device = g_variant_get_boolean(var);
1682 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
1683 } else if (!g_strcmp0(key, "IsP2P")) {
1684 peer_list->p2p_supported = g_variant_get_boolean(var);
1691 /* __wfd_client_print_connected_peer_info(peer_list, 1); */
1692 if (!cb(peer_list, user_data)) {
1693 g_variant_iter_free(iter_peer);
1698 g_variant_iter_free(iter_peers);
1699 g_variant_unref(reply);
1701 __WDC_LOG_FUNC_END__;
1702 return WIFI_DIRECT_ERROR_NONE;
1706 int wifi_direct_create_group(void)
1708 __WDC_LOG_FUNC_START__;
1710 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1712 GError *error = NULL;
1713 GVariant *reply = NULL;
1714 int ret = WIFI_DIRECT_ERROR_NONE;
1716 if (g_client_info.is_registered == false) {
1717 WDC_LOGE("Client is NOT registered");
1718 __WDC_LOG_FUNC_END__;
1719 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1722 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1723 "CreateGroup", NULL, &error);
1725 ret = __net_wifidirect_gerror_to_enum(error);
1726 if (ret == WIFI_DIRECT_ERROR_NONE) {
1727 g_variant_get(reply, "(i)", &ret);
1728 g_variant_unref(reply);
1731 WDC_LOGD("%s() return : [%d]", __func__, ret);
1732 __WDC_LOG_FUNC_END__;
1737 int wifi_direct_destroy_group(void)
1739 __WDC_LOG_FUNC_START__;
1741 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1743 GError *error = NULL;
1744 GVariant *reply = NULL;
1745 int ret = WIFI_DIRECT_ERROR_NONE;
1747 if (g_client_info.is_registered == false) {
1748 WDC_LOGE("Client is NOT registered");
1749 __WDC_LOG_FUNC_END__;
1750 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1753 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1754 "DestroyGroup", NULL, &error);
1756 ret = __net_wifidirect_gerror_to_enum(error);
1757 if (ret == WIFI_DIRECT_ERROR_NONE) {
1758 g_variant_get(reply, "(i)", &ret);
1759 g_variant_unref(reply);
1762 WDC_LOGD("%s() return : [%d]", __func__, ret);
1763 __WDC_LOG_FUNC_END__;
1768 int wifi_direct_is_group_owner(bool *owner)
1770 __WDC_LOG_FUNC_START__;
1772 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1774 GError* error = NULL;
1775 GVariant *reply = NULL;
1776 int ret = WIFI_DIRECT_ERROR_NONE;
1779 if (g_client_info.is_registered == false) {
1780 WDC_LOGE("Client is NOT registered");
1781 __WDC_LOG_FUNC_END__;
1782 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1786 WDC_LOGE("NULL Param [owner]!");
1787 __WDC_LOG_FUNC_END__;
1788 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1791 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1796 ret = __net_wifidirect_gerror_to_enum(error);
1797 if (ret != WIFI_DIRECT_ERROR_NONE)
1800 WDC_LOGD("%s() SUCCESS", __func__);
1801 g_variant_get(reply, "(b)", &val);
1803 g_variant_unref(reply);
1805 __WDC_LOG_FUNC_END__;
1806 return WIFI_DIRECT_ERROR_NONE;
1809 int wifi_direct_is_autonomous_group(bool *autonomous_group)
1811 __WDC_LOG_FUNC_START__;
1813 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1815 GError* error = NULL;
1816 GVariant *reply = NULL;
1817 int ret = WIFI_DIRECT_ERROR_NONE;
1820 if (g_client_info.is_registered == false) {
1821 WDC_LOGE("Client is NOT registered");
1822 __WDC_LOG_FUNC_END__;
1823 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1826 if (!autonomous_group) {
1827 WDC_LOGE("NULL Param [autonomous_group]!\n");
1828 __WDC_LOG_FUNC_END__;
1829 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1832 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1837 ret = __net_wifidirect_gerror_to_enum(error);
1838 if (ret != WIFI_DIRECT_ERROR_NONE)
1841 WDC_LOGD("%s() SUCCESS", __func__);
1842 g_variant_get(reply, "(b)", &val);
1843 *autonomous_group = val;
1844 g_variant_unref(reply);
1846 __WDC_LOG_FUNC_END__;
1847 return WIFI_DIRECT_ERROR_NONE;
1851 int wifi_direct_set_group_owner_intent(int intent)
1853 __WDC_LOG_FUNC_START__;
1855 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1857 GError* error = NULL;
1858 GVariant *reply = NULL;
1859 GVariant *params = NULL;
1860 int ret = WIFI_DIRECT_ERROR_NONE;
1862 if (g_client_info.is_registered == false) {
1863 WDC_LOGE("Client is NOT registered");
1864 __WDC_LOG_FUNC_END__;
1865 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1868 if (intent < 0 || intent > 15) {
1869 WDC_LOGE("Invalid Param : intent[%d]", intent);
1870 __WDC_LOG_FUNC_END__;
1871 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1874 params = g_variant_new("(i)", intent);
1875 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
1880 ret = __net_wifidirect_gerror_to_enum(error);
1881 if (ret == WIFI_DIRECT_ERROR_NONE) {
1882 g_variant_get(reply, "(i)", &ret);
1883 g_variant_unref(reply);
1886 WDC_LOGD("%s() return : [%d]", __func__, ret);
1887 __WDC_LOG_FUNC_END__;
1891 int wifi_direct_get_group_owner_intent(int *intent)
1893 __WDC_LOG_FUNC_START__;
1895 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1897 GError* error = NULL;
1898 GVariant *reply = NULL;
1900 int ret = WIFI_DIRECT_ERROR_NONE;
1902 if (g_client_info.is_registered == false) {
1903 WDC_LOGE("Client is NOT registered");
1904 __WDC_LOG_FUNC_END__;
1905 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1909 WDC_LOGE("Invalid Parameter");
1910 __WDC_LOG_FUNC_END__;
1911 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1914 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
1919 ret = __net_wifidirect_gerror_to_enum(error);
1920 if (ret != WIFI_DIRECT_ERROR_NONE)
1923 g_variant_get(reply, "(ii)", &ret, &val);
1925 g_variant_unref(reply);
1927 WDC_LOGD("Intent = [%d]", *intent);
1928 WDC_LOGD("%s() return : [%d]", __func__, ret);
1929 __WDC_LOG_FUNC_END__;
1933 int wifi_direct_set_max_clients(int max)
1935 __WDC_LOG_FUNC_START__;
1937 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1939 GError* error = NULL;
1940 GVariant *reply = NULL;
1941 GVariant *params = NULL;
1942 int ret = WIFI_DIRECT_ERROR_NONE;
1944 if (g_client_info.is_registered == false) {
1945 WDC_LOGE("Client is NOT registered");
1946 __WDC_LOG_FUNC_END__;
1947 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1949 WDC_LOGD("max client [%d]\n", max);
1951 params = g_variant_new("(i)", max);
1952 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
1957 ret = __net_wifidirect_gerror_to_enum(error);
1958 if (ret == WIFI_DIRECT_ERROR_NONE) {
1959 g_variant_get(reply, "(i)", &ret);
1960 g_variant_unref(reply);
1963 WDC_LOGD("%s() return : [%d]", __func__, ret);
1964 __WDC_LOG_FUNC_END__;
1968 int wifi_direct_get_max_clients(int *max)
1970 __WDC_LOG_FUNC_START__;
1972 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1974 GError* error = NULL;
1975 GVariant *reply = NULL;
1977 int ret = WIFI_DIRECT_ERROR_NONE;
1979 if (g_client_info.is_registered == false) {
1980 WDC_LOGE("Client is NOT registered");
1981 __WDC_LOG_FUNC_END__;
1982 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1986 WDC_LOGE("Invalid Parameter");
1987 __WDC_LOG_FUNC_END__;
1988 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1991 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
1996 ret = __net_wifidirect_gerror_to_enum(error);
1997 if (ret != WIFI_DIRECT_ERROR_NONE)
2000 g_variant_get(reply, "(ii)", &ret, &val);
2002 g_variant_unref(reply);
2004 WDC_LOGD("max_client = [%d]", *max);
2005 WDC_LOGD("%s() return : [%d]", __func__, ret);
2006 __WDC_LOG_FUNC_END__;
2007 return WIFI_DIRECT_ERROR_NONE;
2010 int wifi_direct_get_operating_channel(int *channel)
2012 __WDC_LOG_FUNC_START__;
2014 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2016 GError* error = NULL;
2017 GVariant *reply = NULL;
2019 int ret = WIFI_DIRECT_ERROR_NONE;
2021 if (g_client_info.is_registered == false) {
2022 WDC_LOGE("Client is NOT registered");
2023 __WDC_LOG_FUNC_END__;
2024 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2028 WDC_LOGE("NULL Param [channel]!\n");
2029 __WDC_LOG_FUNC_END__;
2030 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2033 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2034 "GetOperatingChannel",
2038 ret = __net_wifidirect_gerror_to_enum(error);
2039 if (ret != WIFI_DIRECT_ERROR_NONE)
2042 g_variant_get(reply, "(ii)", &ret, &val);
2044 g_variant_unref(reply);
2046 WDC_LOGD("channel = [%d]", *channel);
2047 WDC_LOGD("%s() return : [%d]", __func__, ret);
2048 __WDC_LOG_FUNC_END__;
2049 return WIFI_DIRECT_ERROR_NONE;
2052 int wifi_direct_activate_pushbutton(void)
2054 __WDC_LOG_FUNC_START__;
2056 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2058 GError* error = NULL;
2059 GVariant *reply = NULL;
2060 int ret = WIFI_DIRECT_ERROR_NONE;
2062 if (g_client_info.is_registered == false) {
2063 WDC_LOGE("Client is NOT registered");
2064 __WDC_LOG_FUNC_END__;
2065 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2068 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
2069 "ActivatePushButton",
2073 ret = __net_wifidirect_gerror_to_enum(error);
2074 if (ret == WIFI_DIRECT_ERROR_NONE) {
2075 g_variant_get(reply, "(i)", &ret);
2076 g_variant_unref(reply);
2079 WDC_LOGD("%s() return : [%d]", __func__, ret);
2080 __WDC_LOG_FUNC_END__;
2084 int wifi_direct_set_wps_pin(char *pin)
2086 __WDC_LOG_FUNC_START__;
2088 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2090 GError* error = NULL;
2091 GVariant *reply = NULL;
2092 GVariant *params = NULL;
2093 int ret = WIFI_DIRECT_ERROR_NONE;
2095 if (g_client_info.is_registered == false) {
2096 WDC_LOGE("Client is NOT registered");
2097 __WDC_LOG_FUNC_END__;
2098 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2102 WDC_LOGE("NULL Param [pin]!");
2103 __WDC_LOG_FUNC_END__;
2104 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2106 WDC_LOGE("pin = [%s]\n", pin);
2108 params = g_variant_new("(s)", pin);
2109 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2114 ret = __net_wifidirect_gerror_to_enum(error);
2115 if (ret == WIFI_DIRECT_ERROR_NONE) {
2116 g_variant_get(reply, "(i)", &ret);
2117 g_variant_unref(reply);
2120 WDC_LOGD("%s() return : [%d]", __func__, ret);
2121 __WDC_LOG_FUNC_END__;
2126 int wifi_direct_get_wps_pin(char **pin)
2128 __WDC_LOG_FUNC_START__;
2130 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2132 GError* error = NULL;
2133 GVariant *reply = NULL;
2134 const char *str = NULL;
2135 int ret = WIFI_DIRECT_ERROR_NONE;
2137 if (g_client_info.is_registered == false) {
2138 WDC_LOGE("Client is NOT registered");
2139 __WDC_LOG_FUNC_END__;
2140 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2144 WDC_LOGE("NULL Param [pin]!");
2145 __WDC_LOG_FUNC_END__;
2146 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2149 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2154 ret = __net_wifidirect_gerror_to_enum(error);
2155 if (ret != WIFI_DIRECT_ERROR_NONE)
2158 g_variant_get(reply, "(i&s)", &ret, &str);
2159 if (pin != NULL && str != NULL)
2160 *pin = g_strdup(str);
2161 g_variant_unref(reply);
2163 WDC_LOGD("%s() return : [%d]", __func__, ret);
2164 __WDC_LOG_FUNC_END__;
2168 int wifi_direct_get_supported_wps_mode(int *wps_mode)
2170 __WDC_LOG_FUNC_START__;
2172 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2174 GError* error = NULL;
2175 GVariant *reply = NULL;
2177 int ret = WIFI_DIRECT_ERROR_NONE;
2179 if (g_client_info.is_registered == false) {
2180 WDC_LOGE("Client is NOT registered");
2181 __WDC_LOG_FUNC_END__;
2182 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2186 WDC_LOGE("NULL Param [wps_mode]!");
2187 __WDC_LOG_FUNC_END__;
2188 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2191 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2192 "GetSupportedWpsMode",
2196 ret = __net_wifidirect_gerror_to_enum(error);
2197 if (ret != WIFI_DIRECT_ERROR_NONE)
2200 g_variant_get(reply, "(ii)", &ret, &mode);
2202 g_variant_unref(reply);
2204 WDC_LOGD("%s() return : [%d]", __func__, ret);
2205 __WDC_LOG_FUNC_END__;
2209 int wifi_direct_foreach_supported_wps_types(wifi_direct_supported_wps_type_cb cb, void* user_data)
2211 __WDC_LOG_FUNC_START__;
2213 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2215 GError* error = NULL;
2216 GVariant *reply = NULL;
2218 int ret = WIFI_DIRECT_ERROR_NONE;
2219 gboolean result = FALSE;
2221 if (g_client_info.is_registered == false) {
2222 WDC_LOGE("Client is NOT registered");
2223 __WDC_LOG_FUNC_END__;
2224 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2228 WDC_LOGE("NULL Param [callback]!");
2229 __WDC_LOG_FUNC_END__;
2230 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2233 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2234 "GetSupportedWpsMode",
2238 ret = __net_wifidirect_gerror_to_enum(error);
2239 if (ret != WIFI_DIRECT_ERROR_NONE)
2242 g_variant_get(reply, "(ii)", &ret, &wps_mode);
2243 g_variant_unref(reply);
2245 if (wps_mode & WIFI_DIRECT_WPS_TYPE_PBC)
2246 result = cb(WIFI_DIRECT_WPS_TYPE_PBC, user_data);
2247 if ((result == TRUE) && (wps_mode & WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY))
2248 result = cb(WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY, user_data);
2249 if ((result == TRUE) && (wps_mode & WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD))
2250 result = cb(WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD, user_data);
2252 WDC_LOGD("%s() return : [%d]", __func__, ret);
2253 __WDC_LOG_FUNC_END__;
2257 int wifi_direct_get_local_wps_type(wifi_direct_wps_type_e *type)
2259 __WDC_LOG_FUNC_START__;
2261 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2263 GError* error = NULL;
2264 GVariant *reply = NULL;
2266 int ret = WIFI_DIRECT_ERROR_NONE;
2268 if (g_client_info.is_registered == false) {
2269 WDC_LOGE("Client is NOT registered");
2270 __WDC_LOG_FUNC_END__;
2271 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2275 WDC_LOGE("NULL Param [type]!\n");
2276 __WDC_LOG_FUNC_END__;
2277 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2280 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2285 ret = __net_wifidirect_gerror_to_enum(error);
2286 if (ret != WIFI_DIRECT_ERROR_NONE)
2289 g_variant_get(reply, "(ii)", &ret, &mode);
2291 g_variant_unref(reply);
2293 WDC_LOGD("%s() return : [%d]", __func__, ret);
2294 __WDC_LOG_FUNC_END__;
2298 int wifi_direct_set_req_wps_type(wifi_direct_wps_type_e type)
2300 __WDC_LOG_FUNC_START__;
2302 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2304 GError* error = NULL;
2305 GVariant *reply = NULL;
2306 GVariant *params = NULL;
2307 int ret = WIFI_DIRECT_ERROR_NONE;
2309 if (g_client_info.is_registered == false) {
2310 WDC_LOGE("Client is NOT registered");
2311 __WDC_LOG_FUNC_END__;
2312 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2315 if (type == WIFI_DIRECT_WPS_TYPE_PBC ||
2316 type == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY ||
2317 type == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD) {
2318 WDC_LOGD("Param wps_mode [%d]", type);
2320 WDC_LOGE("Invalid Param [wps_mode]!");
2321 __WDC_LOG_FUNC_END__;
2322 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2325 params = g_variant_new("(i)", type);
2326 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2331 ret = __net_wifidirect_gerror_to_enum(error);
2332 if (ret == WIFI_DIRECT_ERROR_NONE) {
2333 g_variant_get(reply, "(i)", &ret);
2334 g_variant_unref(reply);
2337 WDC_LOGD("%s() return : [%d]", __func__, ret);
2338 __WDC_LOG_FUNC_END__;
2342 int wifi_direct_get_req_wps_type(wifi_direct_wps_type_e *type)
2344 __WDC_LOG_FUNC_START__;
2346 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2348 GError* error = NULL;
2349 GVariant *reply = NULL;
2353 if (g_client_info.is_registered == false) {
2354 WDC_LOGE("Client is NOT registered");
2355 __WDC_LOG_FUNC_END__;
2356 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2360 WDC_LOGE("NULL Param [type]!\n");
2361 __WDC_LOG_FUNC_END__;
2362 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2365 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2370 ret = __net_wifidirect_gerror_to_enum(error);
2371 if (ret != WIFI_DIRECT_ERROR_NONE)
2374 g_variant_get(reply, "(ii)", &ret, &mode);
2376 g_variant_unref(reply);
2378 WDC_LOGD("%s() return : [%d]", __func__, ret);
2379 __WDC_LOG_FUNC_END__;
2383 int wifi_direct_get_ssid(char **ssid)
2385 __WDC_LOG_FUNC_START__;
2387 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2389 GError* error = NULL;
2390 GVariant *reply = NULL;
2391 const char *str = NULL;
2392 int ret = WIFI_DIRECT_ERROR_NONE;
2394 if (g_client_info.is_registered == false) {
2395 WDC_LOGE("Client is NOT registered");
2396 __WDC_LOG_FUNC_END__;
2397 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2401 WDC_LOGE("Invalid Parameter");
2402 __WDC_LOG_FUNC_END__;
2403 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2406 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2411 ret = __net_wifidirect_gerror_to_enum(error);
2412 if (ret != WIFI_DIRECT_ERROR_NONE)
2415 g_variant_get(reply, "(i&s)", &ret, &str);
2416 *ssid = g_strdup(str);
2417 g_variant_unref(reply);
2419 WDC_LOGD("%s() return : [%d]", __func__, ret);
2420 __WDC_LOG_FUNC_END__;
2424 int wifi_direct_get_device_name(char **device_name)
2426 __WDC_LOG_FUNC_START__;
2428 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2430 GError* error = NULL;
2431 GVariant *reply = NULL;
2432 const char *str = NULL;
2433 int ret = WIFI_DIRECT_ERROR_NONE;
2435 if (g_client_info.is_registered == false) {
2436 WDC_LOGE("Client is NOT registered");
2437 __WDC_LOG_FUNC_END__;
2438 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2442 WDC_LOGE("Invalid Parameter");
2443 __WDC_LOG_FUNC_END__;
2444 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2447 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2452 ret = __net_wifidirect_gerror_to_enum(error);
2453 if (ret != WIFI_DIRECT_ERROR_NONE)
2456 g_variant_get(reply, "(i&s)", &ret, &str);
2457 *device_name = g_strdup(str);
2458 g_variant_unref(reply);
2460 WDC_LOGD("%s() return : [%d]", __func__, ret);
2461 __WDC_LOG_FUNC_END__;
2465 int wifi_direct_set_device_name(const char *device_name)
2467 __WDC_LOG_FUNC_START__;
2469 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2471 GError* error = NULL;
2472 GVariant *reply = NULL;
2473 GVariant *params = NULL;
2474 int ret = WIFI_DIRECT_ERROR_NONE;
2476 if (g_client_info.is_registered == false) {
2477 WDC_LOGE("Client is NOT registered");
2478 __WDC_LOG_FUNC_END__;
2479 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2483 WDC_LOGE("NULL Param [device_name]!");
2484 __WDC_LOG_FUNC_END__;
2485 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2487 WDC_LOGE("device_name = [%s]", device_name);
2489 params = g_variant_new("(s)", device_name);
2490 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2495 ret = __net_wifidirect_gerror_to_enum(error);
2496 if (ret == WIFI_DIRECT_ERROR_NONE) {
2497 g_variant_get(reply, "(i)", &ret);
2498 g_variant_unref(reply);
2501 WDC_LOGD("%s() return : [%d]", __func__, ret);
2502 __WDC_LOG_FUNC_END__;
2507 int wifi_direct_get_network_interface_name(char **name)
2509 __WDC_LOG_FUNC_START__;
2511 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2513 wifi_direct_state_e status = 0;
2514 char *get_str = NULL;
2515 GError* error = NULL;
2516 GVariant *reply = NULL;
2517 int ret = WIFI_DIRECT_ERROR_NONE;
2519 if (g_client_info.is_registered == false) {
2520 WDC_LOGE("Client is NOT registered");
2521 __WDC_LOG_FUNC_END__;
2522 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2526 WDC_LOGE("NULL Param [name]!\n");
2527 __WDC_LOG_FUNC_END__;
2528 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2531 ret = wifi_direct_get_state(&status);
2532 WDC_LOGD("wifi_direct_get_state() state=[%d], ret=[%d]\n", status, ret);
2534 if (status < WIFI_DIRECT_STATE_CONNECTED) {
2535 WDC_LOGE("Device is not connected!\n");
2536 __WDC_LOG_FUNC_END__;
2537 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
2540 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2545 ret = __net_wifidirect_gerror_to_enum(error);
2546 if (ret != WIFI_DIRECT_ERROR_NONE)
2549 g_variant_get(reply, "(i&s)", ret, &get_str);
2550 *name = g_strdup(get_str);
2551 g_variant_unref(reply);
2553 WDC_LOGD("Interface Name = [%s]", *name);
2554 WDC_LOGD("%s() return : [%d]", __func__, ret);
2556 __WDC_LOG_FUNC_END__;
2557 return WIFI_DIRECT_ERROR_NONE;
2560 int wifi_direct_get_ip_address(char **ip_address)
2562 __WDC_LOG_FUNC_START__;
2564 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2566 GError* error = NULL;
2567 GVariant *reply = NULL;
2568 const char *str = NULL;
2569 int ret = WIFI_DIRECT_ERROR_NONE;
2571 if (g_client_info.is_registered == false) {
2572 WDC_LOGE("Client is NOT registered");
2573 __WDC_LOG_FUNC_END__;
2574 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2578 WDC_LOGE("NULL Param [ip_address]!\n");
2579 __WDC_LOG_FUNC_END__;
2580 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2583 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2588 ret = __net_wifidirect_gerror_to_enum(error);
2589 if (ret != WIFI_DIRECT_ERROR_NONE)
2592 g_variant_get(reply, "(i&s)", ret, &str);
2593 *ip_address = g_strdup(str);
2594 g_variant_unref(reply);
2596 WDC_LOGD("IP address = [%s]", *ip_address);
2597 WDC_LOGD("%s() return : [%d]", __func__, ret);
2598 __WDC_LOG_FUNC_END__;
2602 int wifi_direct_get_subnet_mask(char **subnet_mask)
2604 __WDC_LOG_FUNC_START__;
2606 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2608 wifi_direct_state_e status = 0;
2609 GError* error = NULL;
2610 GVariant *reply = NULL;
2611 char *get_str = NULL;
2612 int ret = WIFI_DIRECT_ERROR_NONE;
2614 if (g_client_info.is_registered == false) {
2615 WDC_LOGE("Client is NOT registered");
2616 __WDC_LOG_FUNC_END__;
2617 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2621 WDC_LOGE("NULL Param [subnet_mask]!");
2622 __WDC_LOG_FUNC_END__;
2623 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2626 ret = wifi_direct_get_state(&status);
2627 WDC_LOGD("wifi_direct_get_state() state=[%d], ret=[%d]", status, ret);
2628 if (status < WIFI_DIRECT_STATE_CONNECTED) {
2629 WDC_LOGE("Device is not connected!");
2630 __WDC_LOG_FUNC_END__;
2631 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
2634 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2639 ret = __net_wifidirect_gerror_to_enum(error);
2640 if (ret != WIFI_DIRECT_ERROR_NONE)
2643 g_variant_get(reply, "(i&s)", ret, &get_str);
2644 *subnet_mask = g_strdup(get_str);
2645 g_variant_unref(reply);
2647 WDC_LOGD("Subnet Mask = [%s]", *subnet_mask);
2648 WDC_LOGD("%s() return : [%d]", __func__, ret);
2650 __WDC_LOG_FUNC_END__;
2651 return WIFI_DIRECT_ERROR_NONE;
2654 int wifi_direct_get_gateway_address(char **gateway_address)
2656 __WDC_LOG_FUNC_START__;
2658 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2660 wifi_direct_state_e status = 0;
2661 GError* error = NULL;
2662 GVariant *reply = NULL;
2663 char *get_str = NULL;
2664 int ret = WIFI_DIRECT_ERROR_NONE;
2666 if (g_client_info.is_registered == false) {
2667 WDC_LOGE("Client is NOT registered");
2668 __WDC_LOG_FUNC_END__;
2669 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2672 if (!gateway_address) {
2673 WDC_LOGE("NULL Param [gateway_address]!");
2674 __WDC_LOG_FUNC_END__;
2675 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2678 ret = wifi_direct_get_state(&status);
2679 WDC_LOGD("wifi_direct_get_state() state=[%d], ret=[%d]", status, ret);
2680 if (status < WIFI_DIRECT_STATE_CONNECTED) {
2681 WDC_LOGE("Device is not connected!");
2682 __WDC_LOG_FUNC_END__;
2683 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
2686 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2691 ret = __net_wifidirect_gerror_to_enum(error);
2692 if (ret != WIFI_DIRECT_ERROR_NONE)
2695 g_variant_get(reply, "(i&s)", ret, &get_str);
2696 *gateway_address = g_strdup(get_str);
2697 g_variant_unref(reply);
2699 WDC_LOGD("Gateway Address = [%s]", *gateway_address);
2700 WDC_LOGD("%s() return : [%d]", __func__, ret);
2702 __WDC_LOG_FUNC_END__;
2703 return WIFI_DIRECT_ERROR_NONE;
2707 int wifi_direct_get_mac_address(char **mac_address)
2709 __WDC_LOG_FUNC_START__;
2711 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2713 GError* error = NULL;
2714 GVariant *reply = NULL;
2715 const char *str = NULL;
2716 int ret = WIFI_DIRECT_ERROR_NONE;
2718 if (g_client_info.is_registered == false) {
2719 WDC_LOGE("Client is NOT registered");
2720 __WDC_LOG_FUNC_END__;
2721 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2725 WDC_LOGE("NULL Param [mac_address]!");
2726 __WDC_LOG_FUNC_END__;
2727 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2730 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2735 ret = __net_wifidirect_gerror_to_enum(error);
2736 if (ret != WIFI_DIRECT_ERROR_NONE)
2739 g_variant_get(reply, "(i&s)", &ret, &str);
2740 *mac_address = g_strdup(str);
2741 g_variant_unref(reply);
2743 WDC_SECLOGD("MAC address = [%s]", *mac_address);
2744 WDC_LOGD("%s() return : [%d]", __func__, ret);
2745 __WDC_LOG_FUNC_END__;
2749 int wifi_direct_get_state(wifi_direct_state_e *state)
2751 __WDC_LOG_FUNC_START__;
2753 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2756 int ret = WIFI_DIRECT_ERROR_NONE;
2759 WDC_LOGE("Invalid Parameter");
2760 __WDC_LOG_FUNC_END__;
2761 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2764 ret = vconf_get_int(VCONFKEY_WIFI_DIRECT_STATE, &val);
2766 WDC_LOGE("Failed to get vconf value [%s]\n", VCONFKEY_WIFI_DIRECT_STATE);
2767 __WDC_LOG_FUNC_END__;
2768 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2771 if (val == VCONFKEY_WIFI_DIRECT_ACTIVATED) {
2772 *state = WIFI_DIRECT_STATE_ACTIVATED;
2773 } else if (val == VCONFKEY_WIFI_DIRECT_DEACTIVATED) {
2774 *state= WIFI_DIRECT_STATE_DEACTIVATED;
2775 } else if (val == VCONFKEY_WIFI_DIRECT_CONNECTED) {
2776 *state = WIFI_DIRECT_STATE_CONNECTED;
2777 } else if (val == VCONFKEY_WIFI_DIRECT_GROUP_OWNER) {
2778 *state = WIFI_DIRECT_STATE_GROUP_OWNER;
2779 } else if (val == VCONFKEY_WIFI_DIRECT_DISCOVERING) {
2780 *state = WIFI_DIRECT_STATE_DISCOVERING;
2782 WDC_LOGE("This state cannot be set as wifi_direct vconf state[%d]", val);
2783 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2786 WDC_LOGD("State = [%d]", *state);
2787 WDC_LOGD("%s() return : [%d]", __func__, ret);
2788 __WDC_LOG_FUNC_END__;
2792 int wifi_direct_is_discoverable(bool* discoverable)
2794 __WDC_LOG_FUNC_START__;
2796 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2798 GError* error = NULL;
2799 GVariant *reply = NULL;
2800 int ret = WIFI_DIRECT_ERROR_NONE;
2802 if (g_client_info.is_registered == false) {
2803 WDC_LOGE("Client is NOT registered");
2804 __WDC_LOG_FUNC_END__;
2805 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2808 if (!discoverable) {
2809 WDC_LOGE("Invalid Parameter");
2810 __WDC_LOG_FUNC_END__;
2811 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2814 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
2815 "IsDiscoverable", NULL, &error);
2817 ret = __net_wifidirect_gerror_to_enum(error);
2818 if (ret != WIFI_DIRECT_ERROR_NONE)
2821 g_variant_get(reply, "(b)", discoverable);
2822 WDC_LOGD("Discoverable = [%s]", *discoverable ? "Yes" : "No");
2824 WDC_LOGD("%s() SUCCESS", __func__);
2825 g_variant_unref(reply);
2827 __WDC_LOG_FUNC_END__;
2828 return WIFI_DIRECT_ERROR_NONE;
2831 int wifi_direct_is_listening_only(bool* listen_only)
2833 __WDC_LOG_FUNC_START__;
2835 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2837 GError* error = NULL;
2838 GVariant *reply = NULL;
2839 int ret = WIFI_DIRECT_ERROR_NONE;
2841 if (g_client_info.is_registered == false) {
2842 WDC_LOGE("Client is NOT registered");
2843 __WDC_LOG_FUNC_END__;
2844 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2848 WDC_LOGE("Invalid Parameter");
2849 __WDC_LOG_FUNC_END__;
2850 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2853 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
2854 "IsListeningOnly", NULL, &error);
2856 ret = __net_wifidirect_gerror_to_enum(error);
2857 if (ret != WIFI_DIRECT_ERROR_NONE)
2860 g_variant_get(reply, "(b)", listen_only);
2862 WDC_LOGD("Is listen only = [%s]", *listen_only ? "Yes" : "No");
2863 WDC_LOGD("%s() SUCCESS", __func__);
2864 g_variant_unref(reply);
2866 __WDC_LOG_FUNC_END__;
2867 return WIFI_DIRECT_ERROR_NONE;
2871 int wifi_direct_get_primary_device_type(wifi_direct_primary_device_type_e* type)
2873 __WDC_LOG_FUNC_START__;
2875 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2878 WDC_LOGE("NULL Param [type]!");
2879 __WDC_LOG_FUNC_END__;
2880 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2883 if (g_client_info.is_registered == false) {
2884 WDC_LOGE("Client is NOT registered");
2885 __WDC_LOG_FUNC_END__;
2886 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2890 WDC_LOGD("Current primary_dev_type [%d]", WIFI_DIRECT_PRIMARY_DEVICE_TYPE_DISPLAY);
2891 *type = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_DISPLAY;
2892 #else /* TIZEN_TV */
2893 WDC_LOGD("Current primary_dev_type [%d]", WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE);
2894 *type = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE;
2895 #endif /* TIZEN_TV */
2897 __WDC_LOG_FUNC_END__;
2898 return WIFI_DIRECT_ERROR_NONE;
2901 int wifi_direct_get_secondary_device_type(wifi_direct_secondary_device_type_e* type)
2903 __WDC_LOG_FUNC_START__;
2905 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2907 if (g_client_info.is_registered == false) {
2908 WDC_LOGE("Client is NOT registered");
2909 __WDC_LOG_FUNC_END__;
2910 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2914 WDC_LOGE("NULL Param [type]!");
2915 __WDC_LOG_FUNC_END__;
2916 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2920 WDC_LOGD("Current second_dev_type [%d]", WIFI_DIRECT_SECONDARY_DEVICE_TYPE_DISPLAY_TV);
2921 *type = WIFI_DIRECT_SECONDARY_DEVICE_TYPE_DISPLAY_TV;
2922 #else /* TIZEN_TV */
2923 WDC_LOGD("Current second_dev_type [%d]", WIFI_DIRECT_SECONDARY_DEVICE_TYPE_TELEPHONE_SMARTPHONE_DUAL);
2924 *type = WIFI_DIRECT_SECONDARY_DEVICE_TYPE_TELEPHONE_SMARTPHONE_DUAL; /* smart phone dual mode (wifi and cellular) */
2925 #endif /* TIZEN_TV */
2927 __WDC_LOG_FUNC_END__;
2928 return WIFI_DIRECT_ERROR_NONE;
2931 int wifi_direct_set_autoconnection_mode(bool mode)
2933 __WDC_LOG_FUNC_START__;
2935 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2937 GError* error = NULL;
2938 GVariant *reply = NULL;
2939 GVariant *params = NULL;
2940 int ret = WIFI_DIRECT_ERROR_NONE;
2942 if (g_client_info.is_registered == false) {
2943 WDC_LOGE("Client is NOT registered");
2944 __WDC_LOG_FUNC_END__;
2945 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2948 params = g_variant_new("(b)", mode);
2949 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2950 "SetAutoConnectionMode",
2954 ret = __net_wifidirect_gerror_to_enum(error);
2955 if (ret == WIFI_DIRECT_ERROR_NONE) {
2956 g_variant_get(reply, "(i)", &ret);
2957 g_variant_unref(reply);
2960 WDC_LOGD("%s() return : [%d]", __func__, ret);
2961 __WDC_LOG_FUNC_END__;
2965 int wifi_direct_is_autoconnection_mode(bool *mode)
2967 __WDC_LOG_FUNC_START__;
2969 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2971 GError* error = NULL;
2972 GVariant *reply = NULL;
2974 int ret = WIFI_DIRECT_ERROR_NONE;
2976 if (g_client_info.is_registered == false) {
2977 WDC_LOGE("Client is NOT registered");
2978 __WDC_LOG_FUNC_END__;
2979 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2983 WDC_LOGE("NULL Param [mode]!");
2984 __WDC_LOG_FUNC_END__;
2985 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2988 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2989 "IsAutoConnectionMode",
2993 ret = __net_wifidirect_gerror_to_enum(error);
2994 if (ret != WIFI_DIRECT_ERROR_NONE)
2997 g_variant_get(reply, "(ib)", &ret, &val);
2999 g_variant_unref(reply);
3001 WDC_LOGD("%s() return : [%d]", __func__, ret);
3002 __WDC_LOG_FUNC_END__;
3007 int wifi_direct_set_persistent_group_enabled(bool enabled)
3009 __WDC_LOG_FUNC_START__;
3011 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3013 GError* error = NULL;
3014 GVariant *reply = NULL;
3015 GVariant *params = NULL;
3016 int ret = WIFI_DIRECT_ERROR_NONE;
3018 if (g_client_info.is_registered == false) {
3019 WDC_LOGE("Client is NOT registered");
3020 __WDC_LOG_FUNC_END__;
3021 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3024 params = g_variant_new("(b)", enabled);
3025 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3026 "SetPersistentGroupEnabled",
3030 ret = __net_wifidirect_gerror_to_enum(error);
3031 if (ret == WIFI_DIRECT_ERROR_NONE) {
3032 g_variant_get(reply, "(i)", &ret);
3033 g_variant_unref(reply);
3036 WDC_LOGD("%s() return : [%d]", __func__, ret);
3038 __WDC_LOG_FUNC_END__;
3039 return WIFI_DIRECT_ERROR_NONE;
3043 int wifi_direct_is_persistent_group_enabled(bool *enabled)
3045 __WDC_LOG_FUNC_START__;
3047 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3049 GError* error = NULL;
3050 GVariant *reply = NULL;
3051 int ret = WIFI_DIRECT_ERROR_NONE;
3054 if (g_client_info.is_registered == false) {
3055 WDC_LOGE("Client is NOT registered");
3056 __WDC_LOG_FUNC_END__;
3057 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3061 WDC_LOGE("NULL Param [enabled]!");
3062 __WDC_LOG_FUNC_END__;
3063 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3066 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3067 "IsPersistentGroupEnabled",
3071 ret = __net_wifidirect_gerror_to_enum(error);
3072 if (ret != WIFI_DIRECT_ERROR_NONE)
3075 WDC_LOGD("%s() SUCCESS", __func__);
3076 g_variant_get(reply, "(b)", &val);
3078 g_variant_unref(reply);
3080 __WDC_LOG_FUNC_END__;
3081 return WIFI_DIRECT_ERROR_NONE;
3084 int wifi_direct_foreach_persistent_groups(wifi_direct_persistent_group_cb cb,
3087 __WDC_LOG_FUNC_START__;
3089 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3091 GVariant *params = NULL;
3092 GError *error = NULL;
3093 GVariant *reply = NULL;
3094 GVariantIter *iter_groups = NULL;
3095 GVariantIter *iter_group = NULL;
3096 GVariant *var = NULL;
3098 int ret = WIFI_DIRECT_ERROR_NONE;
3100 if (g_client_info.is_registered == false) {
3101 WDC_LOGE("Client is NOT registered");
3102 __WDC_LOG_FUNC_END__;
3103 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3107 WDC_LOGE("NULL Param [callback]!");
3108 __WDC_LOG_FUNC_END__;
3109 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3112 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3113 "GetPersistentGroups", params, &error);
3115 ret = __net_wifidirect_gerror_to_enum(error);
3116 if (ret != WIFI_DIRECT_ERROR_NONE)
3119 g_variant_get(reply, "(iaa{sv})", &ret, &iter_groups);
3120 if (ret != WIFI_DIRECT_ERROR_NONE) {
3121 __WDC_LOG_FUNC_END__;
3122 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3125 WDC_LOGD("wifi_direct_foreach_persistent_groups() SUCCESS");
3127 while (g_variant_iter_loop(iter_groups, "a{sv}", &iter_group)) {
3128 const char *ssid = NULL;
3129 char *go_mac_address = NULL;
3131 while (g_variant_iter_loop(iter_group, "{sv}", &key, &var)) {
3132 if (!g_strcmp0(key, "SSID")) {
3133 g_variant_get(var, "&s", &ssid);
3135 } else if (!g_strcmp0(key, "GOMacAddress")) {
3136 unsigned char mac_address[MACADDR_LEN] = {0, };
3138 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
3139 go_mac_address = (char*) g_try_malloc0(MACSTR_LEN);
3141 g_snprintf(go_mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
3148 ret = cb(go_mac_address, ssid, user_data);
3149 g_free(go_mac_address);
3150 go_mac_address = NULL;
3152 g_variant_iter_free(iter_group);
3157 g_variant_iter_free(iter_groups);
3158 __WDC_LOG_FUNC_END__;
3159 return WIFI_DIRECT_ERROR_NONE;
3163 int wifi_direct_remove_persistent_group(char *mac_address, const char *ssid)
3165 __WDC_LOG_FUNC_START__;
3167 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3169 GError* error = NULL;
3170 GVariant *reply = NULL;
3171 GVariant *params = NULL;
3172 int ret = WIFI_DIRECT_ERROR_NONE;
3174 if (g_client_info.is_registered == false) {
3175 WDC_LOGE("Client is NOT registered");
3176 __WDC_LOG_FUNC_END__;
3177 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3180 if (!mac_address || !ssid) {
3181 WDC_LOGE("NULL Param");
3182 __WDC_LOG_FUNC_END__;
3183 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3186 params = g_variant_new("(ss)", mac_address, ssid);
3187 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3188 "RemovePersistentGroup",
3192 ret = __net_wifidirect_gerror_to_enum(error);
3193 if (ret == WIFI_DIRECT_ERROR_NONE) {
3194 g_variant_get(reply, "(i)", &ret);
3195 g_variant_unref(reply);
3198 WDC_LOGD("%s() return : [%d]", __func__, ret);
3200 __WDC_LOG_FUNC_END__;
3201 return WIFI_DIRECT_ERROR_NONE;
3205 int wifi_direct_start_service_discovery(char *mac_address,
3206 wifi_direct_service_type_e type)
3208 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3209 __WDC_LOG_FUNC_START__;
3211 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3215 GError* error = NULL;
3216 GVariant *reply = NULL;
3217 GVariant *params = NULL;
3218 int ret = WIFI_DIRECT_ERROR_NONE;
3220 if (g_client_info.is_registered == false) {
3221 WDC_LOGE("Client is NOT registered.");
3222 __WDC_LOG_FUNC_END__;
3223 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3226 if (type >= WIFI_DIRECT_SERVICE_TYPE_ALL &&
3227 type <= WIFI_DIRECT_SERVICE_TYPE_CONTACT_INFO) {
3228 WDC_LOGD("Param service_type [%d]", type);
3230 WDC_LOGE("Invalid Param [type]!");
3231 __WDC_LOG_FUNC_END__;
3232 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3236 params = g_variant_new("(is)", type, mac_address);
3238 params = g_variant_new("(is)", type, "00:00:00:00:00:00");
3240 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3245 ret = __net_wifidirect_gerror_to_enum(error);
3246 if (ret == WIFI_DIRECT_ERROR_NONE) {
3247 g_variant_get(reply, "(i)", &ret);
3248 g_variant_unref(reply);
3251 WDC_LOGD("%s() return : [%d]", __func__, ret);
3252 __WDC_LOG_FUNC_END__;
3255 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3256 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3257 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3261 int wifi_direct_cancel_service_discovery(char *mac_address,
3262 wifi_direct_service_type_e type)
3264 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3265 __WDC_LOG_FUNC_START__;
3267 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3269 GError* error = NULL;
3270 GVariant *reply = NULL;
3271 GVariant *params = NULL;
3272 int ret = WIFI_DIRECT_ERROR_NONE;
3274 if (g_client_info.is_registered == false) {
3275 WDC_LOGE("Client is NOT registered.");
3276 __WDC_LOG_FUNC_END__;
3277 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3280 if (type >= WIFI_DIRECT_SERVICE_TYPE_ALL &&
3281 type <= WIFI_DIRECT_SERVICE_TYPE_CONTACT_INFO) {
3282 WDC_LOGD("Param service_type [%d]", type);
3284 WDC_LOGE("Invalid Param [type]!");
3285 __WDC_LOG_FUNC_END__;
3286 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3290 params = g_variant_new("(is)", type, mac_address);
3292 params = g_variant_new("(is)", type, "00:00:00:00:00:00");
3294 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3299 ret = __net_wifidirect_gerror_to_enum(error);
3300 if (ret == WIFI_DIRECT_ERROR_NONE) {
3301 g_variant_get(reply, "(i)", &ret);
3302 g_variant_unref(reply);
3305 WDC_LOGD("%s() return : [%d]", __func__, ret);
3306 __WDC_LOG_FUNC_END__;
3309 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3310 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3311 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3314 int wifi_direct_register_service(wifi_direct_service_type_e type, char *info1, char *info2, unsigned int *service_id)
3316 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3317 __WDC_LOG_FUNC_START__;
3319 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3321 GError* error = NULL;
3322 GVariant *reply = NULL;
3323 GVariant *params = NULL;
3325 int ret = WIFI_DIRECT_ERROR_NONE;
3328 if (g_client_info.is_registered == false) {
3329 WDC_LOGE("Client is NOT registered.");
3330 __WDC_LOG_FUNC_END__;
3331 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3334 if (!info1 || !info2) {
3335 WDC_LOGE("info1 or info2 is NULL");
3336 __WDC_LOG_FUNC_END__;
3337 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3340 if (type < WIFI_DIRECT_SERVICE_TYPE_ALL ||
3341 type > WIFI_DIRECT_SERVICE_TYPE_VENDOR) {
3342 WDC_LOGE("Invalid Param [type]!");
3343 __WDC_LOG_FUNC_END__;
3344 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3348 WDC_LOGE("Invalid Param [service_id]!");
3349 __WDC_LOG_FUNC_END__;
3350 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3353 WDC_LOGD("Service type [%d]", type);
3355 len = strlen(info1) + strlen(info2) + 2;
3356 WDC_LOGD("info [%s|%s], len [%d]", info1, info2, len);
3358 buf = g_try_malloc0(len);
3360 WDC_LOGE("Failed to allocate memory for buf");
3361 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
3364 g_snprintf(buf, len, "%s|%s", info1, info2);
3366 params = g_variant_new("(is)", type, buf);
3367 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3372 ret = __net_wifidirect_gerror_to_enum(error);
3373 if (ret != WIFI_DIRECT_ERROR_NONE) {
3378 g_variant_get(reply, "(ii)", &ret, service_id);
3379 g_variant_unref(reply);
3382 WDC_LOGD("%s() return : [%d]", __func__, ret);
3383 __WDC_LOG_FUNC_END__;
3386 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3387 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3388 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3391 int wifi_direct_deregister_service(unsigned int service_id)
3393 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3394 __WDC_LOG_FUNC_START__;
3396 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3398 GError* error = NULL;
3399 GVariant *reply = NULL;
3400 GVariant *params = NULL;
3401 int ret = WIFI_DIRECT_ERROR_NONE;
3403 if (g_client_info.is_registered == false) {
3404 WDC_LOGE("Client is NOT registered.");
3405 __WDC_LOG_FUNC_END__;
3406 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3409 params = g_variant_new("(i)", service_id);
3410 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3415 ret = __net_wifidirect_gerror_to_enum(error);
3416 if (ret == WIFI_DIRECT_ERROR_NONE) {
3417 g_variant_get(reply, "(i)", &ret);
3418 g_variant_unref(reply);
3421 WDC_LOGD("%s() return : [%d]", __func__, ret);
3422 __WDC_LOG_FUNC_END__;
3425 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3426 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3427 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3430 int wifi_direct_init_miracast(bool enable)
3432 __WDC_LOG_FUNC_START__;
3433 int ret = WIFI_DIRECT_ERROR_NONE;
3436 ret = wifi_direct_init_display();
3438 ret = wifi_direct_deinit_display();
3440 __WDC_LOG_FUNC_END__;
3444 int wifi_direct_get_peer_info(char* mac_address, wifi_direct_discovered_peer_info_s** peer_info)
3446 __WDC_LOG_FUNC_START__;
3448 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3450 GVariant *params = NULL;
3451 GError *error = NULL;
3452 GVariant *reply = NULL;
3453 GVariantIter *iter_peer = NULL;
3454 GVariant *var = NULL;
3456 int ret = WIFI_DIRECT_ERROR_NONE;
3458 if (g_client_info.is_registered == false) {
3459 WDC_LOGE("Client is NOT registered");
3460 __WDC_LOG_FUNC_END__;
3461 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3465 WDC_LOGE("mac_addr is NULL");
3466 __WDC_LOG_FUNC_END__;
3467 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3471 WDC_LOGE("peer_info is NULL");
3472 __WDC_LOG_FUNC_END__;
3473 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3476 params = g_variant_new("(s)", mac_address);
3477 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
3478 "GetPeerInfo", params, &error);
3480 ret = __net_wifidirect_gerror_to_enum(error);
3481 if (ret != WIFI_DIRECT_ERROR_NONE)
3484 g_variant_get(reply, "(ia{sv})", &ret, &iter_peer);
3485 if (ret != WIFI_DIRECT_ERROR_NONE) {
3486 __WDC_LOG_FUNC_END__;
3487 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3490 WDC_LOGD("wifi_direct_get_peer() SUCCESS");
3492 wifi_direct_discovered_peer_info_s *peer = NULL;
3494 peer = (wifi_direct_discovered_peer_info_s *) g_try_malloc0(sizeof(wifi_direct_discovered_peer_info_s));
3496 WDC_LOGE("Failed to allocate memory");
3497 __WDC_LOG_FUNC_END__;
3498 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3501 while (g_variant_iter_loop(iter_peer, "{sv}", &key, &var)) {
3502 if (!g_strcmp0(key, "DeviceName")) {
3503 const char *device_name = NULL;
3505 g_variant_get(var, "&s", &device_name);
3506 peer->device_name = g_strndup(device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
3508 } else if (!g_strcmp0(key, "DeviceAddress")) {
3509 unsigned char mac_address[MACADDR_LEN] = {0, };
3511 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
3512 peer->mac_address = (char*) g_try_malloc0(MACSTR_LEN);
3513 if (peer->mac_address)
3514 g_snprintf(peer->mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
3516 } else if (!g_strcmp0(key, "InterfaceAddress")) {
3517 unsigned char intf_address[MACADDR_LEN] = {0, };
3519 wifi_direct_dbus_unpack_ay(intf_address, var, MACADDR_LEN);
3520 peer->interface_address = (char*) g_try_malloc0(MACSTR_LEN);
3521 if (peer->interface_address)
3522 g_snprintf(peer->interface_address, MACSTR_LEN, MACSTR, MAC2STR(intf_address));
3524 } else if (!g_strcmp0(key, "Channel")) {
3525 peer->channel = g_variant_get_uint16(var);
3527 } else if (!g_strcmp0(key, "IsGroupOwner")) {
3528 peer->is_group_owner = g_variant_get_boolean(var);
3530 } else if (!g_strcmp0(key, "IsPersistentGO")) {
3531 peer->is_persistent_group_owner = g_variant_get_boolean(var);
3533 } else if (!g_strcmp0(key, "IsConnected")) {
3534 peer->is_connected = g_variant_get_boolean(var);
3536 } else if (!g_strcmp0(key, "Category")) {
3537 peer->primary_device_type = g_variant_get_uint16(var);
3539 } else if (!g_strcmp0(key, "SubCategory")) {
3540 peer->secondary_device_type = g_variant_get_uint16(var);
3542 } else if (!g_strcmp0(key, "IsWfdDevice")) {
3543 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3544 peer->is_miracast_device = g_variant_get_boolean(var);
3545 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3553 g_variant_unref(reply);
3555 __WDC_LOG_FUNC_END__;
3556 return WIFI_DIRECT_ERROR_NONE;
3559 int wifi_direct_set_passphrase(const char *passphrase)
3561 __WDC_LOG_FUNC_START__;
3563 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3565 GError* error = NULL;
3566 GVariant *reply = NULL;
3567 GVariant *params = NULL;
3568 int ret = WIFI_DIRECT_ERROR_NONE;
3570 if (g_client_info.is_registered == false) {
3571 WDC_LOGE("Client is NOT registered.");
3572 __WDC_LOG_FUNC_END__;
3573 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3577 WDC_LOGE("NULL Param [passphrase]!");
3578 __WDC_LOG_FUNC_END__;
3579 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3581 WDC_LOGD("passphrase = [%s]", passphrase);
3583 params = g_variant_new("(s)", passphrase);
3584 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3589 ret = __net_wifidirect_gerror_to_enum(error);
3590 if (ret == WIFI_DIRECT_ERROR_NONE) {
3591 g_variant_get(reply, "(i)", &ret);
3592 g_variant_unref(reply);
3595 WDC_LOGD("%s() SUCCESS", __func__);
3597 __WDC_LOG_FUNC_END__;
3598 return WIFI_DIRECT_ERROR_NONE;
3601 int wifi_direct_get_passphrase(char** passphrase)
3603 __WDC_LOG_FUNC_START__;
3605 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3607 GError* error = NULL;
3608 GVariant *reply = NULL;
3609 const char *val = NULL;
3610 int ret = WIFI_DIRECT_ERROR_NONE;
3612 if (g_client_info.is_registered == false) {
3613 WDC_LOGE("Client is NOT registered.");
3614 __WDC_LOG_FUNC_END__;
3615 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3619 WDC_LOGE("NULL Param [passphrase]!");
3620 __WDC_LOG_FUNC_END__;
3621 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3624 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3629 ret = __net_wifidirect_gerror_to_enum(error);
3630 if (ret != WIFI_DIRECT_ERROR_NONE)
3633 WDC_LOGD("%s() SUCCESS", __func__);
3634 g_variant_get(reply, "(i&s)", &ret, &val);
3635 *passphrase = g_strdup(val);
3636 g_variant_unref(reply);
3638 WDC_LOGD("%s() return : [%d]", __func__, ret);
3639 __WDC_LOG_FUNC_END__;
3643 int wifi_direct_set_autoconnection_peer(char *mac_address)
3645 __WDC_LOG_FUNC_START__;
3647 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3649 GError* error = NULL;
3650 GVariant *reply = NULL;
3651 GVariant *params = NULL;
3652 int ret = WIFI_DIRECT_ERROR_NONE;
3654 if (g_client_info.is_registered == false) {
3655 WDC_LOGE("Client is NOT registered.");
3656 __WDC_LOG_FUNC_END__;
3657 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3661 WDC_LOGE("NULL Param!");
3662 __WDC_LOG_FUNC_END__;
3663 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3666 params = g_variant_new("(s)", mac_address);
3667 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
3668 "SetAutoConnectionPeer",
3672 ret = __net_wifidirect_gerror_to_enum(error);
3673 if (ret == WIFI_DIRECT_ERROR_NONE) {
3674 g_variant_get(reply, "(i)", &ret);
3675 g_variant_unref(reply);
3678 WDC_LOGD("%s() return : [%d]", __func__, ret);
3679 __WDC_LOG_FUNC_END__;
3683 int wifi_direct_init_display(void)
3685 __WDC_LOG_FUNC_START__;
3686 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3688 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3690 GError* error = NULL;
3691 GVariant *reply = NULL;
3692 int ret = WIFI_DIRECT_ERROR_NONE;
3694 if (g_client_info.is_registered == false) {
3695 WDC_LOGE("Client is NOT registered.");
3696 __WDC_LOG_FUNC_END__;
3697 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3700 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3705 ret = __net_wifidirect_gerror_to_enum(error);
3706 if (ret == WIFI_DIRECT_ERROR_NONE) {
3707 g_variant_get(reply, "(i)", &ret);
3708 g_variant_unref(reply);
3711 WDC_LOGD("%s() return : [%d]", __func__, ret);
3712 __WDC_LOG_FUNC_END__;
3714 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3715 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3716 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3719 int wifi_direct_deinit_display(void)
3721 __WDC_LOG_FUNC_START__;
3722 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3724 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3726 GError* error = NULL;
3727 GVariant *reply = NULL;
3728 int ret = WIFI_DIRECT_ERROR_NONE;
3730 if (g_client_info.is_registered == false) {
3731 WDC_LOGE("Client is NOT registered");
3732 __WDC_LOG_FUNC_END__;
3733 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3736 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3741 ret = __net_wifidirect_gerror_to_enum(error);
3742 if (ret == WIFI_DIRECT_ERROR_NONE) {
3743 g_variant_get(reply, "(i)", &ret);
3744 g_variant_unref(reply);
3747 WDC_LOGD("%s() return : [%d]", __func__, ret);
3748 __WDC_LOG_FUNC_END__;
3750 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3751 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3752 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3755 int wifi_direct_set_display(wifi_direct_display_type_e type, int port, int hdcp)
3757 __WDC_LOG_FUNC_START__;
3758 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3760 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3762 GError* error = NULL;
3763 GVariant *reply = NULL;
3764 GVariant *params = NULL;
3765 int ret = WIFI_DIRECT_ERROR_NONE;
3767 if (g_client_info.is_registered == false) {
3768 WDC_LOGE("Client is NOT registered");
3769 __WDC_LOG_FUNC_END__;
3770 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3773 if (type < WIFI_DIRECT_DISPLAY_TYPE_SOURCE ||
3774 type > WIFI_DIRECT_DISPLAY_TYPE_DUAL || port < 0 ||
3776 WDC_LOGE("Invalid paramaeters passed type[%d], port[%d], hdcp[%d]!");
3777 __WDC_LOG_FUNC_END__;
3778 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3781 params = g_variant_new("(iii)", type, port, hdcp);
3782 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3787 ret = __net_wifidirect_gerror_to_enum(error);
3788 if (ret == WIFI_DIRECT_ERROR_NONE) {
3789 g_variant_get(reply, "(i)", &ret);
3790 g_variant_unref(reply);
3793 WDC_LOGD("%s() return : [%d]", __func__, ret);
3794 __WDC_LOG_FUNC_END__;
3796 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3797 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3798 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3801 int wifi_direct_set_display_availability(bool availability)
3803 __WDC_LOG_FUNC_START__;
3804 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3806 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3808 GError* error = NULL;
3809 GVariant *reply = NULL;
3810 GVariant *params = NULL;
3811 int ret = WIFI_DIRECT_ERROR_NONE;
3813 if (g_client_info.is_registered == false) {
3814 WDC_LOGE("Client is NOT registered.");
3815 __WDC_LOG_FUNC_END__;
3816 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3820 params = g_variant_new("(i)", availability);
3821 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3826 ret = __net_wifidirect_gerror_to_enum(error);
3827 if (ret == WIFI_DIRECT_ERROR_NONE) {
3828 g_variant_get(reply, "(i)", &ret);
3829 g_variant_unref(reply);
3832 WDC_LOGD("%s() return : [%d]", __func__, ret);
3833 __WDC_LOG_FUNC_END__;
3835 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3836 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3837 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3841 int wifi_direct_get_peer_display_type(char *mac_address, wifi_direct_display_type_e *type)
3843 __WDC_LOG_FUNC_START__;
3844 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3846 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3848 GError* error = NULL;
3849 GVariant *reply = NULL;
3850 GVariant *params = NULL;
3852 int ret = WIFI_DIRECT_ERROR_NONE;
3854 if (g_client_info.is_registered == false) {
3855 WDC_LOGE("Client is NOT registered");
3856 __WDC_LOG_FUNC_END__;
3857 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3860 if (!mac_address || !type) {
3861 WDC_LOGE("NULL Param!");
3862 __WDC_LOG_FUNC_END__;
3863 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3866 params = g_variant_new("(s)", mac_address);
3867 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3872 ret = __net_wifidirect_gerror_to_enum(error);
3873 if (ret != WIFI_DIRECT_ERROR_NONE)
3876 g_variant_get(reply, "(ii)", &ret, &val);
3878 g_variant_unref(reply);
3880 WDC_LOGD("%s() return : [%d]", __func__, ret);
3881 __WDC_LOG_FUNC_END__;
3883 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3884 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3885 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3888 int wifi_direct_get_peer_display_availability(char *mac_address, bool *availability)
3890 __WDC_LOG_FUNC_START__;
3891 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3893 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3895 GError* error = NULL;
3896 GVariant *reply = NULL;
3897 GVariant *params = NULL;
3899 int ret = WIFI_DIRECT_ERROR_NONE;
3901 if (g_client_info.is_registered == false) {
3902 WDC_LOGE("Client is NOT registered");
3903 __WDC_LOG_FUNC_END__;
3904 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3907 if (!mac_address || !availability) {
3908 WDC_LOGE("NULL Param!");
3909 __WDC_LOG_FUNC_END__;
3910 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3913 params = g_variant_new("(s)", mac_address);
3914 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3915 "GetPeerAvailability",
3919 ret = __net_wifidirect_gerror_to_enum(error);
3920 if (ret != WIFI_DIRECT_ERROR_NONE)
3923 g_variant_get(reply, "(ii)", &ret, &val);
3924 *availability = val;
3925 g_variant_unref(reply);
3927 WDC_LOGD("%s() return : [%d]", __func__, ret);
3928 __WDC_LOG_FUNC_END__;
3930 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3931 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3932 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3935 int wifi_direct_get_peer_display_hdcp(char *mac_address, int *hdcp)
3937 __WDC_LOG_FUNC_START__;
3938 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3940 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3942 GError* error = NULL;
3943 GVariant *reply = NULL;
3944 GVariant *params = NULL;
3946 int ret = WIFI_DIRECT_ERROR_NONE;
3948 if (g_client_info.is_registered == false) {
3949 WDC_LOGE("Client is NOT registered");
3950 __WDC_LOG_FUNC_END__;
3951 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3954 if (!mac_address || !hdcp) {
3955 WDC_LOGE("NULL Param!");
3956 __WDC_LOG_FUNC_END__;
3957 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3960 params = g_variant_new("(s)", mac_address);
3961 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3966 ret = __net_wifidirect_gerror_to_enum(error);
3967 if (ret != WIFI_DIRECT_ERROR_NONE)
3970 g_variant_get(reply, "(ii)", &ret, &val);
3972 g_variant_unref(reply);
3974 WDC_LOGD("%s() return : [%d]", __func__, ret);
3975 __WDC_LOG_FUNC_END__;
3977 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3978 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3979 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3982 int wifi_direct_get_peer_display_port(char *mac_address, int *port)
3984 __WDC_LOG_FUNC_START__;
3985 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3987 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3989 GError* error = NULL;
3990 GVariant *reply = NULL;
3991 GVariant *params = NULL;
3993 int ret = WIFI_DIRECT_ERROR_NONE;
3995 if (g_client_info.is_registered == false) {
3996 WDC_LOGE("Client is NOT registered");
3997 __WDC_LOG_FUNC_END__;
3998 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4001 if (!mac_address || !port) {
4002 WDC_LOGE("NULL Param!");
4003 __WDC_LOG_FUNC_END__;
4004 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4007 params = g_variant_new("(s)", mac_address);
4008 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
4013 ret = __net_wifidirect_gerror_to_enum(error);
4014 if (ret != WIFI_DIRECT_ERROR_NONE)
4017 g_variant_get(reply, "(ii)", &ret, &val);
4019 g_variant_unref(reply);
4021 WDC_LOGD("%s() return : [%d]", __func__, ret);
4022 __WDC_LOG_FUNC_END__;
4024 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
4025 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
4026 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
4029 int wifi_direct_get_peer_display_throughput(char *mac_address, int *throughput)
4031 __WDC_LOG_FUNC_START__;
4032 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
4034 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
4036 GError* error = NULL;
4037 GVariant *reply = NULL;
4038 GVariant *params = NULL;
4040 int ret = WIFI_DIRECT_ERROR_NONE;
4042 if (g_client_info.is_registered == false) {
4043 WDC_LOGE("Client is NOT registered");
4044 __WDC_LOG_FUNC_END__;
4045 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4048 if (!mac_address || !throughput) {
4049 WDC_LOGE("NULL Param!");
4050 __WDC_LOG_FUNC_END__;
4051 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4054 params = g_variant_new("(s)", mac_address);
4055 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
4056 "GetPeerThroughput",
4060 ret = __net_wifidirect_gerror_to_enum(error);
4061 if (ret != WIFI_DIRECT_ERROR_NONE)
4064 g_variant_get(reply, "(ii)", &ret, &val);
4066 g_variant_unref(reply);
4068 WDC_LOGD("%s() return : [%d]", __func__, ret);
4069 __WDC_LOG_FUNC_END__;
4071 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
4072 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
4073 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
4076 int wifi_direct_set_session_timer(int seconds)
4078 __WDC_LOG_FUNC_START__;
4080 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
4082 GError* error = NULL;
4083 GVariant *reply = NULL;
4084 GVariant *params = NULL;
4085 int ret = WIFI_DIRECT_ERROR_NONE;
4087 if (g_client_info.is_registered == false) {
4088 WDC_LOGE("Client is NOT registered.");
4089 __WDC_LOG_FUNC_END__;
4090 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4093 WDC_LOGE("Negative Timer Value");
4094 __WDC_LOG_FUNC_END__;
4095 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4098 WDC_LOGD("seconds = [%d]", seconds);
4100 params = g_variant_new("(i)", seconds);
4101 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
4106 ret = __net_wifidirect_gerror_to_enum(error);
4107 if(ret == WIFI_DIRECT_ERROR_NONE) {
4108 g_variant_get(reply, "(i)", &ret);
4109 g_variant_unref(reply);
4112 WDC_LOGD("%s() SUCCESS", __func__);
4114 __WDC_LOG_FUNC_END__;
4115 return WIFI_DIRECT_ERROR_NONE;
4119 int wifi_direct_get_session_timer(int *seconds)
4121 __WDC_LOG_FUNC_START__;
4123 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
4125 GError* error = NULL;
4126 GVariant *reply = NULL;
4128 int ret = WIFI_DIRECT_ERROR_NONE;
4130 if (g_client_info.is_registered == false) {
4131 WDC_LOGE("Client is NOT registered");
4132 __WDC_LOG_FUNC_END__;
4133 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4137 WDC_LOGE("Invalid Parameter");
4138 __WDC_LOG_FUNC_END__;
4139 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4142 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
4147 ret = __net_wifidirect_gerror_to_enum(error);
4148 if (ret != WIFI_DIRECT_ERROR_NONE)
4151 g_variant_get(reply, "(ii)", &ret, &val);
4153 g_variant_unref(reply);
4155 WDC_LOGD("Session Timer = [%d] Seconds", *seconds);
4156 WDC_LOGD("%s() return : [%d]", __func__, ret);
4158 __WDC_LOG_FUNC_END__;
4162 int wifi_direct_set_auto_group_removal(bool enable)
4164 __WDC_LOG_FUNC_START__;
4166 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
4168 GError* error = NULL;
4169 GVariant *reply = NULL;
4170 GVariant *params = NULL;
4171 int ret = WIFI_DIRECT_ERROR_NONE;
4173 if (g_client_info.is_registered == false) {
4174 WDC_LOGE("Client is NOT registered");
4175 __WDC_LOG_FUNC_END__;
4176 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4179 params = g_variant_new("(b)", enable);
4180 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
4181 "SetAutoGroupRemoval",
4185 ret = __net_wifidirect_gerror_to_enum(error);
4186 if (ret == WIFI_DIRECT_ERROR_NONE) {
4187 g_variant_get(reply, "(i)", &ret);
4188 g_variant_unref(reply);
4191 WDC_LOGD("%s() return : [%d]", __func__, ret);
4192 __WDC_LOG_FUNC_END__;