Add stack down functionality in bt-core 19/252219/6
authorWootak Jung <wootak.jung@samsung.com>
Tue, 26 Jan 2021 01:26:42 +0000 (10:26 +0900)
committerWootak Jung <wootak.jung@samsung.com>
Tue, 26 Jan 2021 07:12:12 +0000 (16:12 +0900)
it's better to use actd instead of script

Change-Id: I0fbaf022fe7597c46d295a3edb84928ac338b1b6
Signed-off-by: Wootak Jung <wootak.jung@samsung.com>
bt-core/bt-core-adapter.c
bt-core/include/bt-core-adapter.h
include/bt-internal-types.h

index 3fab9b0bd4f84434b779fa184144cd769956bfc8..8855ea63a6490131c4d629fbeb9cc2d9f8e75c4e 100644 (file)
@@ -34,6 +34,7 @@
 
 #define BT_CORE_IDLE_TERM_TIME 200 /* 200ms */
 #define BT_CORE_CHECK_ADAPTER_OBJECT_PATH_MAX 50
+#define BT_CORE_SERVICE_NAME_LENGTH_MAX 50
 
 #ifdef TIZEN_FEATURE_BT_OTP
 #define BT_OTP_OBJECT_PATH     "/org/projectx/otp"
 #define BLE_DISABLED           "LeDisabled"
 #endif
 
+struct service_name_table {
+       int supported;
+       char name[BT_CORE_SERVICE_NAME_LENGTH_MAX];
+};
+
 static bt_status_t adapter_status = BT_DEACTIVATED;
 static bt_le_status_t adapter_le_status = BT_LE_DEACTIVATED;
 static gboolean is_recovery_mode = FALSE;
@@ -221,6 +227,34 @@ static int __bt_stack_up(void)
        return 0;
 }
 
+static void __bt_stack_down()
+{
+       int ret, i;
+       struct service_name_table service_list[] = {
+               {TIZEN_FEATURE_BT_SUPPORTED, BT_SYSTEMACT_BLUEZ_START},
+               {TIZEN_FEATURE_BT_SUPPORTED, BT_SYSTEMACT_HCI_LOGGER_START},
+               {TIZEN_FEATURE_BT_SUPPORTED, BT_SYSTEMACT_HF_AGENT},
+               {TIZEN_FEATURE_BT_SUPPORTED, BT_SYSTEMACT_MAP_AGENT},
+               {TIZEN_FEATURE_OPP_SUPPORTED, BT_SYSTEMACT_BLUETOOTH_SHARE_START},
+               {TIZEN_FEATURE_OPP_SUPPORTED, BT_SYSTEMACT_OBEX},
+               {TIZEN_FEATURE_PBAP_SUPPORTED, BT_SYSTEMACT_PBAP_AGENT},
+               {TIZEN_FEATURE_AUDIO_CALL_SUPPORTED, BT_SYSTEMACT_AG_AGENT},
+               {TIZEN_FEATURE_HID_DEVICE_SUPPORTED, BT_SYSTEMACT_HID_AGENT},
+               {-1, ""},
+       };
+
+       BT_DBG("Stop bluetooth-related services");
+       for (i = 0; service_list[i].supported != -1; i++) {
+               if (service_list[i].supported) {
+                       ret = actd_stop_unit(UNIT_CONTROL_BUS_TYPE_SYSTEM, service_list[i].name, 5000);
+                       if (ret != UNIT_CONTROL_OK)
+                               BT_ERR("Failed to stop the %s: %d", service_list[i].name, ret);
+                       else
+                               BT_INFO("%s stopped successfully", service_list[i].name);
+               }
+       }
+}
+
 int _bt_enable_adapter(void)
 {
        int ret;
@@ -338,6 +372,8 @@ int _bt_disable_adapter(void)
                                        return -1;
                                }
                                BT_ERR("Stopped successfully bluetooth hal");
+
+                               __bt_stack_down();
                        }
                }
                _bt_core_terminate();
@@ -387,6 +423,8 @@ int _bt_disable_adapter(void)
                                return -1;
                        }
                        BT_ERR("Stopped successfully bluetooth hal");
+
+                       __bt_stack_down();
                }
        }
 
index b96f546447eecd0fcb01a7eb6ccdfaf94ffc5c58..1e193352d63690a5c8954793e5a99e531b1d1255 100755 (executable)
@@ -47,6 +47,12 @@ extern "C" {
 #define BT_SYSTEMACT_STACK_DOWN_WITH_RADIO "bluetooth-stack-down-with-radio.service"
 #define BT_SYSTEMACT_EDUTM_ON "bluetooth-edutm-on.service"
 #define BT_SYSTEMACT_EDUTM_OFF "bluetooth-edutm-off.service"
+#define BT_SYSTEMACT_PBAP_AGENT "bluetooth-pbap-agent.service"
+#define BT_SYSTEMACT_MAP_AGENT "bluetooth-map-agent.service"
+#define BT_SYSTEMACT_HF_AGENT "bluetooth-hf-agent.service"
+#define BT_SYSTEMACT_AG_AGENT "bluetooth-ag-agent.service"
+#define BT_SYSTEMACT_HID_AGENT "bluetooth-hid-agent.service"
+#define BT_SYSTEMACT_OBEX "obex.service"
 
 #define BT_CORE_TYPE (bt_core_get_type())
 
index 10b147c612fcb4694f1ecddcdae70af9080d17d8..95794dc8abb5c67c46161e50740570d052628f23 100644 (file)
@@ -753,6 +753,9 @@ typedef struct {
 
 #define BT_FEATURE_COMMON "http://tizen.org/feature/network.bluetooth"
 #define BT_FEATURE_OPP "http://tizen.org/feature/network.bluetooth.opp"
+#define BT_FEATURE_AUDIO_CALL "http://tizen.org/feature/network.bluetooth.audio.call"
+#define BT_FEATURE_HID_DEVICE "http://tizen.org/feature/network.bluetooth.hid_device"
+#define BT_FEATURE_PBAP "http://tizen.org/feature/network.bluetooth.phonebook.client"
 
 struct bluetooth_headed_plugin_t {
        int (*bt_launch_dpmpopup) (char *mode);
@@ -907,6 +910,9 @@ static inline bool get_tizen_feature_supported(char *feature)
 #define TIZEN_FEATURE_BLUEZ_SPEAKER_REFERENCE ((get_tizen_model()) == _MODEL_RPI3 && (get_tizen_profile()) == _PROFILE_COMMON)
 #define TIZEN_FEATURE_BT_SUPPORTED (get_tizen_feature_supported(BT_FEATURE_COMMON) == true)
 #define TIZEN_FEATURE_OPP_SUPPORTED (get_tizen_feature_supported(BT_FEATURE_OPP) == true)
+#define TIZEN_FEATURE_AUDIO_CALL_SUPPORTED (get_tizen_feature_supported(BT_FEATURE_AUDIO_CALL) == true)
+#define TIZEN_FEATURE_HID_DEVICE_SUPPORTED (get_tizen_feature_supported(BT_FEATURE_HID_DEVICE) == true)
+#define TIZEN_FEATURE_PBAP_SUPPORTED (get_tizen_feature_supported(BT_FEATURE_PBAP) == true)
 
 #ifdef __cplusplus
 }