4 * Copyright 2012 Samsung Electronics Co., Ltd
6 * Licensed under the Flora License, Version 1.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.tizenopensource.org/license
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
21 #include <sensor_internal.h>
22 #include <vconf-keys.h>
27 #include <Elementary.h>
29 #include <ui-gadget-module.h>
30 #include <wifi-direct.h>
32 #include "wfd_motion_control.h"
33 #include "wfd_ug_view.h"
34 #include "wfd_client.h"
37 static int motion_handle = -1;
39 static TARGET_VIEW_FOCUS __motion_target_view_focus_get(void *data)
41 struct ug_data *ugd = (struct ug_data *)data;
43 if ((ugd == NULL) || (ugd->naviframe == NULL)) {
44 return MOTION_TARGET_VIEW_FOCUS_OFF;
47 if (elm_object_focus_get(ugd->naviframe)) {
48 return MOTION_TARGET_VIEW_FOCUS_ON;
50 return MOTION_TARGET_VIEW_FOCUS_OFF;
55 static void __motion_shake_cb(unsigned int event_type, sensor_event_data_t *event_data, void *data)
59 gboolean motion_activated = FALSE;
60 struct ug_data *ugd = (struct ug_data *) data;
62 DBG(LOG_ERROR,"NULL pointer!");
65 TARGET_VIEW_FOCUS focus_state = __motion_target_view_focus_get(ugd);
67 DBG(LOG_DEBUG, "event type: %d, focus state: %d\n", event_type, focus_state);
69 if (focus_state != MOTION_TARGET_VIEW_FOCUS_ON) {
73 if (vconf_get_bool(VCONFKEY_SETAPPL_MOTION_ACTIVATION,
74 (void *)&motion_activated)) {
75 DBG(LOG_ERROR,"Get motion activation status fail");
79 if (FALSE == motion_activated) {
80 DBG(LOG_INFO,"Motion value is false");
84 if (vconf_get_bool(VCONFKEY_SETAPPL_USE_SHAKE,
85 (void *)&motion_activated)) {
86 DBG(LOG_ERROR, "Get use shake status fail");
90 if (FALSE == motion_activated) {
91 DBG(LOG_INFO,"Shake status is false");
96 const char *btn_text = NULL;
99 DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
103 wfd_refresh_wifi_direct_state(ugd);
105 if (NULL == ugd->scan_toolbar) {
106 DBG(LOG_ERROR, "NULL == ugd->scan_toolbar\n");
110 btn_text = elm_object_part_text_get(ugd->scan_toolbar, "default");
111 if (NULL == btn_text) {
112 DBG(LOG_ERROR, "Incorrect button text(NULL)\n");
116 GList *iterator = NULL;
118 if (0 == strcmp(btn_text, _("IDS_WIFI_SK4_SCAN"))) {
119 if (WIFI_DIRECT_STATE_CONNECTED == ugd->wfd_status) {
120 ret = wfd_client_disconnect(NULL);
121 if (ret != WIFI_DIRECT_ERROR_NONE) {
122 DBG(LOG_ERROR, "Failed wfd_client_disconnect() [%d]\n", ret);
127 if (ugd->multi_connect_mode != WFD_MULTI_CONNECT_MODE_NONE) {
128 wfd_free_multi_selected_peers(ugd);
130 /* update the connecting icon */
131 for (iterator = ugd->raw_discovered_peer_list; iterator; iterator = iterator->next) {
132 ((device_type_s *)iterator->data)->conn_status = PEER_CONN_STATUS_DISCONNECTED;
133 wfd_ug_view_refresh_glitem(((device_type_s *)iterator->data)->gl_item);
136 } else if (WIFI_DIRECT_STATE_DEACTIVATED == ugd->wfd_status) {
137 wfd_client_switch_on(ugd);
138 } else if ((WIFI_DIRECT_STATE_DISCOVERING == ugd->wfd_status) || (WIFI_DIRECT_STATE_ACTIVATED == ugd->wfd_status)) {
139 ugd->wfd_discovery_status = WIFI_DIRECT_DISCOVERY_SOCIAL_CHANNEL_START;
140 ret = wifi_direct_start_discovery_specific_channel(false, 1, WIFI_DIRECT_DISCOVERY_SOCIAL_CHANNEL);
141 if (ret != WIFI_DIRECT_ERROR_NONE) {
142 ugd->wfd_discovery_status = WIFI_DIRECT_DISCOVERY_NONE;
143 DBG(LOG_ERROR, "Failed to start discovery. [%d]\n", ret);
144 wifi_direct_cancel_discovery();
152 void motion_create(struct ug_data *ugd)
156 motion_handle = sf_connect(MOTION_SENSOR);
157 if (motion_handle < 0) {
158 DBG(LOG_ERROR, "Failed Operation sf_connect.\n");
161 ret = sf_register_event(motion_handle, MOTION_ENGINE_EVENT_SHAKE, NULL,
162 __motion_shake_cb, ugd);
164 DBG(LOG_ERROR, "Failed Operation sf_register_event. [%d]\n", ret);
167 ret = sf_start(motion_handle, 0);
169 DBG(LOG_ERROR, "Failed Operation sf_start. [%d]\n", ret);
173 DBG(LOG_INFO, "Succesfully, Init Sensor Handle\n");
177 ret = sf_disconnect(motion_handle);
179 DBG(LOG_ERROR, "Failed Operation sf_disconnect. [%d]\n", ret);
183 void motion_destroy(void)
187 if (motion_handle < 0) {
188 DBG(LOG_ERROR, "Motion Handle Not valid !!!");
192 ret = sf_stop(motion_handle);
194 DBG(LOG_ERROR, "Failed Operation sf_stop. [%d]\n", ret);
196 ret = sf_unregister_event(motion_handle, MOTION_ENGINE_EVENT_SHAKE);
198 DBG(LOG_ERROR, "Failed Operation sf_unregister_event. [%d]\n", ret);
200 ret = sf_disconnect(motion_handle);
202 DBG(LOG_ERROR, "Failed Operation sf_disconnect. [%d]\n", ret);