summaryrefslogtreecommitdiff
path: root/popup-wifidirect/src/wfd-app-client.c
diff options
context:
space:
mode:
Diffstat (limited to 'popup-wifidirect/src/wfd-app-client.c')
-rw-r--r--[-rwxr-xr-x]popup-wifidirect/src/wfd-app-client.c986
1 files changed, 452 insertions, 534 deletions
diff --git a/popup-wifidirect/src/wfd-app-client.c b/popup-wifidirect/src/wfd-app-client.c
index b4b6f74..f867fbd 100755..100644
--- a/popup-wifidirect/src/wfd-app-client.c
+++ b/popup-wifidirect/src/wfd-app-client.c
@@ -1,13 +1,13 @@
/*
* WiFi-Direct UG
*
-* Copyright 2012 Samsung Electronics Co., Ltd
+* Copyright 2012 Samsung Electronics Co., Ltd
-* Licensed under the Flora License, Version 1.1 (the "License");
+* Licensed under the Flora License, Version 1.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
-* http://floralicense.org/license
+* http://www.tizenopensource.org/license
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -24,17 +24,25 @@
* @author Sungsik Jang (sungsik.jang@samsung.com)
* @version 0.1
*/
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <notification.h>
+#include <Elementary.h>
+#include <app_control.h>
#include <vconf.h>
+#include <notification.h>
+#ifdef WFD_HOSTAPD_ENABLER
+#include <tethering.h>
+#include <network-cm-intf.h>
+#include <network-wifi-intf.h>
+#endif
+#include <dd-display.h>
#include "wfd-app.h"
#include "wfd-app-util.h"
#include "wfd-app-strings.h"
+#include "wfd-app-popup-view.h"
/**
* This function let the app make a callback for connected peer
@@ -44,29 +52,26 @@
*/
bool _wfd_connected_peer_cb(wifi_direct_connected_peer_info_s *peer, void *user_data)
{
- __WDPOP_LOG_FUNC_ENTER__;
+ __WFD_APP_FUNC_ENTER__;
wfd_appdata_t *ad = (wfd_appdata_t *) user_data;
+
if (NULL == ad || NULL == peer || NULL == peer->device_name || NULL == peer->mac_address) {
- WDPOP_LOGD( "NULL parameters.\n");
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "NULL parameters.\n");
return FALSE;
}
int peer_cnt = ad->raw_connected_peer_cnt;
- WDPOP_LOGD( "%dth connected peer. [%s]\n", peer_cnt, peer->device_name);
+ strncpy(ad->raw_connected_peers[peer_cnt].ssid, peer->device_name, sizeof(ad->raw_connected_peers[peer_cnt].ssid) - 1);
+ strncpy(ad->raw_connected_peers[peer_cnt].mac_address, peer->mac_address, WFD_MAC_ADDRESS_SIZE - 1);
- strncpy(ad->raw_connected_peers[peer_cnt].ssid, peer->device_name, sizeof(ad->raw_connected_peers[peer_cnt].ssid));
- ad->raw_connected_peers[peer_cnt].ssid[31] = '\0';
- strncpy(ad->raw_connected_peers[peer_cnt].mac_address, peer->mac_address, WFD_MAC_ADDRESS_SIZE);
- ad->raw_connected_peers[peer_cnt].mac_address[17] = '\0';
- WDPOP_LOGD( "\tSSID: [%s]\n", ad->raw_connected_peers[peer_cnt].ssid);
ad->raw_connected_peer_cnt++;
free(peer->device_name);
free(peer->mac_address);
free(peer);
- __WDPOP_LOG_FUNC_EXIT__;
+ __WFD_APP_FUNC_EXIT__;
return TRUE;
}
@@ -75,13 +80,13 @@ bool _wfd_connected_peer_cb(wifi_direct_connected_peer_info_s *peer, void *user_
* @return If success, return 0, else return -1
* @param[in] ugd the pointer to the main data structure
*/
-int _wfd_app_get_connected_peers(void *user_data)
+int wfd_app_get_connected_peers(void *user_data)
{
- __WDPOP_LOG_FUNC_ENTER__;
+ __WFD_APP_FUNC_ENTER__;
wfd_appdata_t *ad = (wfd_appdata_t *) user_data;
if (NULL == ad) {
- WDPOP_LOGD( "NULL parameters.\n");
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "NULL parameters.\n");
return -1;
}
@@ -91,165 +96,28 @@ int _wfd_app_get_connected_peers(void *user_data)
res = wifi_direct_foreach_connected_peers(_wfd_connected_peer_cb, (void *)ad);
if (res != WIFI_DIRECT_ERROR_NONE) {
ad->raw_connected_peer_cnt = 0;
- WDPOP_LOGD( "Get connected peer failed: %d\n", res);
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Get connected peer failed: %d\n", res);
}
- __WDPOP_LOG_FUNC_EXIT__;
+ __WFD_APP_FUNC_EXIT__;
return 0;
}
/**
- * This function let the app delete the notification
- * @return void
- */
-void _del_wfd_notification()
-{
- __WDPOP_LOG_FUNC_ENTER__;
-
- /* delete the notification */
- notification_error_e noti_err = NOTIFICATION_ERROR_NONE;
- noti_err = notification_delete_all_by_type(NULL, NOTIFICATION_TYPE_NOTI);
- if (noti_err != NOTIFICATION_ERROR_NONE) {
- WDPOP_LOGD( "Fail to notification_delete_all_by_type.(%d)\n", noti_err);
- return;
- }
-
- __WDPOP_LOG_FUNC_EXIT__;
-}
-
-/**
- * This function let the app add the notification when it is connected
- * @return void
- * @param[in] user_data the pointer to the main data structure
- */
-void _add_wfd_peers_connected_notification(void *user_data)
-{
- __WDPOP_LOG_FUNC_ENTER__;
-
- wfd_appdata_t *ad = (wfd_appdata_t *) user_data;
- if (NULL == ad || NULL == ad->noti) {
- WDPOP_LOGD( "NULL parameters.\n");
- return;
- }
-
- char msg[WFD_MAX_SIZE] = {0};
- notification_error_e noti_err = NOTIFICATION_ERROR_NONE;
-
- /* delete all notifications */
- _del_wfd_notification();
-
- /* set the icon */
- noti_err = notification_set_image(ad->noti, NOTIFICATION_IMAGE_TYPE_ICON, RESDIR"/images/A09_notification_icon.png");
- if (noti_err != NOTIFICATION_ERROR_NONE) {
- WDPOP_LOGD( "Fail to notification_set_image. (%d)\n", noti_err);
- return;
- }
-
- /* set the title and content */
- _wfd_app_get_connected_peers(ad);
- snprintf(msg, WFD_MAX_SIZE, "Connected with %d devices via Wi-Fi Direct", ad->raw_connected_peer_cnt);
- noti_err = notification_set_text(ad->noti, NOTIFICATION_TEXT_TYPE_TITLE, msg, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
- if (noti_err != NOTIFICATION_ERROR_NONE) {
- WDPOP_LOGD( "Fail to notification_set_text. (%d)\n", noti_err);
- return;
- }
-
- /* notify the quick panel */
- noti_err = notification_insert(ad->noti, NULL);
- if (noti_err != NOTIFICATION_ERROR_NONE) {
- WDPOP_LOGD( "Fail to notification_insert.(%d)\n", noti_err);
- return;
- }
-
- __WDPOP_LOG_FUNC_EXIT__;
-}
-
-/**
- * This function let the app add the notification when it shoule be turned off
- * @return void
- * @param[in] user_data the pointer to the main data structure
- */
-void _add_wfd_turn_off_notification(void *user_data)
-{
- __WDPOP_LOG_FUNC_ENTER__;
-
- wfd_appdata_t *ad = (wfd_appdata_t *) user_data;
- if (NULL == ad || NULL == ad->noti) {
- WDPOP_LOGD( "NULL parameters.\n");
- return;
- }
-
- notification_error_e noti_err = NOTIFICATION_ERROR_NONE;
-
- /* delete all notifications */
- _del_wfd_notification();
-
- /* set the icon */
- noti_err = notification_set_image(ad->noti, NOTIFICATION_IMAGE_TYPE_ICON, RESDIR"/images/A09_notification_icon.png");
- if (noti_err != NOTIFICATION_ERROR_NONE) {
- WDPOP_LOGD( "Fail to notification_set_image. (%d)\n", noti_err);
- return;
- }
-
- /* set the title and content */
- noti_err = notification_set_text(ad->noti, NOTIFICATION_TEXT_TYPE_TITLE,
- "Disable Wi-Fi Direct after use", NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
- if (noti_err != NOTIFICATION_ERROR_NONE) {
- WDPOP_LOGD( "Fail to notification_set_text. (%d)\n", noti_err);
- return;
- }
-
- noti_err = notification_set_text(ad->noti, NOTIFICATION_TEXT_TYPE_CONTENT,
- "Disable Wi-Fi Direct after use to save battery", NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
- if (noti_err != NOTIFICATION_ERROR_NONE) {
- WDPOP_LOGD( "Fail to notification_set_text. (%d)\n", noti_err);
- return;
- }
-
- bundle *b = NULL;
- b = bundle_create();
- appsvc_set_pkgname(b, PACKAGE);
- appsvc_add_data(b, NOTIFICATION_BUNDLE_PARAM, NOTIFICATION_BUNDLE_VALUE);
-
- int res = NOTIFICATION_ERROR_NONE;
- res = notification_set_execute_option(ad->noti, NOTIFICATION_EXECUTE_TYPE_SINGLE_LAUNCH, /*Button Text*/NULL, NULL, b);
- if (res != NOTIFICATION_ERROR_NONE) {
- WDPOP_LOGD( "Failed to notification_set_execute_option. [%d]", res);
- bundle_free(b);
- return;
- }
- bundle_free(b);
-
- /* set display application list */
- noti_err = notification_set_display_applist(ad->noti, NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY);
- if (noti_err != NOTIFICATION_ERROR_NONE) {
- WDPOP_LOGD( "Fail to notification_set_display_applist : %d\n", noti_err);
- return;
- }
-
- /* notify the quick panel */
- noti_err = notification_insert(ad->noti, NULL);
- if (noti_err != NOTIFICATION_ERROR_NONE) {
- WDPOP_LOGD( "Fail to notification_insert.(%d)\n", noti_err);
- return;
- }
-
- __WDPOP_LOG_FUNC_EXIT__;
-}
-
-/**
* This function let the app make a callback for deactivating wfd automatically when connected
* @return if stop the timer, return ECORE_CALLBACK_CANCEL, else return ECORE_CALLBACK_RENEW
* @param[in] user_data the pointer to the main data structure
*/
-static Eina_Bool _wfd_automatic_deactivated_for_connection_cb(void *user_data)
+Eina_Bool wfd_automatic_deactivated_for_connection_cb(void *user_data)
{
+ __WFD_APP_FUNC_ENTER__;
int interval = 0;
int wfd_transfer_state = 0;
+ int res = 0;
wfd_appdata_t *ad = (wfd_appdata_t *)user_data;
if (NULL == ad) {
- WDPOP_LOGD( "NULL parameters.\n");
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "NULL parameters.\n");
return ECORE_CALLBACK_CANCEL;
}
@@ -261,176 +129,195 @@ static Eina_Bool _wfd_automatic_deactivated_for_connection_cb(void *user_data)
/* get transfer state */
if (vconf_get_int(VCONFKEY_WIFI_DIRECT_TRANSFER_STATE, &wfd_transfer_state) < 0) {
- WDPOP_LOGD( "Error reading vconf (%s)\n",
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Error reading vconf (%s)\n",
VCONFKEY_WIFI_DIRECT_TRANSFER_STATE);
return ECORE_CALLBACK_CANCEL;
}
+ res = wifi_direct_get_state(&ad->wfd_status);
+ if (res != WIFI_DIRECT_ERROR_NONE) {
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ if (ad->wfd_status < WIFI_DIRECT_STATE_CONNECTED) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Wi-Fi Direct is unconnected!");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
/* show tickernoti*/
if (wfd_transfer_state > VCONFKEY_WIFI_DIRECT_TRANSFER_START) {
- WDPOP_LOGD( "No RX/TX packet, turn off WFD automatically.\n");
- _add_wfd_turn_off_notification(ad);
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "Display Toast popup.\n");
+ notification_status_message_post(_("IDS_WIFI_BODY_TO_SAVE_BATTERY_POWER_DISABLE_WI_FI_DIRECT_AFTER_USE"));
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "No RX/TX packet, turn off WFD automatically.\n");
+ wfd_app_util_add_wfd_turn_off_notification(ad);
} else {
- WDPOP_LOGD( "Has RX/TX packet, restart.\n");
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "Has RX/TX packet, restart.\n");
ad->last_wfd_transmit_time = time(NULL);
return ECORE_CALLBACK_RENEW;
}
+ ad->transmit_timer = NULL;
+ __WFD_APP_FUNC_EXIT__;
return ECORE_CALLBACK_CANCEL;
}
-/**
- * This function let the app make a callback for registering activation event
- * @return void
- * @param[in] error_code the returned error code
- * @param[in] device_state the state of device
- * @param[in] user_data the pointer to the main data structure
- */
-void _cb_activation(int error_code, wifi_direct_device_state_e device_state, void *user_data)
+int wfd_app_client_switch_off(void *data)
{
- __WDPOP_LOG_FUNC_ENTER__;
- wfd_appdata_t *ad = (wfd_appdata_t *)user_data;
-
- switch (device_state) {
- case WIFI_DIRECT_DEVICE_STATE_ACTIVATED:
- WDPOP_LOGD( "event ------------------ WIFI_DIRECT_DEVICE_STATE_ACTIVATED\n");
- break;
-
- case WIFI_DIRECT_DEVICE_STATE_DEACTIVATED:
- WDPOP_LOGD( "event ------------------ WIFI_DIRECT_DEVICE_STATE_DEACTIVATED\n");
- WDPOP_LOGD( "Termination process of wifi-direct popup begins...\n");
+ wfd_appdata_t *ad = (wfd_appdata_t *)data;
+ int res;
+ if(NULL == ad) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "NULL == ad!\n");
+ return -1;
+ }
+ res = wifi_direct_get_state(&ad->wfd_status);
+ if (res != WIFI_DIRECT_ERROR_NONE) {
+ return ECORE_CALLBACK_CANCEL;
+ }
- /* when deactivated, stop the timer */
- if (ad->transmit_timer) {
- ecore_timer_del(ad->transmit_timer);
- ad->transmit_timer = NULL;
+ if (ad->wfd_status >= WIFI_DIRECT_STATE_ACTIVATING) {
+ /*if connected, disconnect all devices*/
+ if (WIFI_DIRECT_STATE_CONNECTED == ad->wfd_status) {
+ res = wifi_direct_disconnect_all();
+ if (res != WIFI_DIRECT_ERROR_NONE) {
+ return -1;
+ }
+ }
+ res = wifi_direct_deactivate();
+ if (res != WIFI_DIRECT_ERROR_NONE) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to deactivate Wi-Fi Direct. error code = [%d]\n", res);
+ return -1;
}
-
- elm_exit();
- break;
-
- default:
- break;
}
- __WDPOP_LOG_FUNC_EXIT__;
+ return 0;
}
+#ifdef WFD_FIVE_MIN_IDLE_DEACTIVATION
/**
- * This function let the app find the peer by mac address
- * @return the found peer
- * @param[in] data the pointer to the main data structure
- * @param[in] mac_address the pointer to mac address
+ * This function let the ug make a callback for deactivating wfd automatically
+ * @return if stop the timer, return ECORE_CALLBACK_CANCEL, else return ECORE_CALLBACK_RENEW
+ * @param[in] user_data the pointer to the main data structure
*/
-static wfd_device_info_t *_wfd_app_find_peer_by_mac_address(void *data, const char *mac_address)
+static Eina_Bool _wfd_automatic_deactivated_for_no_connection_cb(void *user_data)
{
- __WDPOP_LOG_FUNC_ENTER__;
- wfd_appdata_t *ad = (wfd_appdata_t *) data;
- int i;
+ int res = -1;
+ int interval = 0;
+ wfd_appdata_t *ad = (wfd_appdata_t *)user_data;
+#ifdef WFD_SCREEN_MIRRORING_ENABLED
+ int screen_mirroring_status = 0;
+#endif
- if (ad == NULL) {
- WDPOP_LOGD( "Incorrect parameter(NULL)\n");
- return NULL;
+ if (NULL == ad) {
+ return ECORE_CALLBACK_CANCEL;
}
- WDPOP_LOGD( "find peer by MAC [%s] \n", mac_address);
-
- for (i = 0; i < ad->discovered_peer_count; i++) {
- WDPOP_LOGD( "check %dth peer\n", i);
-
- if (!strncmp(mac_address, (const char *) ad->discovered_peers[i].mac_address, 18)) {
- WDPOP_LOGD( "found peer. [%d]\n", i);
- __WDPOP_LOG_FUNC_EXIT__;
- return &ad->discovered_peers[i];
- }
+ /* check the action, if action is exist, keep the cb */
+ res = wifi_direct_get_state(&ad->wfd_status);
+ if (res != WIFI_DIRECT_ERROR_NONE) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Get wifi-direct status WIFI_DIRECT_ERROR_NONE!\n");
+ return ECORE_CALLBACK_CANCEL;
}
- __WDPOP_LOG_FUNC_EXIT__;
- return NULL;
-}
-
-/**
- * This function let the app make a callback for discovering peer
- * @return TRUE
- * @param[in] peer the pointer to the discovered peer
- * @param[in] user_data the pointer to the main data structure
- */
-bool _wfd_app_discoverd_peer_cb(wifi_direct_discovered_peer_info_s *peer, void *user_data)
-{
- __WDPOP_LOG_FUNC_ENTER__;
- wfd_appdata_t *ad = (wfd_appdata_t *) user_data;
+ if (ad->last_wfd_status != ad->wfd_status) {
+ ad->last_wfd_status = ad->wfd_status;
+ ad->last_wfd_time = time(NULL);
+ return ECORE_CALLBACK_RENEW;
+ }
- if (NULL != peer->device_name) {
- WDPOP_LOGD( "discovered peer ssid[%s]\n", peer->device_name);
- strncpy(ad->discovered_peers[ad->discovered_peer_count].ssid, peer->device_name, 32);
- ad->discovered_peers[ad->discovered_peer_count].ssid[31] = '\0';
- } else {
- WDPOP_LOGD( "peer's device name is NULL\n");
+ /* check the timeout, if not timeout, keep the cb */
+ interval = time(NULL) - ad->last_wfd_time;
+ if (interval < MAX_NO_ACTION_TIME_OUT) {
+ return ECORE_CALLBACK_RENEW;
}
- if (NULL != peer->mac_address) {
- WDPOP_LOGD( "discovered peer mac[%s]\n", peer->mac_address);
- strncpy(ad->discovered_peers[ad->discovered_peer_count].mac_address, peer->mac_address, 18);
- ad->discovered_peers[ad->discovered_peer_count].mac_address[17] = '\0';
+ /* turn off the Wi-Fi Direct */
+ wifi_direct_get_state(&ad->wfd_status);
+ if (ad->wfd_status < WIFI_DIRECT_STATE_ACTIVATING) {
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "wfd_status < WIFI_DIRECT_STATE_ACTIVATING!\n");
} else {
- WDPOP_LOGD( "peer's mac is NULL\n");
- }
+#ifdef WFD_SCREEN_MIRRORING_ENABLED
+ if (vconf_get_int(VCONFKEY_SCREEN_MIRRORING_STATE, &screen_mirroring_status) < 0)
+ {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to get vconf VCONFKEY_SCREEN_MIRRORING_STATE\n");
+ }
- ad->discovered_peer_count++;
+ if (screen_mirroring_status == VCONFKEY_SCREEN_MIRRORING_ACTIVATED) {
+ ad->last_wfd_time = time(NULL);
+ return ECORE_CALLBACK_RENEW;
+ } else {
+ /* turn off the Wi-Fi Direct */
+ wfd_app_client_switch_off(ad);
+ ad->popup = wfd_draw_pop_type_auto_deactivation(ad->win, user_data);
+ }
+#endif
+ }
- __WDPOP_LOG_FUNC_EXIT__;
- return TRUE;
+ /* reset monitor timer */
+ if (ad->monitor_timer) {
+ ad->monitor_timer = NULL; //ECORE_CALLBACK_CANCEL will release timer.
+ }
+ return ECORE_CALLBACK_CANCEL;
}
+#endif
/**
- * This function let the app make a callback for registering discover event
+ * This function let the app make a callback for registering activation event
* @return void
* @param[in] error_code the returned error code
- * @param[in] discovery_state the state of discover
+ * @param[in] device_state the state of device
* @param[in] user_data the pointer to the main data structure
*/
-void _cb_discover(int error_code, wifi_direct_discovery_state_e discovery_state, void *user_data)
+void _cb_activation(int error_code, wifi_direct_device_state_e device_state, void *user_data)
{
- __WDPOP_LOG_FUNC_ENTER__;
+ __WFD_APP_FUNC_ENTER__;
wfd_appdata_t *ad = (wfd_appdata_t *)user_data;
- int ret;
-
- switch (discovery_state) {
- case WIFI_DIRECT_DISCOVERY_STARTED:
- WDPOP_LOGD( "event ------------------ WIFI_DIRECT_DISCOVERY_STARTED\n");
- break;
-
- case WIFI_DIRECT_ONLY_LISTEN_STARTED:
- WDPOP_LOGD( "event ------------------ WIFI_DIRECT_ONLY_LISTEN_STARTED\n");
- break;
- case WIFI_DIRECT_DISCOVERY_FINISHED:
- WDPOP_LOGD( "event ------------------ WIFI_DIRECT_DISCOVERY_FINISHED\n");
- break;
-
- case WIFI_DIRECT_DISCOVERY_FOUND:
- WDPOP_LOGD( "event ------------------ WIFI_DIRECT_DISCOVERY_FOUND\n");
-
- if (NULL != ad->discovered_peers) {
- free(ad->discovered_peers);
- ad->discovered_peers = NULL;
+ switch (device_state) {
+ case WIFI_DIRECT_DEVICE_STATE_ACTIVATED:
+ {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "---------------WIFI_DIRECT_DEVICE_STATE_ACTIVATED\n");
+#ifdef NOT_CONNECTED_INDICATOR_ICON
+ wfd_app_util_add_indicator_icon(ad);
+#endif
+#ifdef WFD_FIVE_MIN_IDLE_DEACTIVATION
+ if (NULL == ad->monitor_timer) {
+ ad->last_wfd_time = time(NULL);
+ ad->monitor_timer = ecore_timer_add(5.0,
+ (Ecore_Task_Cb)_wfd_automatic_deactivated_for_no_connection_cb, ad);
}
+#endif
+ }
+ break;
- ad->discovered_peers = calloc(10, sizeof(wfd_device_info_t));
- ad->discovered_peer_count = 0;
+ case WIFI_DIRECT_DEVICE_STATE_DEACTIVATED:
+ {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "---------------WIFI_DIRECT_DEVICE_STATE_DEACTIVATED\n");
+ /* when deactivated, stop the timer */
+ if (ad->transmit_timer) {
+ ecore_timer_del(ad->transmit_timer);
+ ad->transmit_timer = NULL;
+ }
- ret = wifi_direct_foreach_discovered_peers(_wfd_app_discoverd_peer_cb, (void *) ad);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- WDPOP_LOGD( "get discovery result failed: %d\n", ret);
+#ifdef WFD_FIVE_MIN_IDLE_DEACTIVATION
+ /* when deactivated, stop the timer */
+ if (ad->monitor_timer) {
+ ecore_timer_del(ad->monitor_timer);
+ ad->monitor_timer = NULL;
}
- break;
+#endif
+ wfd_app_util_del_notification(ad);
+#ifdef WFD_SCREEN_MIRRORING_ENABLED
+ wfd_app_util_set_screen_mirroring_deactivated(ad);
+#endif
+ }
+ break;
default:
break;
}
- __WDPOP_LOG_FUNC_EXIT__;
+ __WFD_APP_FUNC_EXIT__;
}
/**
@@ -443,285 +330,330 @@ void _cb_discover(int error_code, wifi_direct_discovery_state_e discovery_state,
*/
void _cb_connection(int error_code, wifi_direct_connection_state_e connection_state, const char *mac_address, void *user_data)
{
- __WDPOP_LOG_FUNC_ENTER__;
+ __WFD_APP_FUNC_ENTER__;
wfd_appdata_t *ad = (wfd_appdata_t *)user_data;
int result = -1;
- char msg[WFD_POP_STR_MAX_LEN] = {0};
- wfd_device_info_t *peer_info = NULL;
+ int wfd_state = -1;
+#ifdef WFD_SCREEN_MIRRORING_ENABLED
+ int screen_mirroring_status = 0;
+#endif
+ wifi_direct_discovered_peer_info_s *peer_info = NULL;
+ wfd_connection_info_s *connection = ad->connection;
+#ifdef NOT_CONNECTED_INDICATOR_ICON
+ notification_error_e noti_err = NOTIFICATION_ERROR_NONE;
+#endif
+ char popup_text[MAX_POPUP_TEXT_SIZE] = {0, };
/* find the peer's name by the mac address */
- if (NULL == mac_address) {
- WDPOP_LOGE("ERROR : mac address is NULL !!\n");
- return;
- }
+ WFD_RET_IF(NULL == mac_address, "ERROR : mac address is NULL !!\n");
+
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "-------------------error_code:%d connection_state:%d \n",
+ error_code, connection_state);
/* when disconnection, mac_address is empty */
- if (connection_state <= WIFI_DIRECT_CONNECTION_RSP ||
- connection_state == WIFI_DIRECT_INVITATION_REQ) {
- memset(ad->peer_mac, 0, sizeof(ad->peer_mac));
- memset(ad->peer_name, 0, sizeof(ad->peer_name));
- strncpy(ad->peer_mac, mac_address, strlen(mac_address));
- ad->peer_mac[17] = '\0';
- peer_info = _wfd_app_find_peer_by_mac_address(ad, mac_address);
-
- if (NULL == peer_info) {
- WDPOP_LOGD( "peer_info is NULL !!\n");
- } else if (0 == strlen(peer_info->ssid)) {
- WDPOP_LOGD( "SSID from connection is invalid !!\n");
+ if (connection_state <= WIFI_DIRECT_DISASSOCIATION_IND) {
+ if (connection) {
+ result = strncmp(connection->peer_addr, mac_address, MACSTR_LENGTH);
+ if (result) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Connection event from unknown peer");
+ return;
+ }
} else {
- WDPOP_LOGD( "SSID from connection is %s.\n", peer_info->ssid);
- strncpy(ad->peer_name, peer_info->ssid, strlen(peer_info->ssid));
- ad->peer_name[31] = '\0';
- }
+ result = wifi_direct_get_peer_info((char *)mac_address, &peer_info);
+ if (result < 0 || !peer_info) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Unknown peer");
+ if (NULL != peer_info)
+ free(peer_info);
+ return;
+ }
+
+ connection = (wfd_connection_info_s*) calloc(1, sizeof(wfd_connection_info_s));
+ if (!connection) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to allocate memory for peer");
+ free(peer_info);
+ return;
+ }
+
+ if (TRUE != dbus_validate_utf8(peer_info->device_name, NULL)) {
+ memcpy(connection->peer_name, peer_info->device_name, DEV_NAME_LENGTH-2);
+ connection->peer_name[DEV_NAME_LENGTH-2] = '\0';
+ } else {
+ memcpy(connection->peer_name, peer_info->device_name, DEV_NAME_LENGTH);
+ connection->peer_name[DEV_NAME_LENGTH] = '\0';
+ }
- if (0 == strlen(ad->peer_name)) {
- strncpy(ad->peer_name, ad->peer_mac, strlen(ad->peer_mac));
- ad->peer_name[31] = '\0';
+ strncpy(connection->peer_addr, mac_address, MACSTR_LENGTH);
+ connection->peer_addr[MACSTR_LENGTH] = '\0';
+ connection->device_type = peer_info->primary_device_type;
+ connection->wifi_display = peer_info->is_miracast_device;
+ wifi_direct_get_local_wps_type(&connection->wps_type);
+ wifi_direct_is_autoconnection_mode(&connection->auto_conn);
+
+ ad->connection = connection;
+ free(peer_info);
}
}
switch (connection_state) {
- case WIFI_DIRECT_CONNECTION_RSP:
+ case WIFI_DIRECT_CONNECTION_REQ:
{
- WDPOP_LOGD( "event ------------------ WIFI_DIRECT_CONNECTION_RSP\n");
- wfd_destroy_popup();
-
- if (error_code == WIFI_DIRECT_ERROR_NONE) {
- WDPOP_LOGD( "Link Complete!\n");
-
- /* add connected notification */
- _add_wfd_peers_connected_notification(ad);
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "event ------------------ WIFI_DIRECT_CONNECTION_REQ\n");
+
+ memcpy((char*)ad->mac_addr_connecting, connection->peer_addr, MACSTR_LENGTH);
+
+ wfd_app_get_connected_peers(ad);
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "No of connected peers = %d", ad->raw_connected_peer_cnt);
+ if (ad->raw_connected_peer_cnt >= WFD_MAX_CONNECTED_PEER) {
+ result = wifi_direct_reject_connection(connection->peer_addr);
+ if (result != WIFI_DIRECT_ERROR_NONE)
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to reject connection(%d)", result);
+ snprintf(popup_text, MAX_POPUP_TEXT_SIZE,
+ _("IDS_ST_POP_YOU_CAN_CONNECT_UP_TO_PD_DEVICES_AT_THE_SAME_TIME"),
+ WFD_MAX_CONNECTED_PEER);
+ notification_status_message_post(popup_text);
+ break;
+ }
- /* tickernoti popup */
- snprintf(msg, WFD_POP_STR_MAX_LEN, IDS_WFD_POP_CONNECTED, ad->peer_name);
- notification_status_message_post(msg);
- } else if (error_code == WIFI_DIRECT_ERROR_AUTH_FAILED) {
- WDPOP_LOGD(
- "Error Code - WIFI_DIRECT_ERROR_AUTH_FAILED\n");
- notification_status_message_post(_("IDS_WFD_POP_PIN_INVALID"));
+ if (connection->auto_conn) {
+ usleep(200);
+ result = wifi_direct_accept_connection(connection->peer_addr);
+ if (result < 0) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to accept connection");
+ break;
+ }
+ WFD_APP_LOG(WFD_APP_LOG_HIGH, "Succeeded to accept connection");
} else {
- if (error_code == WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT) {
- WDPOP_LOGD(
- "Error Code - WIFI_DIRECT_ERROR_CONNECTION_TIME_OUT\n");
- } else if (error_code == WIFI_DIRECT_ERROR_CONNECTION_FAILED) {
- WDPOP_LOGD(
- "Error Code - WIFI_DIRECT_ERROR_CONNECTION_FAILED\n");
+ if (connection->wps_type == WIFI_DIRECT_WPS_TYPE_PBC) {
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "WPS type: WIFI_DIRECT_WPS_TYPE_PBC\n");
+ wfd_prepare_popup(WFD_POP_APRV_CONNECTION_WPS_PUSHBUTTON_REQ, NULL);
+ } else if (connection->wps_type == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY) {
+ char *pin;
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "WPS type: WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY");
+ if (wifi_direct_get_wps_pin(&pin) != WIFI_DIRECT_ERROR_NONE) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to get WPS pin");
+ return;
+ }
+ strncpy(connection->wps_pin, pin, PIN_LENGTH);
+ WFD_IF_FREE_MEM(pin);
+ wfd_prepare_popup(WFD_POP_APRV_CONNECTION_WPS_DISPLAY_REQ, NULL);
+ } else if (connection->wps_type == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD) {
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "WPS type: WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD");
+ wfd_prepare_popup(WFD_POP_APRV_CONNECTION_WPS_KEYPAD_REQ, NULL);
+ } else {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "wps_config is unkown!\n");
+ break;
}
-
- /* tickernoti popup */
- snprintf(msg, WFD_POP_STR_MAX_LEN, IDS_WFD_POP_CONNECT_FAILED, ad->peer_name);
- notification_status_message_post(msg);
+ int res = display_change_state(LCD_NORMAL);
+ if(res < 0)
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to change PM state(%d)", res);
}
}
break;
case WIFI_DIRECT_CONNECTION_WPS_REQ:
{
- wifi_direct_wps_type_e wps_mode;
-
- memcpy(ad->peer_mac, mac_address, sizeof(ad->peer_mac));
-
- WDPOP_LOGD(
- "event ------------------ WIFI_DIRECT_CONNECTION_WPS_REQ\n");
- result = wifi_direct_get_wps_type(&wps_mode);
- WDPOP_LOGD(
- "wifi_direct_get_wps_type() result=[%d]\n", result);
-
- if (wps_mode == WIFI_DIRECT_WPS_TYPE_PBC) {
- WDPOP_LOGD(
- "wps_config is WIFI_DIRECT_WPS_TYPE_PBC. Ignore it..\n");
- } else if (wps_mode == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY) {
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "event ------------------ WIFI_DIRECT_CONNECTION_WPS_REQ\n");
+ if (connection->wps_type == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD) {
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "WPS type: WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD\n");
+ wfd_prepare_popup(WFD_POP_PROG_CONNECT_WITH_KEYPAD, NULL);
+ } else if (connection->wps_type == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY) {
char *pin;
- WDPOP_LOGD( "wps_config is WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY\n");
-
- if (wifi_direct_generate_wps_pin() != WIFI_DIRECT_ERROR_NONE) {
- WDPOP_LOGD( "wifi_direct_generate_wps_pin() is failed\n");
- return;
- }
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "WPS type: WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY\n");
if (wifi_direct_get_wps_pin(&pin) != WIFI_DIRECT_ERROR_NONE) {
- WDPOP_LOGD( "wifi_direct_generate_wps_pin() is failed\n");
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to get WPS pin");
return;
}
- strncpy(ad->pin_number, pin, 64);
- ad->pin_number[63] = '\0';
- free(pin);
- pin = NULL;
-
- WDPOP_LOGD( "pin=[%s]\n", ad->pin_number);
+ strncpy(connection->wps_pin, pin, PIN_LENGTH);
+ WFD_IF_FREE_MEM(pin);
wfd_prepare_popup(WFD_POP_PROG_CONNECT_WITH_PIN, NULL);
- } else if (wps_mode == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD) {
- WDPOP_LOGD( "wps_config is WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD\n");
- wfd_prepare_popup(WFD_POP_PROG_CONNECT_WITH_KEYPAD, (void *) NULL);
} else {
- WDPOP_LOGD( "wps_config is unkown!\n");
-
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "WPS type: %d", connection->wps_type);
}
}
break;
- case WIFI_DIRECT_CONNECTION_REQ:
+ case WIFI_DIRECT_CONNECTION_IN_PROGRESS:
{
- WDPOP_LOGD( "event ------------------ WIFI_DIRECT_CONNECTION_REQ\n");
-
- wifi_direct_wps_type_e wps_mode;
- bool auto_connection_mode;
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "event ------------------ WIFI_DIRECT_CONNECTION_IN_PROGRESS\n");
+ }
+ break;
- result = wifi_direct_get_wps_type(&wps_mode);
- WDPOP_LOGD( "wifi_direct_get_wps_type() result=[%d]\n", result);
+ case WIFI_DIRECT_CONNECTION_RSP:
+ {
+ char *msg = NULL;
+ char txt[WFD_POP_STR_MAX_LEN] = {0};
+ wfd_destroy_popup();
- result = wifi_direct_is_autoconnection_mode(&auto_connection_mode);
- WDPOP_LOGD( "wifi_direct_is_autoconnection_mode() result=[%d]\n", result);
+ memset(ad->mac_addr_connecting, 0x00, MACSTR_LENGTH);
- if (auto_connection_mode == TRUE) {
- result = wifi_direct_accept_connection(ad->peer_mac);
- WDPOP_LOGD("wifi_direct_accept_connection() result=[%d]\n", result);
+ if (error_code != WIFI_DIRECT_ERROR_NONE) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to connect with peer[%s] -(%d)",
+ connection->peer_name, error_code);
+ snprintf(txt, WFD_POP_STR_MAX_LEN, _("IDS_WIFI_POP_FAILED_TO_CONNECT_TO_PS"),
+ connection->peer_name);
} else {
- if (wps_mode == WIFI_DIRECT_WPS_TYPE_PBC) {
- WDPOP_LOGD( "wps_config is WIFI_DIRECT_WPS_TYPE_PBC\n");
- wfd_prepare_popup(WFD_POP_APRV_CONNECTION_WPS_PUSHBUTTON_REQ, NULL);
- } else if (wps_mode == WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY) {
- WDPOP_LOGD( "wps_config is WIFI_DIRECT_WPS_TYPE_PIN_DISPLAY\n");
- wfd_prepare_popup(WFD_POP_APRV_CONNECTION_WPS_DISPLAY_REQ, NULL);
- } else if (wps_mode == WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD) {
- WDPOP_LOGD( "wps_config is WIFI_DIRECT_WPS_TYPE_PIN_KEYPAD\n");
- wfd_prepare_popup(WFD_POP_APRV_CONNECTION_WPS_KEYPAD_REQ, (void *) NULL);
- } else {
- WDPOP_LOGD( "wps_config is unkown!\n");
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "Succeeded to connect with peer[%s] -(%d)",
+ connection->peer_name, error_code);
+ snprintf(txt, WFD_POP_STR_MAX_LEN, _("IDS_WIFI_BODY_CONNECTED_TO_PS"),
+ connection->peer_name);
+#ifdef WFD_SCREEN_MIRRORING_ENABLED
+ result = vconf_get_int(VCONFKEY_SCREEN_MIRRORING_STATE, &screen_mirroring_status);
+ if (result < 0)
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to get VCONFKEY_SCREEN_MIRRORING_STATE");
+
+ if (screen_mirroring_status == VCONFKEY_SCREEN_MIRRORING_DEACTIVATED)
+ snprintf(txt, WFD_POP_STR_MAX_LEN, _("IDS_WIFI_BODY_CONNECTED_TO_PS"),
+ connection->peer_name);
+#endif
+ }
+ if (connection)
+ free(ad->connection);
+ ad->connection = NULL;
+
+ wfd_app_get_connected_peers(ad);
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "No of connected peers = %d", ad->raw_connected_peer_cnt);
+ /* tickernoti popup */
+ if (ad->raw_connected_peer_cnt < WFD_MAX_CONNECTED_PEER) {
+ if (strlen(txt) > 0) {
+ msg = elm_entry_utf8_to_markup(txt);
+ WFD_RET_IF(!msg, "Failed to elm_entry_markup_to_utf8()!");
+ notification_status_message_post(msg);
+ WFD_IF_FREE_MEM(msg);
}
}
}
break;
- case WIFI_DIRECT_DISCONNECTION_IND:
+ case WIFI_DIRECT_DISASSOCIATION_IND:
{
- _del_wfd_notification();
- WDPOP_LOGD( "event ------------------ WIFI_DIRECT_DISCONNECTION_IND\n");
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "event ------------------ WIFI_DIRECT_DISASSOCIATION_IND\n");
+ wfd_app_util_del_wfd_connected_notification(ad);
- result = wifi_direct_set_autoconnection_mode(false);
- WDPOP_LOGD( "wifi_direct_set_autoconnection_mode() result=[%d]\n", result);
+#ifdef WFD_SCREEN_MIRRORING_ENABLED
+ if (connection && connection->wifi_display)
+ wfd_app_util_set_screen_mirroring_deactivated(ad);
+#endif
+ if (connection)
+ free(ad->connection);
+ ad->connection = NULL;
- /* tickernoti popup */
- snprintf(msg, WFD_POP_STR_MAX_LEN, IDS_WFD_POP_DISCONNECTED, ad->peer_name);
- notification_status_message_post(msg);
+ }
+ break;
+
+ case WIFI_DIRECT_DISCONNECTION_IND:
+ {
+#if 0 // changed to show notification only when allshare cast device is connected.
+ _del_wfd_notification();
+#endif
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "event ------------------ WIFI_DIRECT_DISCONNECTION_IND\n");
+#ifdef WFD_SCREEN_MIRRORING_ENABLED
+ wfd_app_util_set_screen_mirroring_deactivated(ad);
+#endif
+ notification_status_message_post(_("IDS_WIFI_BODY_THE_WI_FI_DIRECT_CONNECTION_HAS_BEEN_LOST"));
+ wfd_app_util_del_wfd_connected_notification(ad);
}
break;
case WIFI_DIRECT_DISCONNECTION_RSP:
{
+#if 0 // changed to show notification only when allshare cast device is connected.
_del_wfd_notification();
+#endif
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "event ------------------ WIFI_DIRECT_DISCONNECTION_RSP\n");
+
+ wfd_app_util_del_wfd_connected_notification(ad);
+
+#ifdef WFD_SCREEN_MIRRORING_ENABLED
+ wfd_app_util_set_screen_mirroring_deactivated(ad);
+#endif
wfd_destroy_popup();
result = wifi_direct_set_autoconnection_mode(false);
- WDPOP_LOGD( "wifi_direct_set_autoconnection_mode() result=[%d]\n", result);
-
- /* tickernoti popup */
- snprintf(msg, WFD_POP_STR_MAX_LEN, IDS_WFD_POP_DISCONNECTED, ad->peer_name);
- notification_status_message_post(msg);
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "wifi_direct_set_autoconnection_mode() result=[%d]\n", result);
}
break;
- case WIFI_DIRECT_CONNECTION_IN_PROGRESS:
+
+ case WIFI_DIRECT_GROUP_DESTROYED:
{
- WDPOP_LOGD( "event ------------------ WIFI_DIRECT_CONNECTION_IN_PROGRESS\n");
- /* tickernoti popup */
- notification_status_message_post(_("IDS_WFD_POP_CONNECTING"));
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "event ------------------ WIFI_DIRECT_GROUP_DESTROYED\n");
+ notification_status_message_post(_("IDS_WIFI_BODY_THE_WI_FI_DIRECT_CONNECTION_HAS_BEEN_LOST"));
}
break;
- case WIFI_DIRECT_INVITATION_REQ:
- {
- WDPOP_LOGD( "event ------------------ WIFI_DIRECT_INVITATION_REQ\n");
- bool auto_connection_mode = FALSE;
- wifi_direct_is_autoconnection_mode(&auto_connection_mode);
- if (auto_connection_mode == TRUE) {
- result = wifi_direct_connect(ad->peer_mac);
- WDPOP_LOGD("wifi_direct_accept_connection() result=[%d]\n", result);
- } else {
- wfd_prepare_popup(WFD_POP_APRV_CONNECTION_INVITATION_REQ, NULL);
- }
- }
- break;
default:
break;
}
- /* if connected, start the transmit timer */
- wifi_direct_get_state(&ad->wfd_status);
- WDPOP_LOGD( "status: %d", ad->wfd_status);
+ /*
+ * To support ON DEMAND popup destroy. API request blocks and popup destroy
+ * fails.
+ */
+ /* wifi_direct_get_state(&ad->wfd_status); */
- if (ad->wfd_status < WIFI_DIRECT_STATE_CONNECTED) {
+ if (vconf_get_int(VCONFKEY_WIFI_DIRECT_STATE, &wfd_state) < 0) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Error reading vconf (%s)\n", VCONFKEY_WIFI_DIRECT_STATE);
+ }
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "wfd state: %d", wfd_state);
+
+ if (wfd_state == VCONFKEY_WIFI_DIRECT_DEACTIVATED) {
+ wfd_app_util_del_notification(ad);
+ }
+
+#ifdef NOT_CONNECTED_INDICATOR_ICON
+ if (wfd_state >= VCONFKEY_WIFI_DIRECT_CONNECTED) {
+ noti_err = notification_delete(ad->noti_wifi_direct_on);
+ if (noti_err != NOTIFICATION_ERROR_NONE) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Fail to notification_delete.(%d)\n", noti_err);
+ } else {
+ noti_err = notification_free(ad->noti_wifi_direct_on);
+ ad->noti_wifi_direct_on = NULL;
+ if (noti_err != NOTIFICATION_ERROR_NONE) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Fail to notification_free.(%d)\n", noti_err);
+ }
+ }
+ }
+#endif
+
+ if (wfd_state < VCONFKEY_WIFI_DIRECT_CONNECTED) {
if (ad->transmit_timer) {
ecore_timer_del(ad->transmit_timer);
ad->transmit_timer = NULL;
}
} else {
if (NULL == ad->transmit_timer) {
- WDPOP_LOGD( "start the transmit timer\n");
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "start the transmit timer\n");
ad->last_wfd_transmit_time = time(NULL);
ad->transmit_timer = ecore_timer_add(5.0,
- (Ecore_Task_Cb)_wfd_automatic_deactivated_for_connection_cb, ad);
+ (Ecore_Task_Cb)wfd_automatic_deactivated_for_connection_cb, ad);
}
}
- __WDPOP_LOG_FUNC_EXIT__;
-}
-
-/**
- * This function let the app make a change callback for flight mode
- * @return void
- * @param[in] key the pointer to the key
- * @param[in] user_data the pointer to the main data structure
- */
-static void _wfd_flight_mode_changed(keynode_t *node, void *user_data)
-{
- __WDPOP_LOG_FUNC_ENTER__;
- int res = -1;
- int flight_mode = 0;
- wfd_appdata_t *ad = (wfd_appdata_t *)user_data;
-
- if (NULL == ad) {
- WDPOP_LOGE("NULL parameters.\n");
- return;
- }
-
- res = vconf_get_bool(VCONFKEY_SETAPPL_FLIGHT_MODE_BOOL, &flight_mode);
- if (res != 0) {
- WDPOP_LOGE("Failed to get flight state from vconf. [%d]\n", res);
- return;
- }
-
- if (flight_mode == FALSE) {
- WDPOP_LOGD( "Flight mode is off\n");
- return;
- }
-
- /* If flight mode is on, turn off WFD */
- wifi_direct_get_state(&ad->wfd_status);
- if (WIFI_DIRECT_STATE_DEACTIVATED == ad->wfd_status) {
- WDPOP_LOGD( "Wi-Fi Direct is deactivated.\n");
- return;
- }
-
- /*if connected, disconnect all devices*/
- if (WIFI_DIRECT_STATE_CONNECTED == ad->wfd_status) {
- res = wifi_direct_disconnect_all();
- if (res != WIFI_DIRECT_ERROR_NONE) {
- WDPOP_LOGE("Failed to send disconnection request to all. [%d]\n", res);
- return;
+ if (wfd_state >= VCONFKEY_WIFI_DIRECT_CONNECTED) {
+#ifdef WFD_FIVE_MIN_IDLE_DEACTIVATION
+ if (ad->monitor_timer) {
+ ecore_timer_del(ad->monitor_timer);
+ ad->monitor_timer = NULL;
}
+#endif
+ } else {
+#ifdef NOT_CONNECTED_INDICATOR_ICON
+ wfd_app_util_add_indicator_icon(ad);
+#endif
+#ifdef WFD_FIVE_MIN_IDLE_DEACTIVATION
+ if (NULL == ad->monitor_timer) {
+ ad->last_wfd_time = time(NULL);
+ ad->monitor_timer = ecore_timer_add(5.0,
+ (Ecore_Task_Cb)_wfd_automatic_deactivated_for_no_connection_cb, ad);
+ }
+#endif
}
- res = wifi_direct_deactivate();
- if (res != WIFI_DIRECT_ERROR_NONE) {
- WDPOP_LOGE("Failed to deactivate Wi-Fi Direct. error code = [%d]\n", res);
- return;
- }
-
- __WDPOP_LOG_FUNC_EXIT__;
+ __WFD_APP_FUNC_EXIT__;
}
/**
@@ -729,57 +661,48 @@ static void _wfd_flight_mode_changed(keynode_t *node, void *user_data)
* @return If success, return TRUE, else return FALSE
* @param[in] ad the pointer to the main data structure
*/
-int init_wfd_popup_client(wfd_appdata_t *ad)
+bool init_wfd_client(wfd_appdata_t *ad)
{
- __WDPOP_LOG_FUNC_ENTER__;
-
- if (NULL == ad) {
- WDPOP_LOGD( "NULL parameters.\n");
- return FALSE;
- }
-
+ __WFD_APP_FUNC_ENTER__;
+ WFD_RETV_IF(NULL == ad, FALSE, "NULL parameters.\n");
int ret = -1;
+ int retrys = 3;
- ret = wifi_direct_initialize();
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- WDPOP_LOGE("Failed to initialize Wi-Fi Direct. error code = [%d]\n", ret);
- return FALSE;
- }
+ ad->last_wfd_status = WIFI_DIRECT_STATE_DEACTIVATED;
- ret = wifi_direct_set_device_state_changed_cb(_cb_activation, (void *)ad);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- WDPOP_LOGE("Failed to register _cb_activation. error code = [%d]\n", ret);
- return FALSE;
- }
+ while (retrys > 0) {
+ ret = wifi_direct_initialize();
+ if (ret == WIFI_DIRECT_ERROR_NONE ||
+ ret == WIFI_DIRECT_ERROR_ALREADY_INITIALIZED)
+ break;
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to initialize Wi-Fi Direct(%d)\n", ret);
- ret = wifi_direct_set_discovery_state_changed_cb(_cb_discover, (void *)ad);
- if (ret != WIFI_DIRECT_ERROR_NONE) {
- WDPOP_LOGE("Failed to register _cb_discover. error code = [%d]\n", ret);
- return FALSE;
+ retrys--;
+ if (retrys == 0)
+ return FALSE;
+ usleep(100*1000);
}
- ret = wifi_direct_set_connection_state_changed_cb(_cb_connection, (void *)ad);
+ ret = wifi_direct_set_device_state_changed_cb(_cb_activation, (void*) ad);
if (ret != WIFI_DIRECT_ERROR_NONE) {
- WDPOP_LOGE("Failed to register _cb_connection. error code = [%d]\n", ret);
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to register _cb_activation(%d)\n", ret);
return FALSE;
}
- /* initialize notification */
- ad->noti = notification_new(NOTIFICATION_TYPE_NOTI, NOTIFICATION_GROUP_ID_NONE, NOTIFICATION_PRIV_ID_NONE);
- if (NULL == ad->noti) {
- WDPOP_LOGD( "notification_new failed.\n");
+ ret = wifi_direct_set_connection_state_changed_cb(_cb_connection, (void*) ad);
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to register _cb_connection(%d)\n", ret);
return FALSE;
}
- /* register flight mode */
- int result = -1;
- result = vconf_notify_key_changed(VCONFKEY_SETAPPL_FLIGHT_MODE_BOOL, _wfd_flight_mode_changed, ad);
- if (result == -1) {
- WDPOP_LOGE("Failed to register vconf callback for flight mode\n");
- return FALSE;
+#ifdef WFD_FIVE_MIN_IDLE_DEACTIVATION
+ if (NULL == ad->monitor_timer) {
+ ad->last_wfd_time = time(NULL);
+ ad->monitor_timer = ecore_timer_add(5.0,
+ (Ecore_Task_Cb)_wfd_automatic_deactivated_for_no_connection_cb, ad);
}
-
- __WDPOP_LOG_FUNC_EXIT__;
+#endif
+ __WFD_APP_FUNC_EXIT__;
return TRUE;
}
@@ -788,43 +711,38 @@ int init_wfd_popup_client(wfd_appdata_t *ad)
* @return If success, return TRUE, else return FALSE
* @param[in] ad the pointer to the main data structure
*/
-int deinit_wfd_popup_client(wfd_appdata_t *ad)
+int deinit_wfd_client(wfd_appdata_t *ad)
{
- __WDPOP_LOG_FUNC_ENTER__;
-
- if (NULL == ad || NULL == ad->noti) {
- WDPOP_LOGD( "NULL parameters.\n");
- return FALSE;
- }
-
+ __WFD_APP_FUNC_ENTER__;
int ret = -1;
- ret = wifi_direct_deinitialize();
+ if (NULL == ad) {
+ WFD_APP_LOG(WFD_APP_LOG_LOW, "NULL parameter\n");
+ return -1;
+ }
- _del_wfd_notification(ad);
- notification_error_e noti_err = NOTIFICATION_ERROR_NONE;
- noti_err = notification_free(ad->noti);
- if (noti_err != NOTIFICATION_ERROR_NONE) {
- WDPOP_LOGD( "Fail to notification_free.(%d)\n", noti_err);
- ret = WIFI_DIRECT_ERROR_RESOURCE_BUSY;
+#ifdef WFD_FIVE_MIN_IDLE_DEACTIVATION
+ if (ad->monitor_timer) {
+ ecore_timer_del(ad->monitor_timer);
+ ad->monitor_timer = NULL;
}
+#endif
- /* remove callback for flight mode */
- int result = -1;
- result = vconf_ignore_key_changed(VCONFKEY_WIFI_STATE, _wfd_flight_mode_changed);
- if (result == -1) {
- WDPOP_LOGE("Failed to ignore vconf key callback for flight mode\n");
+ ret = wifi_direct_unset_device_state_changed_cb();
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to deregister _cb_activation(%d)\n", ret);
}
- if (ad->transmit_timer) {
- ecore_timer_del(ad->transmit_timer);
- ad->transmit_timer = NULL;
+ ret = wifi_direct_unset_connection_state_changed_cb();
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to deregister _cb_connection(%d)\n", ret);
}
- __WDPOP_LOG_FUNC_EXIT__;
- if (ret == WIFI_DIRECT_ERROR_NONE) {
- return TRUE;
- } else {
- return FALSE;
+ ret = wifi_direct_deinitialize();
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ WFD_APP_LOG(WFD_APP_LOG_ERROR, "Failed to deinitialize Wi-Fi Direct. error code = [%d]\n", ret);
}
+
+ __WFD_APP_FUNC_EXIT__;
+ return 0;
}