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