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")) {
115 if (NULL != strstr(error->message, ".PermissionDenied"))
116 ret = WIFI_DIRECT_ERROR_PERMISSION_DENIED;
118 ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
120 if (NULL != strstr(error->message, "InvalidParameter"))
121 ret = WIFI_DIRECT_ERROR_INVALID_PARAMETER;
122 else if (NULL != strstr(error->message, "NotPermitted"))
123 ret = WIFI_DIRECT_ERROR_NOT_PERMITTED;
124 else if (NULL != strstr(error->message, "OperationFailed"))
125 ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
126 else if (NULL != strstr(error->message, "TooManyClient"))
127 ret = WIFI_DIRECT_ERROR_TOO_MANY_CLIENT;
129 ret = WIFI_DIRECT_ERROR_OPERATION_FAILED;
136 void wifi_direct_process_manage_activation(GDBusConnection *connection,
137 const gchar *object_path, GVariant *parameters)
139 __WDC_LOG_FUNC_START__;
141 wifi_direct_client_info_s *client = __wfd_get_control();
143 if (!client->activation_cb) {
144 WDC_LOGI("activation_cb is NULL!!");
149 __WDC_LOG_FUNC_END__;
153 g_variant_get(parameters, "(i)", &error_code);
155 client->activation_cb(error_code,
156 WIFI_DIRECT_DEVICE_STATE_ACTIVATED,
157 client->user_data_for_cb_activation);
159 __WDC_LOG_FUNC_END__;
162 void wifi_direct_process_manage_deactivation(GDBusConnection *connection,
163 const gchar *object_path, GVariant *parameters)
165 __WDC_LOG_FUNC_START__;
167 wifi_direct_client_info_s *client = __wfd_get_control();
170 __WDC_LOG_FUNC_END__;
174 if (!client->activation_cb) {
175 WDC_LOGI("activation_cb is NULL!!");
176 __WDC_LOG_FUNC_END__;
180 g_variant_get(parameters, "(i)", &error_code);
182 client->activation_cb(error_code,
183 WIFI_DIRECT_DEVICE_STATE_DEACTIVATED,
184 client->user_data_for_cb_activation);
186 __WDC_LOG_FUNC_END__;
189 void wifi_direct_process_manage_connection(GDBusConnection *connection,
190 const gchar *object_path, GVariant *parameters)
192 __WDC_LOG_FUNC_START__;
194 wifi_direct_connection_state_e connection_state;
195 const gchar *peer_mac_address = NULL;
196 wifi_direct_client_info_s *client = __wfd_get_control();
199 __WDC_LOG_FUNC_END__;
203 if (!client->connection_cb) {
204 WDC_LOGI("connection_cb is NULL!!");
205 __WDC_LOG_FUNC_END__;
209 g_variant_get(parameters, "(ii&s)",
210 &error_code, &connection_state, &peer_mac_address);
212 client->connection_cb(error_code,
215 client->user_data_for_cb_connection);
217 __WDC_LOG_FUNC_END__;
220 void wifi_direct_process_manage_disconnection(GDBusConnection *connection,
221 const gchar *object_path, GVariant *parameters)
223 __WDC_LOG_FUNC_START__;
225 wifi_direct_connection_state_e connection_state;
226 const gchar *peer_mac_address = NULL;
227 wifi_direct_client_info_s *client = __wfd_get_control();
230 __WDC_LOG_FUNC_END__;
234 if (!client->connection_cb) {
235 WDC_LOGI("connection_cb is NULL!!");
236 __WDC_LOG_FUNC_END__;
240 g_variant_get(parameters, "(ii&s)",
241 &error_code, &connection_state, &peer_mac_address);
243 client->connection_cb(error_code,
246 client->user_data_for_cb_connection);
248 __WDC_LOG_FUNC_END__;
251 void wifi_direct_process_manage_peer_ip_assigned(GDBusConnection *connection,
252 const gchar *object_path, GVariant *parameters)
254 __WDC_LOG_FUNC_START__;
255 char *get_str = NULL;
256 GError* error = NULL;
257 GVariant *reply = NULL;
258 const gchar *peer_mac_address = NULL;
259 const gchar *assigned_ip_address = NULL;
261 wifi_direct_client_info_s *client = __wfd_get_control();
264 __WDC_LOG_FUNC_END__;
268 g_variant_get(parameters, "(&s&s)",
269 &peer_mac_address, &assigned_ip_address);
271 if (!client->ip_assigned_cb) {
272 WDC_LOGI("ip_assigned_cb is NULL!!");
273 __WDC_LOG_FUNC_END__;
277 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
282 WDC_LOGE("wifi_direct_dbus_method_call_sync() failed."
283 "error [%d: %s]", error->code, error->message);
285 __WDC_LOG_FUNC_END__;
289 g_variant_get(reply, "(i&s)", ret ,&get_str);
290 g_variant_unref(reply);
292 WDC_LOGD("Interface Name = [%s]", get_str);
293 WDC_LOGD("%s() return : [%d]", __func__, ret);
295 client->ip_assigned_cb(peer_mac_address, assigned_ip_address, get_str,
296 client->user_data_for_cb_ip_assigned);
298 __WDC_LOG_FUNC_END__;
301 void wifi_direct_process_manage_listen_started(GDBusConnection *connection,
302 const gchar *object_path, GVariant *parameters)
304 __WDC_LOG_FUNC_START__;
305 wifi_direct_client_info_s *client = __wfd_get_control();
307 if (!client->discover_cb) {
308 WDC_LOGI("discover_cb is NULL!!");
309 __WDC_LOG_FUNC_END__;
313 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
314 WIFI_DIRECT_ONLY_LISTEN_STARTED,
315 client->user_data_for_cb_discover);
317 __WDC_LOG_FUNC_END__;
320 void wifi_direct_process_manage_discovery_started(GDBusConnection *connection,
321 const gchar *object_path, GVariant *parameters)
323 __WDC_LOG_FUNC_START__;
324 wifi_direct_client_info_s *client = __wfd_get_control();
326 if (!client->discover_cb) {
327 WDC_LOGI("discover_cb is NULL!!");
328 __WDC_LOG_FUNC_END__;
332 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
333 WIFI_DIRECT_DISCOVERY_STARTED,
334 client->user_data_for_cb_discover);
336 __WDC_LOG_FUNC_END__;
339 void wifi_direct_process_manage_discovery_finished(GDBusConnection *connection,
340 const gchar *object_path, GVariant *parameters)
342 __WDC_LOG_FUNC_START__;
343 wifi_direct_client_info_s *client = __wfd_get_control();
345 if (!client->discover_cb) {
346 WDC_LOGI("discover_cb is NULL!!");
347 __WDC_LOG_FUNC_END__;
351 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
352 WIFI_DIRECT_DISCOVERY_FINISHED,
353 client->user_data_for_cb_discover);
355 __WDC_LOG_FUNC_END__;
358 void wifi_direct_process_manage_peer_found(GDBusConnection *connection,
359 const gchar *object_path, GVariant *parameters)
361 __WDC_LOG_FUNC_START__;
362 const gchar *peer_mac_address = NULL;
363 wifi_direct_client_info_s *client = __wfd_get_control();
366 __WDC_LOG_FUNC_END__;
370 g_variant_get(parameters, "(&s)", &peer_mac_address);
372 if (client->peer_found_cb) {
373 client->peer_found_cb(WIFI_DIRECT_ERROR_NONE,
374 WIFI_DIRECT_DISCOVERY_FOUND,
376 client->user_data_for_cb_discover);
378 WDC_LOGI("peer_found_cb is NULL!!");
381 if (!client->discover_cb) {
382 WDC_LOGI("discover_cb is NULL!!");
383 __WDC_LOG_FUNC_END__;
387 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
388 WIFI_DIRECT_DISCOVERY_FOUND,
389 client->user_data_for_cb_discover);
391 __WDC_LOG_FUNC_END__;
394 void wifi_direct_process_manage_peer_lost(GDBusConnection *connection,
395 const gchar *object_path, GVariant *parameters)
397 __WDC_LOG_FUNC_START__;
398 const gchar *peer_mac_address = NULL;
399 wifi_direct_client_info_s *client = __wfd_get_control();
402 __WDC_LOG_FUNC_END__;
406 g_variant_get(parameters, "(&s)", &peer_mac_address);
408 if (client->peer_found_cb) {
409 client->peer_found_cb(WIFI_DIRECT_ERROR_NONE,
410 WIFI_DIRECT_DISCOVERY_LOST,
412 client->user_data_for_cb_discover);
414 WDC_LOGI("peer_found_cb is NULL!!");
417 if (!client->discover_cb) {
418 WDC_LOGI("discover_cb is NULL!!");
419 __WDC_LOG_FUNC_END__;
423 client->discover_cb(WIFI_DIRECT_ERROR_NONE,
424 WIFI_DIRECT_DISCOVERY_LOST,
425 client->user_data_for_cb_discover);
427 __WDC_LOG_FUNC_END__;
431 void wifi_direct_process_group_created(GDBusConnection *connection,
432 const gchar *object_path, GVariant *parameters)
434 __WDC_LOG_FUNC_START__;
435 wifi_direct_client_info_s *client = __wfd_get_control();
437 if (!client->connection_cb) {
438 WDC_LOGI("connection_cb is NULL!!");
439 __WDC_LOG_FUNC_END__;
443 client->connection_cb(WIFI_DIRECT_ERROR_NONE,
444 WIFI_DIRECT_GROUP_CREATED,
446 client->user_data_for_cb_connection);
448 __WDC_LOG_FUNC_END__;
451 void wifi_direct_process_group_destroyed(GDBusConnection *connection,
452 const gchar *object_path, GVariant *parameters)
454 __WDC_LOG_FUNC_START__;
455 wifi_direct_client_info_s *client = __wfd_get_control();
457 if (!client->connection_cb) {
458 WDC_LOGI("connection_cb is NULL!!");
459 __WDC_LOG_FUNC_END__;
463 client->connection_cb(WIFI_DIRECT_ERROR_NONE,
464 WIFI_DIRECT_GROUP_DESTROYED,
466 client->user_data_for_cb_connection);
468 __WDC_LOG_FUNC_END__;
471 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
473 void wifi_direct_process_service_discovery_started(GDBusConnection *connection,
474 const gchar *object_path, GVariant *parameters)
476 __WDC_LOG_FUNC_START__;
477 wifi_direct_client_info_s *client = __wfd_get_control();
479 if (!client->service_cb) {
480 WDC_LOGI("service_cb is NULL!!\n");
481 __WDC_LOG_FUNC_END__;
485 client->service_cb(WIFI_DIRECT_ERROR_NONE,
486 WIFI_DIRECT_SERVICE_DISCOVERY_STARTED,
487 WIFI_DIRECT_SERVICE_TYPE_ALL,
490 client->user_data_for_cb_service);
492 __WDC_LOG_FUNC_END__;
495 void wifi_direct_process_service_discovery_found(GDBusConnection *connection,
496 const gchar *object_path, GVariant *parameters)
498 __WDC_LOG_FUNC_START__;
499 wifi_direct_service_type_e service_type;
500 const gchar* response_data = NULL;
501 const gchar* peer_mac_address = NULL;
502 wifi_direct_client_info_s *client = __wfd_get_control();
505 __WDC_LOG_FUNC_END__;
509 g_variant_get(parameters, "(i&s&s)",
510 &service_type, &response_data, &peer_mac_address);
512 if (!client->service_cb) {
513 WDC_LOGI("service_cb is NULL!!\n");
514 __WDC_LOG_FUNC_END__;
518 client->service_cb(WIFI_DIRECT_ERROR_NONE,
519 WIFI_DIRECT_SERVICE_DISCOVERY_FOUND,
521 (void *) response_data,
523 client->user_data_for_cb_service);
525 __WDC_LOG_FUNC_END__;
528 void wifi_direct_process_service_discovery_finished(GDBusConnection *connection,
529 const gchar *object_path, GVariant *parameters)
531 __WDC_LOG_FUNC_START__;
532 wifi_direct_client_info_s *client = __wfd_get_control();
534 if (!client->service_cb) {
535 WDC_LOGI("service_cb is NULL!!\n");
536 __WDC_LOG_FUNC_END__;
540 client->service_cb(WIFI_DIRECT_ERROR_NONE,
541 WIFI_DIRECT_SERVICE_DISCOVERY_FINISHED,
542 WIFI_DIRECT_SERVICE_TYPE_ALL,
545 client->user_data_for_cb_service);
547 __WDC_LOG_FUNC_END__;
549 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
551 void __wfd_client_print_entry_list(wfd_discovery_entry_s *list, int num)
555 WDC_LOGD("------------------------------------------");
556 for (i = 0; i < num; i++)
558 WDC_LOGD("== Peer index : %d ==", i);
559 WDC_LOGD("is Group Owner ? %s", list[i].is_group_owner ? "YES" : "NO");
560 WDC_LOGD("device_name : %s", list[i].device_name);
561 WDC_LOGD("MAC address : "MACSECSTR, MAC2SECSTR(list[i].mac_address));
562 WDC_LOGD("wps cfg method : %x", list[i].wps_cfg_methods);
563 WDC_LOGD("Device Type: %d - %d", list[i].category, list[i].subcategory);
564 WDC_LOGD("Listen channel: %d", list[i].channel);
566 WDC_LOGD("------------------------------------------");
569 void __wfd_client_print_connected_peer_info(wfd_connected_peer_info_s *list, int num)
573 WDC_LOGD("------------------------------------------\n");
574 for (i = 0; i < num; i++) {
575 WDC_LOGD("== Peer index : %d ==\n", i);
576 WDC_LOGD("device_name : %s\n", list[i].device_name);
577 WDC_LOGD("Device MAC : " MACSECSTR "\n", MAC2SECSTR(list[i].mac_address));
578 WDC_LOGD("Device Type: %d - %d", list[i].category, list[i].subcategory);
579 WDC_LOGD("channel : %d\n", list[i].channel);
580 WDC_LOGD("IP ["IPSECSTR"]\n", IP2SECSTR(list[i].ip_address));
582 WDC_LOGD("------------------------------------------\n");
585 void __wfd_client_print_persistent_group_info(wfd_persistent_group_info_s *list, int num)
589 WDC_LOGD("------------------------------------------\n");
590 for (i = 0; i < num; i++) {
591 WDC_LOGD("== Persistent Group index : %d ==", i);
592 WDC_LOGD("ssid : %s", list[i].ssid);
593 WDC_LOGD("GO MAC : " MACSECSTR, MAC2SECSTR(list[i].go_mac_address));
595 WDC_LOGD("------------------------------------------\n");
598 int wifi_direct_initialize(void)
600 __WDC_LOG_FUNC_START__;
602 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
604 GError* error = NULL;
605 GVariant *reply = NULL;
606 bool wifi_direct_enable;
610 if (g_client_info.is_registered == TRUE) {
611 WDC_LOGW("Warning!!! Already registered\nUpdate user data and callback!");
612 __WDC_LOG_FUNC_END__;
613 return WIFI_DIRECT_ERROR_ALREADY_INITIALIZED;
616 res = system_info_get_platform_bool("tizen.org/feature/network.wifi.direct", &wifi_direct_enable);
618 WDC_LOGE("Failed to get sys info");
619 __WDC_LOG_FUNC_END__;
623 if (!wifi_direct_enable) {
624 WDC_LOGE("Wi-Fi Direct not supported");
625 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
628 if (wifi_direct_dbus_init() == FALSE) {
629 WDC_LOGW("Failed to initialize dbus");
630 __WDC_LOG_FUNC_END__;
631 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
634 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
635 "GetState", NULL, &error);
637 res = __net_wifidirect_gerror_to_enum(error);
638 if(res != WIFI_DIRECT_ERROR_NONE) {
642 g_variant_get(reply, "(ii)", &res, &state);
643 WDC_LOGD("State = [%d]", state);
645 g_client_info.is_registered = TRUE;
647 /* Initialize callbacks */
648 g_client_info.activation_cb = NULL;
649 g_client_info.discover_cb = NULL;
650 g_client_info.connection_cb = NULL;
651 g_client_info.ip_assigned_cb = NULL;
653 g_client_info.peer_found_cb = NULL;
654 g_client_info.user_data_for_cb_activation = NULL;
655 g_client_info.user_data_for_cb_discover = NULL;
656 g_client_info.user_data_for_cb_connection = NULL;
657 g_client_info.user_data_for_cb_ip_assigned = NULL;
658 g_client_info.user_data_for_cb_peer_found = NULL;
659 g_client_info.user_data_for_cb_device_name = NULL;
661 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
662 g_client_info.service_cb = NULL;
663 g_client_info.user_data_for_cb_service= NULL;
664 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
666 __WDC_LOG_FUNC_END__;
667 return WIFI_DIRECT_ERROR_NONE;
670 int wifi_direct_deinitialize(void)
672 __WDC_LOG_FUNC_START__;
674 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
676 if (g_client_info.is_registered == false) {
677 WDC_LOGE("Client is already deregistered");
678 __WDC_LOG_FUNC_END__;
679 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
682 wifi_direct_dbus_deinit();
684 g_client_info.activation_cb = NULL;
685 g_client_info.discover_cb = NULL;
686 g_client_info.connection_cb = NULL;
687 g_client_info.ip_assigned_cb = NULL;
688 g_client_info.peer_found_cb = NULL;
689 g_client_info.user_data_for_cb_activation = NULL;
690 g_client_info.user_data_for_cb_discover = NULL;
691 g_client_info.user_data_for_cb_connection = NULL;
692 g_client_info.user_data_for_cb_ip_assigned = NULL;
693 g_client_info.user_data_for_cb_peer_found = NULL;
695 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
696 g_client_info.service_cb = NULL;
697 g_client_info.user_data_for_cb_service = NULL;
698 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
700 g_client_info.is_registered = FALSE;
702 __WDC_LOG_FUNC_END__;
703 return WIFI_DIRECT_ERROR_NONE;
707 int wifi_direct_set_device_state_changed_cb(wifi_direct_device_state_changed_cb cb,
710 __WDC_LOG_FUNC_START__;
712 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
715 WDC_LOGE("Invalid parameter");
716 __WDC_LOG_FUNC_END__;
717 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
720 if (g_client_info.is_registered == false) {
721 WDC_LOGE("Client is not initialized.");
722 __WDC_LOG_FUNC_END__;
723 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
726 g_client_info.activation_cb = cb;
727 g_client_info.user_data_for_cb_activation = user_data;
729 __WDC_LOG_FUNC_END__;
730 return WIFI_DIRECT_ERROR_NONE;
734 int wifi_direct_unset_device_state_changed_cb(void)
736 __WDC_LOG_FUNC_START__;
738 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
740 if (g_client_info.is_registered == false) {
741 WDC_LOGE("Client is not initialized.\n");
742 __WDC_LOG_FUNC_END__;
743 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
746 g_client_info.activation_cb = NULL;
747 g_client_info.user_data_for_cb_activation = NULL;
749 __WDC_LOG_FUNC_END__;
750 return WIFI_DIRECT_ERROR_NONE;
755 wifi_direct_set_discovery_state_changed_cb(wifi_direct_discovery_state_chagned_cb cb,
758 __WDC_LOG_FUNC_START__;
760 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
763 WDC_LOGE("Callback is NULL.\n");
764 __WDC_LOG_FUNC_END__;
765 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
768 if (g_client_info.is_registered == false) {
769 WDC_LOGE("Client is not initialized.\n");
770 __WDC_LOG_FUNC_END__;
771 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
774 g_client_info.discover_cb = cb;
775 g_client_info.user_data_for_cb_discover = user_data;
777 __WDC_LOG_FUNC_END__;
778 return WIFI_DIRECT_ERROR_NONE;
782 int wifi_direct_unset_discovery_state_changed_cb(void)
784 __WDC_LOG_FUNC_START__;
786 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
788 if (g_client_info.is_registered == false) {
789 WDC_LOGE("Client is not initialized.\n");
790 __WDC_LOG_FUNC_END__;
791 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
794 g_client_info.discover_cb = NULL;
795 g_client_info.user_data_for_cb_discover = NULL;
797 __WDC_LOG_FUNC_END__;
798 return WIFI_DIRECT_ERROR_NONE;
801 int wifi_direct_set_peer_found_cb(wifi_direct_peer_found_cb cb,
804 __WDC_LOG_FUNC_START__;
806 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
809 WDC_LOGE("Callback is NULL.\n");
810 __WDC_LOG_FUNC_END__;
811 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
814 if (g_client_info.is_registered == false) {
815 WDC_LOGE("Client is not initialized.\n");
816 __WDC_LOG_FUNC_END__;
817 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
820 g_client_info.peer_found_cb = cb;
821 g_client_info.user_data_for_cb_peer_found = user_data;
823 __WDC_LOG_FUNC_END__;
824 return WIFI_DIRECT_ERROR_NONE;
828 int wifi_direct_unset_peer_found_cb(void)
830 __WDC_LOG_FUNC_START__;
832 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
834 if (g_client_info.is_registered == false) {
835 WDC_LOGE("Client is not initialized.\n");
836 __WDC_LOG_FUNC_END__;
837 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
840 g_client_info.peer_found_cb = NULL;
841 g_client_info.user_data_for_cb_peer_found = NULL;
843 __WDC_LOG_FUNC_END__;
844 return WIFI_DIRECT_ERROR_NONE;
847 int wifi_direct_set_service_state_changed_cb(wifi_direct_service_state_changed_cb cb,
850 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
851 __WDC_LOG_FUNC_START__;
853 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
856 WDC_LOGE("Callback is NULL.");
857 __WDC_LOG_FUNC_END__;
858 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
861 if (g_client_info.is_registered == false) {
862 WDC_LOGE("Client is not initialized.");
863 __WDC_LOG_FUNC_END__;
864 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
867 g_client_info.service_cb = cb;
868 g_client_info.user_data_for_cb_service = user_data;
870 __WDC_LOG_FUNC_END__;
871 return WIFI_DIRECT_ERROR_NONE;
872 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
873 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
874 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
878 int wifi_direct_unset_service_state_changed_cb(void)
880 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
881 __WDC_LOG_FUNC_START__;
883 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
885 if (g_client_info.is_registered == false) {
886 WDC_LOGE("Client is not initialized.");
887 __WDC_LOG_FUNC_END__;
888 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
891 g_client_info.service_cb = NULL;
892 g_client_info.user_data_for_cb_service = NULL;
894 __WDC_LOG_FUNC_END__;
895 return WIFI_DIRECT_ERROR_NONE;
896 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
897 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
898 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
901 int wifi_direct_set_connection_state_changed_cb(wifi_direct_connection_state_changed_cb cb,
904 __WDC_LOG_FUNC_START__;
906 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
909 WDC_LOGE("Callback is NULL.\n");
910 __WDC_LOG_FUNC_END__;
911 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
914 if (g_client_info.is_registered == false) {
915 WDC_LOGE("Client is not initialized.\n");
916 __WDC_LOG_FUNC_END__;
917 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
920 g_client_info.connection_cb = cb;
921 g_client_info.user_data_for_cb_connection = user_data;
923 __WDC_LOG_FUNC_END__;
924 return WIFI_DIRECT_ERROR_NONE;
928 int wifi_direct_unset_connection_state_changed_cb(void)
930 __WDC_LOG_FUNC_START__;
932 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
934 if (g_client_info.is_registered == false) {
935 WDC_LOGE("Client is not initialized");
936 __WDC_LOG_FUNC_END__;
937 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
940 g_client_info.connection_cb = NULL;
941 g_client_info.user_data_for_cb_connection = NULL;
943 __WDC_LOG_FUNC_END__;
944 return WIFI_DIRECT_ERROR_NONE;
948 int wifi_direct_set_client_ip_address_assigned_cb(wifi_direct_client_ip_address_assigned_cb cb,
951 __WDC_LOG_FUNC_START__;
953 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
956 WDC_LOGE("Callback is NULL");
957 __WDC_LOG_FUNC_END__;
958 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
961 if (g_client_info.is_registered == false) {
962 WDC_LOGE("Client is not initialized");
963 __WDC_LOG_FUNC_END__;
964 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
967 g_client_info.ip_assigned_cb = cb;
968 g_client_info.user_data_for_cb_ip_assigned = user_data;
970 __WDC_LOG_FUNC_END__;
971 return WIFI_DIRECT_ERROR_NONE;
974 int wifi_direct_unset_client_ip_address_assigned_cb(void)
976 __WDC_LOG_FUNC_START__;
978 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
980 if (g_client_info.is_registered == false) {
981 WDC_LOGE("Client is not initialized");
982 __WDC_LOG_FUNC_END__;
983 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
986 g_client_info.ip_assigned_cb = NULL;
987 g_client_info.user_data_for_cb_ip_assigned = NULL;
989 __WDC_LOG_FUNC_END__;
990 return WIFI_DIRECT_ERROR_NONE;
993 int wifi_direct_activate(void)
995 __WDC_LOG_FUNC_START__;
996 GError *error = NULL;
997 GVariant *reply = NULL;
998 int ret = WIFI_DIRECT_ERROR_NONE;
1000 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1002 if (g_client_info.is_registered == false) {
1003 WDC_LOGE("Client is NOT registered");
1004 __WDC_LOG_FUNC_END__;
1005 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1008 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1009 "Activate", NULL, &error);
1011 ret = __net_wifidirect_gerror_to_enum(error);
1012 if(ret == WIFI_DIRECT_ERROR_NONE) {
1013 g_variant_get(reply, "(i)", &ret);
1014 g_variant_unref(reply);
1017 WDC_LOGD("%s() return : [%d]", __func__, ret);
1018 __WDC_LOG_FUNC_END__;
1022 int wifi_direct_deactivate(void)
1024 __WDC_LOG_FUNC_START__;
1025 GError *error = NULL;
1026 GVariant *reply = NULL;
1027 int ret = WIFI_DIRECT_ERROR_NONE;
1029 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1031 if (g_client_info.is_registered == false) {
1032 WDC_LOGE("Client is NOT registered");
1033 __WDC_LOG_FUNC_END__;
1034 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1037 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1038 "Deactivate", NULL, &error);
1040 ret = __net_wifidirect_gerror_to_enum(error);
1041 if(ret == WIFI_DIRECT_ERROR_NONE) {
1042 g_variant_get(reply, "(i)", &ret);
1043 g_variant_unref(reply);
1046 WDC_LOGD("%s() return : [%d]", __func__, ret);
1047 __WDC_LOG_FUNC_END__;
1051 int wifi_direct_start_discovery(bool listen_only, int timeout)
1053 __WDC_LOG_FUNC_START__;
1054 GVariantBuilder *builder = NULL;
1055 GVariant *params = NULL;
1056 GError *error = NULL;
1057 GVariant *reply = NULL;
1058 int ret = WIFI_DIRECT_ERROR_NONE;
1060 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1062 if (g_client_info.is_registered == false) {
1063 WDC_LOGE("Client is NOT registered");
1064 __WDC_LOG_FUNC_END__;
1065 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1069 WDC_LOGE("Negative value. Param [timeout]!");
1070 __WDC_LOG_FUNC_END__;
1071 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1074 builder = g_variant_builder_new(G_VARIANT_TYPE ("a{sv}"));
1075 g_variant_builder_add(builder, "{sv}", "Mode", g_variant_new("b", listen_only));
1076 g_variant_builder_add(builder, "{sv}", "Timeout", g_variant_new("i", timeout));
1077 params = g_variant_new("(a{sv})", builder);
1078 g_variant_builder_unref(builder);
1079 WDC_LOGI("listen only (%d) timeout (%d)", listen_only, timeout);
1081 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1082 "StartDiscovery", params, &error);
1084 ret = __net_wifidirect_gerror_to_enum(error);
1085 if(ret == WIFI_DIRECT_ERROR_NONE) {
1086 g_variant_get(reply, "(i)", &ret);
1087 g_variant_unref(reply);
1090 WDC_LOGD("%s() return : [%d]", __func__, ret);
1091 __WDC_LOG_FUNC_END__;
1095 int wifi_direct_start_discovery_specific_channel(bool listen_only,
1097 wifi_direct_discovery_channel_e channel)
1099 __WDC_LOG_FUNC_START__;
1100 GVariantBuilder *builder = NULL;
1101 GVariant *params = NULL;
1102 GError *error = NULL;
1103 GVariant *reply = NULL;
1104 int ret = WIFI_DIRECT_ERROR_NONE;
1106 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1108 if (g_client_info.is_registered == false) {
1109 WDC_LOGE("Client is NOT registered");
1110 __WDC_LOG_FUNC_END__;
1111 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1115 WDC_LOGE("Negative value. Param [timeout]!");
1116 __WDC_LOG_FUNC_END__;
1117 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1120 builder = g_variant_builder_new(G_VARIANT_TYPE ("a{sv}"));
1121 g_variant_builder_add(builder, "{sv}", "Mode", g_variant_new("b", listen_only));
1122 g_variant_builder_add(builder, "{sv}", "Timeout", g_variant_new("i", timeout));
1123 g_variant_builder_add(builder, "{sv}", "Channel", g_variant_new("i", channel));
1124 params = g_variant_new("(a{sv})", builder);
1125 g_variant_builder_unref(builder);
1126 WDC_LOGI("listen only (%d) timeout (%d)", listen_only, timeout);
1128 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1129 "StartDiscovery", params, &error);
1131 ret = __net_wifidirect_gerror_to_enum(error);
1132 if(ret == WIFI_DIRECT_ERROR_NONE) {
1133 g_variant_get(reply, "(i)", &ret);
1134 g_variant_unref(reply);
1137 WDC_LOGD("%s() return : [%d]", __func__, ret);
1138 __WDC_LOG_FUNC_END__;
1142 int wifi_direct_cancel_discovery(void)
1144 __WDC_LOG_FUNC_START__;
1145 GError *error = NULL;
1146 GVariant *reply = NULL;
1147 int ret = WIFI_DIRECT_ERROR_NONE;
1149 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1151 if (g_client_info.is_registered == false) {
1152 WDC_LOGE("Client is NOT registered");
1153 __WDC_LOG_FUNC_END__;
1154 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1157 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1158 "StopDiscovery", NULL, &error);
1160 ret = __net_wifidirect_gerror_to_enum(error);
1161 if(ret == WIFI_DIRECT_ERROR_NONE) {
1162 g_variant_get(reply, "(i)", &ret);
1163 g_variant_unref(reply);
1166 WDC_LOGD("%s() return : [%d]", __func__, ret);
1167 __WDC_LOG_FUNC_END__;
1171 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
1172 static char **get_service_list(char *services, unsigned int *count)
1174 __WDC_LOG_FUNC_START__;
1175 char **result = NULL;
1178 unsigned int cnt = 0;
1181 char *saveptr = NULL;
1183 if (!count || !services || (services && strlen(services) <= 0)) {
1184 WDC_LOGE("Invalid parameters.");
1185 __WDC_LOG_FUNC_END__;
1190 pos2 = g_strdup(services);
1192 pos1 = strtok_r (pos1,",\n", &saveptr);
1195 pos1 = strtok_r (NULL, ",\n", &saveptr);
1197 WDC_LOGD("Total Service Count = %d", cnt);
1200 result = (char**) g_try_malloc0_n(cnt, sizeof(char *));
1202 WDC_LOGE("Failed to allocate memory for result");
1206 pos2 = strtok_r (pos2,",\n", &saveptr);
1207 while (pos2 != NULL) {
1208 char *s = strchr(pos2, ' ');
1211 result[i++] = strdup(pos2);
1212 pos2 = strtok_r (NULL, ",\n", &saveptr);
1226 for (j=0; j<i && result[j] != NULL; j++)
1233 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
1235 int wifi_direct_foreach_discovered_peers(wifi_direct_discovered_peer_cb cb,
1238 __WDC_LOG_FUNC_START__;
1240 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1242 GVariant *params = NULL;
1243 GError *error = NULL;
1244 GVariant *reply = NULL;
1245 GVariantIter *iter_peers = NULL;
1246 GVariantIter *iter_peer = NULL;
1247 GVariant *var = NULL;
1249 int ret = WIFI_DIRECT_ERROR_NONE;
1251 if (g_client_info.is_registered == false) {
1252 WDC_LOGE("Client is NOT registered");
1253 __WDC_LOG_FUNC_END__;
1254 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1258 WDC_LOGE("NULL Param [callback]!");
1259 __WDC_LOG_FUNC_END__;
1260 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1263 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1264 "GetDiscoveredPeers", params, &error);
1266 ret = __net_wifidirect_gerror_to_enum(error);
1267 if(ret!= WIFI_DIRECT_ERROR_NONE) {
1271 g_variant_get(reply, "(iaa{sv})", &ret, &iter_peers);
1272 if (ret != WIFI_DIRECT_ERROR_NONE) {
1273 __WDC_LOG_FUNC_END__;
1274 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1277 WDC_LOGD("wifi_direct_foreach_discovered_peers() SUCCESS");
1279 while(g_variant_iter_loop(iter_peers, "a{sv}", &iter_peer)) {
1280 wifi_direct_discovered_peer_info_s *peer_list = NULL;
1282 peer_list = (wifi_direct_discovered_peer_info_s *) g_try_malloc0(sizeof(wifi_direct_discovered_peer_info_s));
1284 WDC_LOGE("Failed to allocate memory");
1288 while (g_variant_iter_loop(iter_peer, "{sv}", &key, &var)) {
1289 if (!g_strcmp0(key, "DeviceName")) {
1290 const char *device_name = NULL;
1292 g_variant_get(var, "&s", &device_name);
1293 peer_list->device_name = g_strndup(device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
1295 } else if (!g_strcmp0(key, "DeviceAddress")) {
1296 unsigned char mac_address[MACADDR_LEN] = {0, };
1298 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
1299 peer_list->mac_address = (char*) g_try_malloc0(MACSTR_LEN);
1300 if (peer_list->mac_address)
1301 g_snprintf(peer_list->mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
1303 } else if (!g_strcmp0(key, "InterfaceAddress")) {
1304 unsigned char intf_address[MACADDR_LEN] = {0, };
1306 wifi_direct_dbus_unpack_ay(intf_address, var, MACADDR_LEN);
1307 peer_list->interface_address = (char*) g_try_malloc0(MACSTR_LEN);
1308 if (peer_list->interface_address)
1309 g_snprintf(peer_list->interface_address, MACSTR_LEN, MACSTR, MAC2STR(intf_address));
1311 } else if (!g_strcmp0(key, "Channel")) {
1312 peer_list->channel = g_variant_get_uint16(var);
1314 } else if (!g_strcmp0(key, "IsGroupOwner")) {
1315 peer_list->is_group_owner = g_variant_get_boolean(var);
1317 } else if (!g_strcmp0(key, "IsPersistentGO")) {
1318 peer_list->is_persistent_group_owner = g_variant_get_boolean(var);
1320 } else if (!g_strcmp0(key, "IsConnected")) {
1321 peer_list->is_connected = g_variant_get_boolean(var);
1323 } else if (!g_strcmp0(key, "Category")) {
1324 peer_list->primary_device_type = g_variant_get_uint16(var);
1326 } else if (!g_strcmp0(key, "SubCategory")) {
1327 peer_list->secondary_device_type = g_variant_get_uint16(var);
1329 } else if (!g_strcmp0(key, "IsWfdDevice")) {
1330 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
1331 peer_list->is_miracast_device = g_variant_get_boolean(var);
1332 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
1338 //__wfd_client_print_entry_list(peer_list, 1);
1339 if (!cb(peer_list, user_data)) {
1340 g_variant_iter_free(iter_peer);
1345 g_variant_iter_free(iter_peers);
1346 g_variant_unref(reply);
1347 __WDC_LOG_FUNC_END__;
1348 return WIFI_DIRECT_ERROR_NONE;
1351 int wifi_direct_connect(char *mac_address)
1353 __WDC_LOG_FUNC_START__;
1355 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1357 GVariant *params = NULL;
1358 GError *error = NULL;
1359 GVariant *reply = NULL;
1360 int ret = WIFI_DIRECT_ERROR_NONE;
1362 if (g_client_info.is_registered == false) {
1363 WDC_LOGE("Client is NOT registered");
1364 __WDC_LOG_FUNC_END__;
1365 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1369 WDC_LOGE("mac_addr is NULL");
1370 __WDC_LOG_FUNC_END__;
1371 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1374 params = g_variant_new("(s)", mac_address);
1375 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1376 "Connect", params, &error);
1378 ret = __net_wifidirect_gerror_to_enum(error);
1379 if(ret == WIFI_DIRECT_ERROR_NONE) {
1380 g_variant_get(reply, "(i)", &ret);
1381 g_variant_unref(reply);
1384 WDC_LOGD("%s() return : [%d]", __func__, ret);
1385 __WDC_LOG_FUNC_END__;
1389 int wifi_direct_cancel_connection(char *mac_address)
1391 __WDC_LOG_FUNC_START__;
1393 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1395 GVariant *params = NULL;
1396 GError *error = NULL;
1397 GVariant *reply = NULL;
1398 int ret = WIFI_DIRECT_ERROR_NONE;
1400 if (g_client_info.is_registered == false) {
1401 WDC_LOGE("Client is NOT registered");
1402 __WDC_LOG_FUNC_END__;
1403 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1407 WDC_LOGE("mac_addr is NULL");
1408 __WDC_LOG_FUNC_END__;
1409 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1412 params = g_variant_new("(s)", mac_address);
1413 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1414 "CancelConnection", params, &error);
1416 ret = __net_wifidirect_gerror_to_enum(error);
1417 if(ret == WIFI_DIRECT_ERROR_NONE) {
1418 g_variant_get(reply, "(i)", &ret);
1419 g_variant_unref(reply);
1422 WDC_LOGD("%s() return : [%d]", __func__, ret);
1423 __WDC_LOG_FUNC_END__;
1428 int wifi_direct_reject_connection(char *mac_address)
1430 __WDC_LOG_FUNC_START__;
1432 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1434 GVariant *params = NULL;
1435 GError *error = NULL;
1436 GVariant *reply = NULL;
1437 int ret = WIFI_DIRECT_ERROR_NONE;
1439 if (g_client_info.is_registered == false) {
1440 WDC_LOGE("Client is NOT registered");
1441 __WDC_LOG_FUNC_END__;
1442 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1446 WDC_LOGE("mac_addr is NULL");
1447 __WDC_LOG_FUNC_END__;
1448 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1451 params = g_variant_new("(s)", mac_address);
1452 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1453 "RejectConnection", params, &error);
1455 ret = __net_wifidirect_gerror_to_enum(error);
1456 if(ret == WIFI_DIRECT_ERROR_NONE) {
1457 g_variant_get(reply, "(i)", &ret);
1458 g_variant_unref(reply);
1461 WDC_LOGD("%s() return : [%d]", __func__, ret);
1462 __WDC_LOG_FUNC_END__;
1467 int wifi_direct_disconnect_all(void)
1469 __WDC_LOG_FUNC_START__;
1471 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1473 GError *error = NULL;
1474 GVariant *reply = NULL;
1475 int ret = WIFI_DIRECT_ERROR_NONE;
1477 if (g_client_info.is_registered == false) {
1478 WDC_LOGE("Client is NOT registered");
1479 __WDC_LOG_FUNC_END__;
1480 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1483 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1484 "DisconnectAll", NULL, &error);
1486 ret = __net_wifidirect_gerror_to_enum(error);
1487 if(ret == WIFI_DIRECT_ERROR_NONE) {
1488 g_variant_get(reply, "(i)", &ret);
1489 g_variant_unref(reply);
1492 WDC_LOGD("%s() return : [%d]", __func__, ret);
1493 __WDC_LOG_FUNC_END__;
1498 int wifi_direct_disconnect(char *mac_address)
1500 __WDC_LOG_FUNC_START__;
1502 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1504 GVariant *params = NULL;
1505 GError *error = NULL;
1506 GVariant *reply = NULL;
1507 int ret = WIFI_DIRECT_ERROR_NONE;
1509 if (g_client_info.is_registered == false) {
1510 WDC_LOGE("Client is NOT registered");
1511 __WDC_LOG_FUNC_END__;
1512 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1516 WDC_LOGE("mac_addr is NULL");
1517 __WDC_LOG_FUNC_END__;
1518 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1521 params = g_variant_new("(s)", mac_address);
1522 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1523 "Disconnect", params, &error);
1525 ret = __net_wifidirect_gerror_to_enum(error);
1526 if(ret == WIFI_DIRECT_ERROR_NONE) {
1527 g_variant_get(reply, "(i)", &ret);
1528 g_variant_unref(reply);
1531 WDC_LOGD("%s() return : [%d]", __func__, ret);
1532 __WDC_LOG_FUNC_END__;
1536 int wifi_direct_accept_connection(char *mac_address)
1538 __WDC_LOG_FUNC_START__;
1540 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1542 GVariant *params = NULL;
1543 GError *error = NULL;
1544 GVariant *reply = NULL;
1545 int ret = WIFI_DIRECT_ERROR_NONE;
1547 if (g_client_info.is_registered == false) {
1548 WDC_LOGE("Client is NOT registered");
1549 __WDC_LOG_FUNC_END__;
1550 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1554 WDC_LOGE("mac_addr is NULL");
1555 __WDC_LOG_FUNC_END__;
1556 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1559 params = g_variant_new("(s)", mac_address);
1560 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1561 "AcceptConnection", params, &error);
1563 ret = __net_wifidirect_gerror_to_enum(error);
1564 if(ret == WIFI_DIRECT_ERROR_NONE) {
1565 g_variant_get(reply, "(i)", &ret);
1566 g_variant_unref(reply);
1569 WDC_LOGD("%s() return : [%d]", __func__, ret);
1570 __WDC_LOG_FUNC_END__;
1575 int wifi_direct_foreach_connected_peers(wifi_direct_connected_peer_cb cb,
1578 __WDC_LOG_FUNC_START__;
1580 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1582 GVariant *params = NULL;
1583 GError *error = NULL;
1584 GVariant *reply = NULL;
1585 GVariantIter *iter_peers = NULL;
1586 GVariantIter *iter_peer = NULL;
1587 GVariant *var = NULL;
1589 int ret = WIFI_DIRECT_ERROR_NONE;
1591 if (g_client_info.is_registered == false) {
1592 WDC_LOGE("Client is NOT registered");
1593 __WDC_LOG_FUNC_END__;
1594 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1598 WDC_LOGE("NULL Param [callback]!");
1599 __WDC_LOG_FUNC_END__;
1600 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1603 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
1604 "GetConnectedPeers", params, &error);
1606 ret = __net_wifidirect_gerror_to_enum(error);
1607 if(ret != WIFI_DIRECT_ERROR_NONE) {
1611 g_variant_get(reply, "(iaa{sv})", &ret, &iter_peers);
1612 if (ret != WIFI_DIRECT_ERROR_NONE) {
1613 __WDC_LOG_FUNC_END__;
1614 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1617 WDC_LOGD("wifi_direct_foreach_connected_peers() SUCCESS");
1619 while(g_variant_iter_loop(iter_peers, "a{sv}", &iter_peer)) {
1620 wifi_direct_connected_peer_info_s *peer_list = NULL;
1622 peer_list = (wifi_direct_connected_peer_info_s *) g_try_malloc0(sizeof(wifi_direct_connected_peer_info_s));
1624 WDC_LOGE("Failed to allocate memory");
1628 while (g_variant_iter_loop(iter_peer, "{sv}", &key, &var)) {
1629 if (!g_strcmp0(key, "DeviceName")) {
1630 const char *device_name = NULL;
1632 g_variant_get(var, "&s", &device_name);
1633 peer_list->device_name = g_strndup(device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
1635 } else if (!g_strcmp0(key, "DeviceAddress")) {
1636 unsigned char mac_address[MACADDR_LEN] = {0, };
1638 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
1639 peer_list->mac_address = (char*) g_try_malloc0(MACSTR_LEN);
1640 if (peer_list->mac_address)
1641 g_snprintf(peer_list->mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
1643 } else if (!g_strcmp0(key, "InterfaceAddress")) {
1644 unsigned char intf_address[MACADDR_LEN] = {0, };
1646 wifi_direct_dbus_unpack_ay(intf_address, var, MACADDR_LEN);
1647 peer_list->interface_address = (char*) g_try_malloc0(MACSTR_LEN);
1648 if (peer_list->interface_address)
1649 g_snprintf(peer_list->interface_address, MACSTR_LEN, MACSTR, MAC2STR(intf_address));
1651 } else if (!g_strcmp0(key, "IPAddress")) {
1652 unsigned char ip_address[IPADDR_LEN] = {0, };
1654 wifi_direct_dbus_unpack_ay(ip_address, var, IPADDR_LEN);
1655 peer_list->ip_address = (char*) g_try_malloc0(IPSTR_LEN);
1656 if (peer_list->ip_address)
1657 g_snprintf(peer_list->ip_address, IPSTR_LEN, IPSTR, IP2STR(ip_address));
1659 } else if (!g_strcmp0(key, "Channel")) {
1660 peer_list->channel = g_variant_get_uint16(var);
1662 } else if (!g_strcmp0(key, "Category")) {
1663 peer_list->primary_device_type = g_variant_get_uint16(var);
1665 } else if (!g_strcmp0(key, "SubCategory")) {
1666 peer_list->secondary_device_type = g_variant_get_uint16(var);
1668 } else if (!g_strcmp0(key, "IsWfdDevice")) {
1669 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
1670 peer_list->is_miracast_device = g_variant_get_boolean(var);
1671 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
1672 } else if (!g_strcmp0(key, "IsP2P")) {
1673 peer_list->p2p_supported = g_variant_get_boolean(var);
1680 //__wfd_client_print_connected_peer_info(peer_list, 1);
1681 if (!cb(peer_list, user_data)) {
1682 g_variant_iter_free(iter_peer);
1687 g_variant_iter_free(iter_peers);
1688 g_variant_unref(reply);
1689 __WDC_LOG_FUNC_END__;
1690 return WIFI_DIRECT_ERROR_NONE;
1694 int wifi_direct_create_group(void)
1696 __WDC_LOG_FUNC_START__;
1698 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1700 GError *error = NULL;
1701 GVariant *reply = NULL;
1702 int ret = WIFI_DIRECT_ERROR_NONE;
1704 if (g_client_info.is_registered == false) {
1705 WDC_LOGE("Client is NOT registered");
1706 __WDC_LOG_FUNC_END__;
1707 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1710 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1711 "CreateGroup", NULL, &error);
1713 ret = __net_wifidirect_gerror_to_enum(error);
1714 if(ret == WIFI_DIRECT_ERROR_NONE) {
1715 g_variant_get(reply, "(i)", &ret);
1716 g_variant_unref(reply);
1719 WDC_LOGD("%s() return : [%d]", __func__, ret);
1720 __WDC_LOG_FUNC_END__;
1725 int wifi_direct_destroy_group(void)
1727 __WDC_LOG_FUNC_START__;
1729 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1731 GError *error = NULL;
1732 GVariant *reply = NULL;
1733 int ret = WIFI_DIRECT_ERROR_NONE;
1735 if (g_client_info.is_registered == false) {
1736 WDC_LOGE("Client is NOT registered");
1737 __WDC_LOG_FUNC_END__;
1738 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1741 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1742 "DestroyGroup", NULL, &error);
1744 ret = __net_wifidirect_gerror_to_enum(error);
1745 if(ret == WIFI_DIRECT_ERROR_NONE) {
1746 g_variant_get(reply, "(i)", &ret);
1747 g_variant_unref(reply);
1750 WDC_LOGD("%s() return : [%d]", __func__, ret);
1751 __WDC_LOG_FUNC_END__;
1756 int wifi_direct_is_group_owner(bool *owner)
1758 __WDC_LOG_FUNC_START__;
1760 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1762 GError* error = NULL;
1763 GVariant *reply = NULL;
1764 int ret = WIFI_DIRECT_ERROR_NONE;
1767 if (g_client_info.is_registered == false) {
1768 WDC_LOGE("Client is NOT registered");
1769 __WDC_LOG_FUNC_END__;
1770 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1774 WDC_LOGE("NULL Param [owner]!");
1775 __WDC_LOG_FUNC_END__;
1776 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1779 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1784 ret = __net_wifidirect_gerror_to_enum(error);
1785 if(ret != WIFI_DIRECT_ERROR_NONE) {
1789 WDC_LOGD("%s() SUCCESS", __func__);
1790 g_variant_get(reply, "(b)", &val);
1792 g_variant_unref(reply);
1794 __WDC_LOG_FUNC_END__;
1795 return WIFI_DIRECT_ERROR_NONE;
1798 int wifi_direct_is_autonomous_group(bool *autonomous_group)
1800 __WDC_LOG_FUNC_START__;
1802 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1804 GError* error = NULL;
1805 GVariant *reply = NULL;
1806 int ret = WIFI_DIRECT_ERROR_NONE;
1809 if (g_client_info.is_registered == false) {
1810 WDC_LOGE("Client is NOT registered");
1811 __WDC_LOG_FUNC_END__;
1812 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1815 if (!autonomous_group) {
1816 WDC_LOGE("NULL Param [autonomous_group]!\n");
1817 __WDC_LOG_FUNC_END__;
1818 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1821 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
1826 ret = __net_wifidirect_gerror_to_enum(error);
1827 if(ret != WIFI_DIRECT_ERROR_NONE) {
1831 WDC_LOGD("%s() SUCCESS", __func__);
1832 g_variant_get(reply, "(b)", &val);
1833 *autonomous_group = val;
1834 g_variant_unref(reply);
1836 __WDC_LOG_FUNC_END__;
1837 return WIFI_DIRECT_ERROR_NONE;
1841 int wifi_direct_set_group_owner_intent(int intent)
1843 __WDC_LOG_FUNC_START__;
1845 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1847 GError* error = NULL;
1848 GVariant *reply = NULL;
1849 GVariant *params = NULL;
1850 int ret = WIFI_DIRECT_ERROR_NONE;
1852 if (g_client_info.is_registered == false) {
1853 WDC_LOGE("Client is NOT registered");
1854 __WDC_LOG_FUNC_END__;
1855 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1858 if (intent < 0 || intent > 15) {
1859 WDC_LOGE("Invalid Param : intent[%d]", intent);
1860 __WDC_LOG_FUNC_END__;
1861 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1864 params = g_variant_new("(i)", intent);
1865 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
1870 ret = __net_wifidirect_gerror_to_enum(error);
1871 if(ret == WIFI_DIRECT_ERROR_NONE) {
1872 g_variant_get(reply, "(i)", &ret);
1873 g_variant_unref(reply);
1876 WDC_LOGD("%s() return : [%d]", __func__, ret);
1877 __WDC_LOG_FUNC_END__;
1881 int wifi_direct_get_group_owner_intent(int *intent)
1883 __WDC_LOG_FUNC_START__;
1885 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1887 GError* error = NULL;
1888 GVariant *reply = NULL;
1890 int ret = WIFI_DIRECT_ERROR_NONE;
1892 if (g_client_info.is_registered == false) {
1893 WDC_LOGE("Client is NOT registered");
1894 __WDC_LOG_FUNC_END__;
1895 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1899 WDC_LOGE("Invalid Parameter");
1900 __WDC_LOG_FUNC_END__;
1901 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1904 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
1909 ret = __net_wifidirect_gerror_to_enum(error);
1910 if(ret != WIFI_DIRECT_ERROR_NONE) {
1914 g_variant_get(reply, "(ii)", &ret, &val);
1916 g_variant_unref(reply);
1918 WDC_LOGD("Intent = [%d]", *intent);
1919 WDC_LOGD("%s() return : [%d]", __func__, ret);
1920 __WDC_LOG_FUNC_END__;
1924 int wifi_direct_set_max_clients(int max)
1926 __WDC_LOG_FUNC_START__;
1928 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1930 GError* error = NULL;
1931 GVariant *reply = NULL;
1932 GVariant *params = NULL;
1933 int ret = WIFI_DIRECT_ERROR_NONE;
1935 if (g_client_info.is_registered == false) {
1936 WDC_LOGE("Client is NOT registered");
1937 __WDC_LOG_FUNC_END__;
1938 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1940 WDC_LOGD("max client [%d]\n", max);
1942 params = g_variant_new("(i)", max);
1943 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
1948 ret = __net_wifidirect_gerror_to_enum(error);
1949 if(ret == WIFI_DIRECT_ERROR_NONE) {
1950 g_variant_get(reply, "(i)", &ret);
1951 g_variant_unref(reply);
1954 WDC_LOGD("%s() return : [%d]", __func__, ret);
1955 __WDC_LOG_FUNC_END__;
1959 int wifi_direct_get_max_clients(int *max)
1961 __WDC_LOG_FUNC_START__;
1963 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
1965 GError* error = NULL;
1966 GVariant *reply = NULL;
1968 int ret = WIFI_DIRECT_ERROR_NONE;
1970 if (g_client_info.is_registered == false) {
1971 WDC_LOGE("Client is NOT registered");
1972 __WDC_LOG_FUNC_END__;
1973 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1977 WDC_LOGE("Invalid Parameter");
1978 __WDC_LOG_FUNC_END__;
1979 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1982 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
1987 ret = __net_wifidirect_gerror_to_enum(error);
1988 if(ret != WIFI_DIRECT_ERROR_NONE) {
1992 g_variant_get(reply, "(ii)", &ret, &val);
1994 g_variant_unref(reply);
1996 WDC_LOGD("max_client = [%d]", *max);
1997 WDC_LOGD("%s() return : [%d]", __func__, ret);
1998 __WDC_LOG_FUNC_END__;
1999 return WIFI_DIRECT_ERROR_NONE;
2002 int wifi_direct_get_operating_channel(int *channel)
2004 __WDC_LOG_FUNC_START__;
2006 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2008 GError* error = NULL;
2009 GVariant *reply = NULL;
2011 int ret = WIFI_DIRECT_ERROR_NONE;
2013 if (g_client_info.is_registered == false) {
2014 WDC_LOGE("Client is NOT registered");
2015 __WDC_LOG_FUNC_END__;
2016 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2020 WDC_LOGE("NULL Param [channel]!\n");
2021 __WDC_LOG_FUNC_END__;
2022 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2025 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2026 "GetOperatingChannel",
2030 ret = __net_wifidirect_gerror_to_enum(error);
2031 if(ret != WIFI_DIRECT_ERROR_NONE) {
2035 g_variant_get(reply, "(ii)", &ret, &val);
2037 g_variant_unref(reply);
2039 WDC_LOGD("channel = [%d]", *channel);
2040 WDC_LOGD("%s() return : [%d]", __func__, ret);
2041 __WDC_LOG_FUNC_END__;
2042 return WIFI_DIRECT_ERROR_NONE;
2045 int wifi_direct_activate_pushbutton(void)
2047 __WDC_LOG_FUNC_START__;
2049 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2051 GError* error = NULL;
2052 GVariant *reply = NULL;
2053 int ret = WIFI_DIRECT_ERROR_NONE;
2055 if (g_client_info.is_registered == false) {
2056 WDC_LOGE("Client is NOT registered");
2057 __WDC_LOG_FUNC_END__;
2058 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2061 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
2062 "ActivatePushButton",
2066 ret = __net_wifidirect_gerror_to_enum(error);
2067 if(ret == WIFI_DIRECT_ERROR_NONE) {
2068 g_variant_get(reply, "(i)", &ret);
2069 g_variant_unref(reply);
2072 WDC_LOGD("%s() return : [%d]", __func__, ret);
2073 __WDC_LOG_FUNC_END__;
2077 int wifi_direct_set_wps_pin(char *pin)
2079 __WDC_LOG_FUNC_START__;
2081 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2083 GError* error = NULL;
2084 GVariant *reply = NULL;
2085 GVariant *params = NULL;
2086 int ret = WIFI_DIRECT_ERROR_NONE;
2088 if (g_client_info.is_registered == false) {
2089 WDC_LOGE("Client is NOT registered");
2090 __WDC_LOG_FUNC_END__;
2091 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2095 WDC_LOGE("NULL Param [pin]!");
2096 __WDC_LOG_FUNC_END__;
2097 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2099 WDC_LOGE("pin = [%s]\n", pin);
2101 params = g_variant_new("(s)", pin);
2102 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2107 ret = __net_wifidirect_gerror_to_enum(error);
2108 if(ret == WIFI_DIRECT_ERROR_NONE) {
2109 g_variant_get(reply, "(i)", &ret);
2110 g_variant_unref(reply);
2113 WDC_LOGD("%s() return : [%d]", __func__, ret);
2114 __WDC_LOG_FUNC_END__;
2119 int wifi_direct_get_wps_pin(char **pin)
2121 __WDC_LOG_FUNC_START__;
2123 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2125 GError* error = NULL;
2126 GVariant *reply = NULL;
2127 const char *str = NULL;
2128 int ret = WIFI_DIRECT_ERROR_NONE;
2130 if (g_client_info.is_registered == false) {
2131 WDC_LOGE("Client is NOT registered");
2132 __WDC_LOG_FUNC_END__;
2133 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2137 WDC_LOGE("NULL Param [pin]!");
2138 __WDC_LOG_FUNC_END__;
2139 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2142 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2147 ret = __net_wifidirect_gerror_to_enum(error);
2148 if(ret != WIFI_DIRECT_ERROR_NONE) {
2152 g_variant_get(reply, "(i&s)", &ret, &str);
2153 if(pin != NULL && str != NULL)
2154 *pin = g_strdup(str);
2155 g_variant_unref(reply);
2157 WDC_LOGD("%s() return : [%d]", __func__, ret);
2158 __WDC_LOG_FUNC_END__;
2162 int wifi_direct_get_supported_wps_mode(int *wps_mode)
2164 __WDC_LOG_FUNC_START__;
2166 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2168 GError* error = NULL;
2169 GVariant *reply = NULL;
2171 int ret = WIFI_DIRECT_ERROR_NONE;
2173 if (g_client_info.is_registered == false) {
2174 WDC_LOGE("Client is NOT registered");
2175 __WDC_LOG_FUNC_END__;
2176 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2180 WDC_LOGE("NULL Param [wps_mode]!");
2181 __WDC_LOG_FUNC_END__;
2182 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2185 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2186 "GetSupportedWpsMode",
2190 ret = __net_wifidirect_gerror_to_enum(error);
2191 if(ret != WIFI_DIRECT_ERROR_NONE) {
2195 g_variant_get(reply, "(ii)", &ret, &mode);
2197 g_variant_unref(reply);
2199 WDC_LOGD("%s() return : [%d]", __func__, ret);
2200 __WDC_LOG_FUNC_END__;
2204 int wifi_direct_foreach_supported_wps_types(wifi_direct_supported_wps_type_cb cb, void* user_data)
2206 __WDC_LOG_FUNC_START__;
2208 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2210 GError* error = NULL;
2211 GVariant *reply = NULL;
2213 int ret = WIFI_DIRECT_ERROR_NONE;
2214 gboolean result = FALSE;
2216 if (g_client_info.is_registered == false) {
2217 WDC_LOGE("Client is NOT registered");
2218 __WDC_LOG_FUNC_END__;
2219 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2223 WDC_LOGE("NULL Param [callback]!");
2224 __WDC_LOG_FUNC_END__;
2225 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2228 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2229 "GetSupportedWpsMode",
2233 ret = __net_wifidirect_gerror_to_enum(error);
2234 if(ret != WIFI_DIRECT_ERROR_NONE) {
2238 g_variant_get(reply, "(ii)", &ret, &wps_mode);
2239 g_variant_unref(reply);
2241 if (wps_mode & WIFI_DIRECT_WPS_TYPE_PBC)
2242 result = cb(WIFI_DIRECT_WPS_TYPE_PBC, user_data);
2243 if ((result == TRUE) && (wps_mode & WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY))
2244 result = cb(WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY, user_data);
2245 if ((result == TRUE) && (wps_mode & WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD))
2246 result = cb(WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD, user_data);
2248 WDC_LOGD("%s() return : [%d]", __func__, ret);
2249 __WDC_LOG_FUNC_END__;
2253 int wifi_direct_get_local_wps_type(wifi_direct_wps_type_e *type)
2255 __WDC_LOG_FUNC_START__;
2257 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2259 GError* error = NULL;
2260 GVariant *reply = NULL;
2262 int ret = WIFI_DIRECT_ERROR_NONE;
2264 if (g_client_info.is_registered == false) {
2265 WDC_LOGE("Client is NOT registered");
2266 __WDC_LOG_FUNC_END__;
2267 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2271 WDC_LOGE("NULL Param [type]!\n");
2272 __WDC_LOG_FUNC_END__;
2273 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2276 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2281 ret = __net_wifidirect_gerror_to_enum(error);
2282 if(ret != WIFI_DIRECT_ERROR_NONE) {
2286 g_variant_get(reply, "(ii)", &ret, &mode);
2288 g_variant_unref(reply);
2290 WDC_LOGD("%s() return : [%d]", __func__, ret);
2291 __WDC_LOG_FUNC_END__;
2295 int wifi_direct_set_req_wps_type(wifi_direct_wps_type_e type)
2297 __WDC_LOG_FUNC_START__;
2299 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2301 GError* error = NULL;
2302 GVariant *reply = NULL;
2303 GVariant *params = NULL;
2304 int ret = WIFI_DIRECT_ERROR_NONE;
2306 if (g_client_info.is_registered == false) {
2307 WDC_LOGE("Client is NOT registered");
2308 __WDC_LOG_FUNC_END__;
2309 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2312 if (type == WIFI_DIRECT_WPS_TYPE_PBC ||
2313 type == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY ||
2314 type == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD) {
2315 WDC_LOGD("Param wps_mode [%d]", type);
2317 WDC_LOGE("Invalid Param [wps_mode]!");
2318 __WDC_LOG_FUNC_END__;
2319 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2322 params = g_variant_new("(i)", type);
2323 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2328 ret = __net_wifidirect_gerror_to_enum(error);
2329 if(ret == WIFI_DIRECT_ERROR_NONE) {
2330 g_variant_get(reply, "(i)", &ret);
2331 g_variant_unref(reply);
2334 WDC_LOGD("%s() return : [%d]", __func__, ret);
2335 __WDC_LOG_FUNC_END__;
2339 int wifi_direct_get_req_wps_type(wifi_direct_wps_type_e *type)
2341 __WDC_LOG_FUNC_START__;
2343 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2345 GError* error = NULL;
2346 GVariant *reply = NULL;
2350 if (g_client_info.is_registered == false) {
2351 WDC_LOGE("Client is NOT registered");
2352 __WDC_LOG_FUNC_END__;
2353 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2357 WDC_LOGE("NULL Param [type]!\n");
2358 __WDC_LOG_FUNC_END__;
2359 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2362 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2367 ret = __net_wifidirect_gerror_to_enum(error);
2368 if(ret != WIFI_DIRECT_ERROR_NONE) {
2372 g_variant_get(reply, "(ii)", &ret, &mode);
2374 g_variant_unref(reply);
2376 WDC_LOGD("%s() return : [%d]", __func__, ret);
2377 __WDC_LOG_FUNC_END__;
2381 int wifi_direct_get_ssid(char **ssid)
2383 __WDC_LOG_FUNC_START__;
2385 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2387 GError* error = NULL;
2388 GVariant *reply = NULL;
2389 const char *str = NULL;
2390 int ret = WIFI_DIRECT_ERROR_NONE;
2392 if (g_client_info.is_registered == false) {
2393 WDC_LOGE("Client is NOT registered");
2394 __WDC_LOG_FUNC_END__;
2395 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2399 WDC_LOGE("Invalid Parameter");
2400 __WDC_LOG_FUNC_END__;
2401 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2404 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2409 ret = __net_wifidirect_gerror_to_enum(error);
2410 if(ret != WIFI_DIRECT_ERROR_NONE) {
2414 g_variant_get(reply, "(i&s)", &ret, &str);
2415 *ssid = g_strdup(str);
2416 g_variant_unref(reply);
2418 WDC_LOGD("%s() return : [%d]", __func__, ret);
2419 __WDC_LOG_FUNC_END__;
2423 int wifi_direct_get_device_name(char **device_name)
2425 __WDC_LOG_FUNC_START__;
2427 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2429 GError* error = NULL;
2430 GVariant *reply = NULL;
2431 const char *str = NULL;
2432 int ret = WIFI_DIRECT_ERROR_NONE;
2434 if (g_client_info.is_registered == false) {
2435 WDC_LOGE("Client is NOT registered");
2436 __WDC_LOG_FUNC_END__;
2437 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2441 WDC_LOGE("Invalid Parameter");
2442 __WDC_LOG_FUNC_END__;
2443 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2446 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2451 ret = __net_wifidirect_gerror_to_enum(error);
2452 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__;
2506 int wifi_direct_get_network_interface_name(char **name)
2508 __WDC_LOG_FUNC_START__;
2510 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2512 wifi_direct_state_e status = 0;
2513 char *get_str = NULL;
2514 GError* error = NULL;
2515 GVariant *reply = NULL;
2516 int ret = WIFI_DIRECT_ERROR_NONE;
2518 if (g_client_info.is_registered == false) {
2519 WDC_LOGE("Client is NOT registered");
2520 __WDC_LOG_FUNC_END__;
2521 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2525 WDC_LOGE("NULL Param [name]!\n");
2526 __WDC_LOG_FUNC_END__;
2527 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2530 ret = wifi_direct_get_state(&status);
2531 WDC_LOGD("wifi_direct_get_state() state=[%d], ret=[%d]\n", status, ret);
2533 if (status < WIFI_DIRECT_STATE_CONNECTED) {
2534 WDC_LOGE("Device is not connected!\n");
2535 __WDC_LOG_FUNC_END__;
2536 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
2539 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2544 ret = __net_wifidirect_gerror_to_enum(error);
2545 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) {
2593 g_variant_get(reply, "(i&s)", ret ,&str);
2594 *ip_address = g_strdup(str);
2595 g_variant_unref(reply);
2597 WDC_LOGD("IP address = [%s]", *ip_address);
2598 WDC_LOGD("%s() return : [%d]", __func__, ret);
2599 __WDC_LOG_FUNC_END__;
2603 int wifi_direct_get_subnet_mask(char **subnet_mask)
2605 __WDC_LOG_FUNC_START__;
2607 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2609 wifi_direct_state_e status = 0;
2610 GError* error = NULL;
2611 GVariant *reply = NULL;
2612 char *get_str = NULL;
2613 int ret = WIFI_DIRECT_ERROR_NONE;
2615 if (g_client_info.is_registered == false) {
2616 WDC_LOGE("Client is NOT registered");
2617 __WDC_LOG_FUNC_END__;
2618 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2622 WDC_LOGE("NULL Param [subnet_mask]!");
2623 __WDC_LOG_FUNC_END__;
2624 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2627 ret = wifi_direct_get_state(&status);
2628 WDC_LOGD("wifi_direct_get_state() state=[%d], ret=[%d]", status, ret);
2629 if( status < WIFI_DIRECT_STATE_CONNECTED) {
2630 WDC_LOGE("Device is not connected!");
2631 __WDC_LOG_FUNC_END__;
2632 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
2635 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2640 ret = __net_wifidirect_gerror_to_enum(error);
2641 if(ret != WIFI_DIRECT_ERROR_NONE) {
2645 g_variant_get(reply, "(i&s)", ret ,&get_str);
2646 *subnet_mask = g_strdup(get_str);
2647 g_variant_unref(reply);
2649 WDC_LOGD("Subnet Mask = [%s]", *subnet_mask);
2650 WDC_LOGD("%s() return : [%d]", __func__, ret);
2652 __WDC_LOG_FUNC_END__;
2653 return WIFI_DIRECT_ERROR_NONE;
2656 int wifi_direct_get_gateway_address(char **gateway_address)
2658 __WDC_LOG_FUNC_START__;
2660 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2662 wifi_direct_state_e status = 0;
2663 GError* error = NULL;
2664 GVariant *reply = NULL;
2665 char *get_str = NULL;
2666 int ret = WIFI_DIRECT_ERROR_NONE;
2668 if (g_client_info.is_registered == false) {
2669 WDC_LOGE("Client is NOT registered");
2670 __WDC_LOG_FUNC_END__;
2671 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2674 if (!gateway_address) {
2675 WDC_LOGE("NULL Param [gateway_address]!");
2676 __WDC_LOG_FUNC_END__;
2677 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2680 ret = wifi_direct_get_state(&status);
2681 WDC_LOGD("wifi_direct_get_state() state=[%d], ret=[%d]", status, ret);
2682 if(status < WIFI_DIRECT_STATE_CONNECTED) {
2683 WDC_LOGE("Device is not connected!");
2684 __WDC_LOG_FUNC_END__;
2685 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
2688 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2693 ret = __net_wifidirect_gerror_to_enum(error);
2694 if(ret != WIFI_DIRECT_ERROR_NONE) {
2698 g_variant_get(reply, "(i&s)", ret ,&get_str);
2699 *gateway_address = g_strdup(get_str);
2700 g_variant_unref(reply);
2702 WDC_LOGD("Gateway Address = [%s]", *gateway_address);
2703 WDC_LOGD("%s() return : [%d]", __func__, ret);
2705 __WDC_LOG_FUNC_END__;
2706 return WIFI_DIRECT_ERROR_NONE;
2709 int wifi_direct_get_mac_address(char **mac_address)
2711 __WDC_LOG_FUNC_START__;
2713 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2715 GError* error = NULL;
2716 GVariant *reply = NULL;
2717 const char *str = NULL;
2718 int ret = WIFI_DIRECT_ERROR_NONE;
2720 if (g_client_info.is_registered == false) {
2721 WDC_LOGE("Client is NOT registered");
2722 __WDC_LOG_FUNC_END__;
2723 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2727 WDC_LOGE("NULL Param [mac_address]!");
2728 __WDC_LOG_FUNC_END__;
2729 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2732 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2737 ret = __net_wifidirect_gerror_to_enum(error);
2738 if(ret != WIFI_DIRECT_ERROR_NONE) {
2742 g_variant_get(reply, "(i&s)", &ret, &str);
2743 *mac_address = g_strdup(str);
2744 g_variant_unref(reply);
2746 WDC_SECLOGD("MAC address = [%s]", *mac_address);
2747 WDC_LOGD("%s() return : [%d]", __func__, ret);
2748 __WDC_LOG_FUNC_END__;
2753 int wifi_direct_get_state(wifi_direct_state_e *state)
2755 __WDC_LOG_FUNC_START__;
2757 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2759 GError* error = NULL;
2760 GVariant *reply = NULL;
2762 int ret = WIFI_DIRECT_ERROR_NONE;
2764 if (g_client_info.is_registered == false) {
2765 WDC_LOGE("Client is NOT registered");
2766 __WDC_LOG_FUNC_END__;
2767 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2771 WDC_LOGE("Invalid Parameter");
2772 __WDC_LOG_FUNC_END__;
2773 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2776 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
2777 "GetState", NULL, &error);
2779 ret = __net_wifidirect_gerror_to_enum(error);
2780 if(ret != WIFI_DIRECT_ERROR_NONE) {
2784 g_variant_get(reply, "(ii)", &ret, &val);
2785 *state = (wifi_direct_state_e) val;
2786 /* for CAPI : there is no WIFI_DIRECT_STATE_GROUP_OWNER type in CAPI */
2787 if(*state == WIFI_DIRECT_STATE_GROUP_OWNER)
2788 *state = WIFI_DIRECT_STATE_CONNECTED;
2790 g_variant_unref(reply);
2792 WDC_LOGD("State = [%d]", *state);
2793 WDC_LOGD("%s() return : [%d]", __func__, ret);
2794 __WDC_LOG_FUNC_END__;
2799 int wifi_direct_is_discoverable(bool* discoverable)
2801 __WDC_LOG_FUNC_START__;
2803 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2805 GError* error = NULL;
2806 GVariant *reply = NULL;
2807 int ret = WIFI_DIRECT_ERROR_NONE;
2809 if (g_client_info.is_registered == false) {
2810 WDC_LOGE("Client is NOT registered");
2811 __WDC_LOG_FUNC_END__;
2812 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2815 if (!discoverable) {
2816 WDC_LOGE("Invalid Parameter");
2817 __WDC_LOG_FUNC_END__;
2818 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2821 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
2822 "IsDiscoverable", NULL, &error);
2824 ret = __net_wifidirect_gerror_to_enum(error);
2825 if(ret != WIFI_DIRECT_ERROR_NONE) {
2829 g_variant_get(reply, "(b)", discoverable);
2830 WDC_LOGD("Discoverable = [%s]", *discoverable ? "Yes":"No");
2832 WDC_LOGD("%s() SUCCESS", __func__);
2833 g_variant_unref(reply);
2835 __WDC_LOG_FUNC_END__;
2836 return WIFI_DIRECT_ERROR_NONE;
2839 int wifi_direct_is_listening_only(bool* listen_only)
2841 __WDC_LOG_FUNC_START__;
2843 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2845 GError* error = NULL;
2846 GVariant *reply = NULL;
2847 int ret = WIFI_DIRECT_ERROR_NONE;
2849 if (g_client_info.is_registered == false) {
2850 WDC_LOGE("Client is NOT registered");
2851 __WDC_LOG_FUNC_END__;
2852 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2856 WDC_LOGE("Invalid Parameter");
2857 __WDC_LOG_FUNC_END__;
2858 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2861 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
2862 "IsListeningOnly", NULL, &error);
2864 ret = __net_wifidirect_gerror_to_enum(error);
2865 if(ret != WIFI_DIRECT_ERROR_NONE) {
2869 g_variant_get(reply, "(b)", listen_only);
2871 WDC_LOGD("Is listen only = [%s]", *listen_only ? "Yes":"No");
2872 WDC_LOGD("%s() SUCCESS", __func__);
2873 g_variant_unref(reply);
2875 __WDC_LOG_FUNC_END__;
2876 return WIFI_DIRECT_ERROR_NONE;
2880 int wifi_direct_get_primary_device_type(wifi_direct_primary_device_type_e* type)
2882 __WDC_LOG_FUNC_START__;
2884 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2887 WDC_LOGE("NULL Param [type]!");
2888 __WDC_LOG_FUNC_END__;
2889 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2892 if (g_client_info.is_registered == false) {
2893 WDC_LOGE("Client is NOT registered");
2894 __WDC_LOG_FUNC_END__;
2895 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2899 WDC_LOGD("Current primary_dev_type [%d]", WIFI_DIRECT_PRIMARY_DEVICE_TYPE_DISPLAY);
2900 *type = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_DISPLAY;
2901 #else /* TIZEN_TV */
2902 WDC_LOGD("Current primary_dev_type [%d]", WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE);
2903 *type = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE;
2904 #endif /* TIZEN_TV */
2906 __WDC_LOG_FUNC_END__;
2907 return WIFI_DIRECT_ERROR_NONE;
2910 int wifi_direct_get_secondary_device_type(wifi_direct_secondary_device_type_e* type)
2912 __WDC_LOG_FUNC_START__;
2914 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2916 if (g_client_info.is_registered == false) {
2917 WDC_LOGE("Client is NOT registered");
2918 __WDC_LOG_FUNC_END__;
2919 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2923 WDC_LOGE("NULL Param [type]!");
2924 __WDC_LOG_FUNC_END__;
2925 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2929 WDC_LOGD("Current second_dev_type [%d]", WIFI_DIRECT_SECONDARY_DEVICE_TYPE_DISPLAY_TV);
2930 *type = WIFI_DIRECT_SECONDARY_DEVICE_TYPE_DISPLAY_TV;
2931 #else /* TIZEN_TV */
2932 WDC_LOGD("Current second_dev_type [%d]", WIFI_DIRECT_SECONDARY_DEVICE_TYPE_TELEPHONE_SMARTPHONE_DUAL);
2933 *type = WIFI_DIRECT_SECONDARY_DEVICE_TYPE_TELEPHONE_SMARTPHONE_DUAL; /* smart phone dual mode (wifi and cellular) */
2934 #endif /* TIZEN_TV */
2936 __WDC_LOG_FUNC_END__;
2937 return WIFI_DIRECT_ERROR_NONE;
2940 int wifi_direct_set_autoconnection_mode(bool mode)
2942 __WDC_LOG_FUNC_START__;
2944 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2946 GError* error = NULL;
2947 GVariant *reply = NULL;
2948 GVariant *params = NULL;
2949 int ret = WIFI_DIRECT_ERROR_NONE;
2951 if (g_client_info.is_registered == false) {
2952 WDC_LOGE("Client is NOT registered");
2953 __WDC_LOG_FUNC_END__;
2954 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2957 params = g_variant_new("(b)", mode);
2958 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2959 "SetAutoConnectionMode",
2963 ret = __net_wifidirect_gerror_to_enum(error);
2964 if(ret == WIFI_DIRECT_ERROR_NONE) {
2965 g_variant_get(reply, "(i)", &ret);
2966 g_variant_unref(reply);
2969 WDC_LOGD("%s() return : [%d]", __func__, ret);
2970 __WDC_LOG_FUNC_END__;
2974 int wifi_direct_is_autoconnection_mode(bool *mode)
2976 __WDC_LOG_FUNC_START__;
2978 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
2980 GError* error = NULL;
2981 GVariant *reply = NULL;
2983 int ret = WIFI_DIRECT_ERROR_NONE;
2985 if (g_client_info.is_registered == false) {
2986 WDC_LOGE("Client is NOT registered");
2987 __WDC_LOG_FUNC_END__;
2988 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2992 WDC_LOGE("NULL Param [mode]!");
2993 __WDC_LOG_FUNC_END__;
2994 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2997 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
2998 "IsAutoConnectionMode",
3002 ret = __net_wifidirect_gerror_to_enum(error);
3003 if(ret != WIFI_DIRECT_ERROR_NONE) {
3007 g_variant_get(reply, "(ib)", &ret, &val);
3009 g_variant_unref(reply);
3011 WDC_LOGD("%s() return : [%d]", __func__, ret);
3012 __WDC_LOG_FUNC_END__;
3017 int wifi_direct_set_persistent_group_enabled(bool enabled)
3019 __WDC_LOG_FUNC_START__;
3021 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3023 GError* error = NULL;
3024 GVariant *reply = NULL;
3025 GVariant *params = NULL;
3026 int ret = WIFI_DIRECT_ERROR_NONE;
3028 if (g_client_info.is_registered == false) {
3029 WDC_LOGE("Client is NOT registered");
3030 __WDC_LOG_FUNC_END__;
3031 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3034 params = g_variant_new("(b)", enabled);
3035 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3036 "SetPersistentGroupEnabled",
3040 ret = __net_wifidirect_gerror_to_enum(error);
3041 if(ret == WIFI_DIRECT_ERROR_NONE) {
3042 g_variant_get(reply, "(i)", &ret);
3043 g_variant_unref(reply);
3046 WDC_LOGD("%s() return : [%d]", __func__, ret);
3048 __WDC_LOG_FUNC_END__;
3049 return WIFI_DIRECT_ERROR_NONE;
3053 int wifi_direct_is_persistent_group_enabled(bool *enabled)
3055 __WDC_LOG_FUNC_START__;
3057 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3059 GError* error = NULL;
3060 GVariant *reply = NULL;
3061 int ret = WIFI_DIRECT_ERROR_NONE;
3064 if (g_client_info.is_registered == false) {
3065 WDC_LOGE("Client is NOT registered");
3066 __WDC_LOG_FUNC_END__;
3067 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3071 WDC_LOGE("NULL Param [enabled]!");
3072 __WDC_LOG_FUNC_END__;
3073 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3076 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3077 "IsPersistentGroupEnabled",
3081 ret = __net_wifidirect_gerror_to_enum(error);
3082 if(ret != WIFI_DIRECT_ERROR_NONE) {
3086 WDC_LOGD("%s() SUCCESS", __func__);
3087 g_variant_get(reply, "(b)", &val);
3089 g_variant_unref(reply);
3091 __WDC_LOG_FUNC_END__;
3092 return WIFI_DIRECT_ERROR_NONE;
3095 int wifi_direct_foreach_persistent_groups(wifi_direct_persistent_group_cb cb,
3098 __WDC_LOG_FUNC_START__;
3100 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3102 GVariant *params = NULL;
3103 GError *error = NULL;
3104 GVariant *reply = NULL;
3105 GVariantIter *iter_groups = NULL;
3106 GVariantIter *iter_group = NULL;
3107 GVariant *var = NULL;
3109 int ret = WIFI_DIRECT_ERROR_NONE;
3111 if (g_client_info.is_registered == false) {
3112 WDC_LOGE("Client is NOT registered");
3113 __WDC_LOG_FUNC_END__;
3114 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3118 WDC_LOGE("NULL Param [callback]!");
3119 __WDC_LOG_FUNC_END__;
3120 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3123 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3124 "GetPersistentGroups", params, &error);
3126 ret = __net_wifidirect_gerror_to_enum(error);
3127 if(ret != WIFI_DIRECT_ERROR_NONE) {
3131 g_variant_get(reply, "(iaa{sv})", &ret, &iter_groups);
3132 if (ret != WIFI_DIRECT_ERROR_NONE) {
3133 __WDC_LOG_FUNC_END__;
3134 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3137 WDC_LOGD("wifi_direct_foreach_persistent_groups() SUCCESS");
3139 while(g_variant_iter_loop(iter_groups, "a{sv}", &iter_group)) {
3140 const char *ssid = NULL;
3141 char *go_mac_address = NULL;
3143 while (g_variant_iter_loop(iter_group, "{sv}", &key, &var)) {
3144 if (!g_strcmp0(key, "SSID")) {
3145 g_variant_get(var, "&s", &ssid);
3147 } else if (!g_strcmp0(key, "GOMacAddress")) {
3148 unsigned char mac_address[MACADDR_LEN] = {0, };
3150 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
3151 go_mac_address = (char*) g_try_malloc0(MACSTR_LEN);
3153 g_snprintf(go_mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
3160 ret = cb(go_mac_address, ssid, user_data);
3161 g_free(go_mac_address);
3162 go_mac_address = NULL;
3164 g_variant_iter_free(iter_group);
3169 g_variant_iter_free(iter_groups);
3170 __WDC_LOG_FUNC_END__;
3171 return WIFI_DIRECT_ERROR_NONE;
3174 int wifi_direct_remove_persistent_group(char *mac_address, const char *ssid)
3176 __WDC_LOG_FUNC_START__;
3178 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3180 GError* error = NULL;
3181 GVariant *reply = NULL;
3182 GVariant *params = NULL;
3183 int ret = WIFI_DIRECT_ERROR_NONE;
3185 if (g_client_info.is_registered == false) {
3186 WDC_LOGE("Client is NOT registered");
3187 __WDC_LOG_FUNC_END__;
3188 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3191 if (!mac_address || !ssid) {
3192 WDC_LOGE("NULL Param");
3193 __WDC_LOG_FUNC_END__;
3194 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3197 params = g_variant_new("(ss)", mac_address, ssid);
3198 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3199 "RemovePersistentGroup",
3203 ret = __net_wifidirect_gerror_to_enum(error);
3204 if(ret == WIFI_DIRECT_ERROR_NONE) {
3205 g_variant_get(reply, "(i)", &ret);
3206 g_variant_unref(reply);
3209 WDC_LOGD("%s() return : [%d]", __func__, ret);
3211 __WDC_LOG_FUNC_END__;
3212 return WIFI_DIRECT_ERROR_NONE;
3215 int wifi_direct_set_p2poem_loglevel(int increase_log_level)
3217 __WDC_LOG_FUNC_START__;
3219 wifi_direct_client_request_s req;
3220 wifi_direct_client_response_s rsp;
3221 int res = WIFI_DIRECT_ERROR_NONE;
3223 if (g_client_info.is_registered == false) {
3224 WDC_LOGE("Client is NOT registered");
3225 __WDC_LOG_FUNC_END__;
3226 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3229 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3230 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3232 req.cmd = WIFI_DIRECT_CMD_SET_OEM_LOGLEVEL;
3233 req.client_id = g_client_info.client_id;
3234 if (increase_log_level == 0)
3235 req.data.int1 = false;
3237 req.data.int1 = true;
3239 res = __wfd_client_send_request(g_client_info.sync_sockfd, &req, &rsp);
3240 if (res != WIFI_DIRECT_ERROR_NONE) {
3241 __WDC_LOG_FUNC_END__;
3245 __WDC_LOG_FUNC_END__;
3246 return WIFI_DIRECT_ERROR_NONE;
3249 int wifi_direct_start_service_discovery(char *mac_address,
3250 wifi_direct_service_type_e type)
3252 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3253 __WDC_LOG_FUNC_START__;
3255 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3257 GError* error = NULL;
3258 GVariant *reply = NULL;
3259 GVariant *params = NULL;
3260 int ret = WIFI_DIRECT_ERROR_NONE;
3262 if (g_client_info.is_registered == false) {
3263 WDC_LOGE("Client is NOT registered.");
3264 __WDC_LOG_FUNC_END__;
3265 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3268 if (type >= WIFI_DIRECT_SERVICE_TYPE_ALL &&
3269 type <= WIFI_DIRECT_SERVICE_TYPE_CONTACT_INFO) {
3270 WDC_LOGD("Param service_type [%d]", type);
3272 WDC_LOGE("Invalid Param [type]!");
3273 __WDC_LOG_FUNC_END__;
3274 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3278 params = g_variant_new("(is)", type, mac_address);
3280 params = g_variant_new("(is)", type, "00:00:00:00:00:00");
3282 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3287 ret = __net_wifidirect_gerror_to_enum(error);
3288 if(ret == WIFI_DIRECT_ERROR_NONE) {
3289 g_variant_get(reply, "(i)", &ret);
3290 g_variant_unref(reply);
3293 WDC_LOGD("%s() return : [%d]", __func__, ret);
3294 __WDC_LOG_FUNC_END__;
3296 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3297 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3298 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3302 int wifi_direct_cancel_service_discovery(char *mac_address,
3303 wifi_direct_service_type_e type)
3305 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3306 __WDC_LOG_FUNC_START__;
3308 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3310 GError* error = NULL;
3311 GVariant *reply = NULL;
3312 GVariant *params = NULL;
3313 int ret = WIFI_DIRECT_ERROR_NONE;
3315 if (g_client_info.is_registered == false) {
3316 WDC_LOGE("Client is NOT registered.");
3317 __WDC_LOG_FUNC_END__;
3318 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3321 if (type >= WIFI_DIRECT_SERVICE_TYPE_ALL &&
3322 type <= WIFI_DIRECT_SERVICE_TYPE_CONTACT_INFO) {
3323 WDC_LOGD("Param service_type [%d]", type);
3325 WDC_LOGE("Invalid Param [type]!");
3326 __WDC_LOG_FUNC_END__;
3327 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3331 params = g_variant_new("(is)", type, mac_address);
3333 params = g_variant_new("(is)", type, "00:00:00:00:00:00");
3335 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3340 ret = __net_wifidirect_gerror_to_enum(error);
3341 if(ret == WIFI_DIRECT_ERROR_NONE) {
3342 g_variant_get(reply, "(i)", &ret);
3343 g_variant_unref(reply);
3346 WDC_LOGD("%s() return : [%d]", __func__, ret);
3347 __WDC_LOG_FUNC_END__;
3349 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3350 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3351 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3354 int wifi_direct_register_service(wifi_direct_service_type_e type, char *info1, char *info2, unsigned int *service_id)
3356 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3357 __WDC_LOG_FUNC_START__;
3359 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3361 GError* error = NULL;
3362 GVariant *reply = NULL;
3363 GVariant *params = NULL;
3365 int ret = WIFI_DIRECT_ERROR_NONE;
3368 if (g_client_info.is_registered == false) {
3369 WDC_LOGE("Client is NOT registered.");
3370 __WDC_LOG_FUNC_END__;
3371 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3374 if (!info1 || !info2) {
3375 WDC_LOGE("info1 or info2 is NULL");
3376 __WDC_LOG_FUNC_END__;
3377 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3380 if (type < WIFI_DIRECT_SERVICE_TYPE_ALL ||
3381 type > WIFI_DIRECT_SERVICE_TYPE_VENDOR) {
3382 WDC_LOGE("Invalid Param [type]!");
3383 __WDC_LOG_FUNC_END__;
3384 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3388 WDC_LOGE("Invalid Param [service_id]!");
3389 __WDC_LOG_FUNC_END__;
3390 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3393 WDC_LOGD("Service type [%d]", type);
3395 len = strlen(info1) + strlen(info2) + 2;
3396 WDC_LOGD("info [%s|%s], len [%d]", info1, info2, len);
3398 buf = g_try_malloc0(len);
3400 WDC_LOGE("Failed to allocate memory for buf");
3401 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
3404 g_snprintf(buf, len, "%s|%s", info1, info2);
3406 params = g_variant_new("(is)", type, buf);
3407 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3412 ret = __net_wifidirect_gerror_to_enum(error);
3413 if(ret != WIFI_DIRECT_ERROR_NONE) {
3420 g_variant_get(reply, "(ii)", &ret, service_id);
3421 g_variant_unref(reply);
3425 WDC_LOGD("%s() return : [%d]", __func__, ret);
3426 __WDC_LOG_FUNC_END__;
3428 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3429 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3430 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3433 int wifi_direct_deregister_service(unsigned int service_id)
3435 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
3436 __WDC_LOG_FUNC_START__;
3438 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_SERVICE_DISCOVERY_FEATURE);
3440 GError* error = NULL;
3441 GVariant *reply = NULL;
3442 GVariant *params = NULL;
3443 int ret = WIFI_DIRECT_ERROR_NONE;
3445 if (g_client_info.is_registered == false) {
3446 WDC_LOGE("Client is NOT registered.");
3447 __WDC_LOG_FUNC_END__;
3448 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3451 params = g_variant_new("(i)", service_id);
3452 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_SERVICE_INTERFACE,
3457 ret = __net_wifidirect_gerror_to_enum(error);
3458 if(ret == WIFI_DIRECT_ERROR_NONE) {
3459 g_variant_get(reply, "(i)", &ret);
3460 g_variant_unref(reply);
3463 WDC_LOGD("%s() return : [%d]", __func__, ret);
3464 __WDC_LOG_FUNC_END__;
3466 #else /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3467 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3468 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
3471 int wifi_direct_init_miracast(bool enable)
3473 __WDC_LOG_FUNC_START__;
3474 int ret = WIFI_DIRECT_ERROR_NONE;
3477 ret = wifi_direct_init_display();
3479 ret = wifi_direct_deinit_display();
3481 __WDC_LOG_FUNC_END__;
3485 int wifi_direct_get_peer_info(char* mac_address, wifi_direct_discovered_peer_info_s** peer_info)
3487 __WDC_LOG_FUNC_START__;
3489 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3491 GVariant *params = NULL;
3492 GError *error = NULL;
3493 GVariant *reply = NULL;
3494 GVariantIter *iter_peer = NULL;
3495 GVariant *var = NULL;
3497 int ret = WIFI_DIRECT_ERROR_NONE;
3499 if (g_client_info.is_registered == false) {
3500 WDC_LOGE("Client is NOT registered");
3501 __WDC_LOG_FUNC_END__;
3502 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3506 WDC_LOGE("mac_addr is NULL");
3507 __WDC_LOG_FUNC_END__;
3508 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3512 WDC_LOGE("peer_info is NULL");
3513 __WDC_LOG_FUNC_END__;
3514 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3517 params = g_variant_new("(s)", mac_address);
3518 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_MANAGE_INTERFACE,
3519 "GetPeerInfo", params, &error);
3521 ret = __net_wifidirect_gerror_to_enum(error);
3522 if(ret != WIFI_DIRECT_ERROR_NONE) {
3526 g_variant_get(reply, "(ia{sv})", &ret, &iter_peer);
3527 if (ret != WIFI_DIRECT_ERROR_NONE) {
3528 __WDC_LOG_FUNC_END__;
3529 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3532 WDC_LOGD("wifi_direct_get_peer() SUCCESS");
3534 wifi_direct_discovered_peer_info_s *peer = NULL;
3536 peer = (wifi_direct_discovered_peer_info_s *) g_try_malloc0(sizeof(wifi_direct_discovered_peer_info_s));
3538 WDC_LOGE("Failed to allocate memory");
3539 __WDC_LOG_FUNC_END__;
3540 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3543 while (g_variant_iter_loop(iter_peer, "{sv}", &key, &var)) {
3544 if (!g_strcmp0(key, "DeviceName")) {
3545 const char *device_name = NULL;
3547 g_variant_get(var, "&s", &device_name);
3548 peer->device_name = g_strndup(device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1);
3550 } else if (!g_strcmp0(key, "DeviceAddress")) {
3551 unsigned char mac_address[MACADDR_LEN] = {0, };
3553 wifi_direct_dbus_unpack_ay(mac_address, var, MACADDR_LEN);
3554 peer->mac_address = (char*) g_try_malloc0(MACSTR_LEN);
3555 if (peer->mac_address)
3556 g_snprintf(peer->mac_address, MACSTR_LEN, MACSTR, MAC2STR(mac_address));
3558 } else if (!g_strcmp0(key, "InterfaceAddress")) {
3559 unsigned char intf_address[MACADDR_LEN] = {0, };
3561 wifi_direct_dbus_unpack_ay(intf_address, var, MACADDR_LEN);
3562 peer->interface_address = (char*) g_try_malloc0(MACSTR_LEN);
3563 if (peer->interface_address)
3564 g_snprintf(peer->interface_address, MACSTR_LEN, MACSTR, MAC2STR(intf_address));
3566 } else if (!g_strcmp0(key, "Channel")) {
3567 peer->channel = g_variant_get_uint16(var);
3569 } else if (!g_strcmp0(key, "IsGroupOwner")) {
3570 peer->is_group_owner = g_variant_get_boolean(var);
3572 } else if (!g_strcmp0(key, "IsPersistentGO")) {
3573 peer->is_persistent_group_owner = g_variant_get_boolean(var);
3575 } else if (!g_strcmp0(key, "IsConnected")) {
3576 peer->is_connected = g_variant_get_boolean(var);
3578 } else if (!g_strcmp0(key, "Category")) {
3579 peer->primary_device_type = g_variant_get_uint16(var);
3581 } else if (!g_strcmp0(key, "SubCategory")) {
3582 peer->secondary_device_type = g_variant_get_uint16(var);
3584 } else if (!g_strcmp0(key, "IsWfdDevice")) {
3585 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3586 peer->is_miracast_device = g_variant_get_boolean(var);
3587 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3595 g_variant_unref(reply);
3596 __WDC_LOG_FUNC_END__;
3597 return WIFI_DIRECT_ERROR_NONE;
3600 int wifi_direct_set_passphrase(const char *passphrase)
3602 __WDC_LOG_FUNC_START__;
3604 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3606 GError* error = NULL;
3607 GVariant *reply = NULL;
3608 GVariant *params = NULL;
3609 int ret = WIFI_DIRECT_ERROR_NONE;
3611 if (g_client_info.is_registered == false) {
3612 WDC_LOGE("Client is NOT registered.");
3613 __WDC_LOG_FUNC_END__;
3614 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3618 WDC_LOGE("NULL Param [passphrase]!");
3619 __WDC_LOG_FUNC_END__;
3620 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3622 WDC_LOGD("passphrase = [%s]", passphrase);
3624 params = g_variant_new("(s)", passphrase);
3625 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3630 ret = __net_wifidirect_gerror_to_enum(error);
3631 if(ret == WIFI_DIRECT_ERROR_NONE) {
3632 g_variant_get(reply, "(i)", &ret);
3633 g_variant_unref(reply);
3636 WDC_LOGD("%s() SUCCESS", __func__);
3638 __WDC_LOG_FUNC_END__;
3639 return WIFI_DIRECT_ERROR_NONE;
3642 int wifi_direct_get_passphrase(char** passphrase)
3644 __WDC_LOG_FUNC_START__;
3646 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3648 GError* error = NULL;
3649 GVariant *reply = NULL;
3650 const char *val = NULL;
3651 int ret = WIFI_DIRECT_ERROR_NONE;
3653 if (g_client_info.is_registered == false) {
3654 WDC_LOGE("Client is NOT registered.");
3655 __WDC_LOG_FUNC_END__;
3656 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3660 WDC_LOGE("NULL Param [passphrase]!");
3661 __WDC_LOG_FUNC_END__;
3662 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3665 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_GROUP_INTERFACE,
3670 ret = __net_wifidirect_gerror_to_enum(error);
3671 if(ret != WIFI_DIRECT_ERROR_NONE) {
3675 WDC_LOGD("%s() SUCCESS", __func__);
3676 g_variant_get(reply, "(i&s)", &ret, &val);
3677 *passphrase = g_strdup(val);
3678 g_variant_unref(reply);
3680 WDC_LOGD("%s() return : [%d]", __func__, ret);
3681 __WDC_LOG_FUNC_END__;
3685 int wifi_direct_set_autoconnection_peer(char *mac_address)
3687 __WDC_LOG_FUNC_START__;
3689 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_FEATURE);
3691 GError* error = NULL;
3692 GVariant *reply = NULL;
3693 GVariant *params = NULL;
3694 int ret = WIFI_DIRECT_ERROR_NONE;
3696 if (g_client_info.is_registered == false) {
3697 WDC_LOGE("Client is NOT registered.");
3698 __WDC_LOG_FUNC_END__;
3699 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3703 WDC_LOGE("NULL Param!");
3704 __WDC_LOG_FUNC_END__;
3705 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3708 params = g_variant_new("(s)", mac_address);
3709 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_CONFIG_INTERFACE,
3710 "SetAutoConnectionPeer",
3714 ret = __net_wifidirect_gerror_to_enum(error);
3715 if(ret == WIFI_DIRECT_ERROR_NONE) {
3716 g_variant_get(reply, "(i)", &ret);
3717 g_variant_unref(reply);
3720 WDC_LOGD("%s() return : [%d]", __func__, ret);
3721 __WDC_LOG_FUNC_END__;
3725 int wifi_direct_init_display(void)
3727 __WDC_LOG_FUNC_START__;
3728 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3730 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3732 GError* error = NULL;
3733 GVariant *reply = NULL;
3734 int ret = WIFI_DIRECT_ERROR_NONE;
3736 if (g_client_info.is_registered == false) {
3737 WDC_LOGE("Client is NOT registered.");
3738 __WDC_LOG_FUNC_END__;
3739 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3742 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3747 ret = __net_wifidirect_gerror_to_enum(error);
3748 if(ret == WIFI_DIRECT_ERROR_NONE) {
3749 g_variant_get(reply, "(i)", &ret);
3750 g_variant_unref(reply);
3753 WDC_LOGD("%s() return : [%d]", __func__, ret);
3754 __WDC_LOG_FUNC_END__;
3756 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3757 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3758 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3761 int wifi_direct_deinit_display(void)
3763 __WDC_LOG_FUNC_START__;
3764 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3766 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3768 GError* error = NULL;
3769 GVariant *reply = NULL;
3770 int ret = WIFI_DIRECT_ERROR_NONE;
3772 if (g_client_info.is_registered == false) {
3773 WDC_LOGE("Client is NOT registered");
3774 __WDC_LOG_FUNC_END__;
3775 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3778 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3783 ret = __net_wifidirect_gerror_to_enum(error);
3784 if(ret == WIFI_DIRECT_ERROR_NONE) {
3785 g_variant_get(reply, "(i)", &ret);
3786 g_variant_unref(reply);
3789 WDC_LOGD("%s() return : [%d]", __func__, ret);
3790 __WDC_LOG_FUNC_END__;
3792 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3793 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3794 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3797 int wifi_direct_set_display(wifi_direct_display_type_e type, int port, int hdcp)
3799 __WDC_LOG_FUNC_START__;
3800 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3802 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3804 GError* error = NULL;
3805 GVariant *reply = NULL;
3806 GVariant *params = NULL;
3807 int ret = WIFI_DIRECT_ERROR_NONE;
3809 if (g_client_info.is_registered == false) {
3810 WDC_LOGE("Client is NOT registered");
3811 __WDC_LOG_FUNC_END__;
3812 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3815 if (type < WIFI_DIRECT_DISPLAY_TYPE_SOURCE ||
3816 type > WIFI_DIRECT_DISPLAY_TYPE_DUAL || port < 0 ||
3818 WDC_LOGE("Invalid paramaeters passed type[%d], port[%d], hdcp[%d]!");
3819 __WDC_LOG_FUNC_END__;
3820 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3823 params = g_variant_new("(iii)", type, port, hdcp);
3824 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3829 ret = __net_wifidirect_gerror_to_enum(error);
3830 if(ret == WIFI_DIRECT_ERROR_NONE) {
3831 g_variant_get(reply, "(i)", &ret);
3832 g_variant_unref(reply);
3835 WDC_LOGD("%s() return : [%d]", __func__, ret);
3836 __WDC_LOG_FUNC_END__;
3838 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3839 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3840 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3843 int wifi_direct_set_display_availability(bool availability)
3845 __WDC_LOG_FUNC_START__;
3846 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3848 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3850 GError* error = NULL;
3851 GVariant *reply = NULL;
3852 GVariant *params = NULL;
3853 int ret = WIFI_DIRECT_ERROR_NONE;
3855 if (g_client_info.is_registered == false) {
3856 WDC_LOGE("Client is NOT registered.");
3857 __WDC_LOG_FUNC_END__;
3858 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3862 params = g_variant_new("(i)", availability);
3863 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3868 ret = __net_wifidirect_gerror_to_enum(error);
3869 if(ret == WIFI_DIRECT_ERROR_NONE) {
3870 g_variant_get(reply, "(i)", &ret);
3871 g_variant_unref(reply);
3874 WDC_LOGD("%s() return : [%d]", __func__, ret);
3875 __WDC_LOG_FUNC_END__;
3877 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3878 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3879 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3882 int wifi_direct_get_peer_display_type(char *mac_address, wifi_direct_display_type_e *type)
3884 __WDC_LOG_FUNC_START__;
3885 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3887 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3889 GError* error = NULL;
3890 GVariant *reply = NULL;
3891 GVariant *params = NULL;
3893 int ret = WIFI_DIRECT_ERROR_NONE;
3895 if (g_client_info.is_registered == false) {
3896 WDC_LOGE("Client is NOT registered");
3897 __WDC_LOG_FUNC_END__;
3898 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3901 if (!mac_address || !type) {
3902 WDC_LOGE("NULL Param!");
3903 __WDC_LOG_FUNC_END__;
3904 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3907 params = g_variant_new("(s)", mac_address);
3908 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3913 ret = __net_wifidirect_gerror_to_enum(error);
3914 if(ret != WIFI_DIRECT_ERROR_NONE) {
3918 g_variant_get(reply, "(ii)", &ret, &val);
3920 g_variant_unref(reply);
3922 WDC_LOGD("%s() return : [%d]", __func__, ret);
3923 __WDC_LOG_FUNC_END__;
3925 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3926 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3927 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3930 int wifi_direct_get_peer_display_availability(char *mac_address, bool *availability)
3932 __WDC_LOG_FUNC_START__;
3933 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3935 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3937 GError* error = NULL;
3938 GVariant *reply = NULL;
3939 GVariant *params = NULL;
3941 int ret = WIFI_DIRECT_ERROR_NONE;
3943 if (g_client_info.is_registered == false) {
3944 WDC_LOGE("Client is NOT registered");
3945 __WDC_LOG_FUNC_END__;
3946 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3949 if (!mac_address || !availability) {
3950 WDC_LOGE("NULL Param!");
3951 __WDC_LOG_FUNC_END__;
3952 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3955 params = g_variant_new("(s)", mac_address);
3956 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
3957 "GetPeerAvailability",
3961 ret = __net_wifidirect_gerror_to_enum(error);
3962 if(ret != WIFI_DIRECT_ERROR_NONE) {
3966 g_variant_get(reply, "(ii)", &ret, &val);
3967 *availability = val;
3968 g_variant_unref(reply);
3970 WDC_LOGD("%s() return : [%d]", __func__, ret);
3971 __WDC_LOG_FUNC_END__;
3973 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
3974 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
3975 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
3978 int wifi_direct_get_peer_display_hdcp(char *mac_address, int *hdcp)
3980 __WDC_LOG_FUNC_START__;
3981 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
3983 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
3985 GError* error = NULL;
3986 GVariant *reply = NULL;
3987 GVariant *params = NULL;
3989 int ret = WIFI_DIRECT_ERROR_NONE;
3991 if (g_client_info.is_registered == false) {
3992 WDC_LOGE("Client is NOT registered");
3993 __WDC_LOG_FUNC_END__;
3994 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3997 if (!mac_address || !hdcp) {
3998 WDC_LOGE("NULL Param!");
3999 __WDC_LOG_FUNC_END__;
4000 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4003 params = g_variant_new("(s)", mac_address);
4004 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
4009 ret = __net_wifidirect_gerror_to_enum(error);
4010 if(ret != WIFI_DIRECT_ERROR_NONE) {
4014 g_variant_get(reply, "(ii)", &ret, &val);
4016 g_variant_unref(reply);
4018 WDC_LOGD("%s() return : [%d]", __func__, ret);
4019 __WDC_LOG_FUNC_END__;
4021 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
4022 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
4023 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
4026 int wifi_direct_get_peer_display_port(char *mac_address, int *port)
4028 __WDC_LOG_FUNC_START__;
4029 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
4031 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
4033 GError* error = NULL;
4034 GVariant *reply = NULL;
4035 GVariant *params = NULL;
4037 int ret = WIFI_DIRECT_ERROR_NONE;
4039 if (g_client_info.is_registered == false) {
4040 WDC_LOGE("Client is NOT registered");
4041 __WDC_LOG_FUNC_END__;
4042 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4045 if (!mac_address || !port) {
4046 WDC_LOGE("NULL Param!");
4047 __WDC_LOG_FUNC_END__;
4048 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4051 params = g_variant_new("(s)", mac_address);
4052 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
4057 ret = __net_wifidirect_gerror_to_enum(error);
4058 if(ret != WIFI_DIRECT_ERROR_NONE) {
4062 g_variant_get(reply, "(ii)", &ret, &val);
4064 g_variant_unref(reply);
4066 WDC_LOGD("%s() return : [%d]", __func__, ret);
4067 __WDC_LOG_FUNC_END__;
4069 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
4070 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
4071 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
4074 int wifi_direct_get_peer_display_throughput(char *mac_address, int *throughput)
4076 __WDC_LOG_FUNC_START__;
4077 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
4079 CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE);
4081 GError* error = NULL;
4082 GVariant *reply = NULL;
4083 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 if (!mac_address || !throughput) {
4094 WDC_LOGE("NULL Param!");
4095 __WDC_LOG_FUNC_END__;
4096 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4099 params = g_variant_new("(s)", mac_address);
4100 reply = wifi_direct_dbus_method_call_sync(WFD_MANAGER_DISPLAY_INTERFACE,
4101 "GetPeerThroughput",
4105 ret = __net_wifidirect_gerror_to_enum(error);
4106 if(ret != WIFI_DIRECT_ERROR_NONE) {
4110 g_variant_get(reply, "(ii)", &ret, &val);
4112 g_variant_unref(reply);
4114 WDC_LOGD("%s() return : [%d]", __func__, ret);
4115 __WDC_LOG_FUNC_END__;
4117 #else /* TIZEN_FEATURE_WIFI_DISPLAY */
4118 return WIFI_DIRECT_ERROR_NOT_SUPPORTED;
4119 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */