1*4d7e907cSAndroid Build Coastguard Worker #ifndef ANDROID_HARDWARE_NFC_V1_0_NFC_H 2*4d7e907cSAndroid Build Coastguard Worker #define ANDROID_HARDWARE_NFC_V1_0_NFC_H 3*4d7e907cSAndroid Build Coastguard Worker 4*4d7e907cSAndroid Build Coastguard Worker #include <android/hardware/nfc/1.0/INfc.h> 5*4d7e907cSAndroid Build Coastguard Worker #include <hidl/Status.h> 6*4d7e907cSAndroid Build Coastguard Worker #include <hardware/hardware.h> 7*4d7e907cSAndroid Build Coastguard Worker #include <hardware/nfc.h> 8*4d7e907cSAndroid Build Coastguard Worker namespace android { 9*4d7e907cSAndroid Build Coastguard Worker namespace hardware { 10*4d7e907cSAndroid Build Coastguard Worker namespace nfc { 11*4d7e907cSAndroid Build Coastguard Worker namespace V1_0 { 12*4d7e907cSAndroid Build Coastguard Worker namespace implementation { 13*4d7e907cSAndroid Build Coastguard Worker 14*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::nfc::V1_0::INfc; 15*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::nfc::V1_0::INfcClientCallback; 16*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::Return; 17*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::Void; 18*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::hidl_vec; 19*4d7e907cSAndroid Build Coastguard Worker using ::android::hardware::hidl_string; 20*4d7e907cSAndroid Build Coastguard Worker using ::android::sp; 21*4d7e907cSAndroid Build Coastguard Worker 22*4d7e907cSAndroid Build Coastguard Worker struct Nfc : public INfc, public hidl_death_recipient { 23*4d7e907cSAndroid Build Coastguard Worker Nfc(nfc_nci_device_t* device); 24*4d7e907cSAndroid Build Coastguard Worker ::android::hardware::Return<NfcStatus> open( 25*4d7e907cSAndroid Build Coastguard Worker const sp<INfcClientCallback>& clientCallback) override; 26*4d7e907cSAndroid Build Coastguard Worker ::android::hardware::Return<uint32_t> write(const hidl_vec<uint8_t>& data) override; 27*4d7e907cSAndroid Build Coastguard Worker ::android::hardware::Return<NfcStatus> coreInitialized(const hidl_vec<uint8_t>& data) override; 28*4d7e907cSAndroid Build Coastguard Worker ::android::hardware::Return<NfcStatus> prediscover() override; 29*4d7e907cSAndroid Build Coastguard Worker ::android::hardware::Return<NfcStatus> close() override; 30*4d7e907cSAndroid Build Coastguard Worker ::android::hardware::Return<NfcStatus> controlGranted() override; 31*4d7e907cSAndroid Build Coastguard Worker ::android::hardware::Return<NfcStatus> powerCycle() override; 32*4d7e907cSAndroid Build Coastguard Worker eventCallbackNfc33*4d7e907cSAndroid Build Coastguard Worker static void eventCallback(uint8_t event, uint8_t status) { 34*4d7e907cSAndroid Build Coastguard Worker if (mCallback != nullptr) { 35*4d7e907cSAndroid Build Coastguard Worker auto ret = mCallback->sendEvent((::android::hardware::nfc::V1_0::NfcEvent)event, 36*4d7e907cSAndroid Build Coastguard Worker (::android::hardware::nfc::V1_0::NfcStatus)status); 37*4d7e907cSAndroid Build Coastguard Worker if (!ret.isOk()) { 38*4d7e907cSAndroid Build Coastguard Worker ALOGW("Failed to call back into NFC process."); 39*4d7e907cSAndroid Build Coastguard Worker } 40*4d7e907cSAndroid Build Coastguard Worker } 41*4d7e907cSAndroid Build Coastguard Worker } dataCallbackNfc42*4d7e907cSAndroid Build Coastguard Worker static void dataCallback(uint16_t data_len, uint8_t* p_data) { 43*4d7e907cSAndroid Build Coastguard Worker hidl_vec<uint8_t> data; 44*4d7e907cSAndroid Build Coastguard Worker data.setToExternal(p_data, data_len); 45*4d7e907cSAndroid Build Coastguard Worker if (mCallback != nullptr) { 46*4d7e907cSAndroid Build Coastguard Worker auto ret = mCallback->sendData(data); 47*4d7e907cSAndroid Build Coastguard Worker if (!ret.isOk()) { 48*4d7e907cSAndroid Build Coastguard Worker ALOGW("Failed to call back into NFC process."); 49*4d7e907cSAndroid Build Coastguard Worker } 50*4d7e907cSAndroid Build Coastguard Worker } 51*4d7e907cSAndroid Build Coastguard Worker } 52*4d7e907cSAndroid Build Coastguard Worker serviceDiedNfc53*4d7e907cSAndroid Build Coastguard Worker virtual void serviceDied(uint64_t /*cookie*/, 54*4d7e907cSAndroid Build Coastguard Worker const wp<::android::hidl::base::V1_0::IBase>& /*who*/) { 55*4d7e907cSAndroid Build Coastguard Worker close(); 56*4d7e907cSAndroid Build Coastguard Worker } 57*4d7e907cSAndroid Build Coastguard Worker 58*4d7e907cSAndroid Build Coastguard Worker private: 59*4d7e907cSAndroid Build Coastguard Worker static sp<INfcClientCallback> mCallback; 60*4d7e907cSAndroid Build Coastguard Worker const nfc_nci_device_t* mDevice; 61*4d7e907cSAndroid Build Coastguard Worker }; 62*4d7e907cSAndroid Build Coastguard Worker 63*4d7e907cSAndroid Build Coastguard Worker extern "C" INfc* HIDL_FETCH_INfc(const char* name); 64*4d7e907cSAndroid Build Coastguard Worker 65*4d7e907cSAndroid Build Coastguard Worker } // namespace implementation 66*4d7e907cSAndroid Build Coastguard Worker } // namespace V1_0 67*4d7e907cSAndroid Build Coastguard Worker } // namespace nfc 68*4d7e907cSAndroid Build Coastguard Worker } // namespace hardware 69*4d7e907cSAndroid Build Coastguard Worker } // namespace android 70*4d7e907cSAndroid Build Coastguard Worker 71*4d7e907cSAndroid Build Coastguard Worker #endif // ANDROID_HARDWARE_NFC_V1_0_NFC_H 72