18605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
28605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * Copyright (C) 2015 The Android Open Source Project
38605731e8f17d1fde003084811f13f52539eb20cJizhou Liao *
48605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * Licensed under the Apache License, Version 2.0 (the "License");
58605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * you may not use this file except in compliance with the License.
68605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * You may obtain a copy of the License at
78605731e8f17d1fde003084811f13f52539eb20cJizhou Liao *
88605731e8f17d1fde003084811f13f52539eb20cJizhou Liao *      http://www.apache.org/licenses/LICENSE-2.0
98605731e8f17d1fde003084811f13f52539eb20cJizhou Liao *
108605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * Unless required by applicable law or agreed to in writing, software
118605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * distributed under the License is distributed on an "AS IS" BASIS,
128605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * See the License for the specific language governing permissions and
148605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * limitations under the License.
158605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
168605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
178605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#ifndef PHNFCTYPES_H
188605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#define PHNFCTYPES_H
198605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
208605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#include <stdint.h>
218605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#include <string.h>
228605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#include <stdio.h>
238605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#include <stdlib.h>
248605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#include <unistd.h>
258605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
268605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#ifndef TRUE
278605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#define TRUE            (0x01)            /* Logical True Value */
288605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#endif
298605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#ifndef FALSE
308605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#define FALSE           (0x00)            /* Logical False Value */
318605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#endif
328605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef uint8_t         utf8_t;       /* UTF8 Character String */
338605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef uint8_t         bool_t;       /* boolean data type */
348605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef uint16_t        NFCSTATUS;        /* Return values */
358605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#define STATIC static
368605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
378605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#define PHNFC_MAX_UID_LENGTH            0x0AU  /* Maximum UID length expected */
388605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#define PHNFC_MAX_ATR_LENGTH            0x30U  /* Maximum ATR_RES (General Bytes) length expected */
398605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#define PHNFC_NFCID_LENGTH              0x0AU  /* Maximum length of NFCID 1.3*/
408605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#define PHNFC_ATQA_LENGTH               0x02U  /* ATQA length */
418605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
428605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
438605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * NFC Data structure
448605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
458605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef struct phNfc_sData
468605731e8f17d1fde003084811f13f52539eb20cJizhou Liao{
478605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint8_t             *buffer; /* Buffer to store data */
488605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint32_t            length;  /* Buffer length */
498605731e8f17d1fde003084811f13f52539eb20cJizhou Liao} phNfc_sData_t;
508605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
518605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
528605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * Possible Hardware Configuration exposed to upper layer.
538605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * Typically this should be port name (Ex:"COM1","COM2") to which PN547 is connected.
548605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
558605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef enum
568605731e8f17d1fde003084811f13f52539eb20cJizhou Liao{
578605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    ENUM_LINK_TYPE_COM1,
588605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    ENUM_LINK_TYPE_COM2,
598605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    ENUM_LINK_TYPE_COM3,
608605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    ENUM_LINK_TYPE_COM4,
618605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    ENUM_LINK_TYPE_COM5,
628605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    ENUM_LINK_TYPE_COM6,
638605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    ENUM_LINK_TYPE_COM7,
648605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    ENUM_LINK_TYPE_COM8,
658605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    ENUM_LINK_TYPE_I2C,
668605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    ENUM_LINK_TYPE_SPI,
678605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    ENUM_LINK_TYPE_USB,
688605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    ENUM_LINK_TYPE_TCP,
698605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    ENUM_LINK_TYPE_NB
708605731e8f17d1fde003084811f13f52539eb20cJizhou Liao} phLibNfc_eConfigLinkType;
718605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
728605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
738605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * Deferred message. This message type will be posted to the client application thread
748605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * to notify that a deferred call must be invoked.
758605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
768605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#define PH_LIBNFC_DEFERREDCALL_MSG        (0x311)
778605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
788605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
798605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * Deferred call declaration.
808605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * This type of API is called from ClientApplication ( main thread) to notify
818605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * specific callback.
828605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
838605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef void (*pphLibNfc_DeferredCallback_t) (void*);
848605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
858605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
868605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * Deferred parameter declaration.
878605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * This type of data is passed as parameter from ClientApplication (main thread) to the
888605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * callback.
898605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
908605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef void *pphLibNfc_DeferredParameter_t;
918605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
928605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
938605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * Possible Hardware Configuration exposed to upper layer.
948605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * Typically this should be at least the communication link (Ex:"COM1","COM2")
958605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * the controller is connected to.
968605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
978605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef struct phLibNfc_sConfig
988605731e8f17d1fde003084811f13f52539eb20cJizhou Liao{
998605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint8_t *pLogFile; /* Log File Name*/
1008605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    /* Hardware communication link to the controller */
1018605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phLibNfc_eConfigLinkType  nLinkType;
1028605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    /* The client ID (thread ID or message queue ID) */
1038605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    unsigned int nClientId;
1048605731e8f17d1fde003084811f13f52539eb20cJizhou Liao} phLibNfc_sConfig_t, *pphLibNfc_sConfig_t;
1058605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
1068605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
1078605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * NFC Message structure contains message specific details like
1088605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * message type, message specific data block details, etc.
1098605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
1108605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef struct phLibNfc_Message
1118605731e8f17d1fde003084811f13f52539eb20cJizhou Liao{
1128605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint32_t eMsgType;   /* Type of the message to be posted*/
1138605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    void   * pMsgData;   /* Pointer to message specific data block in case any*/
1148605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint32_t Size;       /* Size of the datablock*/
1158605731e8f17d1fde003084811f13f52539eb20cJizhou Liao} phLibNfc_Message_t, *pphLibNfc_Message_t;
1168605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
1178605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
1188605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * Deferred message specific info declaration.
1198605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * This type of information is packed as message data when PH_LIBNFC_DEFERREDCALL_MSG
1208605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * type message is posted to message handler thread.
1218605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
1228605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef struct phLibNfc_DeferredCall
1238605731e8f17d1fde003084811f13f52539eb20cJizhou Liao{
1248605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    pphLibNfc_DeferredCallback_t pCallback;/* pointer to Deferred callback */
1258605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    pphLibNfc_DeferredParameter_t pParameter;/* pointer to Deferred parameter */
1268605731e8f17d1fde003084811f13f52539eb20cJizhou Liao} phLibNfc_DeferredCall_t;
1278605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
1288605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
1298605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * Definitions for supported protocol
1308605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
1318605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef struct phNfc_sSupProtocol
1328605731e8f17d1fde003084811f13f52539eb20cJizhou Liao{
1338605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    unsigned int MifareUL    : 1;  /* Protocol Mifare Ultra Light or any NFC Forum Type-2 tags */
1348605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    unsigned int MifareStd   : 1;  /* Protocol Mifare Standard. */
1358605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    unsigned int ISO14443_4A : 1;  /* Protocol ISO14443-4 Type A.  */
1368605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    unsigned int ISO14443_4B : 1;  /* Protocol ISO14443-4 Type B.  */
1378605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    unsigned int ISO15693    : 1;  /* Protocol ISO15693 HiTag.  */
1388605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    unsigned int Felica      : 1;  /* Protocol Felica. */
1398605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    unsigned int NFC         : 1;  /* Protocol NFC. */
1408605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    unsigned int Jewel       : 1;  /* Protocol Innovision Jewel Tag. or Any T1T*/
1418605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    unsigned int Desfire     : 1;  /*TRUE indicates specified feature (mapping
1428605731e8f17d1fde003084811f13f52539eb20cJizhou Liao                                   or formatting)for DESFire tag supported else not supported.*/
1438605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    unsigned int Kovio       : 1;   /* Protocol Kovio Tag*/
1448605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    unsigned int HID         : 1;   /* Protocol HID(Picopass) Tag*/
1458605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    unsigned int Bprime      : 1;   /* Protocol BPrime Tag*/
1468605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    unsigned int EPCGEN2     : 1;   /* Protocol EPCGEN2 Tag*/
1478605731e8f17d1fde003084811f13f52539eb20cJizhou Liao} phNfc_sSupProtocol_t;
1488605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
1498605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
1508605731e8f17d1fde003084811f13f52539eb20cJizhou Liao *  Enumerated MIFARE Commands
1518605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
1528605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
1538605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef enum phNfc_eMifareCmdList
1548605731e8f17d1fde003084811f13f52539eb20cJizhou Liao{
1558605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareRaw        = 0x00U,     /* This command performs raw transcations */
1568605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareAuthentA   = 0x60U,     /* This command performs an authentication with KEY A for a sector. */
1578605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareAuthentB   = 0x61U,     /* This command performs an authentication with KEY B for a sector. */
1588605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareRead16     = 0x30U,     /* Read 16 Bytes from a Mifare Standard block */
1598605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareRead       = 0x30U,     /* Read Mifare Standard */
1608605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareWrite16    = 0xA0U,     /* Write 16 Bytes to a Mifare Standard block */
1618605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareWrite4     = 0xA2U,     /* Write 4 bytes. */
1628605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareInc        = 0xC1U,     /* Increment */
1638605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareDec        = 0xC0U,     /* Decrement */
1648605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareTransfer   = 0xB0U,     /* Transfer */
1658605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareRestore    = 0xC2U,     /* Restore.   */
1668605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareReadSector = 0x38U,     /* Read Sector.   */
1678605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareWriteSector= 0xA8U,     /* Write Sector.   */
1688605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    /* Above commands could be used for preparing raw command but below one can not be */
1698605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareReadN      = 0x01,      /* Proprietary Command */
1708605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareWriteN     = 0x02,      /* Proprietary Command */
1718605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareSectorSel  = 0x03,      /* Proprietary Command */
1728605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareAuth       = 0x04,      /* Proprietary Command */
1738605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareProxCheck  = 0x05,      /* Proprietary Command */
1748605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareInvalidCmd = 0xFFU      /* Invalid Command */
1758605731e8f17d1fde003084811f13f52539eb20cJizhou Liao} phNfc_eMifareCmdList_t;
1768605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
1778605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
1788605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * Information about ISO14443A
1798605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
1808605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef struct phNfc_sIso14443AInfo
1818605731e8f17d1fde003084811f13f52539eb20cJizhou Liao{
1828605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint8_t         Uid[PHNFC_MAX_UID_LENGTH];      /* UID information of the TYPE A
1838605731e8f17d1fde003084811f13f52539eb20cJizhou Liao                                                     * Tag Discovered */
1848605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint8_t         UidLength;                      /* UID information length */
1858605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint8_t         AppData[PHNFC_MAX_ATR_LENGTH];  /* Application data information of the
1868605731e8f17d1fde003084811f13f52539eb20cJizhou Liao                              1                      * tag discovered (= Historical bytes for
1878605731e8f17d1fde003084811f13f52539eb20cJizhou Liao                                                     * type A) */
1888605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint8_t         AppDataLength;                  /* Application data length */
1898605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint8_t         Sak;                            /* SAK information of the TYPE A
1908605731e8f17d1fde003084811f13f52539eb20cJizhou Liao                                                     * Tag Discovered */
1918605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint8_t         AtqA[PHNFC_ATQA_LENGTH];        /* ATQA informationof the TYPE A
1928605731e8f17d1fde003084811f13f52539eb20cJizhou Liao                                                     * Tag Discovered */
1938605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint8_t         MaxDataRate;                    /* Maximum data rate supported
1948605731e8f17d1fde003084811f13f52539eb20cJizhou Liao                                                     * by the tag Discovered */
1958605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint8_t         Fwi_Sfgt;                       /* Frame waiting time and start up
1968605731e8f17d1fde003084811f13f52539eb20cJizhou Liao                                                     * frame guard */
1978605731e8f17d1fde003084811f13f52539eb20cJizhou Liao} phNfc_sIso14443AInfo_t;
1988605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
1998605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/* Remote device information structure */
2008605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef union phNfc_uRemoteDevInfo
2018605731e8f17d1fde003084811f13f52539eb20cJizhou Liao{
2028605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_sIso14443AInfo_t Iso14443A_Info;/* ISO1443A Remote device info */
2038605731e8f17d1fde003084811f13f52539eb20cJizhou Liao} phNfc_uRemoteDevInfo_t;
2048605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
2058605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
2068605731e8f17d1fde003084811f13f52539eb20cJizhou Liao*
2078605731e8f17d1fde003084811f13f52539eb20cJizhou Liao*  The RF Device Type List is used to identify the type of
2088605731e8f17d1fde003084811f13f52539eb20cJizhou Liao*  remote device that is discovered and connected.
2098605731e8f17d1fde003084811f13f52539eb20cJizhou Liao*
2108605731e8f17d1fde003084811f13f52539eb20cJizhou Liao*/
2118605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
2128605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef enum phNfc_eRFDevType
2138605731e8f17d1fde003084811f13f52539eb20cJizhou Liao{
2148605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eUnknown_DevType        = 0x00U,
2158605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eISO14443_A_PCD,
2168605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eISO14443_B_PCD,
2178605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eISO14443_BPrime_PCD,
2188605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eFelica_PCD,
2198605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eJewel_PCD,
2208605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eISO15693_PCD,
2218605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eEpcGen2_PCD,
2228605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_ePCD_DevType,
2238605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_ePICC_DevType,
2248605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eISO14443_A_PICC,
2258605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eISO14443_4A_PICC,
2268605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eISO14443_3A_PICC,
2278605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifare_PICC,
2288605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eISO14443_B_PICC,
2298605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eISO14443_4B_PICC,
2308605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eISO14443_BPrime_PICC,
2318605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eFelica_PICC,
2328605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eJewel_PICC,
2338605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eISO15693_PICC,
2348605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eEpcGen2_PICC,
2358605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eNfcIP1_Target,
2368605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eNfcIP1_Initiator,
2378605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eInvalid_DevType
2388605731e8f17d1fde003084811f13f52539eb20cJizhou Liao} phNfc_eRFDevType_t;
2398605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
2408605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
2418605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * The Remote Device Type List is used to identify the type of
2428605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * remote device that is discovered/connected
2438605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
2448605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef phNfc_eRFDevType_t phNfc_eRemDevType_t;
2458605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef phNfc_eRemDevType_t phHal_eRemDevType_t;
2468605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
2478605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
2488605731e8f17d1fde003084811f13f52539eb20cJizhou Liao *   Union for each available type of Commands.
2498605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
2508605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
2518605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef union phNfc_uCommand
2528605731e8f17d1fde003084811f13f52539eb20cJizhou Liao{
2538605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eMifareCmdList_t MfCmd;  /* Mifare command structure.  */
2548605731e8f17d1fde003084811f13f52539eb20cJizhou Liao} phNfc_uCmdList_t;
2558605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
2568605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
2578605731e8f17d1fde003084811f13f52539eb20cJizhou Liao *  The Remote Device Information Structure holds information about one single Remote
2588605731e8f17d1fde003084811f13f52539eb20cJizhou Liao *  Device detected.
2598605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
2608605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef struct phNfc_sRemoteDevInformation
2618605731e8f17d1fde003084811f13f52539eb20cJizhou Liao{
2628605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint8_t                    SessionOpened;       /* Flag indicating the validity of
2638605731e8f17d1fde003084811f13f52539eb20cJizhou Liao                                                     * the handle of the remote device.
2648605731e8f17d1fde003084811f13f52539eb20cJizhou Liao                                                     * 1 = Device is not activer (Only discovered), 2 = Device is active and ready for use*/
2658605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_eRemDevType_t        RemDevType;          /* Remote device type */
2668605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_uRemoteDevInfo_t     RemoteDevInfo;       /* Union of available Remote Device */
2678605731e8f17d1fde003084811f13f52539eb20cJizhou Liao} phNfc_sRemoteDevInformation_t;
2688605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
2698605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
2708605731e8f17d1fde003084811f13f52539eb20cJizhou Liao/*
2718605731e8f17d1fde003084811f13f52539eb20cJizhou Liao * Transceive Information Data Structure for sending commands/response to the remote device
2728605731e8f17d1fde003084811f13f52539eb20cJizhou Liao */
2738605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
2748605731e8f17d1fde003084811f13f52539eb20cJizhou Liaotypedef struct phNfc_sTransceiveInfo
2758605731e8f17d1fde003084811f13f52539eb20cJizhou Liao{
2768605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_uCmdList_t                cmd;        /* Command for transceive */
2778605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint8_t                         addr;       /* Start Block Number */
2788605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint8_t                         NumBlock;   /* Number of Blocks to perform operation */
2798605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    /* For Felica only*/
2808605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint16_t *ServiceCodeList;                  /* 2 Byte service Code List */
2818605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint16_t *Blocklist;                        /* 2 Byte Block list */
2828605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_sData_t                   sSendData; /* Send data */
2838605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    phNfc_sData_t                   sRecvData; /* Recv data */
2848605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    /* For EPC-GEN */
2858605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint32_t                        dwWordPtr;   /* Word address for the memory write */
2868605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint8_t                         bWordPtrLen; /* Specifies the length of word pointer
2878605731e8f17d1fde003084811f13f52539eb20cJizhou Liao                                                 00: 8  bits
2888605731e8f17d1fde003084811f13f52539eb20cJizhou Liao                                                 01: 16 bits
2898605731e8f17d1fde003084811f13f52539eb20cJizhou Liao                                                 10: 24 bits
2908605731e8f17d1fde003084811f13f52539eb20cJizhou Liao                                                 11: 32 bits
2918605731e8f17d1fde003084811f13f52539eb20cJizhou Liao                                                 */
2928605731e8f17d1fde003084811f13f52539eb20cJizhou Liao    uint8_t                         bWordCount;   /* Number of words to be read or written */
2938605731e8f17d1fde003084811f13f52539eb20cJizhou Liao} phNfc_sTransceiveInfo_t;
2948605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
2958605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#define UNUSED(X) (void)X;
2968605731e8f17d1fde003084811f13f52539eb20cJizhou Liao
2978605731e8f17d1fde003084811f13f52539eb20cJizhou Liao#endif /* PHNFCTYPES_H */
298