diff options
author | Myles Watson <mylesgw@google.com> | 2017-03-15 21:26:32 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-03-15 21:26:32 +0000 |
commit | 781bd6409dafab4b4daa4b749af3806dae554015 (patch) | |
tree | a6db355a200484f75334db5b32a08284688a8685 | |
parent | 32f32a75a468bec3ef693f3a1b689e1c98ec3f6f (diff) | |
parent | 143cfc373f63cd378df5d0fbc3244140e1a13b9e (diff) | |
download | hikey-781bd6409dafab4b4daa4b749af3806dae554015.tar.gz |
Merge "Bluetooth: Add death recipient" am: 5e2670e4bc am: df56c1f3c6
am: 143cfc373f
Change-Id: I64f6c161ac7e91b7d819fc8ff23142ec83e3d7ee
-rw-r--r-- | bluetooth/bluetooth_hci.cc | 6 | ||||
-rw-r--r-- | bluetooth/bluetooth_hci.h | 14 |
2 files changed, 20 insertions, 0 deletions
diff --git a/bluetooth/bluetooth_hci.cc b/bluetooth/bluetooth_hci.cc index fa14b539..fe2b782b 100644 --- a/bluetooth/bluetooth_hci.cc +++ b/bluetooth/bluetooth_hci.cc @@ -32,6 +32,9 @@ namespace hikey { using android::hardware::hidl_vec; +BluetoothHci::BluetoothHci() + : deathRecipient(new BluetoothDeathRecipient(this)) {} + Return<void> BluetoothHci::initialize( const ::android::sp<IBluetoothHciCallbacks>& cb) { ALOGI("BluetoothHci::initialize()"); @@ -44,6 +47,7 @@ Return<void> BluetoothHci::initialize( } event_cb_ = cb; + event_cb_->linkToDeath(deathRecipient, 0); hci_ = new hci::H4Protocol( hci_tty_fd_, @@ -88,6 +92,8 @@ Return<void> BluetoothHci::close() { hci_tty_fd_ = -1; } + event_cb_->unlinkToDeath(deathRecipient); + if (hci_ != nullptr) { delete hci_; hci_ = nullptr; diff --git a/bluetooth/bluetooth_hci.h b/bluetooth/bluetooth_hci.h index 484a6ab4..2f1015a0 100644 --- a/bluetooth/bluetooth_hci.h +++ b/bluetooth/bluetooth_hci.h @@ -32,8 +32,20 @@ namespace hikey { using ::android::hardware::Return; using ::android::hardware::hidl_vec; +struct BluetoothDeathRecipient : hidl_death_recipient { + BluetoothDeathRecipient(const sp<IBluetoothHci> hci) : mHci(hci) {} + + virtual void serviceDied( + uint64_t /*cookie*/, + const wp<::android::hidl::base::V1_0::IBase>& /*who*/) { + mHci->close(); + } + sp<IBluetoothHci> mHci; +}; + class BluetoothHci : public IBluetoothHci { public: + BluetoothHci(); Return<void> initialize( const ::android::sp<IBluetoothHciCallbacks>& cb) override; Return<void> sendHciCommand(const hidl_vec<uint8_t>& packet) override; @@ -50,6 +62,8 @@ class BluetoothHci : public IBluetoothHci { async::AsyncFdWatcher fd_watcher_; hci::H4Protocol* hci_; + + ::android::sp<BluetoothDeathRecipient> deathRecipient; }; } // namespace hikey |