Add new supported device: ASK / LoGO. (Thanks to ASK for sending one sample of this device)
This commit is contained in:
parent
659d7a9de1
commit
58ad2a5760
8 changed files with 49 additions and 18 deletions
|
@ -133,6 +133,8 @@ struct driver_callbacks {
|
||||||
bool (*list_devices) (nfc_device_desc_t pnddDevices[], size_t szDevices, size_t * pszDeviceFound);
|
bool (*list_devices) (nfc_device_desc_t pnddDevices[], size_t szDevices, size_t * pszDeviceFound);
|
||||||
/** Connect callback */
|
/** Connect callback */
|
||||||
nfc_device_t *(*connect) (const nfc_device_desc_t * pndd);
|
nfc_device_t *(*connect) (const nfc_device_desc_t * pndd);
|
||||||
|
/** Init callback */
|
||||||
|
void (*init) (nfc_device_t * pnd);
|
||||||
/** Transceive callback */
|
/** Transceive callback */
|
||||||
bool (*transceive) (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx, byte_t * pbtRx, size_t * pszRx);
|
bool (*transceive) (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx, byte_t * pbtRx, size_t * pszRx);
|
||||||
/** Disconnect callback */
|
/** Disconnect callback */
|
||||||
|
|
|
@ -60,23 +60,23 @@ static const struct driver_callbacks drivers_callbacks_list[] = {
|
||||||
// Driver Name Chip callbacks Pick Device List Devices Connect Transceive Disconnect
|
// Driver Name Chip callbacks Pick Device List Devices Connect Transceive Disconnect
|
||||||
# if defined (DRIVER_PN531_USB_ENABLED)
|
# if defined (DRIVER_PN531_USB_ENABLED)
|
||||||
{PN531_USB_DRIVER_NAME, &pn53x_callbacks_list, pn531_usb_pick_device, pn531_usb_list_devices, pn531_usb_connect,
|
{PN531_USB_DRIVER_NAME, &pn53x_callbacks_list, pn531_usb_pick_device, pn531_usb_list_devices, pn531_usb_connect,
|
||||||
pn53x_usb_transceive, pn53x_usb_disconnect},
|
NULL, pn53x_usb_transceive, pn53x_usb_disconnect},
|
||||||
# endif /* DRIVER_PN531_USB_ENABLED */
|
# endif /* DRIVER_PN531_USB_ENABLED */
|
||||||
# if defined (DRIVER_PN533_USB_ENABLED)
|
# if defined (DRIVER_PN533_USB_ENABLED)
|
||||||
{PN533_USB_DRIVER_NAME, &pn53x_callbacks_list, pn533_usb_pick_device, pn533_usb_list_devices, pn533_usb_connect,
|
{PN533_USB_DRIVER_NAME, &pn53x_callbacks_list, pn533_usb_pick_device, pn533_usb_list_devices, pn533_usb_connect,
|
||||||
pn53x_usb_transceive, pn53x_usb_disconnect},
|
pn533_usb_init, pn53x_usb_transceive, pn53x_usb_disconnect},
|
||||||
# endif /* DRIVER_PN533_USB_ENABLED */
|
# endif /* DRIVER_PN533_USB_ENABLED */
|
||||||
# if defined (DRIVER_ACR122_ENABLED)
|
# if defined (DRIVER_ACR122_ENABLED)
|
||||||
{ACR122_DRIVER_NAME, &pn53x_callbacks_list, acr122_pick_device, acr122_list_devices, acr122_connect,
|
{ACR122_DRIVER_NAME, &pn53x_callbacks_list, acr122_pick_device, acr122_list_devices, acr122_connect,
|
||||||
acr122_transceive, acr122_disconnect},
|
NULL, acr122_transceive, acr122_disconnect},
|
||||||
# endif /* DRIVER_ACR122_ENABLED */
|
# endif /* DRIVER_ACR122_ENABLED */
|
||||||
# if defined (DRIVER_ARYGON_ENABLED)
|
# if defined (DRIVER_ARYGON_ENABLED)
|
||||||
{ARYGON_DRIVER_NAME, &pn53x_callbacks_list, arygon_pick_device, arygon_list_devices, arygon_connect,
|
{ARYGON_DRIVER_NAME, &pn53x_callbacks_list, arygon_pick_device, arygon_list_devices, arygon_connect,
|
||||||
arygon_transceive, arygon_disconnect},
|
NULL, arygon_transceive, arygon_disconnect},
|
||||||
# endif /* DRIVER_ARYGON_ENABLED */
|
# endif /* DRIVER_ARYGON_ENABLED */
|
||||||
# if defined (DRIVER_PN532_UART_ENABLED)
|
# if defined (DRIVER_PN532_UART_ENABLED)
|
||||||
{PN532_UART_DRIVER_NAME, &pn53x_callbacks_list, pn532_uart_pick_device, pn532_uart_list_devices, pn532_uart_connect,
|
{PN532_UART_DRIVER_NAME, &pn53x_callbacks_list, pn532_uart_pick_device, pn532_uart_list_devices, pn532_uart_connect,
|
||||||
pn532_uart_transceive, pn532_uart_disconnect},
|
NULL, pn532_uart_transceive, pn532_uart_disconnect},
|
||||||
# endif /* DRIVER_PN532_UART_ENABLED */
|
# endif /* DRIVER_PN532_UART_ENABLED */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -63,8 +63,10 @@ bool
|
||||||
pn533_usb_list_devices (nfc_device_desc_t pnddDevices[], size_t szDevices, size_t * pszDeviceFound)
|
pn533_usb_list_devices (nfc_device_desc_t pnddDevices[], size_t szDevices, size_t * pszDeviceFound)
|
||||||
{
|
{
|
||||||
// array of {vendor,product} pairs for USB devices
|
// array of {vendor,product} pairs for USB devices
|
||||||
usb_candidate_t candidates[] = { {0x04CC, 0x2533}
|
usb_candidate_t candidates[] = {
|
||||||
, {0x04E6, 0x5591}
|
{ 0x04CC, 0x2533 }, // NXP - PN533
|
||||||
|
{ 0x04E6, 0x5591 }, // SCM Micro - SCL3711-NFC&RW
|
||||||
|
{ 0x1FD3, 0x0608 } // ASK - LoGO
|
||||||
};
|
};
|
||||||
|
|
||||||
return pn53x_usb_list_devices (&pnddDevices[0], szDevices, pszDeviceFound, &candidates[0],
|
return pn53x_usb_list_devices (&pnddDevices[0], szDevices, pszDeviceFound, &candidates[0],
|
||||||
|
@ -76,3 +78,18 @@ pn533_usb_connect (const nfc_device_desc_t * pndd)
|
||||||
{
|
{
|
||||||
return pn53x_usb_connect (pndd, pndd->acDevice, NC_PN533);
|
return pn53x_usb_connect (pndd, pndd->acDevice, NC_PN533);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pn533_usb_init (nfc_device_t * pnd)
|
||||||
|
{
|
||||||
|
usb_spec_t* pus = (usb_spec_t*) pnd->nds;
|
||||||
|
DBG ("pus->uc.idVendor == 0x%04x, pus->uc.idProduct == 0x%04x", pus->uc.idVendor, pus->uc.idProduct);
|
||||||
|
if ((pus->uc.idVendor == 0x1FD3) && (pus->uc.idProduct == 0x0608)) { // ASK - LoGO
|
||||||
|
DBG ("ASK LoGO initialization.");
|
||||||
|
pn53x_set_reg (pnd, 0x6106, 0xFF, 0x1B);
|
||||||
|
pn53x_set_reg (pnd, 0x6306, 0xFF, 0x14);
|
||||||
|
pn53x_set_reg (pnd, 0xFFFD, 0xFF, 0x37);
|
||||||
|
pn53x_set_reg (pnd, 0xFFB0, 0xFF, 0x3B);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
|
|
||||||
// Functions used by developer to handle connection to this device
|
// Functions used by developer to handle connection to this device
|
||||||
nfc_device_t *pn533_usb_connect (const nfc_device_desc_t * pndd);
|
nfc_device_t *pn533_usb_connect (const nfc_device_desc_t * pndd);
|
||||||
|
void pn533_usb_init (nfc_device_t * pnd);
|
||||||
bool pn533_usb_list_devices (nfc_device_desc_t pnddDevices[], size_t szDevices, size_t * pszDeviceFound);
|
bool pn533_usb_list_devices (nfc_device_desc_t pnddDevices[], size_t szDevices, size_t * pszDeviceFound);
|
||||||
nfc_device_desc_t *pn533_usb_pick_device (void);
|
nfc_device_desc_t *pn533_usb_pick_device (void);
|
||||||
|
|
||||||
|
|
|
@ -172,14 +172,14 @@ pn53x_usb_connect (const nfc_device_desc_t * pndd, const char *target_name, int
|
||||||
|
|
||||||
for (bus = usb_get_busses (); bus; bus = bus->next) {
|
for (bus = usb_get_busses (); bus; bus = bus->next) {
|
||||||
for (dev = bus->devices; dev; dev = dev->next, uiBusIndex--) {
|
for (dev = bus->devices; dev; dev = dev->next, uiBusIndex--) {
|
||||||
// DBG("Checking device %04x:%04x",dev->descriptor.idVendor,dev->descriptor.idProduct);
|
DBG ("Checking device %04x:%04x", dev->descriptor.idVendor, dev->descriptor.idProduct);
|
||||||
if (uiBusIndex == 0) {
|
if (uiBusIndex == 0) {
|
||||||
// Open the USB device
|
// Open the USB device
|
||||||
us.pudh = usb_open (dev);
|
us.pudh = usb_open (dev);
|
||||||
|
|
||||||
get_end_points (dev, &us);
|
get_end_points (dev, &us);
|
||||||
if (usb_set_configuration (us.pudh, 1) < 0) {
|
if (usb_set_configuration (us.pudh, 1) < 0) {
|
||||||
DBG ("%s", "Setting config failed");
|
ERR ("Unable to set USB configuration, please check USB permissions for device %04x:%04x", dev->descriptor.idVendor, dev->descriptor.idProduct);
|
||||||
usb_close (us.pudh);
|
usb_close (us.pudh);
|
||||||
// we failed to use the specified device
|
// we failed to use the specified device
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -191,6 +191,9 @@ pn53x_usb_connect (const nfc_device_desc_t * pndd, const char *target_name, int
|
||||||
// we failed to use the specified device
|
// we failed to use the specified device
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
// Copy VendorId and ProductId
|
||||||
|
us.uc.idVendor = dev->descriptor.idVendor;
|
||||||
|
us.uc.idProduct = dev->descriptor.idProduct;
|
||||||
// Allocate memory for the device info and specification, fill it and return the info
|
// Allocate memory for the device info and specification, fill it and return the info
|
||||||
pus = malloc (sizeof (usb_spec_t));
|
pus = malloc (sizeof (usb_spec_t));
|
||||||
*pus = us;
|
*pus = us;
|
||||||
|
|
|
@ -23,22 +23,24 @@
|
||||||
|
|
||||||
#include <usb.h>
|
#include <usb.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint16_t idVendor;
|
||||||
|
uint16_t idProduct;
|
||||||
|
} usb_candidate_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
usb_dev_handle *pudh;
|
usb_dev_handle *pudh;
|
||||||
|
usb_candidate_t uc;
|
||||||
uint32_t uiEndPointIn;
|
uint32_t uiEndPointIn;
|
||||||
uint32_t uiEndPointOut;
|
uint32_t uiEndPointOut;
|
||||||
uint32_t wMaxPacketSize;
|
uint32_t wMaxPacketSize;
|
||||||
} usb_spec_t;
|
} usb_spec_t;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint16_t idVendor;
|
|
||||||
uint16_t idProduct;
|
|
||||||
} usb_candidate_t;
|
|
||||||
|
|
||||||
nfc_device_t *pn53x_usb_connect (const nfc_device_desc_t * pndd, const char *target_name, int target_chip);
|
|
||||||
void get_end_points (struct usb_device *dev, usb_spec_t * pus);
|
void get_end_points (struct usb_device *dev, usb_spec_t * pus);
|
||||||
void pn53x_usb_disconnect (nfc_device_t * pnd);
|
|
||||||
bool pn53x_usb_transceive (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx, byte_t * pbtRx,
|
|
||||||
size_t * pszRx);
|
|
||||||
bool pn53x_usb_list_devices (nfc_device_desc_t pnddDevices[], size_t szDevices, size_t * pszDeviceFound,
|
bool pn53x_usb_list_devices (nfc_device_desc_t pnddDevices[], size_t szDevices, size_t * pszDeviceFound,
|
||||||
usb_candidate_t candidates[], int num_candidates, char *target_name);
|
usb_candidate_t candidates[], int num_candidates, char *target_name);
|
||||||
|
nfc_device_t *pn53x_usb_connect (const nfc_device_desc_t * pndd, const char *target_name, int target_chip);
|
||||||
|
bool pn53x_usb_transceive (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx, byte_t * pbtRx,
|
||||||
|
size_t * pszRx);
|
||||||
|
void pn53x_usb_disconnect (nfc_device_t * pnd);
|
||||||
|
|
|
@ -107,9 +107,14 @@ nfc_connect (nfc_device_desc_t * pndd)
|
||||||
// Great we have claimed a device
|
// Great we have claimed a device
|
||||||
pnd->pdc = &(drivers_callbacks_list[uiDriver]);
|
pnd->pdc = &(drivers_callbacks_list[uiDriver]);
|
||||||
|
|
||||||
|
// TODO: Put this pn53x related in driver_init()
|
||||||
if (!pn53x_init (pnd))
|
if (!pn53x_init (pnd))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
if (pnd->pdc->init) {
|
||||||
|
pnd->pdc->init (pnd);
|
||||||
|
}
|
||||||
|
|
||||||
// Set default configuration options
|
// Set default configuration options
|
||||||
// Make sure we reset the CRC and parity to chip handling.
|
// Make sure we reset the CRC and parity to chip handling.
|
||||||
if (!nfc_configure (pnd, NDO_HANDLE_CRC, true))
|
if (!nfc_configure (pnd, NDO_HANDLE_CRC, true))
|
||||||
|
|
|
@ -11,5 +11,6 @@ ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0193", MODE="0664", GROUP="plugdev"
|
||||||
# PN533
|
# PN533
|
||||||
ATTRS{idVendor}=="04cc", ATTRS{idProduct}=="2533", MODE="0664", GROUP="plugdev"
|
ATTRS{idVendor}=="04cc", ATTRS{idProduct}=="2533", MODE="0664", GROUP="plugdev"
|
||||||
ATTRS{idVendor}=="04e6", ATTRS{idProduct}=="5591", MODE="0664", GROUP="plugdev"
|
ATTRS{idVendor}=="04e6", ATTRS{idProduct}=="5591", MODE="0664", GROUP="plugdev"
|
||||||
|
ATTRS{idVendor}=="1fd3", ATTRS{idProduct}=="0608", MODE="0664", GROUP="plugdev"
|
||||||
|
|
||||||
LABEL="pn53x_rules_end"
|
LABEL="pn53x_rules_end"
|
||||||
|
|
Loading…
Reference in a new issue