Loading system/btif/include/btif_common.h +21 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ #include <stdlib.h> #include <base/bind.h> #include <base/tracked_objects.h> #include <hardware/bluetooth.h> #include "bt_types.h" Loading Loading @@ -202,6 +204,25 @@ typedef struct { * Functions ******************************************************************************/ extern bt_status_t do_in_jni_thread(const base::Closure& task); extern bt_status_t do_in_jni_thread(const tracked_objects::Location& from_here, const base::Closure& task); /** * This template wraps callback into callback that will be executed on jni * thread */ template <typename R, typename... Args> base::Callback<R(Args...)> jni_thread_wrapper( const tracked_objects::Location& from_here, base::Callback<R(Args...)> cb) { return base::Bind( [](const tracked_objects::Location& from_here, base::Callback<R(Args...)> cb, Args... args) { do_in_jni_thread(from_here, base::Bind(cb, std::forward<Args>(args)...)); }, from_here, std::move(cb)); } tBTA_SERVICE_MASK btif_get_enabled_services_mask(void); bt_status_t btif_enable_service(tBTA_SERVICE_ID service_id); bt_status_t btif_disable_service(tBTA_SERVICE_ID service_id); Loading system/btif/src/btif_ble_advertiser.cc +13 −33 Original line number Diff line number Diff line Loading @@ -120,26 +120,13 @@ class BleAdvertiserInterfaceImpl : public BleAdvertiserInterface { base::Unretained(this), cb))); } void SetDataCb(Callback cb, uint8_t advertiser_id, uint8_t status) { do_in_jni_thread(Bind(cb, status)); } void SetData(int advertiser_id, bool set_scan_rsp, vector<uint8_t> data, Callback cb) override { do_in_bta_thread(FROM_HERE, do_in_bta_thread( FROM_HERE, Bind(&BleAdvertisingManager::SetData, base::Unretained(BleAdvertisingManager::Get()), advertiser_id, set_scan_rsp, std::move(data), Bind(&BleAdvertiserInterfaceImpl::SetDataCb, base::Unretained(this), cb, advertiser_id))); } void EnableTimeoutCb(Callback cb, uint8_t status) { do_in_jni_thread(Bind(cb, status)); } void EnableCb(Callback cb, uint8_t status) { do_in_jni_thread(Bind(cb, status)); base::Unretained(BleAdvertisingManager::Get()), advertiser_id, set_scan_rsp, std::move(data), jni_thread_wrapper(FROM_HERE, cb))); } void Enable(uint8_t advertiser_id, bool enable, Callback cb, int timeout_s, Loading @@ -151,10 +138,8 @@ class BleAdvertiserInterfaceImpl : public BleAdvertiserInterface { FROM_HERE, Bind(&BleAdvertisingManager::Enable, base::Unretained(BleAdvertisingManager::Get()), advertiser_id, enable, Bind(&BleAdvertiserInterfaceImpl::EnableCb, base::Unretained(this), cb), timeout_s, Bind(&BleAdvertiserInterfaceImpl::EnableTimeoutCb, base::Unretained(this), timeout_cb))); enable, jni_thread_wrapper(FROM_HERE, cb), timeout_s, jni_thread_wrapper(FROM_HERE, timeout_cb))); } void StartAdvertising(uint8_t advertiser_id, Callback cb, Loading @@ -178,17 +163,12 @@ class BleAdvertiserInterfaceImpl : public BleAdvertiserInterface { params.scan_request_notification_enable; do_in_bta_thread( FROM_HERE, Bind(&BleAdvertisingManager::StartAdvertising, base::Unretained(BleAdvertisingManager::Get()), advertiser_id, base::Bind( [](Callback cb, uint8_t status) { do_in_jni_thread(Bind(cb, status)); }, cb), base::Owned(p_params), std::move(advertise_data), std::move(scan_response_data), timeout_s, Bind(&BleAdvertiserInterfaceImpl::EnableTimeoutCb, base::Unretained(this), timeout_cb))); FROM_HERE, Bind(&BleAdvertisingManager::StartAdvertising, base::Unretained(BleAdvertisingManager::Get()), advertiser_id, jni_thread_wrapper(FROM_HERE, cb), base::Owned(p_params), std::move(advertise_data), std::move(scan_response_data), timeout_s, jni_thread_wrapper(FROM_HERE, timeout_cb))); } }; Loading system/btif/src/btif_core.cc +11 −12 Original line number Diff line number Diff line Loading @@ -213,30 +213,29 @@ bt_status_t btif_transfer_context(tBTIF_CBACK* p_cback, uint16_t event, return BT_STATUS_SUCCESS; } /******************************************************************************* * * Function do_in_jni_thread * * Description This function posts a task into the btif message loop, that * executes it in the JNI message loop. * * Returns void * ******************************************************************************/ bt_status_t do_in_jni_thread(const base::Closure& task) { /** * This function posts a task into the btif message loop, that executes it in * the JNI message loop. **/ bt_status_t do_in_jni_thread(const tracked_objects::Location& from_here, const base::Closure& task) { if (!message_loop_ || !message_loop_->task_runner().get()) { BTIF_TRACE_WARNING("%s: Dropped message, message_loop not initialized yet!", __func__); return BT_STATUS_FAIL; } if (message_loop_->task_runner()->PostTask(FROM_HERE, task)) if (message_loop_->task_runner()->PostTask(from_here, task)) return BT_STATUS_SUCCESS; BTIF_TRACE_ERROR("%s: Post task to task runner failed!", __func__); return BT_STATUS_FAIL; } bt_status_t do_in_jni_thread(const base::Closure& task) { return do_in_jni_thread(FROM_HERE, task); } /******************************************************************************* * * Function btif_is_dut_mode Loading Loading
system/btif/include/btif_common.h +21 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ #include <stdlib.h> #include <base/bind.h> #include <base/tracked_objects.h> #include <hardware/bluetooth.h> #include "bt_types.h" Loading Loading @@ -202,6 +204,25 @@ typedef struct { * Functions ******************************************************************************/ extern bt_status_t do_in_jni_thread(const base::Closure& task); extern bt_status_t do_in_jni_thread(const tracked_objects::Location& from_here, const base::Closure& task); /** * This template wraps callback into callback that will be executed on jni * thread */ template <typename R, typename... Args> base::Callback<R(Args...)> jni_thread_wrapper( const tracked_objects::Location& from_here, base::Callback<R(Args...)> cb) { return base::Bind( [](const tracked_objects::Location& from_here, base::Callback<R(Args...)> cb, Args... args) { do_in_jni_thread(from_here, base::Bind(cb, std::forward<Args>(args)...)); }, from_here, std::move(cb)); } tBTA_SERVICE_MASK btif_get_enabled_services_mask(void); bt_status_t btif_enable_service(tBTA_SERVICE_ID service_id); bt_status_t btif_disable_service(tBTA_SERVICE_ID service_id); Loading
system/btif/src/btif_ble_advertiser.cc +13 −33 Original line number Diff line number Diff line Loading @@ -120,26 +120,13 @@ class BleAdvertiserInterfaceImpl : public BleAdvertiserInterface { base::Unretained(this), cb))); } void SetDataCb(Callback cb, uint8_t advertiser_id, uint8_t status) { do_in_jni_thread(Bind(cb, status)); } void SetData(int advertiser_id, bool set_scan_rsp, vector<uint8_t> data, Callback cb) override { do_in_bta_thread(FROM_HERE, do_in_bta_thread( FROM_HERE, Bind(&BleAdvertisingManager::SetData, base::Unretained(BleAdvertisingManager::Get()), advertiser_id, set_scan_rsp, std::move(data), Bind(&BleAdvertiserInterfaceImpl::SetDataCb, base::Unretained(this), cb, advertiser_id))); } void EnableTimeoutCb(Callback cb, uint8_t status) { do_in_jni_thread(Bind(cb, status)); } void EnableCb(Callback cb, uint8_t status) { do_in_jni_thread(Bind(cb, status)); base::Unretained(BleAdvertisingManager::Get()), advertiser_id, set_scan_rsp, std::move(data), jni_thread_wrapper(FROM_HERE, cb))); } void Enable(uint8_t advertiser_id, bool enable, Callback cb, int timeout_s, Loading @@ -151,10 +138,8 @@ class BleAdvertiserInterfaceImpl : public BleAdvertiserInterface { FROM_HERE, Bind(&BleAdvertisingManager::Enable, base::Unretained(BleAdvertisingManager::Get()), advertiser_id, enable, Bind(&BleAdvertiserInterfaceImpl::EnableCb, base::Unretained(this), cb), timeout_s, Bind(&BleAdvertiserInterfaceImpl::EnableTimeoutCb, base::Unretained(this), timeout_cb))); enable, jni_thread_wrapper(FROM_HERE, cb), timeout_s, jni_thread_wrapper(FROM_HERE, timeout_cb))); } void StartAdvertising(uint8_t advertiser_id, Callback cb, Loading @@ -178,17 +163,12 @@ class BleAdvertiserInterfaceImpl : public BleAdvertiserInterface { params.scan_request_notification_enable; do_in_bta_thread( FROM_HERE, Bind(&BleAdvertisingManager::StartAdvertising, base::Unretained(BleAdvertisingManager::Get()), advertiser_id, base::Bind( [](Callback cb, uint8_t status) { do_in_jni_thread(Bind(cb, status)); }, cb), base::Owned(p_params), std::move(advertise_data), std::move(scan_response_data), timeout_s, Bind(&BleAdvertiserInterfaceImpl::EnableTimeoutCb, base::Unretained(this), timeout_cb))); FROM_HERE, Bind(&BleAdvertisingManager::StartAdvertising, base::Unretained(BleAdvertisingManager::Get()), advertiser_id, jni_thread_wrapper(FROM_HERE, cb), base::Owned(p_params), std::move(advertise_data), std::move(scan_response_data), timeout_s, jni_thread_wrapper(FROM_HERE, timeout_cb))); } }; Loading
system/btif/src/btif_core.cc +11 −12 Original line number Diff line number Diff line Loading @@ -213,30 +213,29 @@ bt_status_t btif_transfer_context(tBTIF_CBACK* p_cback, uint16_t event, return BT_STATUS_SUCCESS; } /******************************************************************************* * * Function do_in_jni_thread * * Description This function posts a task into the btif message loop, that * executes it in the JNI message loop. * * Returns void * ******************************************************************************/ bt_status_t do_in_jni_thread(const base::Closure& task) { /** * This function posts a task into the btif message loop, that executes it in * the JNI message loop. **/ bt_status_t do_in_jni_thread(const tracked_objects::Location& from_here, const base::Closure& task) { if (!message_loop_ || !message_loop_->task_runner().get()) { BTIF_TRACE_WARNING("%s: Dropped message, message_loop not initialized yet!", __func__); return BT_STATUS_FAIL; } if (message_loop_->task_runner()->PostTask(FROM_HERE, task)) if (message_loop_->task_runner()->PostTask(from_here, task)) return BT_STATUS_SUCCESS; BTIF_TRACE_ERROR("%s: Post task to task runner failed!", __func__); return BT_STATUS_FAIL; } bt_status_t do_in_jni_thread(const base::Closure& task) { return do_in_jni_thread(FROM_HERE, task); } /******************************************************************************* * * Function btif_is_dut_mode Loading