Bluetooth: deal with framework going away.
Bug: 35624326
Test: Bluetooth HAL stays alive and works after com.android.bluetooth
is killed.
Change-Id: Id5b5a5b88cd35202e5737a0c99d28db9bebb4250
diff --git a/bluetooth/1.0/default/bluetooth_hci.h b/bluetooth/1.0/default/bluetooth_hci.h
index da1b411..67d6c37 100644
--- a/bluetooth/1.0/default/bluetooth_hci.h
+++ b/bluetooth/1.0/default/bluetooth_hci.h
@@ -30,8 +30,20 @@
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;
@@ -42,6 +54,7 @@
private:
void sendDataToController(const uint8_t type, const hidl_vec<uint8_t>& data);
::android::sp<IBluetoothHciCallbacks> event_cb_;
+ ::android::sp<BluetoothDeathRecipient> deathRecipient;
};
extern "C" IBluetoothHci* HIDL_FETCH_IBluetoothHci(const char* name);