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.
24 /*****************************************************************************
26 *****************************************************************************/
32 #include <sys/socket.h>
38 #include <sys/ioctl.h>
41 #include <linux/unistd.h>
46 /*****************************************************************************
47 * Wi-Fi Direct Service headers
48 *****************************************************************************/
49 #include "wifi-direct.h"
50 #include "wifi-direct-client-proxy.h"
51 #include "wifi-direct-internal.h"
53 /*****************************************************************************
55 *****************************************************************************/
57 /*****************************************************************************
59 *****************************************************************************/
60 wifi_direct_client_info_s g_client_info = {
61 .is_registered = FALSE,
65 .activation_cb = NULL,
67 .connection_cb = NULL,
68 .ip_assigned_cb = NULL,
69 .user_data_for_cb_activation = NULL,
70 .user_data_for_cb_discover = NULL,
71 .user_data_for_cb_connection = NULL,
72 .user_data_for_cb_ip_assigned = NULL
75 /*****************************************************************************
76 * Local Functions Definition
77 *****************************************************************************/
78 static int __wfd_client_read_socket(int sockfd, char *dataptr, int datalen);
83 return syscall(__NR_gettid);
86 #error "__NR_gettid is not defined, please include linux/unistd.h"
89 static wifi_direct_client_info_s *__wfd_get_control()
91 return &g_client_info;
94 static void __wfd_reset_control()
97 if (g_client_info.g_source_id > 0)
98 g_source_remove(g_client_info.g_source_id);
99 g_client_info.g_source_id = -1;
101 // Protect standard input / output / error
102 if (g_client_info.sync_sockfd > 2)
103 close(g_client_info.sync_sockfd);
104 g_client_info.sync_sockfd = -1;
106 if (g_client_info.async_sockfd > 2)
107 close(g_client_info.async_sockfd);
108 g_client_info.async_sockfd = -1;
110 g_client_info.is_registered = FALSE;
112 // Initialize callbacks
113 g_client_info.activation_cb = NULL;
114 g_client_info.discover_cb = NULL;
115 g_client_info.connection_cb = NULL;
116 g_client_info.ip_assigned_cb = NULL;
117 g_client_info.user_data_for_cb_activation = NULL;
118 g_client_info.user_data_for_cb_discover = NULL;
119 g_client_info.user_data_for_cb_connection = NULL;
120 g_client_info.user_data_for_cb_ip_assigned = NULL;
124 static int macaddr_atoe(char *p, unsigned char mac[])
128 WDC_LOGD( "macaddr_atoe : input MAC = [%s]\n", p);
132 mac[i++] = (char) strtoul(p, &p, 16);
140 static char *__wfd_print_event(wfd_client_event_e event)
144 case WIFI_DIRECT_CLI_EVENT_ACTIVATION:
147 case WIFI_DIRECT_CLI_EVENT_DEACTIVATION:
148 return "DEACTIVATION";
150 case WIFI_DIRECT_CLI_EVENT_INVALID:
151 return "WIFI_DIRECT_CLI_EVENT_INVALID";
153 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START:
154 return "WIFI_DIRECT_CLI_EVENT_DISCOVER_START";
156 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START_LISTEN_ONLY:
157 return "WIFI_DIRECT_CLI_EVENT_DISCOVER_START_LISTEN_ONLY";
159 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START_SEARCH_LISTEN:
160 return "WIFI_DIRECT_CLI_EVENT_DISCOVER_START_SEARCH_LISTEN";
162 case WIFI_DIRECT_CLI_EVENT_DISCOVER_END:
163 return "WIFI_DIRECT_CLI_EVENT_DISCOVER_END";
165 case WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS:
166 return "WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS";
169 case WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ:
170 return "WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ";
173 case WIFI_DIRECT_CLI_EVENT_CONNECTION_START:
174 return "WIFI_DIRECT_CLI_EVENT_CONNECTION_START";
177 case WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP:
178 return "WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP";
180 case WIFI_DIRECT_CLI_EVENT_CONNECTION_WPS_REQ:
181 return "WIFI_DIRECT_CLI_EVENT_CONNECTION_WPS_REQ";
184 case WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP:
185 return "WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP";
187 case WIFI_DIRECT_CLI_EVENT_DISCONNECTION_IND:
188 return "WIFI_DIRECT_CLI_EVENT_DISCONNECTION_IND";
191 case WIFI_DIRECT_CLI_EVENT_GROUP_CREATE_RSP:
192 return "WIFI_DIRECT_CLI_EVENT_GROUP_CREATE_RSP";
194 case WIFI_DIRECT_CLI_EVENT_GROUP_DESTROY_RSP:
195 return "WIFI_DIRECT_CLI_EVENT_GROUP_DESTROY_RSP";
197 case WIFI_DIRECT_CLI_EVENT_IP_LEASED_IND:
198 return "WIFI_DIRECT_CLI_EVENT_IP_LEASED_IND";
202 return "WIFI_DIRECT_CLI_EVENT_unknown";
207 static char *__wfd_print_error(wifi_direct_error_e error)
211 case WIFI_DIRECT_ERROR_OPERATION_FAILED:
212 return "WIFI_DIRECT_ERROR_OPERATION_FAILED";
213 case WIFI_DIRECT_ERROR_OUT_OF_MEMORY:
214 return "WIFI_DIRECT_ERROR_OUT_OF_MEMORY";
215 case WIFI_DIRECT_ERROR_COMMUNICATION_FAILED:
216 return "WIFI_DIRECT_ERROR_COMMUNICATION_FAILED";
217 case WIFI_DIRECT_ERROR_NOT_PERMITTED:
218 return "WIFI_DIRECT_ERROR_NOT_PERMITTED";
219 case WIFI_DIRECT_ERROR_INVALID_PARAMETER:
220 return "WIFI_DIRECT_ERROR_INVALID_PARAMETER";
221 case WIFI_DIRECT_ERROR_NOT_INITIALIZED:
222 return "WIFI_DIRECT_ERROR_NOT_INITIALIZED";
223 case WIFI_DIRECT_ERROR_TOO_MANY_CLIENT:
224 return "WIFI_DIRECT_ERROR_TOO_MANY_CLIENT";
225 case WIFI_DIRECT_ERROR_RESOURCE_BUSY:
226 return "WIFI_DIRECT_ERROR_RESOURCE_BUSY";
227 case WIFI_DIRECT_ERROR_NONE:
228 return "WIFI_DIRECT_ERROR_NONE";
230 WDC_LOGE("Invalid error value: [%d]", error);
231 return "Invalid error";
235 static int __wfd_convert_client_event(wfd_client_event_e event)
237 __WDC_LOG_FUNC_START__;
241 case WIFI_DIRECT_CLI_EVENT_ACTIVATION:
242 return WIFI_DIRECT_DEVICE_STATE_ACTIVATED;
244 case WIFI_DIRECT_CLI_EVENT_DEACTIVATION:
245 return WIFI_DIRECT_DEVICE_STATE_DEACTIVATED;
248 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START:
249 return WIFI_DIRECT_DISCOVERY_STARTED;
251 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START_LISTEN_ONLY:
252 return WIFI_DIRECT_ONLY_LISTEN_STARTED;
254 case WIFI_DIRECT_CLI_EVENT_DISCOVER_END:
255 return WIFI_DIRECT_DISCOVERY_FINISHED;
257 case WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS:
258 return WIFI_DIRECT_DISCOVERY_FOUND;
261 case WIFI_DIRECT_CLI_EVENT_CONNECTION_START:
262 return WIFI_DIRECT_CONNECTION_IN_PROGRESS;
264 case WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ:
265 return WIFI_DIRECT_CONNECTION_REQ;
267 case WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP:
268 return WIFI_DIRECT_CONNECTION_RSP;
270 case WIFI_DIRECT_CLI_EVENT_CONNECTION_WPS_REQ:
271 return WIFI_DIRECT_CONNECTION_WPS_REQ;
273 case WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP:
274 return WIFI_DIRECT_DISCONNECTION_RSP;
276 case WIFI_DIRECT_CLI_EVENT_DISCONNECTION_IND:
277 return WIFI_DIRECT_DISCONNECTION_IND;
279 case WIFI_DIRECT_CLI_EVENT_DISASSOCIATION_IND:
280 return WIFI_DIRECT_DISASSOCIATION_IND;
282 case WIFI_DIRECT_CLI_EVENT_GROUP_CREATE_RSP:
283 return WIFI_DIRECT_GROUP_CREATED;
285 case WIFI_DIRECT_CLI_EVENT_GROUP_DESTROY_RSP:
286 return WIFI_DIRECT_GROUP_DESTROYED;
288 case WIFI_DIRECT_CLI_EVENT_INVITATION_REQ:
289 return WIFI_DIRECT_INVITATION_REQ;
292 WDC_LOGE("Invalid event : [%d]", event);
296 __WDC_LOG_FUNC_END__;
300 static gboolean __wfd_client_process_event(GIOChannel * source,
301 GIOCondition condition,
304 wfd_client_event_e event = WIFI_DIRECT_CLI_EVENT_INVALID;
305 wifi_direct_client_info_s *client = __wfd_get_control();
306 int sockfd = client->async_sockfd;
307 wifi_direct_client_noti_s client_noti;
308 wifi_direct_error_e error = WIFI_DIRECT_ERROR_NONE;
309 char param1[64] = { 0, };
310 char param2[64] = { 0, };
312 memset(&client_noti, 0, sizeof(wifi_direct_client_noti_s));
315 if (__wfd_client_read_socket(sockfd, (char *) &client_noti,
316 sizeof(wifi_direct_client_noti_s)) <= 0)
318 WDC_LOGE("Error!!! Reading Async Event[%d]", sockfd);
320 __wfd_reset_control();
321 __WDC_LOG_FUNC_END__;
325 WDC_LOGD( "Received Event is [%d,%s], error[%d]\n",
326 client_noti.event, __wfd_print_event(client_noti.event),
329 event = client_noti.event;
330 error = client_noti.error;
331 memcpy(param1, client_noti.param1, sizeof(client_noti.param1));
332 memcpy(param2, client_noti.param2, sizeof(client_noti.param2));
339 case WIFI_DIRECT_CLI_EVENT_ACTIVATION:
340 case WIFI_DIRECT_CLI_EVENT_DEACTIVATION:
341 if (client->activation_cb != NULL)
342 client->activation_cb(error,
343 (wifi_direct_device_state_e)
344 __wfd_convert_client_event(event),
345 client->user_data_for_cb_activation);
347 WDC_LOGE("activation_cb is NULL!!");
350 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START:
351 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START_LISTEN_ONLY:
352 case WIFI_DIRECT_CLI_EVENT_DISCOVER_START_SEARCH_LISTEN:
353 case WIFI_DIRECT_CLI_EVENT_DISCOVER_END:
354 case WIFI_DIRECT_CLI_EVENT_DISCOVER_FOUND_PEERS:
355 if (client->discover_cb != NULL)
356 client->discover_cb(error,
357 (wifi_direct_discovery_state_e)
358 __wfd_convert_client_event(event),
359 client->user_data_for_cb_discover);
361 WDC_LOGE("discover_cb is NULL!!");
364 case WIFI_DIRECT_CLI_EVENT_CONNECTION_START:
365 case WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ:
366 case WIFI_DIRECT_CLI_EVENT_CONNECTION_RSP:
367 case WIFI_DIRECT_CLI_EVENT_DISCONNECTION_RSP:
368 case WIFI_DIRECT_CLI_EVENT_CONNECTION_WPS_REQ:
369 case WIFI_DIRECT_CLI_EVENT_DISCONNECTION_IND:
370 case WIFI_DIRECT_CLI_EVENT_DISASSOCIATION_IND:
371 case WIFI_DIRECT_CLI_EVENT_GROUP_CREATE_RSP:
372 case WIFI_DIRECT_CLI_EVENT_GROUP_DESTROY_RSP:
373 case WIFI_DIRECT_CLI_EVENT_INVITATION_REQ:
374 if (client->connection_cb != NULL)
375 client->connection_cb(error,
376 (wifi_direct_connection_state_e)
377 __wfd_convert_client_event(event), param1,
378 client->user_data_for_cb_connection);
380 WDC_LOGE("connection_cb is NULL!!");
383 // ToDo: Handling IP lease event...
384 case WIFI_DIRECT_CLI_EVENT_IP_LEASED_IND:
385 if (client->ip_assigned_cb != NULL)
388 ifname = vconf_get_str(VCONFKEY_IFNAME);
391 WDC_LOGD("vconf (%s) value is NULL!!!", VCONFKEY_IFNAME);
393 WDC_LOGD("VCONFKEY_IFNAME(%s) : %s", VCONFKEY_IFNAME, ifname);
395 client->ip_assigned_cb(param1,
398 client->user_data_for_cb_ip_assigned);
402 WDC_LOGE("ip_assigned_cb is NULL!!");
409 __WDC_LOG_FUNC_END__;
414 static wifi_direct_error_e __wfd_client_send_request(int sockfd, void *req_data, int dataLength)
418 __WDC_LOG_FUNC_START__;
422 WDC_LOGD("Write [%d] bytes to socket [%d].", dataLength, sockfd);
424 retval = write(sockfd, (char *) req_data, dataLength);
428 WDC_LOGE("Error!!! writing to the socket. Error = %s", strerror(errno));
429 __WDC_LOG_FUNC_END__;
430 return WIFI_DIRECT_ERROR_NONE;
433 __WDC_LOG_FUNC_END__;
434 return WIFI_DIRECT_ERROR_NONE;
437 WDC_LOGE("Error!!! Invalid sockfd [%d]", sockfd);
438 __WDC_LOG_FUNC_END__;
439 return WIFI_DIRECT_ERROR_NONE;
442 static wifi_direct_error_e __wfd_client_async_event_init(int clientid)
446 struct sockaddr_un servAddr;
447 char *path = "/tmp/wfd_client_socket";
449 wifi_direct_client_info_s *client_info = __wfd_get_control();
451 __WDC_LOG_FUNC_START__;
454 if ((sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
456 WDC_LOGE("Error!!! creating async socket. Error = [%s].", strerror(errno));
457 __WDC_LOG_FUNC_END__;
458 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
461 WDC_LOGD("Created async socket [%d]", sockfd);
463 memset(&servAddr, 0, sizeof(servAddr));
464 servAddr.sun_family = AF_UNIX;
465 strcpy(servAddr.sun_path, path);
466 len = sizeof(servAddr.sun_family) + strlen(path);
468 WDC_LOGD("Connecting to server socket to register async socket [%d]", sockfd);
470 if ((connect(sockfd, (struct sockaddr *) &servAddr, len)) < 0)
472 WDC_LOGE("Error!!! connecting to server socket. Error = [%s].", strerror(errno));
474 __WDC_LOG_FUNC_END__;
475 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
479 wifi_direct_client_request_s req;
480 int result = WIFI_DIRECT_ERROR_NONE;
482 memset(&req, 0, sizeof(wifi_direct_client_request_s));
484 req.cmd = WIFI_DIRECT_CMD_INIT_ASYNC_SOCKET;
485 req.client_id = clientid;
488 __wfd_client_send_request(sockfd, &req, sizeof(wifi_direct_client_request_s));
490 if (result != WIFI_DIRECT_ERROR_NONE)
492 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
493 WDC_LOGE("Error!!! [%s]", __wfd_print_error(result));
495 __WDC_LOG_FUNC_END__;
499 client_info->async_sockfd = sockfd;
501 WDC_LOGE("Async socket is created= %d", sockfd);
509 static int __wfd_client_read_socket(int sockfd, char *dataptr, int datalen)
512 struct pollfd pollfd;
513 int timeout = 60000; /** for 60 sec */
515 int total_data_recd = 0;
517 __WDC_LOG_FUNC_START__;
521 WDC_LOGE("Error!!! Invalid socket FD [%d]", sockfd);
522 __WDC_LOG_FUNC_END__;
526 if ((dataptr == NULL) || (datalen <= 0))
528 WDC_LOGE("Error!!! Invalid parameter");
529 __WDC_LOG_FUNC_END__;
533 WDC_LOGE("@@@@@@@ len = %d @@@@@@@@@@@", datalen);
536 pollfd.events = POLLIN | POLLERR | POLLHUP;
537 pollret = poll(&pollfd, 1, timeout);
539 WDC_LOGE("POLL ret = %d", pollret);
543 if (pollfd.revents == POLLIN)
550 retval = read(sockfd, (char *) dataptr, datalen);
551 WDC_LOGE("sockfd %d retval %d", sockfd,
555 WDC_LOGE("Error!!! reading data, error [%s]", strerror(errno));
556 __WDC_LOG_FUNC_END__;
559 total_data_recd += retval;
563 __WDC_LOG_FUNC_END__;
564 return total_data_recd;
566 else if (pollfd.revents & POLLHUP)
569 __WDC_LOG_FUNC_END__;
572 else if (pollfd.revents & POLLERR)
575 __WDC_LOG_FUNC_END__;
579 else if (pollret == 0)
581 WDC_LOGE("POLLing timeout");
582 __WDC_LOG_FUNC_END__;
587 WDC_LOGE("Polling unknown error");
588 __WDC_LOG_FUNC_END__;
591 __WDC_LOG_FUNC_END__;
596 static int __wfd_client_read_more_data(int sockfd, void *pData, int Datalen)
600 __WDC_LOG_FUNC_START__;
604 WDC_LOGE("Error!!! Inavlid argument passed");
605 __WDC_LOG_FUNC_END__;
606 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
611 WDC_LOGE("Error!!! Inavlid argument passed");
612 __WDC_LOG_FUNC_END__;
613 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
618 WDC_LOGE("Error!!! Inavlid argument passed");
619 __WDC_LOG_FUNC_END__;
620 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
623 /** Initialising the structure variable */
624 memset(pData, 0, Datalen);
626 retval = __wfd_client_read_socket(sockfd, (char *) pData, Datalen);
629 WDC_LOGE("Error!!! reading response from CM. errno = [%d]", errno);
630 __WDC_LOG_FUNC_END__;
631 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
634 __WDC_LOG_FUNC_END__;
635 return WIFI_DIRECT_ERROR_NONE;
638 void __wfd_client_print_entry_list(wfd_discovery_entry_s * list, int num)
642 WDC_LOGD("------------------------------------------");
643 for (i = 0; i < num; i++)
645 WDC_LOGD("== Peer index : %d ==", i);
646 WDC_LOGD("is Group Owner ? %s", list[i].is_group_owner ? "YES" : "NO");
647 WDC_LOGD("device_name : %s", list[i].device_name);
648 WDC_LOGD("MAC address : "MACSTR, MAC2STR(list[i].mac_address));
649 WDC_LOGD("wps cfg method : %x", list[i].wps_cfg_methods);
651 WDC_LOGD("------------------------------------------");
654 void __wfd_client_print_connected_peer_info(wfd_connected_peer_info_s * list, int num)
658 WDC_LOGD("------------------------------------------\n");
659 for (i = 0; i < num; i++)
661 WDC_LOGD("== Peer index : %d ==\n", i);
662 WDC_LOGD("device_name : %s\n", list[i].device_name);
663 WDC_LOGD("Device MAC : " MACSTR "\n", MAC2STR(list[i].mac_address));
664 WDC_LOGD("Interface MAC : " MACSTR "\n", MAC2STR(list[i].intf_mac_address));
665 WDC_LOGD("services : %d\n", list[i].services);
666 WDC_LOGD("is_p2p : %d\n", list[i].is_p2p);
667 WDC_LOGD("category : %d\n", list[i].category);
668 WDC_LOGD("channel : %d\n", list[i].channel);
669 WDC_LOGD("IP ["IPSTR"]\n", IP2STR(list[i].ip_address));
671 WDC_LOGD("------------------------------------------\n");
675 void __wfd_client_print_persistent_group_info(wfd_persistent_group_info_s * list, int num)
679 WDC_LOGD("------------------------------------------\n");
680 for (i = 0; i < num; i++)
682 WDC_LOGD("== Persistent Group index : %d ==\n", i);
683 WDC_LOGD("ssid : %s\n", list[i].ssid);
684 WDC_LOGD("GO MAC : " MACSTR "\n",
685 MAC2STR(list[i].go_mac_address));
687 WDC_LOGD("------------------------------------------\n");
692 void __wfd_client_print_config_data(wfd_config_data_s * config)
697 WDC_LOGD("Operating channel = [%d]\n", config->channel);
698 WDC_LOGD("WPS method = [%d, %s]\n", config->wps_config,
699 (config->wps_config == WIFI_DIRECT_WPS_TYPE_PBC) ?
700 "Pushbutton" : (config-> wps_config == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY)
701 ? "Display" : "Keypad");
703 WDC_LOGD("Max client = [%d]\n", config->max_clients);
704 WDC_LOGD("grp_owner_intent = [%d]\n", config->group_owner_intent);
705 WDC_LOGD("hide-SSID = [%d]\n", config->hide_SSID);
706 WDC_LOGD("want_persistent_group = [%d]\n", config->want_persistent_group);
707 WDC_LOGD("auto_connection = [%d]\n", config->auto_connection);
708 WDC_LOGD("primary_dev_type = [%d]\n", config->primary_dev_type);
709 WDC_LOGD("secondary_dev_type = [%d]\n",
710 config->secondary_dev_type);
715 int wifi_direct_initialize(void)
717 struct sockaddr_un servAddr;
718 char *path = "/tmp/wfd_client_socket";
719 wifi_direct_client_info_s *client_info = __wfd_get_control();
724 __WDC_LOG_FUNC_START__;
726 if (client_info->is_registered == TRUE)
728 WDC_LOGE("Warning!!! Already registered\nUpdate user data and callback!");
729 __WDC_LOG_FUNC_END__;
730 return WIFI_DIRECT_ERROR_NONE;
734 sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
737 WDC_LOGE("Error!!! creating sync socket. Error = [%s].", strerror(errno));
738 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
741 WDC_LOGD("Created sync socket [%d]", sockfd);
743 memset(&servAddr, 0, sizeof(servAddr));
744 servAddr.sun_family = AF_UNIX;
745 strcpy(servAddr.sun_path, path);
746 len = sizeof(servAddr.sun_family) + strlen(path);
748 WDC_LOGD("Connecting to server socket to register sync socket [%d]", sockfd);
751 while (retry_count > 0)
754 ret = connect(sockfd, (struct sockaddr *) &servAddr, len);
756 WDC_LOGD("Succeeded to connect to server socket");
759 WDC_LOGD("Launching wfd-server..\n");
760 ret = system("dbus-send --system --print-reply --dest=net.netconfig /net/netconfig/wifi net.netconfig.wifi.LaunchDirect");
762 WDC_LOGE("Error!!! sending dbus msg Error = [%s]", strerror(errno));
764 usleep(100000); /* wait a few seconds before retrying the next socket connection */
769 WDC_LOGE("Error!!! connecting to server socket. Error = [%d] %s.\n",
770 errno, strerror(errno));
774 __WDC_LOG_FUNC_END__;
775 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
779 wifi_direct_client_request_s req;
780 wifi_direct_client_response_s resp;
782 int status = WIFI_DIRECT_ERROR_NONE;
784 memset(&req, 0, sizeof(wifi_direct_client_request_s));
785 memset(&resp, 0, sizeof(wifi_direct_client_response_s));
787 req.cmd = WIFI_DIRECT_CMD_REGISTER;
788 req.client_id = gettid();
789 WDC_LOGD("Client ID = %d\n", req.client_id);
791 status = __wfd_client_send_request(sockfd, &req, sizeof(wifi_direct_client_request_s));
793 if (status != WIFI_DIRECT_ERROR_NONE)
795 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
796 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
799 __WDC_LOG_FUNC_END__;
800 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
804 if ((status = __wfd_client_read_socket(sockfd, (char *) &resp,
805 sizeof(wifi_direct_client_response_s))) <= 0)
807 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
810 __WDC_LOG_FUNC_END__;
811 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
815 if (resp.cmd == WIFI_DIRECT_CMD_REGISTER)
817 if (resp.result == WIFI_DIRECT_ERROR_NONE)
819 WDC_LOGD("Client ID received = %d \n",
821 WDC_LOGD("Connected sync socket %d to the wifi direct server socket\n",
823 client_info->sync_sockfd = sockfd;
824 client_info->client_id = resp.client_id;
825 client_info->is_registered = TRUE;
829 WDC_LOGE("Error!!! Client Register = %d\n", resp.result);
832 __WDC_LOG_FUNC_END__;
836 int async_sockfd = -1;
837 /* Send request for establishing async communication channel */
838 async_sockfd = __wfd_client_async_event_init(client_info->client_id);
839 if (async_sockfd == WIFI_DIRECT_ERROR_COMMUNICATION_FAILED)
841 WDC_LOGE("Error!!! creating Async Socket \n");
844 __wfd_reset_control();
845 __WDC_LOG_FUNC_END__;
846 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
849 client_info->async_sockfd = async_sockfd;
853 WDC_LOGE("Error!!! Invalid Response received from wfd Server. cmd = %d \n",
857 __WDC_LOG_FUNC_END__;
858 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
863 GIOChannel *gio = g_io_channel_unix_new(client_info->async_sockfd);
866 g_io_add_watch(gio, G_IO_IN | G_IO_ERR | G_IO_HUP,
867 (GIOFunc) __wfd_client_process_event, NULL);
869 g_io_channel_unref(gio);
871 WDC_LOGD("Scoket is successfully registered to g_main_loop.\n");
873 client_info->g_source_id = g_source_id;
875 // Initialize callbacks
876 client_info->activation_cb = NULL;
877 client_info->discover_cb = NULL;
878 client_info->connection_cb = NULL;
879 client_info->ip_assigned_cb = NULL;
880 client_info->user_data_for_cb_activation = NULL;
881 client_info->user_data_for_cb_discover = NULL;
882 client_info->user_data_for_cb_connection = NULL;
883 client_info->user_data_for_cb_ip_assigned = NULL;
885 __WDC_LOG_FUNC_END__;
886 return WIFI_DIRECT_ERROR_NONE;
891 int wifi_direct_deinitialize(void)
893 wifi_direct_client_info_s *client_info = __wfd_get_control();
895 __WDC_LOG_FUNC_START__;
897 if (client_info->is_registered == false)
899 WDC_LOGE("Client is already deregistered.\n");
900 __WDC_LOG_FUNC_END__;
901 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
904 client_info->activation_cb = NULL;
905 client_info->discover_cb = NULL;
906 client_info->connection_cb = NULL;
907 client_info->ip_assigned_cb = NULL;
908 client_info->user_data_for_cb_activation = NULL;
909 client_info->user_data_for_cb_discover = NULL;
910 client_info->user_data_for_cb_connection = NULL;
911 client_info->user_data_for_cb_ip_assigned = NULL;
913 wifi_direct_client_request_s req;
914 wifi_direct_client_response_s rsp;
916 int status = WIFI_DIRECT_ERROR_NONE;
918 memset(&req, 0, sizeof(wifi_direct_client_request_s));
919 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
921 req.cmd = WIFI_DIRECT_CMD_DEREGISTER;
922 req.client_id = client_info->client_id;
925 __wfd_client_send_request(client_info->sync_sockfd, &req,
926 sizeof(wifi_direct_client_request_s));
927 if (status != WIFI_DIRECT_ERROR_NONE)
929 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
930 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
931 client_info->sync_sockfd = -1;
932 __wfd_reset_control();
933 __WDC_LOG_FUNC_END__;
934 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
938 // Deinit protocol: Send the deregister cmd and wait for socket close...
941 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
942 sizeof(wifi_direct_client_response_s))) <= 0)
944 WDC_LOGD( "Deinit Successfull\n");
946 if (client_info->g_source_id > 0)
947 g_source_remove(client_info->g_source_id);
948 client_info->g_source_id = -1;
950 close(client_info->sync_sockfd);
951 client_info->sync_sockfd = -1;
952 __wfd_reset_control();
953 __WDC_LOG_FUNC_END__;
954 return WIFI_DIRECT_ERROR_NONE;
958 if (rsp.cmd == WIFI_DIRECT_CMD_DEREGISTER)
960 if (rsp.result != WIFI_DIRECT_ERROR_NONE) {
961 WDC_LOGE("Error!!! Result received = %d\n", rsp.result);
962 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
964 WDC_LOGD("Deinit Successfull\n");
966 if (client_info->g_source_id > 0)
967 g_source_remove(client_info->g_source_id);
968 client_info->g_source_id = -1;
970 close(client_info->sync_sockfd);
971 client_info->sync_sockfd = -1;
972 __wfd_reset_control();
973 __WDC_LOG_FUNC_END__;
974 return WIFI_DIRECT_ERROR_NONE;
978 WDC_LOGE("Error.. Something wrong...!!!\n");
981 __wfd_reset_control();
983 __WDC_LOG_FUNC_END__;
984 return WIFI_DIRECT_ERROR_NONE;
988 int wifi_direct_set_device_state_changed_cb(wifi_direct_device_state_changed_cb
991 wifi_direct_client_info_s *client_info = __wfd_get_control();
993 __WDC_LOG_FUNC_START__;
997 WDC_LOGE("Callback is NULL.\n");
998 __WDC_LOG_FUNC_END__;
999 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1002 if (client_info->is_registered == false)
1004 WDC_LOGE("Client is not initialized.\n");
1005 __WDC_LOG_FUNC_END__;
1006 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1009 client_info->activation_cb = cb;
1010 client_info->user_data_for_cb_activation = user_data;
1012 return WIFI_DIRECT_ERROR_NONE;
1016 int wifi_direct_unset_device_state_changed_cb(void)
1018 wifi_direct_client_info_s *client_info = __wfd_get_control();
1020 __WDC_LOG_FUNC_START__;
1022 if (client_info->is_registered == false)
1024 WDC_LOGE("Client is not initialized.\n");
1025 __WDC_LOG_FUNC_END__;
1026 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1029 client_info->activation_cb = NULL;
1030 client_info->user_data_for_cb_activation = NULL;
1032 return WIFI_DIRECT_ERROR_NONE;
1037 wifi_direct_set_discovery_state_changed_cb
1038 (wifi_direct_discovery_state_chagned_cb cb, void *user_data)
1040 wifi_direct_client_info_s *client_info = __wfd_get_control();
1042 __WDC_LOG_FUNC_START__;
1046 WDC_LOGE("Callback is NULL.\n");
1047 __WDC_LOG_FUNC_END__;
1048 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1051 if (client_info->is_registered == false)
1053 WDC_LOGE("Client is not initialized.\n");
1054 __WDC_LOG_FUNC_END__;
1055 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1058 client_info->discover_cb = cb;
1059 client_info->user_data_for_cb_discover = user_data;
1061 return WIFI_DIRECT_ERROR_NONE;
1065 int wifi_direct_unset_discovery_state_changed_cb(void)
1067 wifi_direct_client_info_s *client_info = __wfd_get_control();
1069 __WDC_LOG_FUNC_START__;
1071 if (client_info->is_registered == false)
1073 WDC_LOGE("Client is not initialized.\n");
1074 __WDC_LOG_FUNC_END__;
1075 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1078 client_info->discover_cb = NULL;
1079 client_info->user_data_for_cb_discover = NULL;
1081 return WIFI_DIRECT_ERROR_NONE;
1086 wifi_direct_set_connection_state_changed_cb
1087 (wifi_direct_connection_state_changed_cb cb, void *user_data)
1089 wifi_direct_client_info_s *client_info = __wfd_get_control();
1091 __WDC_LOG_FUNC_START__;
1095 WDC_LOGE("Callback is NULL.\n");
1096 __WDC_LOG_FUNC_END__;
1097 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1100 if (client_info->is_registered == false)
1102 WDC_LOGE("Client is not initialized.\n");
1103 __WDC_LOG_FUNC_END__;
1104 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1107 client_info->connection_cb = cb;
1108 client_info->user_data_for_cb_connection = user_data;
1110 __WDC_LOG_FUNC_END__;
1111 return WIFI_DIRECT_ERROR_NONE;
1115 int wifi_direct_unset_connection_state_changed_cb(void)
1117 wifi_direct_client_info_s *client_info = __wfd_get_control();
1119 __WDC_LOG_FUNC_START__;
1121 if (client_info->is_registered == false)
1123 WDC_LOGE("Client is not initialized.\n");
1124 __WDC_LOG_FUNC_END__;
1125 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1128 client_info->connection_cb = NULL;
1129 client_info->user_data_for_cb_connection = NULL;
1131 __WDC_LOG_FUNC_END__;
1132 return WIFI_DIRECT_ERROR_NONE;
1136 int wifi_direct_set_client_ip_address_assigned_cb(wifi_direct_client_ip_address_assigned_cb cb, void* user_data)
1138 wifi_direct_client_info_s *client_info = __wfd_get_control();
1140 __WDC_LOG_FUNC_START__;
1144 WDC_LOGE("Callback is NULL.\n");
1145 __WDC_LOG_FUNC_END__;
1146 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1149 if (client_info->is_registered == false)
1151 WDC_LOGE("Client is not initialized.\n");
1152 __WDC_LOG_FUNC_END__;
1153 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1156 client_info->ip_assigned_cb = cb;
1157 client_info->user_data_for_cb_ip_assigned = user_data;
1159 __WDC_LOG_FUNC_END__;
1160 return WIFI_DIRECT_ERROR_NONE;
1163 int wifi_direct_unset_client_ip_address_assigned_cb(void)
1165 wifi_direct_client_info_s *client_info = __wfd_get_control();
1167 __WDC_LOG_FUNC_START__;
1169 if (client_info->is_registered == false)
1171 WDC_LOGE("Client is not initialized.\n");
1172 __WDC_LOG_FUNC_END__;
1173 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1176 client_info->ip_assigned_cb = NULL;
1177 client_info->user_data_for_cb_ip_assigned = NULL;
1179 __WDC_LOG_FUNC_END__;
1180 return WIFI_DIRECT_ERROR_NONE;
1184 int wifi_direct_activate(void)
1186 wifi_direct_client_info_s *client_info = __wfd_get_control();
1188 __WDC_LOG_FUNC_START__;
1190 if ((client_info->is_registered == false)
1191 || (client_info->client_id == WFD_INVALID_ID))
1193 WDC_LOGE("Client is NOT registered.\n");
1194 __WDC_LOG_FUNC_END__;
1195 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1198 wifi_direct_client_request_s req;
1199 wifi_direct_client_response_s rsp;
1201 int status = WIFI_DIRECT_ERROR_NONE;
1203 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1204 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1206 req.cmd = WIFI_DIRECT_CMD_ACTIVATE;
1207 req.client_id = client_info->client_id;
1210 __wfd_client_send_request(client_info->sync_sockfd, &req,
1211 sizeof(wifi_direct_client_request_s));
1212 if (status != WIFI_DIRECT_ERROR_NONE)
1214 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
1215 WDC_LOGE("Error!!! [%s]\n",
1216 __wfd_print_error(status));
1217 client_info->sync_sockfd = -1;
1218 __wfd_reset_control();
1219 __WDC_LOG_FUNC_END__;
1220 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1224 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1225 sizeof(wifi_direct_client_response_s))) <= 0)
1227 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
1228 client_info->sync_sockfd = -1;
1229 __wfd_reset_control();
1230 __WDC_LOG_FUNC_END__;
1231 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1235 if (rsp.cmd == WIFI_DIRECT_CMD_ACTIVATE)
1237 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1239 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1240 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
1241 __WDC_LOG_FUNC_END__;
1246 WDC_LOGE("Activating device is successfull.\n");
1251 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1253 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1257 __WDC_LOG_FUNC_END__;
1258 return WIFI_DIRECT_ERROR_NONE;
1261 int wifi_direct_deactivate(void)
1263 wifi_direct_client_info_s *client_info = __wfd_get_control();
1265 __WDC_LOG_FUNC_START__;
1267 if ((client_info->is_registered == false)
1268 || (client_info->client_id == WFD_INVALID_ID))
1270 WDC_LOGE("Client is NOT registered.\n");
1271 __WDC_LOG_FUNC_END__;
1272 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1275 wifi_direct_client_request_s req;
1276 wifi_direct_client_response_s rsp;
1278 int status = WIFI_DIRECT_ERROR_NONE;
1280 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1281 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1283 req.cmd = WIFI_DIRECT_CMD_DEACTIVATE;
1284 req.client_id = client_info->client_id;
1287 __wfd_client_send_request(client_info->sync_sockfd, &req,
1288 sizeof(wifi_direct_client_request_s));
1289 if (status != WIFI_DIRECT_ERROR_NONE)
1291 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
1292 WDC_LOGE("Error!!! [%s]\n",
1293 __wfd_print_error(status));
1294 client_info->sync_sockfd = -1;
1295 __wfd_reset_control();
1296 __WDC_LOG_FUNC_END__;
1297 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1301 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1302 sizeof(wifi_direct_client_response_s))) <= 0)
1304 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
1305 client_info->sync_sockfd = -1;
1306 __wfd_reset_control();
1307 __WDC_LOG_FUNC_END__;
1308 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1312 if (rsp.cmd == WIFI_DIRECT_CMD_DEACTIVATE)
1314 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1316 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1317 WDC_LOGE("Error!!! [%s]\n",
1318 __wfd_print_error(rsp.result));
1319 __WDC_LOG_FUNC_END__;
1324 WDC_LOGE("Device Deactivated! \n");
1329 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1331 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1335 __WDC_LOG_FUNC_END__;
1336 return WIFI_DIRECT_ERROR_NONE;
1339 int wifi_direct_start_discovery(bool listen_only, int timeout)
1341 wifi_direct_client_info_s *client_info = __wfd_get_control();
1343 __WDC_LOG_FUNC_START__;
1345 if ((client_info->is_registered == false)
1346 || (client_info->client_id == WFD_INVALID_ID))
1348 WDC_LOGE("Client is NOT registered.\n");
1349 __WDC_LOG_FUNC_END__;
1350 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1355 WDC_LOGE("Nagative value. Param [timeout]!\n");
1356 __WDC_LOG_FUNC_END__;
1357 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1360 wifi_direct_client_request_s req;
1361 wifi_direct_client_response_s rsp;
1363 int status = WIFI_DIRECT_ERROR_NONE;
1365 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1366 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1368 req.cmd = WIFI_DIRECT_CMD_START_DISCOVERY;
1369 req.client_id = client_info->client_id;
1370 req.data.listen_only = listen_only;
1371 req.data.timeout = timeout;
1373 WDC_LOGE("listen only (%d) timeout (%d) \n",
1374 listen_only, timeout);
1377 __wfd_client_send_request(client_info->sync_sockfd, &req,
1378 sizeof(wifi_direct_client_request_s));
1379 if (status != WIFI_DIRECT_ERROR_NONE)
1381 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
1382 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
1383 client_info->sync_sockfd = -1;
1384 __wfd_reset_control();
1385 __WDC_LOG_FUNC_END__;
1386 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1390 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1391 sizeof(wifi_direct_client_response_s))) <= 0)
1393 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
1394 client_info->sync_sockfd = -1;
1395 __wfd_reset_control();
1396 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1400 if (rsp.cmd == WIFI_DIRECT_CMD_START_DISCOVERY)
1402 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1404 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1405 WDC_LOGE("Error!!! [%s]\n",
1406 __wfd_print_error(rsp.result));
1407 __WDC_LOG_FUNC_END__;
1412 WDC_LOGE("wifi_direct_start_discovery() SUCCESS \n");
1417 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1419 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1423 __WDC_LOG_FUNC_END__;
1425 return WIFI_DIRECT_ERROR_NONE;
1428 int wifi_direct_cancel_discovery(void)
1430 wifi_direct_client_info_s *client_info = __wfd_get_control();
1432 __WDC_LOG_FUNC_START__;
1434 if ((client_info->is_registered == false)
1435 || (client_info->client_id == WFD_INVALID_ID))
1437 WDC_LOGE("Client is NOT registered.\n");
1438 __WDC_LOG_FUNC_END__;
1439 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1442 wifi_direct_client_request_s req;
1443 wifi_direct_client_response_s rsp;
1445 int status = WIFI_DIRECT_ERROR_NONE;
1447 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1448 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1450 req.cmd = WIFI_DIRECT_CMD_CANCEL_DISCOVERY;
1451 req.client_id = client_info->client_id;
1454 __wfd_client_send_request(client_info->sync_sockfd, &req,
1455 sizeof(wifi_direct_client_request_s));
1456 if (status != WIFI_DIRECT_ERROR_NONE)
1458 WDC_LOGE("Error!!! writing to socket, Errno = %s\n",
1460 WDC_LOGE("Error!!! [%s]\n",
1461 __wfd_print_error(status));
1462 client_info->sync_sockfd = -1;
1463 __wfd_reset_control();
1464 __WDC_LOG_FUNC_END__;
1465 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1469 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1470 sizeof(wifi_direct_client_response_s))) <= 0)
1472 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
1473 status, strerror(errno));
1474 client_info->sync_sockfd = -1;
1475 __wfd_reset_control();
1476 __WDC_LOG_FUNC_END__;
1477 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1481 if (rsp.cmd == WIFI_DIRECT_CMD_CANCEL_DISCOVERY)
1483 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1485 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1486 WDC_LOGE("Error!!! [%s]\n",
1487 __wfd_print_error(rsp.result));
1488 __WDC_LOG_FUNC_END__;
1493 WDC_LOGE("wifi_direct_cancel_discovery() SUCCESS \n");
1498 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1500 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1504 __WDC_LOG_FUNC_END__;
1506 return WIFI_DIRECT_ERROR_NONE;
1510 int wifi_direct_foreach_discovered_peers(wifi_direct_discovered_peer_cb callback, void *user_data)
1512 wifi_direct_client_info_s *client_info = __wfd_get_control();
1514 __WDC_LOG_FUNC_START__;
1516 if ((client_info->is_registered == false)
1517 || (client_info->client_id == WFD_INVALID_ID))
1519 WDC_LOGE("Client is NOT registered.\n");
1520 __WDC_LOG_FUNC_END__;
1521 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1524 if (callback == NULL)
1526 WDC_LOGE("NULL Param [callback]!\n");
1527 __WDC_LOG_FUNC_END__;
1528 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1531 wifi_direct_client_request_s req;
1532 wifi_direct_client_response_s rsp;
1535 int status = WIFI_DIRECT_ERROR_NONE;
1537 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1538 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1540 req.cmd = WIFI_DIRECT_CMD_GET_DISCOVERY_RESULT;
1541 req.client_id = client_info->client_id;
1544 __wfd_client_send_request(client_info->sync_sockfd, &req,
1545 sizeof(wifi_direct_client_request_s));
1546 if (status != WIFI_DIRECT_ERROR_NONE)
1548 WDC_LOGE("Error!!! writing to socket, Errno = %s\n",
1550 WDC_LOGE("Error!!! [%s]\n",
1551 __wfd_print_error(status));
1552 client_info->sync_sockfd = -1;
1553 __wfd_reset_control();
1554 __WDC_LOG_FUNC_END__;
1555 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1559 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1560 sizeof(wifi_direct_client_response_s))) <= 0)
1562 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
1563 status, strerror(errno));
1564 client_info->sync_sockfd = -1;
1565 __wfd_reset_control();
1566 __WDC_LOG_FUNC_END__;
1567 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1571 if (rsp.cmd == WIFI_DIRECT_CMD_GET_DISCOVERY_RESULT)
1573 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1575 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1576 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
1577 __WDC_LOG_FUNC_END__;
1582 int num = rsp.param1;
1584 wfd_discovery_entry_s *buff = NULL;
1586 WDC_LOGD("Num of found peers = %d \n",
1592 (wfd_discovery_entry_s *) malloc(num * sizeof (wfd_discovery_entry_s));
1595 WDC_LOGE("malloc() failed!!!.\n");
1596 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1600 __wfd_client_read_more_data(client_info->sync_sockfd,
1604 (wfd_discovery_entry_s));
1605 if (status != WIFI_DIRECT_ERROR_NONE)
1610 WDC_LOGE("socket read error.\n");
1611 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1615 __wfd_client_print_entry_list(buff, num);
1617 WDC_LOGD("wifi_direct_foreach_discovered_peers() SUCCESS\n");
1620 wifi_direct_discovered_peer_info_s *peer_list;
1622 for (i = 0; i < num; i++)
1624 peer_list = (wifi_direct_discovered_peer_info_s *) calloc(1, sizeof(wifi_direct_discovered_peer_info_s));
1625 peer_list->is_group_owner = buff[i].is_group_owner;
1626 peer_list->device_name = strdup(buff[i].device_name);
1627 peer_list->mac_address = (char *) calloc(1, 18);
1628 snprintf(peer_list->mac_address, 18, MACSTR, MAC2STR(buff[i].mac_address));
1629 peer_list->channel = buff[i].channel;
1630 peer_list->is_connected = buff[i].is_connected;
1631 peer_list->is_persistent_group_owner = buff[i].is_persistent_go;
1632 peer_list->interface_address = (char *) calloc(1, 18);
1633 snprintf(peer_list->interface_address, 18, MACSTR, MAC2STR(buff[i].intf_mac_address));
1634 peer_list->supported_wps_types= buff[i].wps_cfg_methods;
1635 peer_list->primary_device_type = buff[i].category;
1636 peer_list->secondary_device_type = buff[i].subcategory;
1638 if (!callback(peer_list, user_data))
1649 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1651 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1655 __WDC_LOG_FUNC_END__;
1657 return WIFI_DIRECT_ERROR_NONE;
1661 int wifi_direct_connect(const char *mac_address)
1663 wifi_direct_client_info_s *client_info = __wfd_get_control();
1664 unsigned char la_mac_addr[6];
1666 __WDC_LOG_FUNC_START__;
1668 if ((client_info->is_registered == false)
1669 || (client_info->client_id == WFD_INVALID_ID))
1671 WDC_LOGE("Client is NOT registered.\n");
1672 __WDC_LOG_FUNC_END__;
1673 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1676 if (mac_address == NULL)
1678 WDC_LOGE("mac_addr is NULL.\n");
1679 __WDC_LOG_FUNC_END__;
1680 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1683 wifi_direct_client_request_s req;
1684 wifi_direct_client_response_s rsp;
1686 int status = WIFI_DIRECT_ERROR_NONE;
1688 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1689 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1691 req.cmd = WIFI_DIRECT_CMD_CONNECT;
1692 req.client_id = client_info->client_id;
1694 macaddr_atoe(mac_address, la_mac_addr);
1696 req.data.mac_addr[0] = la_mac_addr[0];
1697 req.data.mac_addr[1] = la_mac_addr[1];
1698 req.data.mac_addr[2] = la_mac_addr[2];
1699 req.data.mac_addr[3] = la_mac_addr[3];
1700 req.data.mac_addr[4] = la_mac_addr[4];
1701 req.data.mac_addr[5] = la_mac_addr[5];
1705 __wfd_client_send_request(client_info->sync_sockfd, &req,
1706 sizeof(wifi_direct_client_request_s));
1707 if (status != WIFI_DIRECT_ERROR_NONE)
1709 WDC_LOGE("Error!!! writing to socket, Errno = %s\n",
1711 WDC_LOGE("Error!!! [%s]\n",
1712 __wfd_print_error(status));
1713 client_info->sync_sockfd = -1;
1714 __wfd_reset_control();
1715 __WDC_LOG_FUNC_END__;
1716 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1720 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1721 sizeof(wifi_direct_client_response_s))) <= 0)
1723 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
1724 status, strerror(errno));
1725 client_info->sync_sockfd = -1;
1726 __wfd_reset_control();
1727 __WDC_LOG_FUNC_END__;
1728 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1732 if (rsp.cmd == WIFI_DIRECT_CMD_CONNECT)
1734 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1736 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1737 WDC_LOGE("Error!!! [%s]\n",
1738 __wfd_print_error(rsp.result));
1739 __WDC_LOG_FUNC_END__;
1744 WDC_LOGD("wifi_direct_connect() SUCCESS \n");
1749 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1751 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1755 __WDC_LOG_FUNC_END__;
1757 return WIFI_DIRECT_ERROR_NONE;
1761 int wifi_direct_disconnect_all(void)
1763 wifi_direct_client_info_s *client_info = __wfd_get_control();
1765 __WDC_LOG_FUNC_START__;
1767 if ((client_info->is_registered == false)
1768 || (client_info->client_id == WFD_INVALID_ID))
1770 WDC_LOGE("Client is NOT registered.\n");
1771 __WDC_LOG_FUNC_END__;
1772 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1775 wifi_direct_client_request_s req;
1776 wifi_direct_client_response_s rsp;
1778 int status = WIFI_DIRECT_ERROR_NONE;
1780 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1781 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1783 req.cmd = WIFI_DIRECT_CMD_DISCONNECT_ALL;
1784 req.client_id = client_info->client_id;
1787 __wfd_client_send_request(client_info->sync_sockfd, &req,
1788 sizeof(wifi_direct_client_request_s));
1789 if (status != WIFI_DIRECT_ERROR_NONE)
1791 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
1792 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
1793 client_info->sync_sockfd = -1;
1794 __wfd_reset_control();
1795 __WDC_LOG_FUNC_END__;
1796 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1800 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1801 sizeof(wifi_direct_client_response_s))) <= 0)
1803 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
1804 client_info->sync_sockfd = -1;
1805 __wfd_reset_control();
1806 __WDC_LOG_FUNC_END__;
1807 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1811 if (rsp.cmd == WIFI_DIRECT_CMD_DISCONNECT_ALL)
1813 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1815 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1816 WDC_LOGE("Error!!! [%s]\n",
1817 __wfd_print_error(rsp.result));
1818 __WDC_LOG_FUNC_END__;
1823 WDC_LOGE("wifi_direct_disconnect_all() SUCCESS \n");
1828 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1830 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1834 __WDC_LOG_FUNC_END__;
1836 return WIFI_DIRECT_ERROR_NONE;
1840 int wifi_direct_disconnect(const char *mac_address)
1842 wifi_direct_client_info_s *client_info = __wfd_get_control();
1843 unsigned char la_mac_addr[6];
1845 __WDC_LOG_FUNC_START__;
1847 if (mac_address == NULL)
1849 WDC_LOGE("mac_address is NULL.\n");
1850 __WDC_LOG_FUNC_END__;
1851 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1854 if ((client_info->is_registered == false)
1855 || (client_info->client_id == WFD_INVALID_ID))
1857 WDC_LOGE("Client is NOT registered.\n");
1858 __WDC_LOG_FUNC_END__;
1859 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1862 wifi_direct_client_request_s req;
1863 wifi_direct_client_response_s rsp;
1865 int status = WIFI_DIRECT_ERROR_NONE;
1867 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1868 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1870 req.cmd = WIFI_DIRECT_CMD_DISCONNECT;
1871 req.client_id = client_info->client_id;
1873 macaddr_atoe(mac_address, la_mac_addr);
1875 req.data.mac_addr[0] = la_mac_addr[0];
1876 req.data.mac_addr[1] = la_mac_addr[1];
1877 req.data.mac_addr[2] = la_mac_addr[2];
1878 req.data.mac_addr[3] = la_mac_addr[3];
1879 req.data.mac_addr[4] = la_mac_addr[4];
1880 req.data.mac_addr[5] = la_mac_addr[5];
1883 __wfd_client_send_request(client_info->sync_sockfd, &req,
1884 sizeof(wifi_direct_client_request_s));
1885 if (status != WIFI_DIRECT_ERROR_NONE)
1887 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
1888 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
1889 client_info->sync_sockfd = -1;
1890 __wfd_reset_control();
1891 __WDC_LOG_FUNC_END__;
1892 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1896 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1897 sizeof(wifi_direct_client_response_s))) <= 0)
1899 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
1900 status, strerror(errno));
1901 client_info->sync_sockfd = -1;
1902 __wfd_reset_control();
1903 __WDC_LOG_FUNC_END__;
1904 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1908 if (rsp.cmd == WIFI_DIRECT_CMD_DISCONNECT)
1910 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
1912 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
1913 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
1914 __WDC_LOG_FUNC_END__;
1919 WDC_LOGE("wifi_direct_disconnect() SUCCESS \n");
1924 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
1926 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
1930 __WDC_LOG_FUNC_END__;
1932 return WIFI_DIRECT_ERROR_NONE;
1938 int wifi_direct_accept_connection(char *mac_address)
1940 wifi_direct_client_info_s *client_info = __wfd_get_control();
1941 unsigned char la_mac_addr[6];
1943 __WDC_LOG_FUNC_START__;
1945 if ((client_info->is_registered == false)
1946 || (client_info->client_id == WFD_INVALID_ID))
1948 WDC_LOGE("Client is NOT registered.\n");
1949 __WDC_LOG_FUNC_END__;
1950 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
1953 if (mac_address == NULL)
1955 WDC_LOGE("mac_addr is NULL.\n");
1956 __WDC_LOG_FUNC_END__;
1957 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
1960 wifi_direct_client_request_s req;
1961 wifi_direct_client_response_s rsp;
1963 int status = WIFI_DIRECT_ERROR_NONE;
1965 memset(&req, 0, sizeof(wifi_direct_client_request_s));
1966 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
1968 req.cmd = WIFI_DIRECT_CMD_SEND_CONNECT_REQ;
1969 req.client_id = client_info->client_id;
1971 macaddr_atoe(mac_address, la_mac_addr);
1973 req.data.mac_addr[0] = la_mac_addr[0];
1974 req.data.mac_addr[1] = la_mac_addr[1];
1975 req.data.mac_addr[2] = la_mac_addr[2];
1976 req.data.mac_addr[3] = la_mac_addr[3];
1977 req.data.mac_addr[4] = la_mac_addr[4];
1978 req.data.mac_addr[5] = la_mac_addr[5];
1981 __wfd_client_send_request(client_info->sync_sockfd, &req,
1982 sizeof(wifi_direct_client_request_s));
1983 if (status != WIFI_DIRECT_ERROR_NONE)
1985 WDC_LOGE("Error!!! writing to socket, Errno = %s\n",
1987 WDC_LOGE("Error!!! [%s]\n",
1988 __wfd_print_error(status));
1989 client_info->sync_sockfd = -1;
1990 __wfd_reset_control();
1991 __WDC_LOG_FUNC_END__;
1992 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
1996 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
1997 sizeof(wifi_direct_client_response_s))) <= 0)
1999 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
2000 status, strerror(errno));
2001 client_info->sync_sockfd = -1;
2002 __wfd_reset_control();
2003 __WDC_LOG_FUNC_END__;
2004 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2008 if (rsp.cmd == WIFI_DIRECT_CMD_SEND_CONNECT_REQ)
2010 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2012 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
2013 WDC_LOGE("Error!!! [%s]\n",
2014 __wfd_print_error(rsp.result));
2015 __WDC_LOG_FUNC_END__;
2020 WDC_LOGE("wifi_direct_connect() SUCCESS \n");
2025 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
2027 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2031 __WDC_LOG_FUNC_END__;
2033 return WIFI_DIRECT_ERROR_NONE;
2037 int wifi_direct_foreach_connected_peers(wifi_direct_connected_peer_cb callback, void *user_data)
2039 wifi_direct_client_info_s *client_info = __wfd_get_control();
2041 __WDC_LOG_FUNC_START__;
2043 if ((client_info->is_registered == false)
2044 || (client_info->client_id == WFD_INVALID_ID))
2046 WDC_LOGE("Client is NOT registered.\n");
2047 __WDC_LOG_FUNC_END__;
2048 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2051 if (callback == NULL)
2053 WDC_LOGE("NULL Param [callback]!\n");
2054 __WDC_LOG_FUNC_END__;
2055 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2058 wifi_direct_client_request_s req;
2059 wifi_direct_client_response_s rsp;
2062 int status = WIFI_DIRECT_ERROR_NONE;
2064 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2065 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2067 req.cmd = WIFI_DIRECT_CMD_GET_CONNECTED_PEERS_INFO;
2068 req.client_id = client_info->client_id;
2070 status = __wfd_client_send_request(client_info->sync_sockfd, &req,
2071 sizeof(wifi_direct_client_request_s));
2072 if (status != WIFI_DIRECT_ERROR_NONE)
2074 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2075 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2076 client_info->sync_sockfd = -1;
2077 __wfd_reset_control();
2078 __WDC_LOG_FUNC_END__;
2079 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2082 if ((status = __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2083 sizeof(wifi_direct_client_response_s))) <= 0)
2085 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
2086 status, strerror(errno));
2087 client_info->sync_sockfd = -1;
2088 __wfd_reset_control();
2089 __WDC_LOG_FUNC_END__;
2090 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2094 if (rsp.cmd == WIFI_DIRECT_CMD_GET_CONNECTED_PEERS_INFO)
2096 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2098 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
2099 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
2100 __WDC_LOG_FUNC_END__;
2106 int num = rsp.param1;
2108 wfd_connected_peer_info_s *buff = NULL;
2110 WDC_LOGD("Num of connected peers = %d \n",
2116 (wfd_connected_peer_info_s *) malloc(num *
2118 (wfd_connected_peer_info_s));
2121 WDC_LOGE("malloc() failed!!!.\n");
2122 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2126 __wfd_client_read_more_data(client_info->sync_sockfd,
2130 (wfd_connected_peer_info_s));
2131 if (status != WIFI_DIRECT_ERROR_NONE)
2135 WDC_LOGE("socket read error.\n");
2136 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2139 __wfd_client_print_connected_peer_info(buff, num);
2141 WDC_LOGD("wifi_direct_foreach_connected_peers() SUCCESS\n");
2143 wifi_direct_connected_peer_info_s *peer_list = NULL;
2145 for (i = 0; i < num; i++)
2147 peer_list = (wifi_direct_connected_peer_info_s *) calloc(1, sizeof(wifi_direct_connected_peer_info_s));
2148 peer_list->device_name = strdup(buff[i].device_name);
2149 peer_list->ip_address= (char *) calloc(1, 16);
2150 snprintf(peer_list->ip_address, 16, IPSTR, IP2STR(buff[i].ip_address));
2151 peer_list->mac_address = (char *) calloc(1, 18);
2152 snprintf(peer_list->mac_address, 18, MACSTR, MAC2STR(buff[i].mac_address));
2153 peer_list->interface_address = (char *) calloc(1, 18);
2154 snprintf(peer_list->interface_address, 18, MACSTR, MAC2STR(buff[i].intf_mac_address));
2155 peer_list->p2p_supported = buff[i].is_p2p;
2156 peer_list->primary_device_type = buff[i].category;
2157 peer_list->channel = buff[i].channel;
2159 if (!callback(peer_list, user_data))
2163 callback(NULL, user_data);
2173 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
2175 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2179 __WDC_LOG_FUNC_END__;
2181 return WIFI_DIRECT_ERROR_NONE;
2185 int wifi_direct_create_group(void)
2187 wifi_direct_client_info_s *client_info = __wfd_get_control();
2189 __WDC_LOG_FUNC_START__;
2191 if ((client_info->is_registered == false)
2192 || (client_info->client_id == WFD_INVALID_ID))
2194 WDC_LOGE("Client is NOT registered.\n");
2195 __WDC_LOG_FUNC_END__;
2196 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2199 wifi_direct_client_request_s req;
2200 wifi_direct_client_response_s rsp;
2202 int status = WIFI_DIRECT_ERROR_NONE;
2204 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2205 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2207 req.cmd = WIFI_DIRECT_CMD_CREATE_GROUP;
2208 req.client_id = client_info->client_id;
2211 __wfd_client_send_request(client_info->sync_sockfd, &req,
2212 sizeof(wifi_direct_client_request_s));
2213 if (status != WIFI_DIRECT_ERROR_NONE)
2215 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2216 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2217 client_info->sync_sockfd = -1;
2218 __wfd_reset_control();
2219 __WDC_LOG_FUNC_END__;
2220 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2224 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2225 sizeof(wifi_direct_client_response_s))) <= 0)
2227 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
2228 status, strerror(errno));
2229 client_info->sync_sockfd = -1;
2230 __wfd_reset_control();
2231 __WDC_LOG_FUNC_END__;
2232 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2236 if (rsp.cmd == WIFI_DIRECT_CMD_CREATE_GROUP)
2238 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2240 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
2241 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
2242 __WDC_LOG_FUNC_END__;
2247 WDC_LOGE("wifi_direct_create_group() SUCCESS \n");
2252 WDC_LOGE("Error!!! Invalid resp cmd = %d\n", rsp.cmd);
2253 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2257 __WDC_LOG_FUNC_END__;
2259 return WIFI_DIRECT_ERROR_NONE;
2263 int wifi_direct_destroy_group(void)
2265 wifi_direct_client_info_s *client_info = __wfd_get_control();
2267 __WDC_LOG_FUNC_START__;
2269 if ((client_info->is_registered == false)
2270 || (client_info->client_id == WFD_INVALID_ID))
2272 WDC_LOGE("Client is NOT registered.\n");
2273 __WDC_LOG_FUNC_END__;
2274 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2277 wifi_direct_client_request_s req;
2278 wifi_direct_client_response_s rsp;
2280 int status = WIFI_DIRECT_ERROR_NONE;
2282 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2283 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2285 req.cmd = WIFI_DIRECT_CMD_CANCEL_GROUP;
2286 req.client_id = client_info->client_id;
2289 __wfd_client_send_request(client_info->sync_sockfd, &req,
2290 sizeof(wifi_direct_client_request_s));
2291 if (status != WIFI_DIRECT_ERROR_NONE)
2293 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2294 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2295 client_info->sync_sockfd = -1;
2296 __wfd_reset_control();
2297 __WDC_LOG_FUNC_END__;
2298 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2302 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2303 sizeof(wifi_direct_client_response_s))) <= 0)
2305 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
2306 status, strerror(errno));
2307 client_info->sync_sockfd = -1;
2308 __wfd_reset_control();
2309 __WDC_LOG_FUNC_END__;
2310 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2314 if (rsp.cmd == WIFI_DIRECT_CMD_CANCEL_GROUP)
2316 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2318 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
2319 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
2320 __WDC_LOG_FUNC_END__;
2325 WDC_LOGE("wifi_direct_destroy_group() SUCCESS \n");
2330 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
2332 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2336 __WDC_LOG_FUNC_END__;
2338 return WIFI_DIRECT_ERROR_NONE;
2342 int wifi_direct_is_group_owner(bool * owner)
2344 wifi_direct_client_info_s *client_info = __wfd_get_control();
2346 __WDC_LOG_FUNC_START__;
2350 WDC_LOGE("NULL Param [owner]!\n");
2351 __WDC_LOG_FUNC_END__;
2352 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2355 if ((client_info->is_registered == false)
2356 || (client_info->client_id == WFD_INVALID_ID))
2358 WDC_LOGE("Client is NOT registered.\n");
2359 __WDC_LOG_FUNC_END__;
2360 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2363 wifi_direct_client_request_s req;
2364 wifi_direct_client_response_s rsp;
2366 int status = WIFI_DIRECT_ERROR_NONE;
2368 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2369 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2371 req.cmd = WIFI_DIRECT_CMD_IS_GROUPOWNER;
2372 req.client_id = client_info->client_id;
2375 __wfd_client_send_request(client_info->sync_sockfd, &req,
2376 sizeof(wifi_direct_client_request_s));
2377 if (status != WIFI_DIRECT_ERROR_NONE)
2379 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2380 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2381 client_info->sync_sockfd = -1;
2382 __wfd_reset_control();
2383 __WDC_LOG_FUNC_END__;
2384 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2388 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2389 sizeof(wifi_direct_client_response_s))) <= 0)
2391 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
2392 client_info->sync_sockfd = -1;
2393 __wfd_reset_control();
2394 __WDC_LOG_FUNC_END__;
2395 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2399 if (rsp.cmd == WIFI_DIRECT_CMD_IS_GROUPOWNER)
2401 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2403 WDC_LOGD("Error!!! Result received = %d \n",
2405 WDC_LOGD("Error!!! [%s]\n",
2406 __wfd_print_error(rsp.result));
2407 __WDC_LOG_FUNC_END__;
2412 WDC_LOGD("wifi_direct_is_group_owner() %s SUCCESS \n", rsp.param2);
2413 *owner = (bool) rsp.param1;
2418 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
2420 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2424 __WDC_LOG_FUNC_END__;
2426 return WIFI_DIRECT_ERROR_NONE;
2431 int wifi_direct_is_autonomous_group(bool * autonomous_group)
2433 wifi_direct_client_info_s *client_info = __wfd_get_control();
2435 __WDC_LOG_FUNC_START__;
2437 if (autonomous_group == NULL)
2439 WDC_LOGE("NULL Param [autonomous_group]!\n");
2440 __WDC_LOG_FUNC_END__;
2441 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2444 if ((client_info->is_registered == false)
2445 || (client_info->client_id == WFD_INVALID_ID))
2447 WDC_LOGE("Client is NOT registered.\n");
2448 __WDC_LOG_FUNC_END__;
2449 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2452 wifi_direct_client_request_s req;
2453 wifi_direct_client_response_s rsp;
2455 int status = WIFI_DIRECT_ERROR_NONE;
2457 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2458 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2460 req.cmd = WIFI_DIRECT_CMD_IS_AUTONOMOUS_GROUP;
2461 req.client_id = client_info->client_id;
2464 __wfd_client_send_request(client_info->sync_sockfd, &req,
2465 sizeof(wifi_direct_client_request_s));
2466 if (status != WIFI_DIRECT_ERROR_NONE)
2468 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2469 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2470 client_info->sync_sockfd = -1;
2471 __wfd_reset_control();
2472 __WDC_LOG_FUNC_END__;
2473 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2477 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2478 sizeof(wifi_direct_client_response_s))) <= 0)
2480 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
2481 status, strerror(errno));
2482 client_info->sync_sockfd = -1;
2483 __wfd_reset_control();
2484 __WDC_LOG_FUNC_END__;
2485 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2489 if (rsp.cmd == WIFI_DIRECT_CMD_IS_AUTONOMOUS_GROUP)
2491 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2493 WDC_LOGD("Error!!! Result received = %d \n", rsp.result);
2494 WDC_LOGD("Error!!! [%s]\n", __wfd_print_error(rsp.result));
2495 __WDC_LOG_FUNC_END__;
2500 WDC_LOGD("wifi_direct_is_autonomous_group() %s SUCCESS \n", rsp.param2);
2501 *autonomous_group = (bool) rsp.param1;
2506 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
2508 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2512 __WDC_LOG_FUNC_END__;
2514 return WIFI_DIRECT_ERROR_NONE;
2519 int wifi_direct_set_group_owner_intent(int intent)
2521 wifi_direct_client_info_s *client_info = __wfd_get_control();
2523 __WDC_LOG_FUNC_START__;
2525 if ((client_info->is_registered == false)
2526 || (client_info->client_id == WFD_INVALID_ID))
2528 WDC_LOGE("Client is NOT registered.\n");
2529 __WDC_LOG_FUNC_END__;
2530 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2533 if (intent < 0 || intent > 15)
2535 WDC_LOGE("Invalid Param : intent[%d]\n", intent);
2536 __WDC_LOG_FUNC_END__;
2537 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
2540 wifi_direct_client_request_s req;
2541 wifi_direct_client_response_s rsp;
2543 int status = WIFI_DIRECT_ERROR_NONE;
2545 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2546 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2548 req.cmd = WIFI_DIRECT_CMD_SET_GO_INTENT;
2549 req.client_id = client_info->client_id;
2551 status =__wfd_client_send_request(client_info->sync_sockfd, &req,
2552 sizeof(wifi_direct_client_request_s));
2553 if (status != WIFI_DIRECT_ERROR_NONE)
2555 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2556 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2557 client_info->sync_sockfd = -1;
2558 __wfd_reset_control();
2559 __WDC_LOG_FUNC_END__;
2560 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2563 WDC_LOGD("writing msg hdr is success!\n");
2566 __wfd_client_send_request(client_info->sync_sockfd, &intent,
2568 if (status != WIFI_DIRECT_ERROR_NONE)
2570 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2571 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2572 client_info->sync_sockfd = -1;
2573 __wfd_reset_control();
2574 __WDC_LOG_FUNC_END__;
2575 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2579 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2580 sizeof(wifi_direct_client_response_s))) <= 0)
2582 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
2583 client_info->sync_sockfd = -1;
2584 __wfd_reset_control();
2585 __WDC_LOG_FUNC_END__;
2586 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2590 if (rsp.cmd == WIFI_DIRECT_CMD_SET_GO_INTENT)
2592 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2594 WDC_LOGD("Error!!! Result received = %d \n",
2596 WDC_LOGD("Error!!! [%s]\n",
2597 __wfd_print_error(rsp.result));
2598 __WDC_LOG_FUNC_END__;
2604 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
2606 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2610 __WDC_LOG_FUNC_END__;
2612 return WIFI_DIRECT_ERROR_NONE;
2616 int wifi_direct_get_group_owner_intent(int* intent)
2618 wifi_direct_client_info_s *client_info = __wfd_get_control();
2620 __WDC_LOG_FUNC_START__;
2622 if ((client_info->is_registered == false)
2623 || (client_info->client_id == WFD_INVALID_ID))
2625 WDC_LOGE("Client is NOT registered.\n");
2626 __WDC_LOG_FUNC_END__;
2627 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2630 wifi_direct_client_request_s req;
2631 wifi_direct_client_response_s rsp;
2633 int status = WIFI_DIRECT_ERROR_NONE;
2635 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2636 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2638 req.cmd = WIFI_DIRECT_CMD_GET_GO_INTENT;
2639 req.client_id = client_info->client_id;
2642 __wfd_client_send_request(client_info->sync_sockfd, &req,
2643 sizeof(wifi_direct_client_request_s));
2644 if (status != WIFI_DIRECT_ERROR_NONE)
2646 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2647 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2648 client_info->sync_sockfd = -1;
2649 __wfd_reset_control();
2650 __WDC_LOG_FUNC_END__;
2651 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2655 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2656 sizeof(wifi_direct_client_response_s))) <= 0)
2658 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
2659 client_info->sync_sockfd = -1;
2660 __wfd_reset_control();
2661 __WDC_LOG_FUNC_END__;
2662 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2666 if (rsp.cmd == WIFI_DIRECT_CMD_GET_GO_INTENT)
2668 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2670 WDC_LOGD("Error!!! Result received = %d \n",
2672 WDC_LOGD("Error!!! [%s]\n",
2673 __wfd_print_error(rsp.result));
2674 __WDC_LOG_FUNC_END__;
2679 WDC_LOGD("int wifi_direct_get_group_owner_intent() intent[%d] SUCCESS \n", rsp.param1);
2680 *intent = rsp.param1;
2685 WDC_LOGE("Error!!! Invalid resp cmd = %d\n", rsp.cmd);
2686 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2690 __WDC_LOG_FUNC_END__;
2692 return WIFI_DIRECT_ERROR_NONE;
2695 int wifi_direct_set_max_clients(int max)
2697 wifi_direct_client_info_s *client_info = __wfd_get_control();
2699 __WDC_LOG_FUNC_START__;
2701 if ((client_info->is_registered == false)
2702 || (client_info->client_id == WFD_INVALID_ID))
2704 WDC_LOGE("Client is NOT registered.\n");
2705 __WDC_LOG_FUNC_END__;
2706 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2709 WDC_LOGD("max client [%d]\n", max);
2711 wifi_direct_client_request_s req;
2712 wifi_direct_client_response_s rsp;
2714 int status = WIFI_DIRECT_ERROR_NONE;
2716 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2717 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2719 req.cmd = WIFI_DIRECT_CMD_SET_MAX_CLIENT;
2720 req.client_id = client_info->client_id;
2722 status =__wfd_client_send_request(client_info->sync_sockfd, &req,
2723 sizeof(wifi_direct_client_request_s));
2724 if (status != WIFI_DIRECT_ERROR_NONE)
2726 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2727 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2728 client_info->sync_sockfd = -1;
2729 __wfd_reset_control();
2730 __WDC_LOG_FUNC_END__;
2731 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2734 WDC_LOGD("writing msg hdr is success!\n");
2737 __wfd_client_send_request(client_info->sync_sockfd, &max,
2739 if (status != WIFI_DIRECT_ERROR_NONE)
2741 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2742 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2743 client_info->sync_sockfd = -1;
2744 __wfd_reset_control();
2745 __WDC_LOG_FUNC_END__;
2746 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2750 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2751 sizeof(wifi_direct_client_response_s))) <= 0)
2753 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
2754 client_info->sync_sockfd = -1;
2755 __wfd_reset_control();
2756 __WDC_LOG_FUNC_END__;
2757 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2761 if (rsp.cmd == WIFI_DIRECT_CMD_SET_MAX_CLIENT)
2763 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2765 WDC_LOGD("Error!!! Result received = %d \n",
2767 WDC_LOGD("Error!!! [%s]\n",
2768 __wfd_print_error(rsp.result));
2769 __WDC_LOG_FUNC_END__;
2775 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
2777 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2781 __WDC_LOG_FUNC_END__;
2783 return WIFI_DIRECT_ERROR_NONE;
2786 int wifi_direct_get_max_clients(int* max)
2788 wifi_direct_client_info_s *client_info = __wfd_get_control();
2790 __WDC_LOG_FUNC_START__;
2792 if ((client_info->is_registered == false)
2793 || (client_info->client_id == WFD_INVALID_ID))
2795 WDC_LOGE("Client is NOT registered.\n");
2796 __WDC_LOG_FUNC_END__;
2797 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2800 wifi_direct_client_request_s req;
2801 wifi_direct_client_response_s rsp;
2803 int status = WIFI_DIRECT_ERROR_NONE;
2805 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2806 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2808 req.cmd = WIFI_DIRECT_CMD_GET_MAX_CLIENT;
2809 req.client_id = client_info->client_id;
2812 __wfd_client_send_request(client_info->sync_sockfd, &req,
2813 sizeof(wifi_direct_client_request_s));
2814 if (status != WIFI_DIRECT_ERROR_NONE)
2816 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2817 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
2818 client_info->sync_sockfd = -1;
2819 __wfd_reset_control();
2820 __WDC_LOG_FUNC_END__;
2821 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2825 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2826 sizeof(wifi_direct_client_response_s))) <= 0)
2828 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
2829 client_info->sync_sockfd = -1;
2830 __wfd_reset_control();
2831 __WDC_LOG_FUNC_END__;
2832 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2836 if (rsp.cmd == WIFI_DIRECT_CMD_GET_MAX_CLIENT)
2838 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2840 WDC_LOGD("Error!!! Result received = %d \n",
2842 WDC_LOGD("Error!!! [%s]\n",
2843 __wfd_print_error(rsp.result));
2844 __WDC_LOG_FUNC_END__;
2849 WDC_LOGD("int wifi_direct_get_max_clients() max_client[%d] SUCCESS \n", rsp.param1);
2855 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
2857 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2861 __WDC_LOG_FUNC_END__;
2863 return WIFI_DIRECT_ERROR_NONE;
2868 int wifi_direct_get_own_group_channel(int* channel)
2870 wifi_direct_client_info_s *client_info = __wfd_get_control();
2872 __WDC_LOG_FUNC_START__;
2874 if ((client_info->is_registered == false)
2875 || (client_info->client_id == WFD_INVALID_ID))
2877 WDC_LOGE("Client is NOT registered.\n");
2878 __WDC_LOG_FUNC_END__;
2879 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2882 wifi_direct_client_request_s req;
2883 wifi_direct_client_response_s rsp;
2885 int ret = WIFI_DIRECT_ERROR_NONE;
2887 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2888 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2890 req.cmd = WIFI_DIRECT_CMD_GET_OWN_GROUP_CHANNEL;
2891 req.client_id = client_info->client_id;
2894 __wfd_client_send_request(client_info->sync_sockfd, &req,
2895 sizeof(wifi_direct_client_request_s));
2896 if (ret != WIFI_DIRECT_ERROR_NONE)
2898 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2899 WDC_LOGE("Error!!! [%s]\n",
2900 __wfd_print_error(ret));
2901 client_info->sync_sockfd = -1;
2902 __wfd_reset_control();
2903 __WDC_LOG_FUNC_END__;
2904 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2908 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2909 sizeof(wifi_direct_client_response_s))) <= 0)
2911 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", ret, strerror(errno));
2912 client_info->sync_sockfd = -1;
2913 __wfd_reset_control();
2914 __WDC_LOG_FUNC_END__;
2915 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2919 if (rsp.cmd == WIFI_DIRECT_CMD_GET_OWN_GROUP_CHANNEL)
2921 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
2923 WDC_LOGD("Error!!! Result received = %d \n",
2925 WDC_LOGD("Error!!! [%s]\n",
2926 __wfd_print_error(rsp.result));
2927 __WDC_LOG_FUNC_END__;
2932 WDC_LOGD("channel = [%d]\n",
2934 *channel = rsp.param1;
2939 WDC_LOGE("Error!!! Invalid resp cmd = %d\n", rsp.cmd);
2940 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
2944 __WDC_LOG_FUNC_END__;
2946 return WIFI_DIRECT_ERROR_NONE;
2951 int wifi_direct_get_operating_channel(int* channel)
2953 wifi_direct_client_info_s *client_info = __wfd_get_control();
2955 __WDC_LOG_FUNC_START__;
2957 if ((client_info->is_registered == false)
2958 || (client_info->client_id == WFD_INVALID_ID))
2960 WDC_LOGE("Client is NOT registered.\n");
2961 __WDC_LOG_FUNC_END__;
2962 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
2965 wifi_direct_client_request_s req;
2966 wifi_direct_client_response_s rsp;
2968 int ret = WIFI_DIRECT_ERROR_NONE;
2970 memset(&req, 0, sizeof(wifi_direct_client_request_s));
2971 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
2973 req.cmd = WIFI_DIRECT_CMD_GET_OWN_GROUP_CHANNEL;
2974 req.client_id = client_info->client_id;
2977 __wfd_client_send_request(client_info->sync_sockfd, &req,
2978 sizeof(wifi_direct_client_request_s));
2979 if (ret != WIFI_DIRECT_ERROR_NONE)
2981 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
2982 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(ret));
2983 client_info->sync_sockfd = -1;
2984 __wfd_reset_control();
2985 __WDC_LOG_FUNC_END__;
2986 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
2990 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
2991 sizeof(wifi_direct_client_response_s))) <= 0)
2993 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", ret, strerror(errno));
2994 client_info->sync_sockfd = -1;
2995 __wfd_reset_control();
2996 __WDC_LOG_FUNC_END__;
2997 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3001 if (rsp.cmd == WIFI_DIRECT_CMD_GET_OWN_GROUP_CHANNEL)
3003 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3005 WDC_LOGD("Error!!! Result received = %d \n", rsp.result);
3006 WDC_LOGD("Error!!! [%s]\n", __wfd_print_error(rsp.result));
3007 __WDC_LOG_FUNC_END__;
3012 WDC_LOGD("channel = [%d]\n", (int) rsp.param1);
3013 *channel = rsp.param1;
3018 WDC_LOGE("Error!!! Invalid resp cmd = %d\n", rsp.cmd);
3019 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3023 __WDC_LOG_FUNC_END__;
3025 return WIFI_DIRECT_ERROR_NONE;
3030 int wifi_direct_set_wpa_passphrase(char *passphrase)
3032 wifi_direct_client_info_s *client_info = __wfd_get_control();
3034 __WDC_LOG_FUNC_START__;
3036 if ((client_info->is_registered == false)
3037 || (client_info->client_id == WFD_INVALID_ID))
3039 WDC_LOGE("Client is NOT registered.\n");
3040 __WDC_LOG_FUNC_END__;
3041 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3044 if (NULL == passphrase)
3046 WDC_LOGE("NULL Param [passphrase]!\n");
3047 __WDC_LOG_FUNC_END__;
3048 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3051 WDC_LOGE("passphrase = [%s]\n", passphrase);
3053 wifi_direct_client_request_s req;
3054 wifi_direct_client_response_s rsp;
3056 int status = WIFI_DIRECT_ERROR_NONE;
3058 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3059 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3061 req.cmd = WIFI_DIRECT_CMD_SET_WPA;
3062 req.client_id = client_info->client_id;
3065 __wfd_client_send_request(client_info->sync_sockfd, &req,
3066 sizeof(wifi_direct_client_request_s));
3067 if (status != WIFI_DIRECT_ERROR_NONE)
3069 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3070 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3071 client_info->sync_sockfd = -1;
3072 __wfd_reset_control();
3073 __WDC_LOG_FUNC_END__;
3074 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3077 WDC_LOGD("writing msg hdr is success!\n");
3080 __wfd_client_send_request(client_info->sync_sockfd, passphrase, 64);
3081 if (status != WIFI_DIRECT_ERROR_NONE)
3083 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3084 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3085 client_info->sync_sockfd = -1;
3086 __wfd_reset_control();
3087 __WDC_LOG_FUNC_END__;
3088 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3092 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3093 sizeof(wifi_direct_client_response_s))) <= 0)
3095 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
3096 client_info->sync_sockfd = -1;
3097 __wfd_reset_control();
3098 __WDC_LOG_FUNC_END__;
3099 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3103 if (rsp.cmd == WIFI_DIRECT_CMD_SET_WPA)
3105 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3107 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
3108 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
3109 __WDC_LOG_FUNC_END__;
3115 WDC_LOGE("Error!!! Invalid resp cmd = %d\n", rsp.cmd);
3116 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3120 __WDC_LOG_FUNC_END__;
3122 return WIFI_DIRECT_ERROR_NONE;
3126 int wifi_direct_activate_pushbutton(void)
3128 wifi_direct_client_info_s *client_info = __wfd_get_control();
3130 __WDC_LOG_FUNC_START__;
3132 if ((client_info->is_registered == false)
3133 || (client_info->client_id == WFD_INVALID_ID))
3135 WDC_LOGE("Client is NOT registered.\n");
3136 __WDC_LOG_FUNC_END__;
3137 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3140 wifi_direct_client_request_s req;
3141 wifi_direct_client_response_s rsp;
3143 int status = WIFI_DIRECT_ERROR_NONE;
3145 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3146 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3148 req.cmd = WIFI_DIRECT_CMD_ACTIVATE_PUSHBUTTON;
3149 req.client_id = client_info->client_id;
3152 __wfd_client_send_request(client_info->sync_sockfd, &req,
3153 sizeof(wifi_direct_client_request_s));
3154 if (status != WIFI_DIRECT_ERROR_NONE)
3156 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3157 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3158 client_info->sync_sockfd = -1;
3159 __wfd_reset_control();
3160 __WDC_LOG_FUNC_END__;
3161 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3165 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3166 sizeof(wifi_direct_client_response_s))) <= 0)
3168 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n",
3169 status, strerror(errno));
3170 client_info->sync_sockfd = -1;
3171 __wfd_reset_control();
3172 __WDC_LOG_FUNC_END__;
3173 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3177 if (rsp.cmd == WIFI_DIRECT_CMD_ACTIVATE_PUSHBUTTON)
3179 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3181 WDC_LOGD("Error!!! Result received = %d \n",
3183 WDC_LOGD("Error!!! [%s]\n",
3184 __wfd_print_error(rsp.result));
3185 __WDC_LOG_FUNC_END__;
3190 WDC_LOGD("wifi_direct_activate_pushbutton() SUCCESS");
3195 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3197 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3201 __WDC_LOG_FUNC_END__;
3203 return WIFI_DIRECT_ERROR_NONE;
3207 int wifi_direct_set_wps_pin(char *pin)
3210 wifi_direct_client_info_s *client_info = __wfd_get_control();
3212 __WDC_LOG_FUNC_START__;
3214 if ((client_info->is_registered == false)
3215 || (client_info->client_id == WFD_INVALID_ID))
3217 WDC_LOGE("Client is NOT registered.\n");
3218 __WDC_LOG_FUNC_END__;
3219 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3224 WDC_LOGE("NULL Param [pin]!\n");
3225 __WDC_LOG_FUNC_END__;
3226 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3228 WDC_LOGE("pin = [%s]\n", pin);
3230 wifi_direct_client_request_s req;
3231 wifi_direct_client_response_s rsp;
3233 int status = WIFI_DIRECT_ERROR_NONE;
3235 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3236 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3238 req.cmd = WIFI_DIRECT_CMD_SET_WPS_PIN;
3239 req.client_id = client_info->client_id;
3242 __wfd_client_send_request(client_info->sync_sockfd, &req,
3243 sizeof(wifi_direct_client_request_s));
3244 if (status != WIFI_DIRECT_ERROR_NONE)
3246 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3247 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3248 client_info->sync_sockfd = -1;
3249 __wfd_reset_control();
3250 __WDC_LOG_FUNC_END__;
3251 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3254 WDC_LOGD("writing msg hdr is success!\n");
3257 __wfd_client_send_request(client_info->sync_sockfd, pin,
3258 WIFI_DIRECT_WPS_PIN_LEN);
3259 if (status != WIFI_DIRECT_ERROR_NONE)
3261 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3262 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3263 client_info->sync_sockfd = -1;
3264 __wfd_reset_control();
3265 __WDC_LOG_FUNC_END__;
3266 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3270 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3271 sizeof(wifi_direct_client_response_s))) <= 0)
3273 WDC_LOGE( "Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
3274 __WDC_LOG_FUNC_END__;
3275 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3279 if (rsp.cmd == WIFI_DIRECT_CMD_SET_WPS_PIN)
3281 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3283 WDC_LOGD("Error!!! Result received = %d \n",
3285 WDC_LOGD("Error!!! [%s]\n",
3286 __wfd_print_error(rsp.result));
3287 __WDC_LOG_FUNC_END__;
3293 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3295 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3299 __WDC_LOG_FUNC_END__;
3301 return WIFI_DIRECT_ERROR_NONE;
3305 int wifi_direct_get_wps_pin(char **pin)
3307 wifi_direct_client_info_s *client_info = __wfd_get_control();
3309 __WDC_LOG_FUNC_START__;
3311 if ((client_info->is_registered == false)
3312 || (client_info->client_id == WFD_INVALID_ID))
3314 WDC_LOGE("Client is NOT registered.\n");
3315 __WDC_LOG_FUNC_END__;
3316 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3319 wifi_direct_client_request_s req;
3320 wifi_direct_client_response_s rsp;
3321 char la_pin[WIFI_DIRECT_WPS_PIN_LEN + 1] = { 0, };
3323 int status = WIFI_DIRECT_ERROR_NONE;
3325 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3326 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3328 req.cmd = WIFI_DIRECT_CMD_GET_WPS_PIN;
3329 req.client_id = client_info->client_id;
3332 __wfd_client_send_request(client_info->sync_sockfd, &req,
3333 sizeof(wifi_direct_client_request_s));
3334 if (status != WIFI_DIRECT_ERROR_NONE)
3336 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3337 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3338 client_info->sync_sockfd = -1;
3339 __wfd_reset_control();
3340 __WDC_LOG_FUNC_END__;
3341 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3345 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3346 sizeof(wifi_direct_client_response_s))) <= 0)
3348 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
3349 client_info->sync_sockfd = -1;
3350 __wfd_reset_control();
3351 __WDC_LOG_FUNC_END__;
3352 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3356 if (rsp.cmd == WIFI_DIRECT_CMD_GET_WPS_PIN)
3358 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3360 WDC_LOGD("Error!!! Result received = %d \n",
3362 WDC_LOGD("Error!!! [%s]\n",
3363 __wfd_print_error(rsp.result));
3364 __WDC_LOG_FUNC_END__;
3369 WDC_LOGD("wifi_direct_get_wps_pin() SUCCESS");
3370 snprintf(la_pin, WIFI_DIRECT_WPS_PIN_LEN+1, rsp.param2);
3371 *pin = strdup(la_pin);
3376 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3378 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3382 __WDC_LOG_FUNC_END__;
3384 return WIFI_DIRECT_ERROR_NONE;
3388 int wifi_direct_generate_wps_pin(void)
3390 wifi_direct_client_info_s *client_info = __wfd_get_control();
3392 __WDC_LOG_FUNC_START__;
3394 if ((client_info->is_registered == false)
3395 || (client_info->client_id == WFD_INVALID_ID))
3397 WDC_LOGE("Client is NOT registered.\n");
3398 __WDC_LOG_FUNC_END__;
3399 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3402 wifi_direct_client_request_s req;
3403 wifi_direct_client_response_s rsp;
3405 int status = WIFI_DIRECT_ERROR_NONE;
3407 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3408 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3410 req.cmd = WIFI_DIRECT_CMD_GENERATE_WPS_PIN;
3411 req.client_id = client_info->client_id;
3414 __wfd_client_send_request(client_info->sync_sockfd, &req,
3415 sizeof(wifi_direct_client_request_s));
3416 if (status != WIFI_DIRECT_ERROR_NONE)
3418 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3419 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3420 client_info->sync_sockfd = -1;
3421 __wfd_reset_control();
3422 __WDC_LOG_FUNC_END__;
3423 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3427 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3428 sizeof(wifi_direct_client_response_s))) <= 0)
3430 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
3431 client_info->sync_sockfd = -1;
3432 __wfd_reset_control();
3433 __WDC_LOG_FUNC_END__;
3434 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3438 if (rsp.cmd == WIFI_DIRECT_CMD_GENERATE_WPS_PIN)
3440 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3442 WDC_LOGD("Error!!! Result received = %d",
3444 WDC_LOGD("Error!!! [%s]\n",
3445 __wfd_print_error(rsp.result));
3446 __WDC_LOG_FUNC_END__;
3451 WDC_LOGD("wifi_direct_generate_wps_pin() SUCCESS");
3456 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3458 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3462 __WDC_LOG_FUNC_END__;
3464 return WIFI_DIRECT_ERROR_NONE;
3468 int wifi_direct_get_supported_wps_mode(int *wps_mode)
3470 wifi_direct_client_info_s *client_info = __wfd_get_control();
3472 __WDC_LOG_FUNC_START__;
3474 if ((client_info->is_registered == false)
3475 || (client_info->client_id == WFD_INVALID_ID))
3477 WDC_LOGE("Client is NOT registered.\n");
3478 __WDC_LOG_FUNC_END__;
3479 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3482 wifi_direct_client_request_s req;
3483 wifi_direct_client_response_s rsp;
3485 int ret = WIFI_DIRECT_ERROR_NONE;
3487 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3488 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3490 req.cmd = WIFI_DIRECT_CMD_GET_SUPPORTED_WPS_MODE;
3491 req.client_id = client_info->client_id;
3494 __wfd_client_send_request(client_info->sync_sockfd, &req,
3495 sizeof(wifi_direct_client_request_s));
3496 if (ret != WIFI_DIRECT_ERROR_NONE)
3498 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3499 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(ret));
3500 client_info->sync_sockfd = -1;
3501 __wfd_reset_control();
3502 __WDC_LOG_FUNC_END__;
3503 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3507 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3508 sizeof(wifi_direct_client_response_s))) <= 0)
3510 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", ret, strerror(errno));
3511 client_info->sync_sockfd = -1;
3512 __wfd_reset_control();
3513 __WDC_LOG_FUNC_END__;
3514 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3518 if (rsp.cmd == WIFI_DIRECT_CMD_GET_SUPPORTED_WPS_MODE)
3520 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3522 WDC_LOGD("Error!!! Result received = %d \n",
3524 WDC_LOGD("Error!!! [%s]\n",
3525 __wfd_print_error(rsp.result));
3526 __WDC_LOG_FUNC_END__;
3531 WDC_LOGD("Supported wps config = [%d]\n",
3533 *wps_mode = rsp.param1;
3538 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3540 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3544 __WDC_LOG_FUNC_END__;
3546 return WIFI_DIRECT_ERROR_NONE;
3551 int wifi_direct_foreach_supported_wps_types(wifi_direct_supported_wps_type_cb callback, void* user_data)
3553 wifi_direct_client_info_s *client_info = __wfd_get_control();
3555 __WDC_LOG_FUNC_START__;
3557 if ((client_info->is_registered == false)
3558 || (client_info->client_id == WFD_INVALID_ID))
3560 WDC_LOGE("Client is NOT registered.\n");
3561 __WDC_LOG_FUNC_END__;
3562 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3565 if (callback == NULL)
3567 WDC_LOGE("NULL Param [callback]!\n");
3568 __WDC_LOG_FUNC_END__;
3569 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3572 wifi_direct_client_request_s req;
3573 wifi_direct_client_response_s rsp;
3575 int ret = WIFI_DIRECT_ERROR_NONE;
3577 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3578 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3580 req.cmd = WIFI_DIRECT_CMD_GET_SUPPORTED_WPS_MODE;
3581 req.client_id = client_info->client_id;
3584 __wfd_client_send_request(client_info->sync_sockfd, &req,
3585 sizeof(wifi_direct_client_request_s));
3586 if (ret != WIFI_DIRECT_ERROR_NONE)
3588 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3589 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(ret));
3590 client_info->sync_sockfd = -1;
3591 __wfd_reset_control();
3592 __WDC_LOG_FUNC_END__;
3593 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3597 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3598 sizeof(wifi_direct_client_response_s))) <= 0)
3601 "Error!!! reading socket, status = %d errno = %s\n", ret,
3603 client_info->sync_sockfd = -1;
3604 __wfd_reset_control();
3605 __WDC_LOG_FUNC_END__;
3606 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3610 if (rsp.cmd == WIFI_DIRECT_CMD_GET_SUPPORTED_WPS_MODE)
3612 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3614 WDC_LOGD("Error!!! Result received = %d \n",
3616 WDC_LOGD("Error!!! [%s]\n",
3617 __wfd_print_error(rsp.result));
3618 __WDC_LOG_FUNC_END__;
3623 WDC_LOGD( "Supported wps config = [%d]\n",
3628 wps_mode = rsp.param1;
3630 if (wps_mode & WIFI_DIRECT_WPS_TYPE_PBC)
3631 result = callback(WIFI_DIRECT_WPS_TYPE_PBC, user_data);
3633 if ((result == true) && (wps_mode & WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY))
3634 result = callback(WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY, user_data);
3637 if ((result == true) && (wps_mode & WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD))
3638 result = callback(WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD, user_data);
3643 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3645 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3649 __WDC_LOG_FUNC_END__;
3651 return WIFI_DIRECT_ERROR_NONE;
3656 int wifi_direct_set_wps_type(wifi_direct_wps_type_e type)
3658 wifi_direct_client_info_s *client_info = __wfd_get_control();
3660 __WDC_LOG_FUNC_START__;
3662 if ((client_info->is_registered == false)
3663 || (client_info->client_id == WFD_INVALID_ID))
3665 WDC_LOGE("Client is NOT registered.\n");
3666 __WDC_LOG_FUNC_END__;
3667 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3670 if (type == WIFI_DIRECT_WPS_TYPE_PBC
3671 || type == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY
3672 || type == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD)
3674 WDC_LOGD("Param wps_mode [%d]\n", type);
3678 WDC_LOGE("Invalid Param [wps_mode]!\n");
3679 __WDC_LOG_FUNC_END__;
3680 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3683 wifi_direct_client_request_s req;
3684 wifi_direct_client_response_s rsp;
3686 int status = WIFI_DIRECT_ERROR_NONE;
3688 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3689 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3691 req.cmd = WIFI_DIRECT_CMD_SET_CURRENT_WPS_MODE;
3692 req.client_id = client_info->client_id;
3694 status =__wfd_client_send_request(client_info->sync_sockfd, &req,
3695 sizeof(wifi_direct_client_request_s));
3696 if (status != WIFI_DIRECT_ERROR_NONE)
3698 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3699 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3700 client_info->sync_sockfd = -1;
3701 __wfd_reset_control();
3702 __WDC_LOG_FUNC_END__;
3703 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3706 WDC_LOGD("writing msg hdr is success!\n");
3709 __wfd_client_send_request(client_info->sync_sockfd, &type,
3710 sizeof(wifi_direct_wps_type_e));
3711 if (status != WIFI_DIRECT_ERROR_NONE)
3713 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3714 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
3715 client_info->sync_sockfd = -1;
3716 __wfd_reset_control();
3717 __WDC_LOG_FUNC_END__;
3718 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3722 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3723 sizeof(wifi_direct_client_response_s))) <= 0)
3725 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
3726 client_info->sync_sockfd = -1;
3727 __wfd_reset_control();
3728 __WDC_LOG_FUNC_END__;
3729 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3733 if (rsp.cmd == WIFI_DIRECT_CMD_SET_CURRENT_WPS_MODE)
3735 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3737 WDC_LOGD("Error!!! Result received = %d \n",
3739 WDC_LOGD("Error!!! [%s]\n",
3740 __wfd_print_error(rsp.result));
3741 __WDC_LOG_FUNC_END__;
3747 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3749 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3753 __WDC_LOG_FUNC_END__;
3755 return WIFI_DIRECT_ERROR_NONE;
3758 int wifi_direct_get_wps_type(wifi_direct_wps_type_e* type)
3760 wifi_direct_client_info_s *client_info = __wfd_get_control();
3762 __WDC_LOG_FUNC_START__;
3764 if ((client_info->is_registered == false)
3765 || (client_info->client_id == WFD_INVALID_ID))
3767 WDC_LOGE("Client is NOT registered.\n");
3768 __WDC_LOG_FUNC_END__;
3769 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3774 WDC_LOGE("NULL Param [type]!\n");
3775 __WDC_LOG_FUNC_END__;
3776 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3779 wifi_direct_client_request_s req;
3780 wifi_direct_client_response_s rsp;
3781 wfd_config_data_s ls_config;
3783 int status = WIFI_DIRECT_ERROR_NONE;
3785 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3786 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3788 req.cmd = WIFI_DIRECT_CMD_GET_CONFIG;
3789 req.client_id = client_info->client_id;
3792 __wfd_client_send_request(client_info->sync_sockfd, &req,
3793 sizeof(wifi_direct_client_request_s));
3794 if (status != WIFI_DIRECT_ERROR_NONE)
3796 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
3797 WDC_LOGE("Error!!! [%s]\n",
3798 __wfd_print_error(status));
3799 client_info->sync_sockfd = -1;
3800 __wfd_reset_control();
3801 __WDC_LOG_FUNC_END__;
3802 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3806 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3807 sizeof(wifi_direct_client_response_s))) <= 0)
3809 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
3810 client_info->sync_sockfd = -1;
3811 __wfd_reset_control();
3812 __WDC_LOG_FUNC_END__;
3813 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3817 if (rsp.cmd == WIFI_DIRECT_CMD_GET_CONFIG)
3819 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3821 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
3822 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
3823 __WDC_LOG_FUNC_END__;
3830 WDC_LOGD("Link status = %d \n",
3834 __wfd_client_read_more_data(client_info->sync_sockfd,
3836 sizeof(wfd_config_data_s));
3837 if (status != WIFI_DIRECT_ERROR_NONE)
3839 WDC_LOGE("socket read error.");
3840 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3843 __wfd_client_print_config_data(&ls_config);
3845 *type = ls_config.wps_config;
3847 WDC_LOGD("wifi_direct_get_wps_type() SUCCESS");
3852 WDC_LOGE("Error!!! Invalid resp cmd = %d\n", rsp.cmd);
3853 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3857 __WDC_LOG_FUNC_END__;
3859 return WIFI_DIRECT_ERROR_NONE;
3863 int wifi_direct_set_ssid(const char *ssid)
3865 wifi_direct_client_info_s *client_info = __wfd_get_control();
3867 __WDC_LOG_FUNC_START__;
3869 if ((client_info->is_registered == false)
3870 || (client_info->client_id == WFD_INVALID_ID))
3872 WDC_LOGE("Client is NOT registered.\n");
3873 __WDC_LOG_FUNC_END__;
3874 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3879 WDC_LOGE("NULL Param [ssid]!\n");
3880 __WDC_LOG_FUNC_END__;
3881 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3884 WDC_LOGE("ssid = [%s]\n", ssid);
3886 wifi_direct_client_request_s req;
3887 wifi_direct_client_response_s rsp;
3889 int status = WIFI_DIRECT_ERROR_NONE;
3891 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3892 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3894 req.cmd = WIFI_DIRECT_CMD_SET_SSID;
3895 req.client_id = client_info->client_id;
3898 __wfd_client_send_request(client_info->sync_sockfd, &req,
3899 sizeof(wifi_direct_client_request_s));
3900 if (status != WIFI_DIRECT_ERROR_NONE)
3902 WDC_LOGE("Error!!! writing to socket, Errno = %s\n",
3904 WDC_LOGE("Error!!! [%s]\n",
3905 __wfd_print_error(status));
3906 client_info->sync_sockfd = -1;
3907 __wfd_reset_control();
3908 __WDC_LOG_FUNC_END__;
3909 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3912 WDC_LOGD("writing msg hdr is success!");
3915 __wfd_client_send_request(client_info->sync_sockfd, ssid,
3916 WIFI_DIRECT_MAX_SSID_LEN);
3917 if (status != WIFI_DIRECT_ERROR_NONE)
3920 "Error!!! writing to socket, Errno = %s\n",
3922 WDC_LOGE("Error!!! [%s]\n",
3923 __wfd_print_error(status));
3924 client_info->sync_sockfd = -1;
3925 __wfd_reset_control();
3926 __WDC_LOG_FUNC_END__;
3927 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3931 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
3932 sizeof(wifi_direct_client_response_s))) <= 0)
3934 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
3935 client_info->sync_sockfd = -1;
3936 __wfd_reset_control();
3937 __WDC_LOG_FUNC_END__;
3938 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
3942 if (rsp.cmd == WIFI_DIRECT_CMD_SET_SSID)
3944 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
3946 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
3947 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(rsp.result));
3948 __WDC_LOG_FUNC_END__;
3954 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
3956 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
3960 __WDC_LOG_FUNC_END__;
3962 return WIFI_DIRECT_ERROR_NONE;
3965 int wifi_direct_get_ssid(char **ssid)
3967 wifi_direct_client_info_s *client_info = __wfd_get_control();
3969 __WDC_LOG_FUNC_START__;
3973 WDC_LOGE("NULL Param [ssid]!\n");
3974 __WDC_LOG_FUNC_END__;
3975 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
3978 if ((client_info->is_registered == false)
3979 || (client_info->client_id == WFD_INVALID_ID))
3981 WDC_LOGE("Client is NOT registered.\n");
3982 __WDC_LOG_FUNC_END__;
3983 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
3986 wifi_direct_client_request_s req;
3987 wifi_direct_client_response_s rsp;
3988 char la_ssid[WIFI_DIRECT_MAX_SSID_LEN + 1] = { 0, };
3990 int status = WIFI_DIRECT_ERROR_NONE;
3992 memset(&req, 0, sizeof(wifi_direct_client_request_s));
3993 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
3995 req.cmd = WIFI_DIRECT_CMD_GET_SSID;
3996 req.client_id = client_info->client_id;
3999 __wfd_client_send_request(client_info->sync_sockfd, &req,
4000 sizeof(wifi_direct_client_request_s));
4001 if (status != WIFI_DIRECT_ERROR_NONE)
4003 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
4004 WDC_LOGE("Error!!! [%s]\n",
4005 __wfd_print_error(status));
4006 client_info->sync_sockfd = -1;
4007 __wfd_reset_control();
4008 __WDC_LOG_FUNC_END__;
4009 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4013 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
4014 sizeof(wifi_direct_client_response_s))) <= 0)
4016 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
4017 client_info->sync_sockfd = -1;
4018 __wfd_reset_control();
4019 __WDC_LOG_FUNC_END__;
4020 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4024 if (rsp.cmd == WIFI_DIRECT_CMD_GET_SSID)
4026 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
4028 WDC_LOGD("Error!!! Result received = %d \n",
4030 WDC_LOGD("Error!!! [%s]\n",
4031 __wfd_print_error(rsp.result));
4032 __WDC_LOG_FUNC_END__;
4037 WDC_LOGD("wifi_direct_get_ssid() %s SUCCESS \n",
4039 snprintf(la_ssid, WIFI_DIRECT_MAX_SSID_LEN+1, rsp.param2);
4040 *ssid = strdup(la_ssid);
4046 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
4048 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4052 __WDC_LOG_FUNC_END__;
4054 return WIFI_DIRECT_ERROR_NONE;
4057 int wifi_direct_get_device_name(char** device_name)
4059 wifi_direct_client_info_s *client_info = __wfd_get_control();
4061 __WDC_LOG_FUNC_START__;
4063 if (NULL == device_name)
4065 WDC_LOGE("NULL Param [device_name]!\n");
4066 __WDC_LOG_FUNC_END__;
4067 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4070 if ((client_info->is_registered == false)
4071 || (client_info->client_id == WFD_INVALID_ID))
4073 WDC_LOGE("Client is NOT registered.\n");
4074 __WDC_LOG_FUNC_END__;
4075 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4078 wifi_direct_client_request_s req;
4079 wifi_direct_client_response_s rsp;
4080 char la_device_name[WIFI_DIRECT_MAX_DEVICE_NAME_LEN + 1] = { 0, };
4082 int status = WIFI_DIRECT_ERROR_NONE;
4084 memset(&req, 0, sizeof(wifi_direct_client_request_s));
4085 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
4087 req.cmd = WIFI_DIRECT_CMD_GET_DEVICE_NAME;
4088 req.client_id = client_info->client_id;
4091 __wfd_client_send_request(client_info->sync_sockfd, &req,
4092 sizeof(wifi_direct_client_request_s));
4093 if (status != WIFI_DIRECT_ERROR_NONE)
4095 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
4096 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
4097 client_info->sync_sockfd = -1;
4098 __wfd_reset_control();
4099 __WDC_LOG_FUNC_END__;
4100 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4104 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
4105 sizeof(wifi_direct_client_response_s))) <= 0)
4107 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
4108 client_info->sync_sockfd = -1;
4109 __wfd_reset_control();
4110 __WDC_LOG_FUNC_END__;
4111 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4115 if (rsp.cmd == WIFI_DIRECT_CMD_GET_DEVICE_NAME)
4117 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
4119 WDC_LOGD("Error!!! Result received = %d \n",
4121 WDC_LOGD("Error!!! [%s]\n",
4122 __wfd_print_error(rsp.result));
4123 __WDC_LOG_FUNC_END__;
4128 WDC_LOGD("wifi_direct_get_device_name() %s SUCCESS \n", rsp.param2);
4129 snprintf(la_device_name, WIFI_DIRECT_MAX_DEVICE_NAME_LEN+1, rsp.param2);
4130 *device_name = strdup(la_device_name);
4136 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
4138 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4142 __WDC_LOG_FUNC_END__;
4144 return WIFI_DIRECT_ERROR_NONE;
4148 int wifi_direct_set_device_name(const char *device_name)
4150 wifi_direct_client_info_s *client_info = __wfd_get_control();
4152 __WDC_LOG_FUNC_START__;
4154 if ((client_info->is_registered == false)
4155 || (client_info->client_id == WFD_INVALID_ID))
4157 WDC_LOGE("Client is NOT registered.\n");
4158 __WDC_LOG_FUNC_END__;
4159 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4162 if (NULL == device_name)
4164 WDC_LOGE("NULL Param [device_name]!\n");
4165 __WDC_LOG_FUNC_END__;
4166 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4169 WDC_LOGE("device_name = [%s]\n", device_name);
4171 wifi_direct_client_request_s req;
4172 wifi_direct_client_response_s rsp;
4174 int status = WIFI_DIRECT_ERROR_NONE;
4176 memset(&req, 0, sizeof(wifi_direct_client_request_s));
4177 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
4179 req.cmd = WIFI_DIRECT_CMD_SET_DEVICE_NAME;
4180 req.client_id = client_info->client_id;
4183 __wfd_client_send_request(client_info->sync_sockfd, &req,
4184 sizeof(wifi_direct_client_request_s));
4185 if (status != WIFI_DIRECT_ERROR_NONE)
4187 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
4188 WDC_LOGE("Error!!! [%s]\n",
4189 __wfd_print_error(status));
4190 client_info->sync_sockfd = -1;
4191 __wfd_reset_control();
4192 __WDC_LOG_FUNC_END__;
4193 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4196 WDC_LOGD( "writing msg hdr is success!\n");
4199 __wfd_client_send_request(client_info->sync_sockfd, device_name,
4200 WIFI_DIRECT_MAX_DEVICE_NAME_LEN);
4201 if (status != WIFI_DIRECT_ERROR_NONE)
4203 WDC_LOGE("Error!!! writing to socket, Errno = %s\n", strerror(errno));
4204 WDC_LOGE("Error!!! [%s]\n", __wfd_print_error(status));
4205 client_info->sync_sockfd = -1;
4206 __wfd_reset_control();
4207 __WDC_LOG_FUNC_END__;
4208 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4212 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
4213 sizeof(wifi_direct_client_response_s))) <= 0)
4215 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
4216 client_info->sync_sockfd = -1;
4217 __wfd_reset_control();
4218 __WDC_LOG_FUNC_END__;
4219 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4223 if (rsp.cmd == WIFI_DIRECT_CMD_SET_DEVICE_NAME)
4225 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
4227 WDC_LOGE("Error!!! Result received = %d \n", rsp.result);
4228 WDC_LOGE("Error!!! [%s]\n",
4229 __wfd_print_error(rsp.result));
4230 __WDC_LOG_FUNC_END__;
4236 WDC_LOGE("Error!!! Invalid resp cmd = %d\n",
4238 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4242 __WDC_LOG_FUNC_END__;
4244 return WIFI_DIRECT_ERROR_NONE;
4248 int wifi_direct_get_network_interface_name(char** name)
4250 wifi_direct_client_info_s *client_info = __wfd_get_control();
4252 __WDC_LOG_FUNC_START__;
4256 WDC_LOGE("NULL Param [name]!\n");
4257 __WDC_LOG_FUNC_END__;
4258 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4261 if ((client_info->is_registered == false)
4262 || (client_info->client_id == WFD_INVALID_ID))
4264 WDC_LOGE("Client is NOT registered.\n");
4265 __WDC_LOG_FUNC_END__;
4266 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4269 wifi_direct_state_e status = 0;
4271 result = wifi_direct_get_state(&status);
4272 WDC_LOGD("wifi_direct_get_state() state=[%d], result=[%d]\n", status, result);
4274 if( status < WIFI_DIRECT_STATE_CONNECTED)
4276 WDC_LOGE("Device is not connected!\n");
4277 __WDC_LOG_FUNC_END__;
4278 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4281 char* get_str = NULL;
4282 get_str = vconf_get_str(VCONFKEY_IFNAME);
4284 if (get_str == NULL)
4286 WDC_LOGD( "vconf (%s) value is NULL!!!\n", VCONFKEY_IFNAME);
4287 __WDC_LOG_FUNC_END__;
4288 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4292 WDC_LOGD( "VCONFKEY_IFNAME(%s) : %s\n", VCONFKEY_IFNAME, get_str);
4294 char *temp_ifname = NULL;
4295 temp_ifname = strdup(get_str);
4296 if (NULL == temp_ifname)
4298 WDC_LOGE("Failed to allocate memory for ifname.\n");
4299 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
4302 *name = temp_ifname;
4305 __WDC_LOG_FUNC_END__;
4307 return WIFI_DIRECT_ERROR_NONE;
4312 int wifi_direct_get_ip_address(char **ip_address)
4314 wifi_direct_client_info_s *client_info = __wfd_get_control();
4316 __WDC_LOG_FUNC_START__;
4318 if (NULL == ip_address)
4320 WDC_LOGE("NULL Param [ip_address]!\n");
4321 __WDC_LOG_FUNC_END__;
4322 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4325 if ((client_info->is_registered == false)
4326 || (client_info->client_id == WFD_INVALID_ID))
4328 WDC_LOGE("Client is NOT registered.\n");
4329 __WDC_LOG_FUNC_END__;
4330 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4333 wifi_direct_state_e state = 0;
4335 result = wifi_direct_get_state(&state);
4336 WDC_LOGD( "wifi_direct_get_state() state=[%d], result=[%d]\n", state, result);
4338 if( state < WIFI_DIRECT_STATE_CONNECTED)
4340 WDC_LOGE("Device is not connected!\n");
4341 __WDC_LOG_FUNC_END__;
4342 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4345 char* get_str = NULL;
4346 get_str = vconf_get_str(VCONFKEY_LOCAL_IP);
4348 if (get_str == NULL)
4350 WDC_LOGD("vconf (%s) value is NULL!!!\n", VCONFKEY_LOCAL_IP);
4351 __WDC_LOG_FUNC_END__;
4352 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4356 WDC_LOGD("VCONFKEY_LOCAL_IP(%s) : %s\n", VCONFKEY_LOCAL_IP, get_str);
4358 char *temp_ip = NULL;
4359 temp_ip = strdup(get_str);
4360 if (NULL == temp_ip)
4362 WDC_LOGE("Failed to allocate memory for local ip address.\n");
4363 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
4366 *ip_address = temp_ip;
4370 __WDC_LOG_FUNC_END__;
4371 return WIFI_DIRECT_ERROR_NONE;
4375 int wifi_direct_get_subnet_mask(char** subnet_mask)
4377 wifi_direct_client_info_s *client_info = __wfd_get_control();
4379 __WDC_LOG_FUNC_START__;
4381 if (NULL == subnet_mask)
4383 WDC_LOGE("NULL Param [subnet_mask]!\n");
4384 __WDC_LOG_FUNC_END__;
4385 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4388 if ((client_info->is_registered == false)
4389 || (client_info->client_id == WFD_INVALID_ID))
4391 WDC_LOGE("Client is NOT registered.\n");
4392 __WDC_LOG_FUNC_END__;
4393 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4396 wifi_direct_state_e status = 0;
4398 result = wifi_direct_get_state(&status);
4399 WDC_LOGD("wifi_direct_get_state() state=[%d], result=[%d]\n", status, result);
4401 if( status < WIFI_DIRECT_STATE_CONNECTED)
4403 WDC_LOGE("Device is not connected!\n");
4404 __WDC_LOG_FUNC_END__;
4405 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4409 char* get_str = NULL;
4410 get_str = vconf_get_str(VCONFKEY_SUBNET_MASK);
4412 if (get_str == NULL)
4414 WDC_LOGD("vconf (%s) value is NULL!!!\n", VCONFKEY_SUBNET_MASK);
4415 __WDC_LOG_FUNC_END__;
4416 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4420 WDC_LOGD("VCONFKEY_SUBNET_MASK(%s) : %s", VCONFKEY_SUBNET_MASK, get_str);
4422 char *temp_subnetmask = NULL;
4423 temp_subnetmask = strdup(get_str);
4424 if (NULL == temp_subnetmask)
4426 WDC_LOGE("Failed to allocate memory for subnet mask.\n");
4427 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
4430 *subnet_mask = temp_subnetmask;
4433 __WDC_LOG_FUNC_END__;
4435 return WIFI_DIRECT_ERROR_NONE;
4439 int wifi_direct_get_gateway_address(char** gateway_address)
4441 wifi_direct_client_info_s *client_info = __wfd_get_control();
4443 __WDC_LOG_FUNC_START__;
4445 if (NULL == gateway_address)
4447 WDC_LOGE("NULL Param [gateway_address]!\n");
4448 __WDC_LOG_FUNC_END__;
4449 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4452 if ((client_info->is_registered == false)
4453 || (client_info->client_id == WFD_INVALID_ID))
4455 WDC_LOGE("Client is NOT registered.\n");
4456 __WDC_LOG_FUNC_END__;
4457 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4460 wifi_direct_state_e status = 0;
4462 result = wifi_direct_get_state(&status);
4463 WDC_LOGD("wifi_direct_get_state() state=[%d], result=[%d]\n", status, result);
4465 if( status < WIFI_DIRECT_STATE_CONNECTED)
4467 WDC_LOGE("Device is not connected!\n");
4468 __WDC_LOG_FUNC_END__;
4469 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4472 char* get_str = NULL;
4473 get_str = vconf_get_str(VCONFKEY_GATEWAY);
4475 if (get_str == NULL)
4477 WDC_LOGD("vconf (%s) value is NULL!!!\n", VCONFKEY_GATEWAY);
4478 __WDC_LOG_FUNC_END__;
4479 return WIFI_DIRECT_ERROR_NOT_PERMITTED;
4483 WDC_LOGD("VCONFKEY_GATEWAY(%s) : %s", VCONFKEY_GATEWAY, get_str);
4485 char *temp_gateway = NULL;
4486 temp_gateway = strdup(get_str);
4487 if (NULL == temp_gateway)
4489 WDC_LOGE("Failed to allocate memory for gateway address.");
4490 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
4493 *gateway_address = temp_gateway;
4496 __WDC_LOG_FUNC_END__;
4498 return WIFI_DIRECT_ERROR_NONE;
4502 int wifi_direct_get_mac_address(char **mac_address)
4504 wifi_direct_client_info_s *client_info = __wfd_get_control();
4506 __WDC_LOG_FUNC_START__;
4508 if (NULL == mac_address)
4510 WDC_LOGE("NULL Param [mac_address]!");
4511 __WDC_LOG_FUNC_END__;
4512 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4515 if ((client_info->is_registered == false)
4516 || (client_info->client_id == WFD_INVALID_ID))
4518 WDC_LOGD("Client is NOT registered.");
4519 __WDC_LOG_FUNC_END__;
4520 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4526 unsigned char la_mac_addr[6];
4528 memset(mac_info, 0, sizeof(mac_info));
4530 fd = open(WIFI_DIRECT_MAC_ADDRESS_INFO_FILE, O_RDONLY);
4533 WDC_LOGE("[.mac.info] file open failed.");
4534 __WDC_LOG_FUNC_END__;
4535 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4538 n = read(fd, mac_info, 18);
4541 WDC_LOGE("[.mac.info] file read failed.");
4544 __WDC_LOG_FUNC_END__;
4545 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4548 WDC_LOGD("mac_address = [%s]", mac_info);
4550 memset(la_mac_addr, 0, sizeof(la_mac_addr));
4551 macaddr_atoe(mac_info, la_mac_addr);
4552 la_mac_addr[0] |= 0x02;
4554 char *temp_mac = NULL;
4555 temp_mac = (char *) calloc(1, 18);
4556 if (NULL == temp_mac)
4558 WDC_LOGE("Failed to allocate memory for MAC address");
4561 return WIFI_DIRECT_ERROR_OUT_OF_MEMORY;
4564 snprintf(temp_mac, 18, MACSTR, MAC2STR(la_mac_addr));
4566 *mac_address = temp_mac;
4571 __WDC_LOG_FUNC_END__;
4572 return WIFI_DIRECT_ERROR_NONE;
4576 int wifi_direct_get_state(wifi_direct_state_e * state)
4578 wifi_direct_client_info_s *client_info = __wfd_get_control();
4580 __WDC_LOG_FUNC_START__;
4584 WDC_LOGE("NULL Param [state]!");
4585 __WDC_LOG_FUNC_END__;
4586 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4589 if ((client_info->is_registered == false)
4590 || (client_info->client_id == WFD_INVALID_ID))
4592 WDC_LOGE("Client is NOT registered.");
4593 __WDC_LOG_FUNC_END__;
4594 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4597 wifi_direct_client_request_s req;
4598 wifi_direct_client_response_s rsp;
4600 int ret = WIFI_DIRECT_ERROR_NONE;
4602 memset(&req, 0, sizeof(wifi_direct_client_request_s));
4603 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
4605 req.cmd = WIFI_DIRECT_CMD_GET_LINK_STATUS;
4606 req.client_id = client_info->client_id;
4609 __wfd_client_send_request(client_info->sync_sockfd, &req,
4610 sizeof(wifi_direct_client_request_s));
4611 if (ret != WIFI_DIRECT_ERROR_NONE)
4613 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
4614 WDC_LOGE("Error!!! [%s]", __wfd_print_error(ret));
4615 client_info->sync_sockfd = -1;
4616 __wfd_reset_control();
4617 __WDC_LOG_FUNC_END__;
4618 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4622 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
4623 sizeof(wifi_direct_client_response_s))) <= 0)
4625 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", ret,
4627 client_info->sync_sockfd = -1;
4628 __wfd_reset_control();
4629 __WDC_LOG_FUNC_END__;
4630 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4634 if (rsp.cmd == WIFI_DIRECT_CMD_GET_LINK_STATUS)
4636 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
4638 WDC_LOGD("Error!!! Result received = %d %s", rsp.result, __wfd_print_error(rsp.result));
4639 __WDC_LOG_FUNC_END__;
4644 WDC_LOGD("Link Status = %d", (int) rsp.param1);
4645 *state = (wifi_direct_state_e) rsp.param1;
4647 /* for CAPI : there is no WIFI_DIRECT_STATE_GROUP_OWNER type in CAPI */
4648 if(*state == WIFI_DIRECT_STATE_GROUP_OWNER)
4649 *state = WIFI_DIRECT_STATE_CONNECTED;
4655 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
4656 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4660 __WDC_LOG_FUNC_END__;
4662 return WIFI_DIRECT_ERROR_NONE;
4666 int wifi_direct_is_discoverable(bool* discoverable)
4668 wifi_direct_client_info_s *client_info = __wfd_get_control();
4670 __WDC_LOG_FUNC_START__;
4672 if (discoverable == NULL)
4674 WDC_LOGE("NULL Param [discoverable]!");
4675 __WDC_LOG_FUNC_END__;
4676 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4679 if ((client_info->is_registered == false)
4680 || (client_info->client_id == WFD_INVALID_ID))
4682 WDC_LOGE("Client is NOT registered.");
4683 __WDC_LOG_FUNC_END__;
4684 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4687 wifi_direct_client_request_s req;
4688 wifi_direct_client_response_s rsp;
4690 int status = WIFI_DIRECT_ERROR_NONE;
4692 memset(&req, 0, sizeof(wifi_direct_client_request_s));
4693 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
4695 req.cmd = WIFI_DIRECT_CMD_IS_DISCOVERABLE;
4696 req.client_id = client_info->client_id;
4699 __wfd_client_send_request(client_info->sync_sockfd, &req,
4700 sizeof(wifi_direct_client_request_s));
4701 if (status != WIFI_DIRECT_ERROR_NONE)
4703 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
4704 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
4705 client_info->sync_sockfd = -1;
4706 __wfd_reset_control();
4707 __WDC_LOG_FUNC_END__;
4708 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4712 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
4713 sizeof(wifi_direct_client_response_s))) <= 0)
4715 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", status, strerror(errno));
4716 client_info->sync_sockfd = -1;
4717 __wfd_reset_control();
4718 __WDC_LOG_FUNC_END__;
4719 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4723 if (rsp.cmd == WIFI_DIRECT_CMD_IS_DISCOVERABLE)
4725 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
4727 WDC_LOGD("Error!!! Result received = %d", rsp.result);
4728 WDC_LOGD("Error!!! [%s]", __wfd_print_error(rsp.result));
4729 __WDC_LOG_FUNC_END__;
4734 WDC_LOGD("wifi_direct_is_discoverable() %s SUCCESS", rsp.param2);
4735 *discoverable = (bool) rsp.param1;
4740 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
4741 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4745 __WDC_LOG_FUNC_END__;
4747 return WIFI_DIRECT_ERROR_NONE;
4752 int wifi_direct_is_listening_only(bool* listen_only)
4754 wifi_direct_client_info_s *client_info = __wfd_get_control();
4756 __WDC_LOG_FUNC_START__;
4758 if (listen_only == NULL)
4760 WDC_LOGE("NULL Param [listen_only]!");
4761 __WDC_LOG_FUNC_END__;
4762 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4765 if ((client_info->is_registered == false)
4766 || (client_info->client_id == WFD_INVALID_ID))
4768 WDC_LOGE("Client is NOT registered.");
4769 __WDC_LOG_FUNC_END__;
4770 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4773 wifi_direct_client_request_s req;
4774 wifi_direct_client_response_s rsp;
4776 int status = WIFI_DIRECT_ERROR_NONE;
4778 memset(&req, 0, sizeof(wifi_direct_client_request_s));
4779 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
4781 req.cmd = WIFI_DIRECT_CMD_IS_LISTENING_ONLY;
4782 req.client_id = client_info->client_id;
4785 __wfd_client_send_request(client_info->sync_sockfd, &req,
4786 sizeof(wifi_direct_client_request_s));
4787 if (status != WIFI_DIRECT_ERROR_NONE)
4789 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
4790 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
4791 client_info->sync_sockfd = -1;
4792 __wfd_reset_control();
4793 __WDC_LOG_FUNC_END__;
4794 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4798 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
4799 sizeof(wifi_direct_client_response_s))) <= 0)
4801 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", status, strerror(errno));
4802 client_info->sync_sockfd = -1;
4803 __wfd_reset_control();
4804 __WDC_LOG_FUNC_END__;
4805 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4809 if (rsp.cmd == WIFI_DIRECT_CMD_IS_LISTENING_ONLY)
4811 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
4813 WDC_LOGD("Error!!! Result received = %d", rsp.result);
4814 WDC_LOGD("Error!!! [%s]", __wfd_print_error(rsp.result));
4815 __WDC_LOG_FUNC_END__;
4820 WDC_LOGD("wifi_direct_is_listening_only() %s SUCCESS", rsp.param2);
4821 *listen_only = (bool) rsp.param1;
4826 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
4827 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4831 __WDC_LOG_FUNC_END__;
4833 return WIFI_DIRECT_ERROR_NONE;
4838 int wifi_direct_get_primary_device_type(wifi_direct_primary_device_type_e* type)
4840 wifi_direct_client_info_s *client_info = __wfd_get_control();
4842 __WDC_LOG_FUNC_START__;
4846 WDC_LOGE("NULL Param [type]!");
4847 __WDC_LOG_FUNC_END__;
4848 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4851 if ((client_info->is_registered == false)
4852 || (client_info->client_id == WFD_INVALID_ID))
4854 WDC_LOGE("Client is NOT registered.");
4855 __WDC_LOG_FUNC_END__;
4856 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4859 WDC_LOGD("Current primary_dev_type [%d]", WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE);
4861 *type = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE; // Telephone
4863 __WDC_LOG_FUNC_END__;
4865 return WIFI_DIRECT_ERROR_NONE;
4868 int wifi_direct_get_secondary_device_type(wifi_direct_secondary_device_type_e* type)
4870 wifi_direct_client_info_s *client_info = __wfd_get_control();
4872 __WDC_LOG_FUNC_START__;
4876 WDC_LOGE("NULL Param [type]!");
4877 __WDC_LOG_FUNC_END__;
4878 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4881 if ((client_info->is_registered == false)
4882 || (client_info->client_id == WFD_INVALID_ID))
4884 WDC_LOGE("Client is NOT registered.");
4885 __WDC_LOG_FUNC_END__;
4886 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4890 WDC_LOGD("Current second_dev_type [%d]", WIFI_DIRECT_SECONDARY_DEVICE_TYPE_PHONE_SM_DUAL);
4892 *type = WIFI_DIRECT_SECONDARY_DEVICE_TYPE_PHONE_SM_DUAL; // smart phone dual mode (wifi and cellular)
4894 __WDC_LOG_FUNC_END__;
4896 return WIFI_DIRECT_ERROR_NONE;
4899 int wifi_direct_set_autoconnection_mode(bool mode)
4901 wifi_direct_client_info_s *client_info = __wfd_get_control();
4903 __WDC_LOG_FUNC_START__;
4905 if ((client_info->is_registered == false)
4906 || (client_info->client_id == WFD_INVALID_ID))
4908 WDC_LOGE("Client is NOT registered.");
4909 __WDC_LOG_FUNC_END__;
4910 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
4913 wifi_direct_client_request_s req;
4914 wifi_direct_client_response_s rsp;
4916 int status = WIFI_DIRECT_ERROR_NONE;
4918 memset(&req, 0, sizeof(wifi_direct_client_request_s));
4919 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
4921 req.cmd = WIFI_DIRECT_CMD_SET_AUTOCONNECTION_MODE;
4922 req.client_id = client_info->client_id;
4924 status =__wfd_client_send_request(client_info->sync_sockfd, &req,
4925 sizeof(wifi_direct_client_request_s));
4926 if (status != WIFI_DIRECT_ERROR_NONE)
4928 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
4929 WDC_LOGE("Error!!! [%s]\n",
4930 __wfd_print_error(status));
4931 client_info->sync_sockfd = -1;
4932 __wfd_reset_control();
4933 __WDC_LOG_FUNC_END__;
4934 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4937 WDC_LOGD("writing msg hdr is success!");
4940 __wfd_client_send_request(client_info->sync_sockfd, &mode,
4942 if (status != WIFI_DIRECT_ERROR_NONE)
4944 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
4945 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
4946 client_info->sync_sockfd = -1;
4947 __wfd_reset_control();
4948 __WDC_LOG_FUNC_END__;
4949 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4953 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
4954 sizeof(wifi_direct_client_response_s))) <= 0)
4956 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", status, strerror(errno));
4957 client_info->sync_sockfd = -1;
4958 __wfd_reset_control();
4959 __WDC_LOG_FUNC_END__;
4960 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
4964 if (rsp.cmd == WIFI_DIRECT_CMD_SET_AUTOCONNECTION_MODE)
4966 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
4968 WDC_LOGD("Error!!! Result received = %d", rsp.result);
4969 WDC_LOGD("Error!!! [%s]", __wfd_print_error(rsp.result));
4970 __WDC_LOG_FUNC_END__;
4976 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
4977 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
4981 __WDC_LOG_FUNC_END__;
4983 return WIFI_DIRECT_ERROR_NONE;
4986 int wifi_direct_is_autoconnection_mode(bool* mode)
4988 wifi_direct_client_info_s *client_info = __wfd_get_control();
4990 __WDC_LOG_FUNC_START__;
4994 WDC_LOGE("NULL Param [mode]!");
4995 __WDC_LOG_FUNC_END__;
4996 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
4999 if ((client_info->is_registered == false)
5000 || (client_info->client_id == WFD_INVALID_ID))
5002 WDC_LOGE("Client is NOT registered.");
5003 __WDC_LOG_FUNC_END__;
5004 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
5007 wifi_direct_client_request_s req;
5008 wifi_direct_client_response_s rsp;
5010 int status = WIFI_DIRECT_ERROR_NONE;
5012 memset(&req, 0, sizeof(wifi_direct_client_request_s));
5013 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
5015 req.cmd = WIFI_DIRECT_CMD_IS_AUTOCONNECTION_MODE;
5016 req.client_id = client_info->client_id;
5019 __wfd_client_send_request(client_info->sync_sockfd, &req,
5020 sizeof(wifi_direct_client_request_s));
5021 if (status != WIFI_DIRECT_ERROR_NONE)
5023 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5024 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
5025 client_info->sync_sockfd = -1;
5026 __wfd_reset_control();
5027 __WDC_LOG_FUNC_END__;
5028 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5032 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
5033 sizeof(wifi_direct_client_response_s))) <= 0)
5035 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", status, strerror(errno));
5036 client_info->sync_sockfd = -1;
5037 __wfd_reset_control();
5038 __WDC_LOG_FUNC_END__;
5039 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5043 if (rsp.cmd == WIFI_DIRECT_CMD_IS_AUTOCONNECTION_MODE)
5045 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
5047 WDC_LOGD("Error!!! Result received = %d", rsp.result);
5048 WDC_LOGD("Error!!! [%s]", __wfd_print_error(rsp.result));
5049 __WDC_LOG_FUNC_END__;
5054 WDC_LOGD("wifi_direct_is_autoconnection_mode() %s SUCCESS", rsp.param2);
5055 *mode = (bool) rsp.param1;
5060 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
5061 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5065 __WDC_LOG_FUNC_END__;
5067 return WIFI_DIRECT_ERROR_NONE;
5072 int wifi_direct_set_persistent_group_enabled(bool enabled)
5074 wifi_direct_client_info_s *client_info = __wfd_get_control();
5076 __WDC_LOG_FUNC_START__;
5078 if ((client_info->is_registered == false)
5079 || (client_info->client_id == WFD_INVALID_ID))
5081 WDC_LOGE("Client is NOT registered.");
5082 __WDC_LOG_FUNC_END__;
5083 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
5086 wifi_direct_client_request_s req;
5087 wifi_direct_client_response_s rsp;
5089 int status = WIFI_DIRECT_ERROR_NONE;
5091 memset(&req, 0, sizeof(wifi_direct_client_request_s));
5092 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
5094 if (enabled == true)
5095 req.cmd = WIFI_DIRECT_CMD_ACTIVATE_PERSISTENT_GROUP;
5097 req.cmd = WIFI_DIRECT_CMD_DEACTIVATE_PERSISTENT_GROUP;
5099 req.client_id = client_info->client_id;
5102 __wfd_client_send_request(client_info->sync_sockfd, &req,
5103 sizeof(wifi_direct_client_request_s));
5104 if (status != WIFI_DIRECT_ERROR_NONE)
5106 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5107 WDC_LOGE("Error!!! [%s]",
5108 __wfd_print_error(status));
5109 client_info->sync_sockfd = -1;
5110 __wfd_reset_control();
5111 __WDC_LOG_FUNC_END__;
5112 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5116 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
5117 sizeof(wifi_direct_client_response_s))) <= 0)
5119 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", status, strerror(errno));
5120 client_info->sync_sockfd = -1;
5121 __wfd_reset_control();
5122 __WDC_LOG_FUNC_END__;
5123 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5127 if (rsp.cmd == WIFI_DIRECT_CMD_ACTIVATE_PERSISTENT_GROUP
5128 || rsp.cmd == WIFI_DIRECT_CMD_DEACTIVATE_PERSISTENT_GROUP)
5130 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
5132 WDC_LOGD( "Error!!! Result received = %d", rsp.result);
5133 WDC_LOGD( "Error!!! [%s]", __wfd_print_error(rsp.result));
5134 __WDC_LOG_FUNC_END__;
5139 WDC_LOGD("wifi_direct_set_persistent_group_enabled() SUCCESS");
5144 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
5145 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5149 __WDC_LOG_FUNC_END__;
5151 return WIFI_DIRECT_ERROR_NONE;
5155 int wifi_direct_is_persistent_group_enabled(bool* enabled)
5157 wifi_direct_client_info_s *client_info = __wfd_get_control();
5159 __WDC_LOG_FUNC_START__;
5161 if (enabled == NULL)
5163 WDC_LOGE("NULL Param [enabled]!");
5164 __WDC_LOG_FUNC_END__;
5165 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
5168 if ((client_info->is_registered == false)
5169 || (client_info->client_id == WFD_INVALID_ID))
5171 WDC_LOGE("Client is NOT registered.");
5172 __WDC_LOG_FUNC_END__;
5173 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
5176 wifi_direct_client_request_s req;
5177 wifi_direct_client_response_s rsp;
5179 int status = WIFI_DIRECT_ERROR_NONE;
5181 memset(&req, 0, sizeof(wifi_direct_client_request_s));
5182 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
5184 req.cmd = WIFI_DIRECT_CMD_IS_PERSISTENT_GROUP;
5185 req.client_id = client_info->client_id;
5188 __wfd_client_send_request(client_info->sync_sockfd, &req,
5189 sizeof(wifi_direct_client_request_s));
5190 if (status != WIFI_DIRECT_ERROR_NONE)
5192 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5193 WDC_LOGE("Error!!! [%s]\n",
5194 __wfd_print_error(status));
5195 client_info->sync_sockfd = -1;
5196 __wfd_reset_control();
5197 __WDC_LOG_FUNC_END__;
5198 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5202 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
5203 sizeof(wifi_direct_client_response_s))) <= 0)
5205 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", status, strerror(errno));
5206 client_info->sync_sockfd = -1;
5207 __wfd_reset_control();
5208 __WDC_LOG_FUNC_END__;
5209 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5213 if (rsp.cmd == WIFI_DIRECT_CMD_IS_PERSISTENT_GROUP)
5215 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
5217 WDC_LOGD("Error!!! Result received = %d", rsp.result);
5218 WDC_LOGD("Error!!! [%s]", __wfd_print_error(rsp.result));
5219 __WDC_LOG_FUNC_END__;
5224 WDC_LOGD("wifi_direct_is_persistent_group_enabled() %s SUCCESS", rsp.param2);
5225 *enabled = (bool) rsp.param1;
5230 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
5231 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5235 __WDC_LOG_FUNC_END__;
5237 return WIFI_DIRECT_ERROR_NONE;
5241 int wifi_direct_foreach_persistent_groups(wifi_direct_persistent_group_cb callback, void* user_data)
5243 wifi_direct_client_info_s *client_info = __wfd_get_control();
5245 __WDC_LOG_FUNC_START__;
5247 if ((client_info->is_registered == false)
5248 || (client_info->client_id == WFD_INVALID_ID))
5250 WDC_LOGE("Client is NOT registered.");
5251 __WDC_LOG_FUNC_END__;
5252 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
5255 if (callback == NULL)
5257 WDC_LOGE("NULL Param [callback]!");
5258 __WDC_LOG_FUNC_END__;
5259 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
5262 wifi_direct_client_request_s req;
5263 wifi_direct_client_response_s rsp;
5266 int status = WIFI_DIRECT_ERROR_NONE;
5268 memset(&req, 0, sizeof(wifi_direct_client_request_s));
5269 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
5271 req.cmd = WIFI_DIRECT_CMD_GET_PERSISTENT_GROUP_INFO;
5272 req.client_id = client_info->client_id;
5275 __wfd_client_send_request(client_info->sync_sockfd, &req,
5276 sizeof(wifi_direct_client_request_s));
5277 if (status != WIFI_DIRECT_ERROR_NONE)
5279 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5280 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
5281 client_info->sync_sockfd = -1;
5282 __wfd_reset_control();
5283 __WDC_LOG_FUNC_END__;
5284 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5288 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
5289 sizeof(wifi_direct_client_response_s))) <= 0)
5291 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", status, strerror(errno));
5292 client_info->sync_sockfd = -1;
5293 __wfd_reset_control();
5294 __WDC_LOG_FUNC_END__;
5295 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5299 if (rsp.cmd == WIFI_DIRECT_CMD_GET_PERSISTENT_GROUP_INFO)
5301 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
5303 WDC_LOGE("Error!!! Result received = %d", rsp.result);
5304 WDC_LOGE("Error!!! [%s]", __wfd_print_error(rsp.result));
5305 __WDC_LOG_FUNC_END__;
5311 int num = rsp.param1;
5313 wfd_persistent_group_info_s *buff = NULL;
5315 WDC_LOGD("Num of persistent groups = %d", (int) rsp.param1);
5319 buff = (wfd_persistent_group_info_s *) malloc(num * sizeof(wfd_persistent_group_info_s));
5322 WDC_LOGE("malloc() failed!!!.");
5323 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5327 __wfd_client_read_more_data(client_info->sync_sockfd,
5331 (wfd_persistent_group_info_s));
5332 if (status != WIFI_DIRECT_ERROR_NONE)
5336 WDC_LOGE("socket read error.");
5337 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5341 __wfd_client_print_persistent_group_info(buff, num);
5343 WDC_LOGD("wifi_direct_foreach_persistent_groups() SUCCESS");
5346 char* go_mac_address;
5348 for (i = 0; i < num; i++)
5350 ssid = strdup(buff[i].ssid);
5351 go_mac_address = (char *) calloc(1, 18);
5352 snprintf(go_mac_address, 18, MACSTR, MAC2STR(buff[i].go_mac_address));
5354 if (!callback(go_mac_address, ssid, user_data))
5365 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
5366 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5370 __WDC_LOG_FUNC_END__;
5372 return WIFI_DIRECT_ERROR_NONE;
5375 int wifi_direct_remove_persistent_group(const char* mac_address, const char* ssid)
5377 __WDC_LOG_FUNC_START__;
5379 wifi_direct_client_info_s *client_info = __wfd_get_control();
5381 if ((client_info->is_registered == false)
5382 || (client_info->client_id == WFD_INVALID_ID))
5384 WDC_LOGE("Client is NOT registered.");
5385 __WDC_LOG_FUNC_END__;
5386 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
5389 if ( NULL== mac_address )
5391 WDC_LOGE("NULL Param [mac_address]!");
5392 __WDC_LOG_FUNC_END__;
5393 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
5398 WDC_LOGE("NULL Param [ssid]!");
5399 __WDC_LOG_FUNC_END__;
5400 return WIFI_DIRECT_ERROR_INVALID_PARAMETER;
5403 wifi_direct_client_request_s req;
5404 wifi_direct_client_response_s rsp;
5405 wfd_persistent_group_info_s persistent_group_info;
5406 unsigned char la_mac_addr[6];
5408 int status = WIFI_DIRECT_ERROR_NONE;
5410 memset(&req, 0, sizeof(wifi_direct_client_request_s));
5411 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
5413 req.cmd = WIFI_DIRECT_CMD_REMOVE_PERSISTENT_GROUP;
5414 req.client_id = client_info->client_id;
5417 __wfd_client_send_request(client_info->sync_sockfd, &req,
5418 sizeof(wifi_direct_client_request_s));
5419 if (status != WIFI_DIRECT_ERROR_NONE)
5421 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5422 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
5423 client_info->sync_sockfd = -1;
5424 __wfd_reset_control();
5425 __WDC_LOG_FUNC_END__;
5426 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5429 WDC_LOGD("writing msg hdr is success!");
5431 strncpy(persistent_group_info.ssid, ssid, strlen(ssid));
5432 persistent_group_info.ssid[WIFI_DIRECT_MAX_SSID_LEN] = '\0';
5434 memset(la_mac_addr, 0, sizeof(la_mac_addr));
5435 macaddr_atoe(mac_address, la_mac_addr);
5436 persistent_group_info.go_mac_address[0] = la_mac_addr[0];
5437 persistent_group_info.go_mac_address[1] = la_mac_addr[1];
5438 persistent_group_info.go_mac_address[2] = la_mac_addr[2];
5439 persistent_group_info.go_mac_address[3] = la_mac_addr[3];
5440 persistent_group_info.go_mac_address[4] = la_mac_addr[4];
5441 persistent_group_info.go_mac_address[5] = la_mac_addr[5];
5444 __wfd_client_send_request(client_info->sync_sockfd, &persistent_group_info,
5445 sizeof(wfd_persistent_group_info_s));
5446 if (status != WIFI_DIRECT_ERROR_NONE)
5448 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5449 WDC_LOGE("Error!!! [%s]", __wfd_print_error(status));
5450 client_info->sync_sockfd = -1;
5451 __wfd_reset_control();
5452 __WDC_LOG_FUNC_END__;
5453 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5457 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
5458 sizeof(wifi_direct_client_response_s))) <= 0)
5460 WDC_LOGE("Error!!! reading socket, status = %d errno = %s\n", status, strerror(errno));
5461 client_info->sync_sockfd = -1;
5462 __wfd_reset_control();
5463 __WDC_LOG_FUNC_END__;
5464 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5468 if (rsp.cmd == WIFI_DIRECT_CMD_REMOVE_PERSISTENT_GROUP)
5470 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
5472 WDC_LOGD("Error!!! Result received = %d", rsp.result);
5473 WDC_LOGD("Error!!! [%s]", __wfd_print_error(rsp.result));
5474 __WDC_LOG_FUNC_END__;
5480 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
5481 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5485 __WDC_LOG_FUNC_END__;
5487 return WIFI_DIRECT_ERROR_NONE;
5490 int wifi_direct_set_p2poem_loglevel(int increase_log_level)
5492 wifi_direct_client_info_s *client_info = __wfd_get_control();
5494 __WDC_LOG_FUNC_START__;
5496 if ((client_info->is_registered == false)
5497 || (client_info->client_id == WFD_INVALID_ID))
5499 WDC_LOGE("Client is NOT registered.");
5500 __WDC_LOG_FUNC_END__;
5501 return WIFI_DIRECT_ERROR_NOT_INITIALIZED;
5504 wifi_direct_client_request_s req;
5505 wifi_direct_client_response_s rsp;
5507 int ret = WIFI_DIRECT_ERROR_NONE;
5509 memset(&req, 0, sizeof(wifi_direct_client_request_s));
5510 memset(&rsp, 0, sizeof(wifi_direct_client_response_s));
5512 req.cmd = WIFI_DIRECT_CMD_SET_OEM_LOGLEVEL;
5513 req.client_id = client_info->client_id;
5514 if (increase_log_level == 0)
5515 req.data.listen_only = false;
5517 req.data.listen_only = true;
5520 __wfd_client_send_request(client_info->sync_sockfd, &req,
5521 sizeof(wifi_direct_client_request_s));
5522 if (ret != WIFI_DIRECT_ERROR_NONE)
5524 WDC_LOGE("Error!!! writing to socket, Errno = %s", strerror(errno));
5525 WDC_LOGE("Error!!! [%s]", __wfd_print_error(ret));
5526 client_info->sync_sockfd = -1;
5527 __wfd_reset_control();
5528 __WDC_LOG_FUNC_END__;
5529 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5533 __wfd_client_read_socket(client_info->sync_sockfd, (char *) &rsp,
5534 sizeof(wifi_direct_client_response_s))) <= 0)
5536 WDC_LOGE("Error!!! reading socket, status = %d errno = %s", ret, strerror(errno));
5537 client_info->sync_sockfd = -1;
5538 __wfd_reset_control();
5539 __WDC_LOG_FUNC_END__;
5540 return WIFI_DIRECT_ERROR_COMMUNICATION_FAILED;
5544 if (rsp.cmd == WIFI_DIRECT_CMD_SET_OEM_LOGLEVEL)
5546 if (rsp.result != WIFI_DIRECT_ERROR_NONE)
5548 WDC_LOGD("Error!!! Result received = %d", rsp.result);
5549 WDC_LOGD("Error!!! [%s]", __wfd_print_error(rsp.result));
5550 __WDC_LOG_FUNC_END__;
5556 WDC_LOGE("Error!!! Invalid resp cmd = %d", rsp.cmd);
5557 return WIFI_DIRECT_ERROR_OPERATION_FAILED;
5561 __WDC_LOG_FUNC_END__;
5563 return WIFI_DIRECT_ERROR_NONE;