Porting flight mode logic to HAL 32/209132/3
authorSudipto Bal <sudipto.bal@samsung.com>
Tue, 2 Jul 2019 11:18:55 +0000 (16:48 +0530)
committerSudipto Bal <sudipto.bal@samsung.com>
Thu, 4 Jul 2019 06:19:45 +0000 (11:49 +0530)
Change-Id: I35cfa8522b97d202f5e5e9f25398defc777b8b8e
Signed-off-by: Sudipto Bal <sudipto.bal@samsung.com>
12 files changed:
bt-oal/bluez_hal/src/bt-hal-adapter-dbus-handler.c
bt-oal/bluez_hal/src/bt-hal-adapter-dbus-handler.h
bt-oal/bluez_hal/src/bt-hal-bluetooth.c
bt-oal/bluez_hal/src/bt-hal-event-receiver.c
bt-oal/bluez_hal/src/bt-hal-event-receiver.h
bt-oal/hardware/bluetooth.h
bt-oal/include/oal-manager.h
bt-oal/oal-adapter-mgr.c
bt-service-adaptation/services/adapter/bt-service-core-adapter.c
bt-service-adaptation/services/bt-request-handler.c
bt-service-adaptation/services/bt-service-main.c
bt-service-adaptation/services/include/bt-service-core-adapter.h

index 1ced5f7..6a9a14d 100644 (file)
@@ -101,6 +101,39 @@ void _bt_hal_dbus_store_stack_msg_cb(handle_stack_msg cb)
        event_cb = cb;
 }
 
+int _bt_hal_enable_core(void)
+{
+       DBG("");
+       GDBusProxy *proxy;
+       GVariant *result;
+       GError *error = NULL;
+
+       proxy = __bt_get_core_proxy();
+       if(!proxy)
+               return BT_HAL_ERROR_INTERNAL;
+
+       /* Clean up the process */
+       result = g_dbus_proxy_call_sync(proxy,
+                              "EnableCore",
+                              NULL,
+                              G_DBUS_CALL_FLAGS_NONE,
+                             -1,
+                             NULL,
+                              &error);
+
+       if (!result) {
+               if (error != NULL) {
+                       ERR("Bt core call failed(Error: %s)", error->message);
+                       g_clear_error(&error);
+               } else
+                       ERR("Bt core call failed");
+               return BT_HAL_ERROR_INTERNAL;
+       }
+
+       g_variant_unref(result);
+       return BT_HAL_ERROR_NONE;
+}
+
 static gboolean __bt_hal_send_adapter_event(gpointer user_data)
 {
        struct hal_ev_adapter_state_changed ev;
index de43858..a0a36bc 100644 (file)
@@ -64,6 +64,8 @@ int _bt_hal_dbus_get_adapter_properties(void);
 
 int _bt_hal_dbus_set_adapter_property(const bt_property_t *property);
 
+int _bt_hal_enable_core(void);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index 4179595..3944d14 100644 (file)
@@ -387,6 +387,20 @@ static int enable_gap_auth_notifications(uint32_t type, uint8_t enable)
 }
 #endif
 
+static int set_hal_adapter_request_state(int enable)
+{
+       DBG("");
+       _bt_hal_set_adapter_request_state(enable);
+       return BT_STATUS_SUCCESS;
+}
+
+static int set_hal_le_request_state(int enable)
+{
+       DBG("");
+       _bt_hal_set_le_request_state(enable);
+       return BT_STATUS_SUCCESS;
+}
+
 static const bt_interface_t bluetooth_if = {
        .size = sizeof(bt_interface_t),
        .init = init,
@@ -444,6 +458,8 @@ static const bt_interface_t bluetooth_if = {
        .enable_rssi_monitoring = enable_rssi_monitoring,
        .get_connected_link_rssi_strength = get_connected_link_rssi_strength,
        .enable_gap_auth_notifications = enable_gap_auth_notifications,
+       .set_hal_adapter_request_state = set_hal_adapter_request_state,
+       .set_hal_le_request_state = set_hal_le_request_state,
 #endif
 };
 
index 316a792..6193d99 100644 (file)
@@ -39,6 +39,7 @@
 #include "bt-hal-adapter-le.h"
 #include "bt-hal-gatt-server.h"
 #include "bt-hal-gatt-client.h"
+#include "bt-hal-adapter-dbus-handler.h"
 
 #define BASELEN_PROP_CHANGED (sizeof(struct hal_ev_adapter_props_changed) \
                + sizeof(struct hal_property))
@@ -486,6 +487,43 @@ static void __bt_hal_adapter_property_changed_event(GVariant *msg)
        DBG("-");
 }
 
+static void __bt_hal_flight_ps_mode_cb(keynode_t *node, void *data)
+{
+       gboolean flight_mode = FALSE;
+       int type;
+       DBG_SECURE("HAL callback hit");
+       DBG_SECURE("key=%s", vconf_keynode_get_name(node));
+       type = vconf_keynode_get_type(node);
+       if (type == VCONF_TYPE_BOOL) {
+               flight_mode = vconf_keynode_get_bool(node);
+               if (flight_mode != TRUE) {
+                       ERR("Ignore the event");
+                       return;
+               }
+               else {
+                       ERR("Flight Mode == TRUE");
+               }
+       } else {
+               ERR("Invaild vconf key type : %d", type);
+               return;
+       }
+       DBG("Enabling core now");
+       _bt_hal_enable_core();
+}
+
+static void _bt_hal_register_vconf_handler(void)
+{
+       DBG("+");
+
+       if (vconf_notify_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE,
+               (vconf_callback_fn)__bt_hal_flight_ps_mode_cb, NULL) < 0)
+                       ERR("Unable to register key handler");
+       DBG("Telephony is disabled");
+       if (vconf_notify_key_changed(VCONFKEY_SETAPPL_PSMODE,
+               (vconf_callback_fn)__bt_hal_flight_ps_mode_cb, NULL) < 0)
+                       ERR("Unable to register key handler");
+}
+
 void _bt_hal_handle_adapter_event(GVariant *msg, const char *member)
 {
        DBG("+");
@@ -1455,6 +1493,9 @@ int _bt_hal_initialize_event_receiver(handle_stack_msg cb)
 
        /*TODO: Initialize Obexd Event receiver */
 
+       /* Initialize event receiver for flight mode  */
+       _bt_hal_register_vconf_handler();
+
        event_cb = cb;
        DBG("-");
 
index 3956df6..29ce3b3 100644 (file)
@@ -66,7 +66,6 @@ void _bt_hal_set_adapter_request_state(bool enable);
 
 void _bt_hal_set_le_request_state(bool enable);
 
-
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index e77a4d4..ce0f49d 100644 (file)
@@ -843,6 +843,17 @@ typedef struct {
         * type == value from bt_gap_auth_variant_t
         */
        int (*enable_gap_auth_notifications)(uint32_t type, uint8_t enable);
+       /*
+       * Sets is_activating variable in HAL to TRUE. It is required for the
+       * adapter switched on event to propagate to upper layers from HAL.
+       */
+       int (*set_hal_adapter_request_state)(int enable);
+
+       /*
+       * Sets is_activating variable in HAL to TRUE. It is required for the
+       * le adapter switched on event to propagate to upper layers from HAL.
+       */
+        int (*set_hal_le_request_state)(int enable);
 
 #endif
 } bt_interface_t;
index 427fdc1..387a0cb 100755 (executable)
@@ -248,3 +248,35 @@ void server_event_catch_register(oal_event_callback dbg_cb);
 }
 #endif /* __cplusplus */
 #endif /*_OAL_HARDWARE_H_*/
+
+/**
+ * @brief calls function to set the is_activating variable in HAL to true
+ *
+ * @remarks It is required to let adapter switched on event propagate upwards
+ *
+ * @details EVENT: N/A
+ *
+ * @return sucess if variable set in HAL
+ * @retval BT_STATUS_SUCCESS
+ *
+ * @pre N/A
+ *
+ * @see  N/A
+*/
+int oal_set_adapter_request_state(int enable);
+
+/*
+* @brief calls function to set the is_activating variable in HAL to true
+ *
+ * @remarks It is required to let le adapter switched on event propagate upwards
+ *
+ * @details EVENT: N/A
+ *
+ * @return sucess if variable set in HAL
+ * @retval BT_STATUS_SUCCESS
+ *
+ * @pre N/A
+ *
+ * @see  N/A
+*/
+int oal_set_le_request_state(int enable);
index 5384b61..f96c650 100644 (file)
@@ -136,6 +136,16 @@ void adapter_mgr_cleanup(void)
        BT_DBG();
 }
 
+int oal_set_adapter_request_state(int enable)
+{
+       return blued_api->set_hal_adapter_request_state(enable);
+}
+
+int oal_set_le_request_state(int enable)
+{
+       return blued_api->set_hal_le_request_state(enable);
+}
+
 oal_status_t adapter_enable(void)
 {
        int ret = BT_STATUS_SUCCESS;
index 31e9358..92f6bde 100644 (file)
@@ -75,14 +75,8 @@ typedef struct {
 static bt_adapter_timer_t visible_timer;
 
 static guint timer_id = 0;
-static guint le_timer_id = 0;
 
 static gboolean a2dp_init_pending = FALSE;
-static GDBusProxy *core_proxy = NULL;
-
-#define BT_CORE_NAME "org.projectx.bt_core"
-#define BT_CORE_PATH "/org/projectx/bt_core"
-#define BT_CORE_INTERFACE "org.projectx.btcore"
 
 /* Adapter default states */
 static bt_status_t adapter_state = BT_DEACTIVATED;
@@ -109,38 +103,8 @@ static gboolean __bt_is_service_request_present(int service_function);
 
 static void __bt_set_visible_mode(void);
 static void __bt_set_local_name(void);
-void _bt_adapter_start_enable_timer(void);
-void _bt_adapter_start_le_enable_timer(void);
-
-GDBusProxy *_bt_init_core_proxy(void)
-{
-       GDBusProxy *proxy;
-       GDBusConnection *conn;
-
-       conn = _bt_gdbus_get_system_gconn();
-       if (!conn)
-               return NULL;
-
-       proxy = g_dbus_proxy_new_sync(conn, G_DBUS_PROXY_FLAGS_NONE,
-                                       NULL,
-                                       BT_CORE_NAME,
-                                       BT_CORE_PATH,
-                                       BT_CORE_INTERFACE,
-                                       NULL, NULL);
-
-       if (!proxy)
-               return NULL;
-
-       core_proxy = proxy;
-
-       return proxy;
-}
-
-static GDBusProxy *__bt_get_core_proxy(void)
-{
-       return (core_proxy) ? core_proxy : _bt_init_core_proxy();
-}
-
+int set_adapter_request_state(int enable);
+int set_le_request_state(int enable);
 
 /* Initialize BT stack (Initialize OAL layer) */
 int _bt_stack_init(void)
@@ -178,34 +142,9 @@ int _bt_enable_adapter(void)
 
 int _bt_enable_core(void)
 {
-       BT_INFO("Implemented");
-       GDBusProxy *proxy;
-       GVariant *result;
-       GError *error = NULL;
-
-       proxy = __bt_get_core_proxy();
-       retv_if(!proxy, BLUETOOTH_ERROR_INTERNAL);
-
-       /* Clean up the process */
-       result = g_dbus_proxy_call_sync(proxy,
-                               "EnableCore",
-                               NULL,
-                               G_DBUS_CALL_FLAGS_NONE,
-                               -1,
-                               NULL,
-                               &error);
-
-       if (!result) {
-               if (error != NULL) {
-                       BT_ERR("Bt core call failed(Error: %s)", error->message);
-                       g_clear_error(&error);
-               } else
-                       BT_ERR("Bt core call failed");
-        return BLUETOOTH_ERROR_INTERNAL;
-}
-
-g_variant_unref(result);
-return BLUETOOTH_ERROR_NONE;
+       /* TODO_40 : 4.0 merge  */
+       BT_INFO("Not Supported");
+       return BLUETOOTH_ERROR_NOT_SUPPORT;
 }
 
 int _bt_recover_adapter(void)
@@ -230,30 +169,6 @@ int _bt_reset_adapter(void)
        return BLUETOOTH_ERROR_NONE;
 }
 
-void _bt_set_le_disabled(int result)
-{
-       int power_off_status;
-       int ret;
-
-       ret = vconf_get_int(VCONFKEY_SYSMAN_POWER_OFF_STATUS, &power_off_status);
-       BT_DBG("ret : %d", ret);
-       BT_DBG("power_off_status : %d", power_off_status);
-
-       /* Update Bluetooth Status to notify other modules */
-       BT_DBG("Update vconf for BT LE normal Deactivation");
-       if (vconf_set_int(VCONFKEY_BT_LE_STATUS, VCONFKEY_BT_LE_STATUS_OFF) != 0)
-               BT_ERR("Set vconf failed\n");
-                       _bt_adapter_set_le_status(BT_LE_DEACTIVATED);
-
-       if (_bt_eventsystem_set_value(SYS_EVENT_BT_STATE, EVT_KEY_BT_LE_STATE,
-                                               EVT_VAL_BT_LE_OFF) != ES_R_OK)
-                       BT_ERR("Fail to set value");
-
-       /* Send disabled event */
-       _bt_send_event(BT_LE_ADAPTER_EVENT, BLUETOOTH_EVENT_LE_DISABLED,
-                       g_variant_new("(i)", result));
-}
-
 int _bt_check_adapter(int *status)
 {
        BT_INFO("+");
@@ -304,170 +219,6 @@ gboolean _bt_is_discovering(void)
                return FALSE;
 }
 
-static void __bt_service_flight_ps_mode_cb(keynode_t *node, void *data)
-{
-       gboolean flight_mode = FALSE;
-       int type;
-
-       DBG_SECURE("key=%s", vconf_keynode_get_name(node));
-       type = vconf_keynode_get_type(node);
-       if (type == VCONF_TYPE_BOOL) {
-               flight_mode = vconf_keynode_get_bool(node);
-               if (flight_mode != TRUE) {
-                       BT_ERR("Ignore the event");
-                       return;
-               }
-               else {
-                       BT_ERR("Flight Mode == TRUE");
-               }
-       } else {
-               BT_ERR("Invaild vconf key type : %d", type);
-               return;
-       }
-
-       _bt_enable_core();
-}
-
-void _bt_service_register_vconf_handler(void)
-{
-       BT_DBG("+");
-
-       if (vconf_notify_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE,
-               (vconf_callback_fn)__bt_service_flight_ps_mode_cb, NULL) < 0)
-                       BT_ERR("Unable to register key handler");
-       BT_DBG("Telephony is disabled");
-       if (vconf_notify_key_changed(VCONFKEY_SETAPPL_PSMODE,
-               (vconf_callback_fn)__bt_service_flight_ps_mode_cb, NULL) < 0)
-                       BT_ERR("Unable to register key handler");
-}
-
-void _bt_service_unregister_vconf_handler(void)
-{
-       BT_DBG("+");
-
-       vconf_ignore_key_changed(VCONFKEY_TELEPHONY_FLIGHT_MODE,
-                       (vconf_callback_fn)__bt_service_flight_ps_mode_cb);
-
-       vconf_ignore_key_changed(VCONFKEY_SETAPPL_PSMODE,
-                       (vconf_callback_fn)__bt_service_flight_ps_mode_cb);
-}
-
-static gboolean __bt_enable_timeout_cb(gpointer user_data)
-{
-       GDBusProxy *proxy;
-       GVariant *result;
-       GError *error = NULL;
-
-       timer_id = 0;
-
-       retv_if(_bt_adapter_get_status() == BT_ACTIVATED, FALSE);
-
-       BT_ERR("EnableAdapter is failed");
-
-       proxy = __bt_get_core_proxy();
-       if (!proxy)
-               return FALSE;
-
-       /* Clean up the process */
-       result = g_dbus_proxy_call_sync(proxy,
-                               "DisableAdapter",
-                               NULL,
-                               G_DBUS_CALL_FLAGS_NONE,
-                               -1,
-                               NULL,
-                               &error);
-
-       if (!result) {
-               if (error != NULL) {
-                       BT_ERR("Bt core call failed(Error: %s)", error->message);
-                       g_clear_error(&error);
-               } else {
-                       BT_ERR("Bt core call failed");
-               }
-               return FALSE;
-       }
-
-       g_variant_unref(result);
-       _bt_set_disabled(BLUETOOTH_ERROR_TIMEOUT);
-
-#ifndef USB_BLUETOOTH
-       _bt_terminate_service(NULL);
-#endif
-
-       return FALSE;
-}
-
-void _bt_adapter_start_enable_timer(void)
-{
-       if (timer_id > 0) {
-               g_source_remove(timer_id);
-               timer_id = 0;
-       }
-
-       timer_id = g_timeout_add(BT_ENABLE_TIMEOUT,
-                       __bt_enable_timeout_cb, NULL);
-
-       return;
-}
-
-static gboolean __bt_enable_le_timeout_cb(gpointer user_data)
-{
-       GDBusProxy *proxy;
-       GVariant *result;
-       GError *error = NULL;
-
-       le_timer_id = 0;
-
-       retv_if(_bt_adapter_get_le_status() == BT_LE_ACTIVATED, FALSE);
-
-       BT_ERR("EnableAdapterLE is failed");
-
-       proxy = __bt_get_core_proxy();
-       if (!proxy)
-               return FALSE;
-
-       /* Clean up the process */
-       result = g_dbus_proxy_call_sync(proxy,
-                               "DisableAdapterLe",
-                               NULL,
-                               G_DBUS_CALL_FLAGS_NONE,
-                               -1,
-                               NULL,
-                               &error);
-
-       if (!result) {
-               if (error != NULL) {
-                       BT_ERR("Bt core call failed(Error: %s)", error->message);
-                       g_clear_error(&error);
-               } else
-                       BT_ERR("Bt core call failed");
-               return FALSE;
-       }
-
-       g_variant_unref(result);
-       _bt_adapter_set_le_status(BT_LE_DEACTIVATED);
-
-       _bt_set_le_disabled(BLUETOOTH_ERROR_TIMEOUT);
-
-       if (_bt_adapter_get_status() == BT_DEACTIVATED)
-               _bt_terminate_service(NULL);
-
-       return FALSE;
-}
-
-void _bt_adapter_start_le_enable_timer(void)
-{
-       if (le_timer_id > 0) {
-               g_source_remove(le_timer_id);
-               le_timer_id = 0;
-       }
-
-       le_timer_id = g_timeout_add(BT_ENABLE_TIMEOUT,
-                       __bt_enable_le_timeout_cb, NULL);
-
-       return;
-}
-
 int _bt_get_local_address(void)
 {
        int result;
@@ -1571,6 +1322,16 @@ static void __bt_adapter_state_change_callback(int bt_status)
        }
 }
 
+int set_adapter_request_state(int enable)
+{
+       return oal_set_adapter_request_state(enable);
+}
+
+int set_le_request_state(int enable)
+{
+       return oal_set_le_request_state(enable);
+}
+
 static int __bt_adapter_state_handle_request(gboolean enable)
 {
        int result = BLUETOOTH_ERROR_NONE;
index a6a05e2..5db542b 100644 (file)
@@ -3439,7 +3439,7 @@ int __bt_core_request(int function_name,
        case BT_ENABLE_ADAPTER:
        {
                bt_status_t status;
-
+               set_adapter_request_state(TRUE);
                status = _bt_adapter_get_status();
 
                if (status == BT_ACTIVATING) {
@@ -3449,10 +3449,7 @@ int __bt_core_request(int function_name,
                        BT_DBG("Already enabled");
                        result = BLUETOOTH_ERROR_DEVICE_ALREADY_ENABLED;
                } else {
-                       BT_INFO("Start Enabling Adapter");
                        _bt_adapter_set_status(BT_ACTIVATING);
-                       _bt_adapter_start_enable_timer();
-                       BT_INFO("Returning with no error");
                        result = BLUETOOTH_ERROR_NONE;
                }
 
@@ -3461,7 +3458,7 @@ int __bt_core_request(int function_name,
        case BT_DISABLE_ADAPTER:
        {
                bt_status_t status;
-
+               set_le_request_state(TRUE);
                status = _bt_adapter_get_status();
                if (status == BT_DEACTIVATING) {
                                BT_DBG("Disabling in progress");
@@ -3489,9 +3486,6 @@ int __bt_core_request(int function_name,
                        result = BLUETOOTH_ERROR_DEVICE_ALREADY_ENABLED;
                } else {
                        _bt_adapter_set_le_status(BT_LE_ACTIVATING);
-
-                       _bt_adapter_start_le_enable_timer();
-
                        result = BLUETOOTH_ERROR_NONE;
                }
 
index ac58c28..3f846da 100644 (file)
@@ -54,9 +54,6 @@ static void __on_log_glib(const gchar *log_domain, GLogLevelFlags log_level,
 
 static void __bt_release_service(void)
 {
-
-       _bt_service_unregister_vconf_handler();
-
        _bt_service_le_deinit();
        _bt_deinit_hf_local_term_event_sender();
        _bt_deinit_service_event_sender();
@@ -231,8 +228,7 @@ int _bt_service_initialize(void)
                return EXIT_FAILURE;
        }
 
-       _bt_service_register_vconf_handler();
-       BT_INFO("Registered flight mode handler");
+       /* Flight mode handler implemented in HAL */
 
        /* Event sender Init */
        ret = _bt_init_service_event_sender();
index a6bbd33..3108464 100644 (file)
@@ -64,6 +64,8 @@ int _bt_cancel_discovery(void);
 
 void _bt_service_register_vconf_handler(void);
 
+void _bt_service_register_vconf_handler(void);
+
 gboolean _bt_is_discovering(void);
 
 int _bt_stack_init(void);
@@ -102,13 +104,9 @@ bt_status_t _bt_adapter_get_status(void);
 
 void _bt_set_disabled(int result);
 
-void _bt_adapter_start_enable_timer(void);
-
-void _bt_set_le_disabled(int result);
-
-void _bt_adapter_start_le_enable_timer(void);
+int set_adapter_request_state(int enable);
 
-void _bt_service_unregister_vconf_handler(void);
+int set_le_request_state(int enable);
 
 #ifdef __cplusplus
 }