summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadoslaw Czerski <r.czerski@samsung.com>2016-03-30 15:01:30 +0200
committerRadoslaw Czerski <r.czerski@samsung.com>2016-03-30 15:01:30 +0200
commit6d1941cb2064be13d3e29451210ebf5c8c1ed653 (patch)
tree4a213c995938d12c2da57639fcfe39bb5c0c5c26
parent0dd6d4165b7bcfe7616f3e2637ba3bfe294cbfb5 (diff)
downloadindicator-win-6d1941cb2064be13d3e29451210ebf5c8c1ed653.tar.gz
indicator-win-6d1941cb2064be13d3e29451210ebf5c8c1ed653.tar.bz2
indicator-win-6d1941cb2064be13d3e29451210ebf5c8c1ed653.zip
Another util wrapers for wifi added.
Change-Id: I66e7cc62267b2e529cc3f362b9947ca9cfc6e78e Signed-off-by: Radoslaw Czerski <r.czerski@samsung.com>
-rw-r--r--inc/util.h31
-rw-r--r--src/util.c91
2 files changed, 121 insertions, 1 deletions
diff --git a/inc/util.h b/inc/util.h
index e08c586..55d1791 100644
--- a/inc/util.h
+++ b/inc/util.h
@@ -111,6 +111,20 @@ const char *util_get_file_path(enum app_subdir dir, const char *relative);
#define util_get_external_cache_file_path(x) util_get_file_path(APP_DIR_EXTERNAL_CACHE, (x))
/**
+ * @brief Initializes WiFi using wifi_initialize API
+ * @remarks If WiFi is already initialized, #WIFI_ERROR_NONE will be returned.
+ * @return 0 on success, other value on failure
+ */
+int util_wifi_initialize(void);
+
+/**
+ * @brief Deinitializes WiFi using wifi_deinitialize API
+ * @remarks Only last call of that function is effective to avoid unwanted deinitialization.
+ * @return 0 on success, other value on failure
+ */
+int util_wifi_deinitialize(void);
+
+/**
* @brief Allows to set multiple callbacks using wifi_set_connection_state_changed_cb API
*
* @param cb callback
@@ -127,6 +141,23 @@ int util_wifi_set_connection_state_changed_cb(wifi_connection_state_changed_cb,
void util_wifi_unset_connection_state_changed_cb(wifi_connection_state_changed_cb);
/**
+ * @brief Allows to set multiple callbacks using wifi_set_device_state_changed_cb API
+ *
+ * @param cb callback
+ * @param data user_data passed to callback function.
+ * @return 0 on success, other value on failure
+ */
+int util_wifi_set_device_state_changed_cb(wifi_device_state_changed_cb cb, void *data);
+
+/**
+ * @brief Unregisters callback set with util_wifi_set_device_state_changed_cb.
+ *
+ * @param cb callback
+ */
+void util_wifi_unset_device_state_changed_cb(wifi_device_state_changed_cb cb);
+
+
+/**
* @brief Allows to register multiple callbacks using system_settings_changed_cb API.
*
* @param key key to monitor.
diff --git a/src/util.c b/src/util.c
index a9abafc..85d0664 100644
--- a/src/util.c
+++ b/src/util.c
@@ -46,6 +46,11 @@ typedef struct {
} wifi_handler_t;
typedef struct {
+ wifi_device_state_changed_cb cb;
+ void *data;
+} wifi_device_handler_t;
+
+typedef struct {
system_settings_key_e key;
system_settings_changed_cb cb;
void *data;
@@ -58,9 +63,10 @@ typedef struct {
} runtime_info_handler_t;
static Eina_List *wifi_callbacks;
+static Eina_List *wifi_device_callbacks;
static Eina_List *ss_callbacks;
static Eina_List *ri_callbacks;
-
+static int wifi_init_cnt = 0;
char *util_set_label_text_color(const char *txt)
{
Eina_Strbuf *temp_buf = NULL;
@@ -623,6 +629,35 @@ const char *util_get_file_path(enum app_subdir dir, const char *relative)
return &buf[0];
}
+int util_wifi_initialize(void)
+{
+ _D("util_wifi_initialize");
+
+ wifi_init_cnt++;
+
+ int ret = wifi_initialize();
+ if (ret == WIFI_ERROR_INVALID_OPERATION) {
+ _W("WiFi already initialized");
+ return OK;
+ }
+ retv_if(ret != WIFI_ERROR_NONE, ret);
+
+ return OK;
+}
+
+int util_wifi_deinitialize(void)
+{
+ _D("util_wifi_deinitialize");
+
+ wifi_init_cnt--;
+
+ if (wifi_init_cnt == 0) {
+ int ret = wifi_deinitialize();
+ retv_if(ret != WIFI_ERROR_NONE, ret);
+ }
+ return OK;
+}
+
static void _wifi_state_cb(wifi_connection_state_e state, wifi_ap_h ap, void *user_data)
{
Eina_List *l;
@@ -670,6 +705,60 @@ void util_wifi_unset_connection_state_changed_cb(wifi_connection_state_changed_c
wifi_unset_connection_state_changed_cb();
}
+/** WIFI DEVICE STATE CB **/
+
+static void _wifi_device_state_cb(wifi_device_state_e state, void *user_data)
+{
+ Eina_List *l;
+ wifi_device_handler_t *hdl;
+
+ EINA_LIST_FOREACH(wifi_device_callbacks, l, hdl) {
+ if (hdl->cb) hdl->cb(state, hdl->data);
+ }
+}
+
+int util_wifi_set_device_state_changed_cb(wifi_device_state_changed_cb cb, void *data)
+{
+ wifi_device_handler_t *hdl = malloc(sizeof(wifi_device_handler_t));
+ if (!hdl) {
+ _D("malloc failed");
+ return WIFI_ERROR_OUT_OF_MEMORY;
+ }
+
+ if (!wifi_device_callbacks) {
+ int err = wifi_set_device_state_changed_cb(_wifi_device_state_cb, NULL);
+ if (err != WIFI_ERROR_NONE) {
+ free(hdl);
+
+ _D("wifi_set_device_state_changed_cb failed[%d]:%s", err, get_error_message(err));
+ return err;
+ }
+ }
+
+ hdl->cb = cb;
+ hdl->data = data;
+ wifi_device_callbacks = eina_list_append(wifi_device_callbacks, hdl);
+
+ return 0;
+}
+
+void util_wifi_unset_device_state_changed_cb(wifi_device_state_changed_cb cb)
+{
+ Eina_List *l, *l2;
+ wifi_device_handler_t *hdl;
+
+ EINA_LIST_FOREACH_SAFE(wifi_device_callbacks, l, l2, hdl) {
+ if (hdl->cb == cb) {
+ wifi_device_callbacks = eina_list_remove_list(wifi_device_callbacks, l);
+ free(hdl);
+ }
+ }
+ if (!wifi_device_callbacks)
+ wifi_unset_device_state_changed_cb();
+}
+
+/** SYSTEM SETTINGS CB **/
+
static void _system_settings_cb(system_settings_key_e key, void *data)
{
Eina_List *l;