Merge "Remove strong pointer in contructor to "this""
This commit is contained in:
commit
62ab659b28
2 changed files with 36 additions and 43 deletions
|
@ -14,9 +14,7 @@ namespace implementation {
|
|||
|
||||
sp<INfcClientCallback> 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<NfcStatus> Nfc::open(const sp<INfcClientCallback>& 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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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<INfc> nfc) : mNfc(nfc) {
|
||||
struct Nfc : public INfc, public hidl_death_recipient {
|
||||
Nfc(nfc_nci_device_t* device);
|
||||
::android::hardware::Return<NfcStatus> open(
|
||||
const sp<INfcClientCallback>& clientCallback) override;
|
||||
::android::hardware::Return<uint32_t> write(const hidl_vec<uint8_t>& data) override;
|
||||
::android::hardware::Return<NfcStatus> coreInitialized(const hidl_vec<uint8_t>& data) override;
|
||||
::android::hardware::Return<NfcStatus> prediscover() override;
|
||||
::android::hardware::Return<NfcStatus> close() override;
|
||||
::android::hardware::Return<NfcStatus> controlGranted() override;
|
||||
::android::hardware::Return<NfcStatus> 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<uint8_t> 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<INfc> mNfc;
|
||||
};
|
||||
|
||||
struct Nfc : public INfc {
|
||||
Nfc(nfc_nci_device_t* device);
|
||||
::android::hardware::Return<NfcStatus> open(const sp<INfcClientCallback>& clientCallback) override;
|
||||
::android::hardware::Return<uint32_t> write(const hidl_vec<uint8_t>& data) override;
|
||||
::android::hardware::Return<NfcStatus> coreInitialized(const hidl_vec<uint8_t>& data) override;
|
||||
::android::hardware::Return<NfcStatus> prediscover() override;
|
||||
::android::hardware::Return<NfcStatus> close() override;
|
||||
::android::hardware::Return<NfcStatus> controlGranted() override;
|
||||
::android::hardware::Return<NfcStatus> 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<uint8_t> 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<INfcClientCallback> mCallback;
|
||||
const nfc_nci_device_t* mDevice;
|
||||
sp<NfcDeathRecipient> mDeathRecipient;
|
||||
};
|
||||
|
||||
extern "C" INfc* HIDL_FETCH_INfc(const char* name);
|
||||
|
|
Loading…
Reference in a new issue