Kconfig, include/debug.h, and drivers/contactless: Add debug macros for contactless. The various contactless device drivers currently define device specific debug macros within their local header files. This patch adds generic ctls[info|warn|err] macros for the overall contactless subsystem to be used in future drivers. Ported the two currently available contactless device drivers (mfrc522.c and pn532.c) to these generic logging macros and fixed some logging bugs

along the way.
This commit is contained in:
Michael Jung 2019-08-19 11:27:23 -06:00 committed by Gregory Nutt
parent a383a86e72
commit 469859b9f1
5 changed files with 117 additions and 74 deletions

35
Kconfig
View file

@ -598,6 +598,41 @@ config DEBUG_BINFMT_INFO
endif # DEBUG_BINFMT endif # DEBUG_BINFMT
config DEBUG_CONTACTLESS
bool "Contactless Debug Features"
default n
depends on DRIVERS_CONTACTLESS
---help---
Enable debug features for contactless (aka RFID) subsystem.
if DEBUG_CONTACTLESS
config DEBUG_CONTACTLESS_ERROR
bool "Contactless Error Output"
default n
depends on DEBUG_ERROR
---help---
Enable contactless (aka RFID) subsystem error output to
SYSLOG.
config DEBUG_CONTACTLESS_WARN
bool "Contactless Warnings Output"
default n
depends on DEBUG_ERROR
---help---
Enable contactless (aka RFID) subsystem warning output to
SYSLOG.
config DEBUG_CONTACTLESS_INFO
bool "Contactless Informational Output"
default n
depends on DEBUG_ERROR
---help---
Enable contactless (aka RFID) subsystem informational output
to SYSLOG.
endif # DEBUG_CONTACTLESS
config DEBUG_CRYPTO config DEBUG_CRYPTO
bool "Crypto Debug Features" bool "Crypto Debug Features"
default n default n

View file

@ -19,20 +19,15 @@ config MFRC522_SPI_FREQ
default 1000000 default 1000000
depends on CL_MFRC522 depends on CL_MFRC522
config CL_MFRC522_DEBUG
bool "Enable MFRC522 debug"
default n
depends on CL_MFRC522
config CL_MFRC522_DEBUG_TX config CL_MFRC522_DEBUG_TX
bool "trace TX frames" bool "trace TX frames"
default n default n
depends on MFRC522_DEBUG depends on DEBUG_CONTACTLESS
config CL_MFRC522_DEBUG_RX config CL_MFRC522_DEBUG_RX
bool "trace RX frames" bool "trace RX frames"
default n default n
depends on MFRC522_DEBUG depends on DEBUG_CONTACTLESS
endif # CL_MFRC522 endif # CL_MFRC522
@ -50,20 +45,15 @@ config PN532_SPI_FREQ
default 1000000 default 1000000
depends on CL_PN532 depends on CL_PN532
config CL_PN532_DEBUG
bool "Enable PN532 debug"
default n
depends on CL_PN532
config CL_PN532_DEBUG_TX config CL_PN532_DEBUG_TX
bool "trace TX frames" bool "trace TX frames"
default n default n
depends on CL_PN532_DEBUG depends on DEBUG_CONTACTLESS
config CL_PN532_DEBUG_RX config CL_PN532_DEBUG_RX
bool "trace RX frames" bool "trace RX frames"
default n default n
depends on CL_PN532_DEBUG depends on DEBUG_CONTACTLESS
endif # CL_PN532 endif # CL_PN532
endif # DRIVERS_CONTACTLESS endif # DRIVERS_CONTACTLESS

View file

@ -60,19 +60,6 @@
* Pre-processor Definitions * Pre-processor Definitions
****************************************************************************/ ****************************************************************************/
#ifdef CONFIG_CL_MFRC522_DEBUG
# define mfrc522err _err
# define mfrc522info _info
#else
# ifdef CONFIG_CPP_HAVE_VARARGS
# define mfrc522err(x...)
# define mfrc522info(x...)
# else
# define mfrc522err (void)
# define mfrc522info (void)
# endif
#endif
#ifdef CONFIG_CL_MFRC522_DEBUG_TX #ifdef CONFIG_CL_MFRC522_DEBUG_TX
# define tracetx errdumpbuffer # define tracetx errdumpbuffer
#else #else
@ -209,7 +196,7 @@ uint8_t mfrc522_readu8(FAR struct mfrc522_dev_s *dev, uint8_t regaddr)
mfrc522_deselect(dev); mfrc522_deselect(dev);
mfrc522_unlock(dev->spi); mfrc522_unlock(dev->spi);
tracerx("read", regval, 1); tracerx("read", &regval, 1);
return regval; return regval;
} }
@ -301,7 +288,7 @@ void mfrc522_readblk(FAR struct mfrc522_dev_s *dev, uint8_t regaddr,
mfrc522_deselect(dev); mfrc522_deselect(dev);
mfrc522_unlock(dev->spi); mfrc522_unlock(dev->spi);
tracerx("readblk", regval, size); tracerx("readblk", regval, length);
} }
/**************************************************************************** /****************************************************************************
@ -335,7 +322,7 @@ void mfrc522_writeblk(FAR struct mfrc522_dev_s *dev, uint8_t regaddr,
mfrc522_deselect(dev); mfrc522_deselect(dev);
mfrc522_unlock(dev->spi); mfrc522_unlock(dev->spi);
tracerx("writeblk", regval, size); tracerx("writeblk", regval, length);
} }
/**************************************************************************** /****************************************************************************
@ -693,7 +680,7 @@ int mfrc522_picc_reqa_wupa(FAR struct mfrc522_dev_s *dev, uint8_t command,
return -EAGAIN; return -EAGAIN;
} }
mfrc522info("buffer[0]=0x%02X | buffer[1]=0x%02X\n", buffer[0], buffer[1]); ctlsinfo("buffer[0]=0x%02X | buffer[1]=0x%02X\n", buffer[0], buffer[1]);
return OK; return OK;
} }
@ -1402,7 +1389,7 @@ int mfrc522_selftest(FAR struct mfrc522_dev_s *dev)
mfrc522_writeu8(dev, MFRC522_AUTOTEST_REG, 0x00); mfrc522_writeu8(dev, MFRC522_AUTOTEST_REG, 0x00);
mfrc522info("Self Test Result:\n"); ctlsinfo("Self Test Result:\n");
for (i = 0; i < 64; i += 8) for (i = 0; i < 64; i += 8)
{ {
@ -1411,10 +1398,10 @@ int mfrc522_selftest(FAR struct mfrc522_dev_s *dev)
(void)sprintf(&outbuf[k], " %02x", result[i + j]); (void)sprintf(&outbuf[k], " %02x", result[i + j]);
} }
mfrc522info(" %02x:%s\n", i, outbuf); ctlsinfo(" %02x:%s\n", i, outbuf);
} }
mfrc522info("Done!\n"); ctlsinfo("Done!\n");
return OK; return OK;
} }
@ -1499,7 +1486,7 @@ static ssize_t mfrc522_read(FAR struct file *filep, FAR char *buffer,
if (!mfrc522_picc_detect(dev)) if (!mfrc522_picc_detect(dev))
{ {
mfrc522err("Card is not present!\n"); ctlserr("Card is not present!\n");
return -EAGAIN; return -EAGAIN;
} }
@ -1608,7 +1595,7 @@ static int mfrc522_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
default: default:
{ {
mfrc522err("ERROR: Unrecognized cmd: %d\n", cmd); ctlserr("ERROR: Unrecognized cmd: %d\n", cmd);
ret = -ENOTTY; ret = -ENOTTY;
break; break;
} }
@ -1651,7 +1638,7 @@ int mfrc522_register(FAR const char *devpath, FAR struct spi_dev_s *spi)
dev = (FAR struct mfrc522_dev_s *)kmm_malloc(sizeof(struct mfrc522_dev_s)); dev = (FAR struct mfrc522_dev_s *)kmm_malloc(sizeof(struct mfrc522_dev_s));
if (!dev) if (!dev)
{ {
mfrc522err("ERROR: Failed to allocate instance\n"); ctlserr("ERROR: Failed to allocate instance\n");
return -ENOMEM; return -ENOMEM;
} }
@ -1679,13 +1666,13 @@ int mfrc522_register(FAR const char *devpath, FAR struct spi_dev_s *spi)
fwver = mfrc522_getfwversion(dev); fwver = mfrc522_getfwversion(dev);
mfrc522info("MFRC522 Firmware Version: 0x%02X!\n", fwver); ctlsinfo("MFRC522 Firmware Version: 0x%02X!\n", fwver);
/* If returned firmware version is unknown don't register the device */ /* If returned firmware version is unknown don't register the device */
if (fwver != 0x90 && fwver != 0x91 && fwver != 0x92 && fwver != 0x88) if (fwver != 0x90 && fwver != 0x91 && fwver != 0x92 && fwver != 0x88)
{ {
mfrc522err("None supported device detected!\n"); ctlserr("None supported device detected!\n");
goto firmware_error; goto firmware_error;
} }
@ -1694,7 +1681,7 @@ int mfrc522_register(FAR const char *devpath, FAR struct spi_dev_s *spi)
ret = register_driver(devpath, &g_mfrc522fops, 0666, dev); ret = register_driver(devpath, &g_mfrc522fops, 0666, dev);
if (ret < 0) if (ret < 0)
{ {
mfrc522err("ERROR: Failed to register driver: %d\n", ret); ctlserr("ERROR: Failed to register driver: %d\n", ret);
kmm_free(dev); kmm_free(dev);
} }

View file

@ -70,19 +70,6 @@
# warning This platform does not support SPI LSB-bit order # warning This platform does not support SPI LSB-bit order
#endif #endif
#ifdef CONFIG_CL_PN532_DEBUG
# define pn532err _err
# define pn532info _info
#else
# ifdef CONFIG_CPP_HAVE_VARARGS
# define pn532err(x...)
# define pn532info(x...)
# else
# define pn532err (void)
# define pn532info (void)
# endif
#endif
#ifdef CONFIG_CL_PN532_DEBUG_TX #ifdef CONFIG_CL_PN532_DEBUG_TX
# define tracetx errdumpbuffer # define tracetx errdumpbuffer
#else #else
@ -118,7 +105,7 @@ static int _ioctl(FAR struct file *filep, int cmd, unsigned long arg);
static uint8_t pn532_checksum(uint8_t value); static uint8_t pn532_checksum(uint8_t value);
static uint8_t pn532_data_checksum(FAR uint8_t *data, int datalen); static uint8_t pn532_data_checksum(FAR uint8_t *data, int datalen);
int pn532_read(FAR struct pn532_dev_s *dev, uFAR int8_t *buff, uint8_t n); int pn532_read(FAR struct pn532_dev_s *dev, FAR uint8_t *buff, uint8_t n);
#if 0 /* TODO */ #if 0 /* TODO */
/* IRQ Handling */ /* IRQ Handling */
@ -166,7 +153,7 @@ static void pn532_lock(FAR struct spi_dev_s *spi)
ret = SPI_HWFEATURES(spi, HWFEAT_LSBFIRST); ret = SPI_HWFEATURES(spi, HWFEAT_LSBFIRST);
if (ret < 0) if (ret < 0)
{ {
pn532err("ERROR: SPI_HWFEATURES failed to set bit order: %d\n", ret); ctlserr("ERROR: SPI_HWFEATURES failed to set bit order: %d\n", ret);
} }
(void)SPI_SETFREQUENCY(spi, CONFIG_PN532_SPI_FREQ); (void)SPI_SETFREQUENCY(spi, CONFIG_PN532_SPI_FREQ);
@ -189,7 +176,7 @@ static inline void pn532_configspi(FAR struct spi_dev_s *spi)
ret = SPI_HWFEATURES(spi, HWFEAT_LSBFIRST); ret = SPI_HWFEATURES(spi, HWFEAT_LSBFIRST);
if (ret < 0) if (ret < 0)
{ {
pn532err("ERROR: SPI_HWFEATURES failed to set bit order: %d\n", ret); ctlserr("ERROR: SPI_HWFEATURES failed to set bit order: %d\n", ret);
} }
(void)SPI_SETFREQUENCY(spi, CONFIG_PN532_SPI_FREQ); (void)SPI_SETFREQUENCY(spi, CONFIG_PN532_SPI_FREQ);
@ -259,7 +246,7 @@ bool pn532_rx_frame_is_valid(FAR struct pn532_frame *f, bool check_data)
if (f->start_code != PN532_SOF) if (f->start_code != PN532_SOF)
{ {
pn532err("ERROR: Frame startcode 0x%X != 0x%X\n", ctlserr("ERROR: Frame startcode 0x%X != 0x%X\n",
PN532_SOF, f->start_code); PN532_SOF, f->start_code);
return false; return false;
} }
@ -272,7 +259,7 @@ bool pn532_rx_frame_is_valid(FAR struct pn532_frame *f, bool check_data)
chk = pn532_checksum(f->len); chk = pn532_checksum(f->len);
if (chk != f->lcs) if (chk != f->lcs)
{ {
pn532err("ERROR: Frame data len checksum failed"); ctlserr("ERROR: Frame data len checksum failed");
return false; return false;
} }
@ -281,7 +268,7 @@ bool pn532_rx_frame_is_valid(FAR struct pn532_frame *f, bool check_data)
chk = pn532_data_checksum(&f->tfi, f->len); chk = pn532_data_checksum(&f->tfi, f->len);
if (chk != f->data[f->len-1]) if (chk != f->data[f->len-1])
{ {
pn532err("ERROR: Frame data checksum failed: calc=0x%X != 0x%X", ctlserr("ERROR: Frame data checksum failed: calc=0x%X != 0x%X",
chk, f->data[f->len-1]); chk, f->data[f->len-1]);
return false; return false;
} }
@ -338,7 +325,7 @@ static int pn532_wait_rx_ready(FAR struct pn532_dev_s *dev, int timeout)
{ {
if (--timeout == 0x00) if (--timeout == 0x00)
{ {
pn532err("ERROR: wait RX timeout!\n"); ctlserr("ERROR: wait RX timeout!\n");
return -ETIMEDOUT; return -ETIMEDOUT;
} }
@ -449,7 +436,7 @@ int pn532_read_ack(FAR struct pn532_dev_s *dev)
} }
else else
{ {
pn532info("ACK NOK"); ctlsinfo("ACK NOK");
res = 0; res = 0;
} }
@ -495,7 +482,7 @@ int pn532_write_frame(FAR struct pn532_dev_s *dev, FAR struct pn532_frame *f)
{ {
if (!pn532_read_ack(dev)) if (!pn532_read_ack(dev))
{ {
pn532err("ERROR: command FAILED\n"); ctlserr("ERROR: command FAILED\n");
res = -EIO; res = -EIO;
} }
} }
@ -617,7 +604,7 @@ int pn532_get_fw_version(FAR struct pn532_dev_s *dev,
if (f->data[0] == PN532_COMMAND_GETFIRMWAREVERSION + 1) if (f->data[0] == PN532_COMMAND_GETFIRMWAREVERSION + 1)
{ {
fw = (FAR struct pn_firmware_version *) &f->data[1]; fw = (FAR struct pn_firmware_version *) &f->data[1];
pn532info("FW: %d.%d on IC:0x%X (Features: 0x%X)\n", ctlsinfo("FW: %d.%d on IC:0x%X (Features: 0x%X)\n",
fw->ver, fw->rev, fw->ic, fw->support); fw->ver, fw->rev, fw->ic, fw->support);
if (fv) if (fv)
{ {
@ -648,7 +635,7 @@ int pn532_write_gpio(FAR struct pn532_dev_s *dev, uint8_t p3, uint8_t p7)
{ {
pn532_read(dev, cmd_buffer, 10); pn532_read(dev, cmd_buffer, 10);
tracetx("Resp:", cmd_buffer, 10); tracetx("Resp:", cmd_buffer, 10);
pn532info("TFI=%x, data0=%X", f->tfi, f->data[0]); ctlsinfo("TFI=%x, data0=%X", f->tfi, f->data[0]);
if ((f->tfi == PN532_PN532TOHOST) && if ((f->tfi == PN532_PN532TOHOST) &&
(f->data[0] == PN532_COMMAND_WRITEGPIO + 1)) (f->data[0] == PN532_COMMAND_WRITEGPIO + 1))
{ {
@ -685,7 +672,7 @@ uint32_t pn532_write_passive_data(FAR struct pn532_dev_s *dev,
{ {
dev->state = PN532_STATE_IDLE; dev->state = PN532_STATE_IDLE;
f = (FAR struct pn532_frame *) resp; f = (FAR struct pn532_frame *) resp;
tracerx("passive target id resp:", f, f->len+6); tracerx("passive target id resp:", (FAR uint8_t *)f, f->len+6);
if (f->data[0] == PN532_COMMAND_INDATAEXCHANGE+1) if (f->data[0] == PN532_COMMAND_INDATAEXCHANGE+1)
{ {
@ -721,7 +708,7 @@ uint32_t pn532_read_passive_data(FAR struct pn532_dev_s *dev, uint8_t address,
{ {
dev->state = PN532_STATE_IDLE; dev->state = PN532_STATE_IDLE;
f = (FAR struct pn532_frame *) resp; f = (FAR struct pn532_frame *) resp;
tracerx("passive target id resp:", f, f->len+6); tracerx("passive target id resp:", (FAR uint8_t *)f, f->len+6);
if (f->data[0] == PN532_COMMAND_INDATAEXCHANGE+1) if (f->data[0] == PN532_COMMAND_INDATAEXCHANGE+1)
{ {
@ -759,7 +746,7 @@ uint32_t pn532_read_passive_target_id(FAR struct pn532_dev_s *dev,
f = (FAR struct pn532_frame *) resp; f = (FAR struct pn532_frame *) resp;
r = (FAR struct pn_poll_response *) &f->data[1]; r = (FAR struct pn_poll_response *) &f->data[1];
tracerx("passive target id resp:", f, f->len+6); tracerx("passive target id resp:", (FAR uint8_t *)f, f->len+6);
if (f->data[0] == PN532_COMMAND_INLISTPASSIVETARGET+1) if (f->data[0] == PN532_COMMAND_INLISTPASSIVETARGET+1)
{ {
@ -770,14 +757,14 @@ uint32_t pn532_read_passive_target_id(FAR struct pn532_dev_s *dev,
FAR struct pn_target_type_a *t = FAR struct pn_target_type_a *t =
(FAR struct pn_target_type_a *)&r->target_data; (FAR struct pn_target_type_a *)&r->target_data;
pn532info("Found %d card(s)\n", r->nbtg); ctlsinfo("Found %d card(s)\n", r->nbtg);
/* now supports only type_a cards /* now supports only type_a cards
* if (poll_mode == PN532_POLL_MOD_106KBPS_A) * if (poll_mode == PN532_POLL_MOD_106KBPS_A)
*/ */
pn532info("sens:0x%x sel:0x%x", t->sens_res, t->sel_res); ctlsinfo("sens:0x%x sel:0x%x", t->sens_res, t->sel_res);
pn532info("idlen:0x%x ", t->nfcid_len); ctlsinfo("idlen:0x%x ", t->nfcid_len);
/* generate 32bit cid from id (could be longer) /* generate 32bit cid from id (could be longer)
* HACK: Using only top 4 bytes. * HACK: Using only top 4 bytes.
@ -864,7 +851,7 @@ static int irq_handler(int irq, FAR void *context)
(void)irq; (void)irq;
(void)context; (void)context;
pn532info("*IRQ*\n"); ctlsinfo("*IRQ*\n");
work_queue(HPWORK, &g_dev->irq_work, pn532_worker, dev, 0); work_queue(HPWORK, &g_dev->irq_work, pn532_worker, dev, 0);
return OK; return OK;
@ -1117,7 +1104,7 @@ static int _ioctl(FAR struct file *filep, int cmd, unsigned long arg)
break; break;
default: default:
pn532err("ERROR: Unrecognized cmd: %d\n", cmd); ctlserr("ERROR: Unrecognized cmd: %d\n", cmd);
ret = -EINVAL; ret = -EINVAL;
break; break;
} }
@ -1158,7 +1145,7 @@ int pn532_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
dev = (FAR struct pn532_dev_s *)kmm_malloc(sizeof(struct pn532_dev_s)); dev = (FAR struct pn532_dev_s *)kmm_malloc(sizeof(struct pn532_dev_s));
if (!dev) if (!dev)
{ {
pn532err("ERROR: Failed to allocate instance\n"); ctlserr("ERROR: Failed to allocate instance\n");
return -ENOMEM; return -ENOMEM;
} }
@ -1176,7 +1163,7 @@ int pn532_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
ret = register_driver(devpath, &g_pn532fops, 0666, dev); ret = register_driver(devpath, &g_pn532fops, 0666, dev);
if (ret < 0) if (ret < 0)
{ {
pn532err("ERROR: Failed to register driver: %d\n", ret); ctlserr("ERROR: Failed to register driver: %d\n", ret);
kmm_free(dev); kmm_free(dev);
} }

View file

@ -287,6 +287,24 @@
# define finfo(x...) # define finfo(x...)
#endif #endif
#ifdef CONFIG_DEBUG_CONTACTLESS_ERROR
# define ctlserr(format, ...) _err(format, ##__VA_ARGS__)
#else
# define ctlserr(x...)
#endif
#ifdef CONFIG_DEBUG_CONTACTLESS_WARN
# define ctlswarn(format, ...) _warn(format, ##__VA_ARGS__)
#else
# define ctlswarn(x...)
#endif
#ifdef CONFIG_DEBUG_CONTACTLESS_INFO
# define ctlsinfo(format, ...) _info(format, ##__VA_ARGS__)
#else
# define ctlsinfo(x...)
#endif
#ifdef CONFIG_DEBUG_CRYPTO_ERROR #ifdef CONFIG_DEBUG_CRYPTO_ERROR
# define crypterr(format, ...) _err(format, ##__VA_ARGS__) # define crypterr(format, ...) _err(format, ##__VA_ARGS__)
#else #else
@ -867,6 +885,24 @@
# define finfo (void) # define finfo (void)
#endif #endif
#ifdef CONFIG_DEBUG_CONTACTLESS_ERROR
# define ctlserr _err
#else
# define ctlserr (void)
#endif
#ifdef CONFIG_DEBUG_CONTACTLESS_WARN
# define ctlswarn _warn
#else
# define ctlswarn (void)
#endif
#ifdef CONFIG_DEBUG_CONTACTLESS_INFO
# define ctlsinfo _info
#else
# define ctlsinfo (void)
#endif
#ifdef CONFIG_DEBUG_CRYPTO_ERROR #ifdef CONFIG_DEBUG_CRYPTO_ERROR
# define crypterr _err # define crypterr _err
#else #else
@ -1363,6 +1399,14 @@
# define finfodumpbuffer(m,b,n) # define finfodumpbuffer(m,b,n)
#endif #endif
#ifdef CONFIG_DEBUG_CONTACTLESS
# define ctlserrdumpbuffer(m,b,n) errdumpbuffer(m,b,n)
# define ctlinfodumpbuffer(m,b,n) infodumpbuffer(m,b,n)
#else
# define ctlserrferrdumpbuffer(m,b,n)
# define ctlinfodumpbuffer(m,b,n)
#endif
#ifdef CONFIG_DEBUG_INPUT #ifdef CONFIG_DEBUG_INPUT
# define ierrdumpbuffer(m,b,n) errdumpbuffer(m,b,n) # define ierrdumpbuffer(m,b,n) errdumpbuffer(m,b,n)
# define iinfodumpbuffer(m,b,n) infodumpbuffer(m,b,n) # define iinfodumpbuffer(m,b,n) infodumpbuffer(m,b,n)