X-Git-Url: https://git.rohieb.name/hackover2013-badge-firmware.git/blobdiff_plain/9d18e10afb2439a6a9ba6978a799259746a837b7..422088690f8c39ae35384a549b571ba3fea22a4b:/drivers/sensors/pn532/pn532.h diff --git a/drivers/sensors/pn532/pn532.h b/drivers/sensors/pn532/pn532.h index a88f06b..d6fa5ac 100644 --- a/drivers/sensors/pn532/pn532.h +++ b/drivers/sensors/pn532/pn532.h @@ -9,17 +9,13 @@ #include "projectconfig.h" +// Comment out this line to disable debug output +// #define PN532_DEBUGMODE #define PN532_DEBUG(fmt, args...) printf(fmt, ##args) -typedef enum pn532_state_e -{ - PN532_STATE_SLEEP, - PN532_STATE_READY, - PN532_STATE_BUSY -} -pn532_state_t; - -/* Error messages generate by the stack (not to be confused with app level errors from the PN532) */ +/* Error messages generated by the stack */ +/* Not to be confused with app level errors from the PN532 */ +/* These are the errors that are returned by the PN532 driver */ typedef enum pn532_error_e { PN532_ERROR_NONE = 0x00, @@ -32,8 +28,11 @@ typedef enum pn532_error_e PN532_ERROR_EXTENDEDFRAME = 0x07, // Extended frames currently unsupported PN532_ERROR_LENCHECKSUMMISMATCH = 0x08, PN532_ERROR_RESPONSEBUFFEREMPTY = 0x09, // No response data received - PN532_ERROR_SPIREADYSTATUSTIMEOUT = 0x0A // Timeout waiting for 'ready' status (SPI only) - + PN532_ERROR_SPIREADYSTATUSTIMEOUT = 0x0A, // Timeout waiting for 'ready' status (SPI only) + PN532_ERROR_TIMEOUTWAITINGFORCARD = 0x0B, // No card detected in field with the specified timeout + PN532_ERROR_BLOCKREADFAILED = 0x0C, // Unexpected response to block read request + PN532_ERROR_WRONGCARDTYPE = 0x0D, // Card is not the expected format (based on SENS_RES/ATQA value) + PN532_ERROR_ADDRESSOUTOFRANGE = 0x0E // Specified block and page is out of range } pn532_error_t; typedef enum pn532_modulation_e @@ -45,6 +44,85 @@ typedef enum pn532_modulation_e PN532_MODULATION_JEWEL_106KBPS = 0x04 } pn532_modulation_t; +/* HW Commands for the PN532. */ +/* See UM0701-02 - PN532 User Manual */ +enum +{ + PN532_COMMAND_DIAGNOSE = 0x00, + PN532_COMMAND_GETFIRMWAREVERSION = 0x02, + PN532_COMMAND_GETGENERALSTATUS = 0x04, + PN532_COMMAND_READREGISTER = 0x06, + PN532_COMMAND_WRITEREGISTER = 0x08, + PN532_COMMAND_READGPIO = 0x0C, + PN532_COMMAND_WRITEGPIO = 0x0E, + PN532_COMMAND_SETSERIALBAUDRATE = 0x10, + PN532_COMMAND_SETPARAMETERS = 0x12, + PN532_COMMAND_SAMCONFIGURATION = 0x14, + PN532_COMMAND_POWERDOWN = 0x16, + PN532_COMMAND_RFCONFIGURATION = 0x32, + PN532_COMMAND_RFREGULATIONTEST = 0x58, + PN532_COMMAND_INJUMPFORDEP = 0x56, + PN532_COMMAND_INJUMPFORPSL = 0x46, + PN532_COMMAND_INLISTPASSIVETARGET = 0x4A, + PN532_COMMAND_INATR = 0x50, + PN532_COMMAND_INPSL = 0x4E, + PN532_COMMAND_INDATAEXCHANGE = 0x40, + PN532_COMMAND_INCOMMUNICATETHRU = 0x42, + PN532_COMMAND_INDESELECT = 0x44, + PN532_COMMAND_INRELEASE = 0x52, + PN532_COMMAND_INSELECT = 0x54, + PN532_COMMAND_INAUTOPOLL = 0x60, + PN532_COMMAND_TGINITASTARGET = 0x8C, + PN532_COMMAND_TGSETGENERALBYTES = 0x92, + PN532_COMMAND_TGGETDATA = 0x86, + PN532_COMMAND_TGSETDATA = 0x8E, + PN532_COMMAND_TGSETMETADATA = 0x94, + PN532_COMMAND_TGGETINITIATORCOMMAND = 0x88, + PN532_COMMAND_TGRESPONSETOINITIATOR = 0x90, + PN532_COMMAND_TGGETTARGETSTATUS = 0x8A +}; + +/* Application level errors generated by the PN532 chip */ +/* See UM0701-02 - PN532 User Manual */ +enum +{ + PN532_APPERROR_NONE = 0x00, + PN532_APPERROR_TIMEOUT = 0x01, + PN532_APPERROR_CRCERROR = 0x02, + PN532_APPERROR_PARITYERROR = 0x04, + PN532_APPERROR_FRAMINGERROR = 0x05, + PN532_APPERROR_BITCOLLISION = 0x06, + PN532_APPERROR_INSUFFICIENTBUFFER = 0x07, + PN532_APPERROR_RFBUFFEROVERFLOW = 0x09, + PN532_APPERROR_RFFIELDTIMEOUT = 0x0A, + PN532_APPERROR_RFPROTOCOLERROR = 0x0B, + PN532_APPERROR_TEMPERROR = 0x0D, + PN532_APPERROR_INTERNBUFFEROVERFLOW = 0x0E, + PN532_APPERROR_INVALIDPARAMETER = 0x10, + PN532_APPERROR_DEP_UNSUPPORTEDCMD = 0x12, + PN532_APPERROR_DEP_INVALIDOFORMAT = 0x13, + PN532_APPERROR_AUTHENTERR = 0x14, + PN532_APPERROR_UIDCCHECKERROR = 0x23, + PN532_APPERROR_DEP_INVALIDDEVSTATE = 0x25, + PN532_APPERROR_OPERATIONNOTALLOWED = 0x26, + PN532_APPERROR_CMDNOTACCEPTABLE = 0x27, + PN532_APPERROR_TARGETRELEASED = 0x29, + PN532_APPERROR_IDMISMATCH = 0x2A, + PN532_APPERROR_CARDDISAPPEARED = 0x2B, + PN532_APPERROR_NFCID3MISMATCH = 0x2C, + PN532_APPERROR_OVERCURRENTEVENT = 0x2D, + PN532_APPERROR_NADMISSINGINDEP = 0x2E +}; + +/* Possible states for the PN532 SW Stack */ +typedef enum pn532_state_e +{ + PN532_STATE_SLEEP, + PN532_STATE_READY, + PN532_STATE_BUSY +} +pn532_state_t; + /* PN532 Protocol control block */ typedef struct { @@ -55,11 +133,11 @@ typedef struct uint32_t appError; } pn532_pcb_t; -void pn532Init(); +void pn532PrintHex(const byte_t * pbtData, const size_t szBytes); +void pn532PrintHexChar(const byte_t * pbtData, const size_t szBytes); pn532_pcb_t * pn532GetPCB(); -pn532_error_t pn532SetModulation(pn532_modulation_t mod); +void pn532Init(); +pn532_error_t pn532Read(byte_t *pbtResponse, size_t * pszLen); pn532_error_t pn532Write(byte_t *abtCommand, size_t szLen); -pn532_error_t pn532Read(byte_t *abtResponse, size_t * pszLen); -void pn532PrintHex(const byte_t * pbtData, const size_t szBytes); #endif