diff --git a/nfc/1.0/default/Nfc.h b/nfc/1.0/default/Nfc.h
new file mode 100644
index 0000000..98cd57e
--- /dev/null
+++ b/nfc/1.0/default/Nfc.h
@@ -0,0 +1,60 @@
+#ifndef HIDL_GENERATED_android_hardware_nfc_V1_0_Nfc_H_
+#define HIDL_GENERATED_android_hardware_nfc_V1_0_Nfc_H_
+
+#include <android/hardware/nfc/1.0/INfc.h>
+#include <hidl/Status.h>
+#include <hardware/hardware.h>
+#include <hardware/nfc.h>
+namespace android {
+namespace hardware {
+namespace nfc {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::nfc::V1_0::INfc;
+using ::android::hardware::nfc::V1_0::INfcClientCallback;
+using ::android::hardware::nfc::V1_0::nfc_data_t;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::hidl_string;
+using ::android::sp;
+
+struct Nfc : public INfc {
+  Nfc(nfc_nci_device_t* device);
+  ::android::hardware::Return<int32_t> open(const sp<INfcClientCallback>& clientCallback)  override;
+  ::android::hardware::Return<int32_t> write(const nfc_data_t& data)  override;
+  ::android::hardware::Return<int32_t> core_initialized(const hidl_vec<uint8_t>& data)  override;
+  ::android::hardware::Return<int32_t> pre_discover()  override;
+  ::android::hardware::Return<int32_t> close()  override;
+  ::android::hardware::Return<int32_t> control_granted()  override;
+  ::android::hardware::Return<int32_t> power_cycle()  override;
+
+  static void event_callback(uint8_t event, uint8_t status) {
+      if (mCallback != nullptr) {
+          mCallback->sendEvent(
+                  (::android::hardware::nfc::V1_0::nfc_event_t) event,
+                  (::android::hardware::nfc::V1_0::nfc_status_t) status);
+      }
+  }
+  static void data_callback(uint16_t data_len, uint8_t* p_data) {
+      nfc_data_t data;
+      data.data.setToExternal(p_data, data_len);
+      if (mCallback != nullptr) {
+          mCallback->sendData(data);
+      }
+  }
+  private:
+    static sp<INfcClientCallback> mCallback;
+    const nfc_nci_device_t*       mDevice;
+};
+
+extern "C" INfc* HIDL_FETCH_INfc(const char* name);
+
+}  // namespace implementation
+}  // namespace V1_0
+}  // namespace nfc
+}  // namespace hardware
+}  // namespace android
+
+#endif  // HIDL_GENERATED_android_hardware_nfc_V1_0_Nfc_H_
