4 * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
6 * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
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.
28 #include "indicator.h"
35 #define ICON_PRIORITY INDICATOR_PRIORITY_FIXED6
36 #define MODULE_NAME "wifi"
37 #define TIMER_INTERVAL 0.3
39 static int register_wifi_module(void *data);
40 static int unregister_wifi_module(void);
41 static int wake_up_cb(void *data);
44 .type = INDICATOR_IMG_ICON,
46 .priority = ICON_PRIORITY,
47 .always_top = EINA_FALSE,
48 .exist_in_view = EINA_FALSE,
50 .obj_exist = EINA_FALSE,
51 .area = INDICATOR_ICON_AREA_FIXED,
52 .init = register_wifi_module,
53 .fini = unregister_wifi_module,
65 static const char *icon_path[LEVEL_WIFI_MAX] = {
66 [LEVEL_WIFI_01] = "Connection/B03_data_downloading_Wifi_01.png",
67 [LEVEL_WIFI_02] = "Connection/B03_data_downloading_Wifi_02.png",
68 [LEVEL_WIFI_03] = "Connection/B03_data_downloading_Wifi_03.png",
69 [LEVEL_WIFI_04] = "Connection/B03_data_downloading_Wifi_04.png",
72 static int transfer_state = -1;
73 static Eina_Bool wifi_transferring = EINA_FALSE;
74 static int updated_while_lcd_off = 0;
75 static int prevIndex = -1;
79 static void set_app_state(void* data)
84 static void show_image_icon(void *data, int index)
86 if(prevIndex == index)
91 wifi.img_obj.data = icon_path[index];
95 util_signal_emit(wifi.ad, "indicator.wifi.show", "indicator.prog");
98 static void hide_image_icon(void)
105 util_signal_emit(wifi.ad, "indicator.wifi.hide", "indicator.prog");
106 util_signal_emit(wifi.ad, "indicator.wifi.updown.hide", "indicator.prog");
109 static void show_wifi_transfer_icon(void* data)
114 if (vconf_get_int(VCONFKEY_WIFI_TRANSFER_STATE, &status) < 0)
116 ERR("Error getting VCONFKEY_WIFI_TRANSFER_STATE value");
122 case VCONFKEY_WIFI_TRANSFER_STATE_TXRX://TX/RX BOTH
123 type = TRANSFER_UPDOWN;
125 case VCONFKEY_WIFI_TRANSFER_STATE_TX:
128 case VCONFKEY_WIFI_TRANSFER_STATE_RX:
129 type = TRANSFER_DOWN;
131 case VCONFKEY_WIFI_TRANSFER_STATE_NONE:
132 type = TRANSFER_NONE;
138 if(transfer_state==type)
140 DBG("same transfer state");
144 transfer_state = type;
148 util_signal_emit(wifi.ad, "indicator.wifi.updown.none", "indicator.prog");
151 util_signal_emit(wifi.ad, "indicator.wifi.updown.download", "indicator.prog");
154 util_signal_emit(wifi.ad, "indicator.wifi.updown.upload", "indicator.prog");
156 case TRANSFER_UPDOWN:
157 util_signal_emit(wifi.ad, "indicator.wifi.updown.updownload", "indicator.prog");
165 static void _wifi_changed_cb(keynode_t *node, void *data)
167 bool wifi_state = false;
168 int status, strength;
173 if (icon_get_update_flag()==0) {
174 updated_while_lcd_off = 1;
177 updated_while_lcd_off = 0;
179 ret = vconf_get_int(VCONFKEY_WIFI_STRENGTH, &strength);
181 if (strength < VCONFKEY_WIFI_STRENGTH_MIN) {
182 strength = VCONFKEY_WIFI_STRENGTH_MIN;
184 else if (strength > VCONFKEY_WIFI_STRENGTH_MAX) {
185 strength = VCONFKEY_WIFI_STRENGTH_MAX;
188 strength = VCONFKEY_WIFI_STRENGTH_MAX;
191 if (strength <= 0) strength = 1;
193 /* Second, check wifi status */
194 ret = wifi_is_activated(&wifi_state);
195 _D("wifi_state : %d", wifi_state);
196 if(ret != WIFI_ERROR_NONE) {
197 _E("wifi_is_activated error. ret is [%d]", ret);
200 ret = wifi_get_connection_state(&status);
201 if (ret == WIFI_ERROR_NONE) {
202 DBG("CONNECTION WiFi Status: %d", status);
204 case WIFI_CONNECTION_STATE_CONNECTED:
205 show_wifi_transfer_icon(data);
206 show_image_icon(data, strength-1);
208 default: //WIFI_CONNECTION_STATE_DISCONNECTED
217 static void _wifi_device_state_changed_cb(wifi_device_state_e state, void *user_data)
219 bool wifi_state = false;
224 if (icon_get_update_flag()==0) {
225 updated_while_lcd_off = 1;
228 updated_while_lcd_off = 0;
230 ret = vconf_get_int(VCONFKEY_WIFI_STRENGTH, &strength);
232 if (strength < VCONFKEY_WIFI_STRENGTH_MIN) {
233 strength = VCONFKEY_WIFI_STRENGTH_MIN;
235 else if (strength > VCONFKEY_WIFI_STRENGTH_MAX) {
236 strength = VCONFKEY_WIFI_STRENGTH_MAX;
239 strength = VCONFKEY_WIFI_STRENGTH_MAX;
242 if (strength <= 0) strength = 1;
244 ret = wifi_is_activated(&wifi_state);
245 _D("wifi_state : %d", wifi_state);
246 if(ret != WIFI_ERROR_NONE) {
247 _E("wifi_is_activated error. ret is [%d]", ret);
251 show_wifi_transfer_icon(user_data);
252 show_image_icon(user_data, strength-1);
260 static void _wifi_connection_state_changed_cb(wifi_connection_state_e state, wifi_ap_h ap, void *user_data)
264 _wifi_changed_cb(NULL, user_data);
269 static int wake_up_cb(void *data)
271 if(updated_while_lcd_off==0)
276 _wifi_changed_cb(NULL, data);
280 static bool _wifi_init(void)
283 ret = wifi_initialize();
284 if (ret != WIFI_ERROR_NONE) {
285 _E("wifi_initialize is fail : %d", ret);
292 static void _wifi_fini(void)
295 ret = wifi_deinitialize();
296 if (ret != WIFI_ERROR_NONE) {
297 _E("wifi_deinitialize is fail : %d", ret);
301 static int register_wifi_module(void *data)
310 ret = wifi_set_device_state_changed_cb(_wifi_device_state_changed_cb, data);
311 if (ret != WIFI_ERROR_NONE) r = ret;
313 ret = wifi_set_connection_state_changed_cb(_wifi_connection_state_changed_cb, data);
314 if (ret != WIFI_ERROR_NONE) r = ret;
316 ret = vconf_notify_key_changed(VCONFKEY_WIFI_STRENGTH, _wifi_changed_cb, data);
317 if (ret != OK) r = r | ret;
319 ret = vconf_notify_key_changed(VCONFKEY_WIFI_TRANSFER_STATE, _wifi_changed_cb, data);
320 if (ret != OK) r = r | ret;
322 _wifi_changed_cb(NULL, data);
327 static int unregister_wifi_module(void)
331 ret = wifi_unset_device_state_changed_cb();
332 ret = wifi_unset_connection_state_changed_cb();
333 ret = ret | vconf_ignore_key_changed(VCONFKEY_WIFI_STRENGTH, _wifi_changed_cb);
334 ret = ret | vconf_ignore_key_changed(VCONFKEY_WIFI_TRANSFER_STATE, _wifi_changed_cb);
336 if (wifi_transferring == EINA_TRUE) {
337 wifi_transferring = EINA_FALSE;