diff --git a/nfc/1.0/default/Nfc.cpp b/nfc/1.0/default/Nfc.cpp index d337a36e29..fcdcbbc301 100644 --- a/nfc/1.0/default/Nfc.cpp +++ b/nfc/1.0/default/Nfc.cpp @@ -14,9 +14,7 @@ namespace implementation { sp Nfc::mCallback = nullptr; -Nfc::Nfc(nfc_nci_device_t* device) : mDevice(device), - mDeathRecipient(new NfcDeathRecipient(this)) { -} +Nfc::Nfc(nfc_nci_device_t* device) : mDevice(device) {} // Methods from ::android::hardware::nfc::V1_0::INfc follow. ::android::hardware::Return Nfc::open(const sp& clientCallback) { @@ -25,7 +23,7 @@ Nfc::Nfc(nfc_nci_device_t* device) : mDevice(device), if (mDevice == nullptr || mCallback == nullptr) { return NfcStatus::FAILED; } - mCallback->linkToDeath(mDeathRecipient, 0 /*cookie*/); + mCallback->linkToDeath(this, 0 /*cookie*/); int ret = mDevice->open(mDevice, eventCallback, dataCallback); return ret == 0 ? NfcStatus::OK : NfcStatus::FAILED; } @@ -58,7 +56,7 @@ Nfc::Nfc(nfc_nci_device_t* device) : mDevice(device), if (mDevice == nullptr || mCallback == nullptr) { return NfcStatus::FAILED; } - mCallback->unlinkToDeath(mDeathRecipient); + mCallback->unlinkToDeath(this); return mDevice->close(mDevice) ? NfcStatus::FAILED : NfcStatus::OK; } diff --git a/nfc/1.0/default/Nfc.h b/nfc/1.0/default/Nfc.h index d8787fd043..ab95d064e5 100644 --- a/nfc/1.0/default/Nfc.h +++ b/nfc/1.0/default/Nfc.h @@ -19,50 +19,45 @@ using ::android::hardware::hidl_vec; using ::android::hardware::hidl_string; using ::android::sp; -struct NfcDeathRecipient : hidl_death_recipient { - NfcDeathRecipient(const sp nfc) : mNfc(nfc) { +struct Nfc : public INfc, public hidl_death_recipient { + Nfc(nfc_nci_device_t* device); + ::android::hardware::Return open( + const sp& clientCallback) override; + ::android::hardware::Return write(const hidl_vec& data) override; + ::android::hardware::Return coreInitialized(const hidl_vec& data) override; + ::android::hardware::Return prediscover() override; + ::android::hardware::Return close() override; + ::android::hardware::Return controlGranted() override; + ::android::hardware::Return powerCycle() override; + + static void eventCallback(uint8_t event, uint8_t status) { + if (mCallback != nullptr) { + auto ret = mCallback->sendEvent((::android::hardware::nfc::V1_0::NfcEvent)event, + (::android::hardware::nfc::V1_0::NfcStatus)status); + if (!ret.isOk()) { + ALOGW("Failed to call back into NFC process."); + } + } + } + static void dataCallback(uint16_t data_len, uint8_t* p_data) { + hidl_vec data; + data.setToExternal(p_data, data_len); + if (mCallback != nullptr) { + auto ret = mCallback->sendData(data); + if (!ret.isOk()) { + ALOGW("Failed to call back into NFC process."); + } + } } - virtual void serviceDied(uint64_t /*cookie*/, const wp<::android::hidl::base::V1_0::IBase>& /*who*/) { - mNfc->close(); + virtual void serviceDied(uint64_t /*cookie*/, + const wp<::android::hidl::base::V1_0::IBase>& /*who*/) { + close(); } - sp mNfc; -}; -struct Nfc : public INfc { - Nfc(nfc_nci_device_t* device); - ::android::hardware::Return open(const sp& clientCallback) override; - ::android::hardware::Return write(const hidl_vec& data) override; - ::android::hardware::Return coreInitialized(const hidl_vec& data) override; - ::android::hardware::Return prediscover() override; - ::android::hardware::Return close() override; - ::android::hardware::Return controlGranted() override; - ::android::hardware::Return powerCycle() override; - - static void eventCallback(uint8_t event, uint8_t status) { - if (mCallback != nullptr) { - auto ret = mCallback->sendEvent( - (::android::hardware::nfc::V1_0::NfcEvent) event, - (::android::hardware::nfc::V1_0::NfcStatus) status); - if (!ret.isOk()) { - ALOGW("Failed to call back into NFC process."); - } - } - } - static void dataCallback(uint16_t data_len, uint8_t* p_data) { - hidl_vec data; - data.setToExternal(p_data, data_len); - if (mCallback != nullptr) { - auto ret = mCallback->sendData(data); - if (!ret.isOk()) { - ALOGW("Failed to call back into NFC process."); - } - } - } - private: + private: static sp mCallback; const nfc_nci_device_t* mDevice; - sp mDeathRecipient; }; extern "C" INfc* HIDL_FETCH_INfc(const char* name);