nfc.h revision 44ae5b24766f8ce4b6b5de01f1deb296d99efd57
144ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen/* 244ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * Copyright (C) 2011 The Android Open Source Project 344ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * 444ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * Licensed under the Apache License, Version 2.0 (the "License"); 544ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * you may not use this file except in compliance with the License. 644ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * You may obtain a copy of the License at 744ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * 844ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * http://www.apache.org/licenses/LICENSE-2.0 944ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * 1044ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * Unless required by applicable law or agreed to in writing, software 1144ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * distributed under the License is distributed on an "AS IS" BASIS, 1244ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1344ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * See the License for the specific language governing permissions and 1444ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * limitations under the License. 1544ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen */ 1644ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 1744ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 1844ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen#ifndef ANDROID_NFC_HAL_INTERFACE_H 1944ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen#define ANDROID_NFC_HAL_INTERFACE_H 2044ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 2144ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen#include <stdint.h> 2244ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen#include <strings.h> 2344ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen#include <sys/cdefs.h> 2444ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen#include <sys/types.h> 2544ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 2644ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen#include <hardware/hardware.h> 2744ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 2844ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen__BEGIN_DECLS 2944ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 3044ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen#define NFC_HARDWARE_MODULE_ID "nfc" 3144ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 3244ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen/* 3344ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * Begin PN544 specific HAL 3444ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen */ 3544ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen#define NFC_PN544_CONTROLLER "pn544" 3644ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 3744ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenentypedef struct nfc_module_t { 3844ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen struct hw_module_t common; 3944ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen} nfc_module_t; 4044ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 4144ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen/* 4244ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * PN544 linktypes. 4344ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * UART 4444ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * I2C 4544ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * USB (uses UART DAL) 4644ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen */ 4744ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenentypedef enum { 4844ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen PN544_LINK_TYPE_UART, 4944ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen PN544_LINK_TYPE_I2C, 5044ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen PN544_LINK_TYPE_USB, 5144ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen PN544_LINK_TYPE_INVALID, 5244ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen} nfc_pn544_linktype; 5344ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 5444ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenentypedef struct { 5544ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen struct hw_device_t common; 5644ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 5744ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen /* The number of EEPROM registers to write */ 5844ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen uint32_t num_eeprom_settings; 5944ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 6044ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen /* The actual EEPROM settings 6144ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * For PN544, each EEPROM setting is a 4-byte entry, 6244ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * of the format [0x00, addr_msb, addr_lsb, value]. 6344ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen */ 6444ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen uint8_t* eeprom_settings; 6544ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 6644ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen /* The link type to which the PN544 is connected */ 6744ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen nfc_pn544_linktype linktype; 6844ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 6944ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen /* The device node to which the PN544 is connected */ 7044ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen const char* device_node; 7144ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 7244ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen /* On Crespo we had an I2C issue that would cause us to sometimes read 7344ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * the I2C slave address (0x57) over the bus. libnfc contains 7444ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * a hack to ignore this byte and try to read the length byte 7544ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * again. 7644ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * Set to 0 to disable the workaround, 1 to enable it. 7744ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen */ 7844ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen uint8_t enable_i2c_workaround; 7944ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen} nfc_pn544_device_t; 8044ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 8144ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenenstatic inline int nfc_pn544_open(const struct hw_module_t* module, 8244ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen nfc_pn544_device_t** dev) { 8344ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen return module->methods->open(module, NFC_PN544_CONTROLLER, 8444ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen (struct hw_device_t**) dev); 8544ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen} 8644ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 8744ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenenstatic inline int nfc_pn544_close(nfc_pn544_device_t* dev) { 8844ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen return dev->common.close(&dev->common); 8944ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen} 9044ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen/* 9144ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen * End PN544 specific HAL 9244ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen */ 9344ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 9444ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen__END_DECLS 9544ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen 9644ae5b24766f8ce4b6b5de01f1deb296d99efd57Martijn Coenen#endif // ANDROID_NFC_HAL_INTERFACE_H 97