chips/pn53x: add pn53x_data_new() function to alloc and init pn53x_data structure.
This commit is contained in:
parent
ebb352f1f3
commit
95914345e1
7 changed files with 40 additions and 33 deletions
|
@ -25,8 +25,6 @@
|
||||||
#ifndef __PN53X_INTERNAL_H__
|
#ifndef __PN53X_INTERNAL_H__
|
||||||
#define __PN53X_INTERNAL_H__
|
#define __PN53X_INTERNAL_H__
|
||||||
|
|
||||||
#include "pn53x.h"
|
|
||||||
|
|
||||||
// Miscellaneous
|
// Miscellaneous
|
||||||
#define Diagnose 0x00
|
#define Diagnose 0x00
|
||||||
#define GetFirmwareVersion 0x02
|
#define GetFirmwareVersion 0x02
|
||||||
|
@ -118,11 +116,11 @@ typedef struct {
|
||||||
#endif
|
#endif
|
||||||
} pn53x_command;
|
} pn53x_command;
|
||||||
|
|
||||||
/*
|
typedef enum {
|
||||||
#define PN531 0x01
|
PN531 = 0x01,
|
||||||
#define PN532 0x02
|
PN532 = 0x02,
|
||||||
#define PN533 0X04
|
PN533 = 0x04
|
||||||
*/
|
} pn53x_type;
|
||||||
|
|
||||||
#ifndef DEBUG
|
#ifndef DEBUG
|
||||||
# define PNCMD( X, Y ) { X , Y }
|
# define PNCMD( X, Y ) { X , Y }
|
||||||
|
|
|
@ -67,12 +67,6 @@ pn53x_init(nfc_device_t * pnd)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PN53x starts in initiator mode
|
|
||||||
CHIP_DATA (pnd)->operating_mode = INITIATOR;
|
|
||||||
|
|
||||||
// Set current target to NULL
|
|
||||||
CHIP_DATA (pnd)->current_target = NULL;
|
|
||||||
|
|
||||||
// CRC handling is enabled by default
|
// CRC handling is enabled by default
|
||||||
pnd->bCrc = true;
|
pnd->bCrc = true;
|
||||||
// Parity handling is enabled by default
|
// Parity handling is enabled by default
|
||||||
|
@ -500,8 +494,6 @@ pn53x_get_firmware_version (nfc_device_t * pnd, char abtFirmwareText[18])
|
||||||
byte_t abtFw[4];
|
byte_t abtFw[4];
|
||||||
size_t szFwLen = sizeof (abtFw);
|
size_t szFwLen = sizeof (abtFw);
|
||||||
if (!pn53x_transceive (pnd, abtCmd, sizeof (abtCmd), abtFw, &szFwLen)) {
|
if (!pn53x_transceive (pnd, abtCmd, sizeof (abtCmd), abtFw, &szFwLen)) {
|
||||||
// Failed to get firmware revision??, whatever...let's disconnect and clean up and return err
|
|
||||||
// FIXME: Wtf?
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Determine which version of chip it is: PN531 will return only 2 bytes, while others return 4 bytes and have the first to tell the version IC
|
// Determine which version of chip it is: PN531 will return only 2 bytes, while others return 4 bytes and have the first to tell the version IC
|
||||||
|
@ -2237,3 +2229,22 @@ pn53x_nm_to_ptt(const nfc_modulation_t nm)
|
||||||
}
|
}
|
||||||
return PTT_UNDEFINED;
|
return PTT_UNDEFINED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pn53x_data_new (nfc_device_t * pnd, const struct pn53x_io* io)
|
||||||
|
{
|
||||||
|
pnd->chip_data = malloc(sizeof(struct pn53x_data));
|
||||||
|
|
||||||
|
// Keep I/O functions
|
||||||
|
CHIP_DATA (pnd)->io = io;
|
||||||
|
|
||||||
|
// Set power mode to normal, if your device starts in LowVBat (ie. PN532
|
||||||
|
// UART) the driver layer have to correctly set it.
|
||||||
|
CHIP_DATA (pnd)->power_mode = NORMAL;
|
||||||
|
|
||||||
|
// PN53x starts in initiator mode
|
||||||
|
CHIP_DATA (pnd)->operating_mode = INITIATOR;
|
||||||
|
|
||||||
|
// Set current target to NULL
|
||||||
|
CHIP_DATA (pnd)->current_target = NULL;
|
||||||
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
# define __NFC_CHIPS_PN53X_H__
|
# define __NFC_CHIPS_PN53X_H__
|
||||||
|
|
||||||
# include <nfc/nfc-types.h>
|
# include <nfc/nfc-types.h>
|
||||||
|
# include "pn53x-internal.h"
|
||||||
|
|
||||||
// TODO Remove double register address defines
|
// TODO Remove double register address defines
|
||||||
// Registers and symbols masks used to covers parts within a register
|
// Registers and symbols masks used to covers parts within a register
|
||||||
|
@ -133,12 +134,6 @@
|
||||||
# define DEACKMISMATCH 0x0200/* Unexpected data */
|
# define DEACKMISMATCH 0x0200/* Unexpected data */
|
||||||
# define DEISERRFRAME 0x0300/* Error frame */
|
# define DEISERRFRAME 0x0300/* Error frame */
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
PN531 = 0x01,
|
|
||||||
PN532 = 0x02,
|
|
||||||
PN533 = 0x04
|
|
||||||
} pn53x_type;
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NORMAL, // In that case, there is no power saved but the PN53x reacts as fast as possible on the host controller interface.
|
NORMAL, // In that case, there is no power saved but the PN53x reacts as fast as possible on the host controller interface.
|
||||||
POWERDOWN, // Only on PN532, need to be wake up to process commands with a long preamble
|
POWERDOWN, // Only on PN532, need to be wake up to process commands with a long preamble
|
||||||
|
@ -312,6 +307,7 @@ bool pn53x_target_receive_bytes (nfc_device_t * pnd, byte_t * pbtRx, size_t *
|
||||||
bool pn53x_target_send_bits (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTxBits,
|
bool pn53x_target_send_bits (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTxBits,
|
||||||
const byte_t * pbtTxPar);
|
const byte_t * pbtTxPar);
|
||||||
bool pn53x_target_send_bytes (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx);
|
bool pn53x_target_send_bytes (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx);
|
||||||
|
|
||||||
// Error handling functions
|
// Error handling functions
|
||||||
const char *pn53x_strerror (const nfc_device_t * pnd);
|
const char *pn53x_strerror (const nfc_device_t * pnd);
|
||||||
|
|
||||||
|
@ -345,4 +341,6 @@ bool pn53x_check_ack_frame (nfc_device_t * pnd, const byte_t * pbtRxFrame, co
|
||||||
bool pn53x_check_error_frame (nfc_device_t * pnd, const byte_t * pbtRxFrame, const size_t szRxFrameLen);
|
bool pn53x_check_error_frame (nfc_device_t * pnd, const byte_t * pbtRxFrame, const size_t szRxFrameLen);
|
||||||
bool pn53x_build_frame (byte_t * pbtFrame, size_t * pszFrame, const byte_t * pbtData, const size_t szData);
|
bool pn53x_build_frame (byte_t * pbtFrame, size_t * pszFrame, const byte_t * pbtData, const size_t szData);
|
||||||
|
|
||||||
|
void pn53x_data_new (nfc_device_t * pnd, const struct pn53x_io* io);
|
||||||
|
|
||||||
#endif // __NFC_CHIPS_PN53X_H__
|
#endif // __NFC_CHIPS_PN53X_H__
|
||||||
|
|
|
@ -193,7 +193,9 @@ acr122_connect (const nfc_device_desc_t * pndd)
|
||||||
char *pcFirmware;
|
char *pcFirmware;
|
||||||
nfc_device_t *pnd = nfc_device_new ();
|
nfc_device_t *pnd = nfc_device_new ();
|
||||||
pnd->driver_data = malloc (sizeof (struct acr122_data));
|
pnd->driver_data = malloc (sizeof (struct acr122_data));
|
||||||
pnd->chip_data = malloc (sizeof (struct pn53x_data));
|
|
||||||
|
// Alloc and init chip's data
|
||||||
|
pn53x_data_new (pnd, &acr122_io);
|
||||||
|
|
||||||
SCARDCONTEXT *pscc;
|
SCARDCONTEXT *pscc;
|
||||||
|
|
||||||
|
@ -220,8 +222,6 @@ acr122_connect (const nfc_device_desc_t * pndd)
|
||||||
// Done, we found the reader we are looking for
|
// Done, we found the reader we are looking for
|
||||||
snprintf (pnd->acName, sizeof (pnd->acName), "%s / %s", pndd->acDevice, pcFirmware);
|
snprintf (pnd->acName, sizeof (pnd->acName), "%s / %s", pndd->acDevice, pcFirmware);
|
||||||
|
|
||||||
CHIP_DATA (pnd)->power_mode = NORMAL;
|
|
||||||
CHIP_DATA (pnd)->io = &acr122_io;
|
|
||||||
// 50: empirical tuning on Touchatag
|
// 50: empirical tuning on Touchatag
|
||||||
// 46: empirical tuning on ACR122U
|
// 46: empirical tuning on ACR122U
|
||||||
CHIP_DATA (pnd)->timer_correction = 50;
|
CHIP_DATA (pnd)->timer_correction = 50;
|
||||||
|
|
|
@ -117,9 +117,9 @@ arygon_probe (nfc_device_desc_t pnddDevices[], size_t szDevices, size_t * pszDev
|
||||||
pnd->driver = &arygon_driver;
|
pnd->driver = &arygon_driver;
|
||||||
pnd->driver_data = malloc(sizeof(struct arygon_data));
|
pnd->driver_data = malloc(sizeof(struct arygon_data));
|
||||||
DRIVER_DATA (pnd)->port = sp;
|
DRIVER_DATA (pnd)->port = sp;
|
||||||
pnd->chip_data = malloc(sizeof(struct pn53x_data));
|
|
||||||
CHIP_DATA (pnd)->power_mode = NORMAL;
|
// Alloc and init chip's data
|
||||||
CHIP_DATA (pnd)->io = &arygon_tama_io;
|
pn53x_data_new (pnd, &arygon_tama_io);
|
||||||
|
|
||||||
bool res = arygon_reset_tama (pnd);
|
bool res = arygon_reset_tama (pnd);
|
||||||
nfc_device_free (pnd);
|
nfc_device_free (pnd);
|
||||||
|
|
|
@ -98,10 +98,11 @@ pn532_uart_probe (nfc_device_desc_t pnddDevices[], size_t szDevices, size_t * ps
|
||||||
pnd->driver = &pn532_uart_driver;
|
pnd->driver = &pn532_uart_driver;
|
||||||
pnd->driver_data = malloc(sizeof(struct pn532_uart_data));
|
pnd->driver_data = malloc(sizeof(struct pn532_uart_data));
|
||||||
DRIVER_DATA (pnd)->port = sp;
|
DRIVER_DATA (pnd)->port = sp;
|
||||||
pnd->chip_data = malloc(sizeof(struct pn53x_data));
|
|
||||||
CHIP_DATA (pnd)->type = PN532;
|
// Alloc and init chip's data
|
||||||
|
pn53x_data_new (pnd, &pn532_uart_io);
|
||||||
|
// This device starts in LowVBat power mode
|
||||||
CHIP_DATA (pnd)->power_mode = LOWVBAT;
|
CHIP_DATA (pnd)->power_mode = LOWVBAT;
|
||||||
CHIP_DATA (pnd)->io = &pn532_uart_io;
|
|
||||||
|
|
||||||
// Check communication using "Diagnose" command, with "Communication test" (0x00)
|
// Check communication using "Diagnose" command, with "Communication test" (0x00)
|
||||||
bool res = pn53x_check_communication (pnd);
|
bool res = pn53x_check_communication (pnd);
|
||||||
|
|
|
@ -290,10 +290,9 @@ pn53x_usb_connect (const nfc_device_desc_t *pndd)
|
||||||
|
|
||||||
pnd->driver_data = malloc(sizeof(struct pn53x_usb_data));
|
pnd->driver_data = malloc(sizeof(struct pn53x_usb_data));
|
||||||
*DRIVER_DATA (pnd) = data;
|
*DRIVER_DATA (pnd) = data;
|
||||||
pnd->chip_data = malloc(sizeof(struct pn53x_data));
|
|
||||||
|
|
||||||
CHIP_DATA (pnd)->power_mode = NORMAL;
|
// Alloc and init chip's data
|
||||||
CHIP_DATA (pnd)->io = &pn53x_usb_io;
|
pn53x_data_new (pnd, &pn53x_usb_io);
|
||||||
|
|
||||||
switch (DRIVER_DATA (pnd)->model) {
|
switch (DRIVER_DATA (pnd)->model) {
|
||||||
// empirical tuning
|
// empirical tuning
|
||||||
|
|
Loading…
Reference in a new issue