drivers: pn532_i2c: Clarify preamble and start byte
The pn532 documentation differs slightly from the included ascii art documentation on how a packet looks like. The preamble was omitted however the postamble is mentioned. This patch adds the Preamble to the ascii frame documentation. The code later refers incorrectly to the start byte as the preamble. This variable was renamed to more descriptively state that it is the preambe and the start bytes. Signed-off-by: Olliver Schinagl <oliver@schinagl.nl>
This commit is contained in:
parent
659f5f407f
commit
b953002f8f
2 changed files with 34 additions and 25 deletions
|
@ -81,32 +81,38 @@
|
|||
#define TgGetTargetStatus 0x8A
|
||||
|
||||
/** @note PN53x's normal frame:
|
||||
* See the PN532 (firmware) user manual, section 6.2.1.1: Normal information
|
||||
* frame, figure 13. Normal information frame, page 28 rev. 02 - 2007-11-07.
|
||||
*
|
||||
* .-- Start
|
||||
* | .-- Packet length
|
||||
* | | .-- Length checksum
|
||||
* | | | .-- Direction (D4 Host to PN, D5 PN to Host)
|
||||
* | | | | .-- Code
|
||||
* | | | | | .-- Packet checksum
|
||||
* | | | | | | .-- Postamble
|
||||
* V | | | | | |
|
||||
* ----- V V V V V V
|
||||
* 00 FF 02 FE D4 02 2A 00
|
||||
* .-- Preamble
|
||||
* | .-- Start
|
||||
* | | .-- Packet length
|
||||
* | | | .-- Length checksum
|
||||
* | | | | .-- Direction (D4 Host to PN, D5 PN to Host)
|
||||
* | | | | | .-- Code
|
||||
* | | | | | | .-- Packet checksum
|
||||
* | | | | | | | .-- Postamble
|
||||
* | V | | | | | |
|
||||
* V ----- V V V V V V
|
||||
* 00 00 FF 02 FE D4 02 2A 00
|
||||
*/
|
||||
|
||||
/** @note PN53x's extended frame:
|
||||
* See the PN532 (firmware) user manual, section 6.2.1.2: Extended information
|
||||
* frame, figure 14. Normal information frame, page 29 rev. 02 - 2007-11-07.
|
||||
*
|
||||
* .-- Start
|
||||
* | .-- Fixed to FF to enable extended frame
|
||||
* | | .-- Packet length
|
||||
* | | | .-- Length checksum
|
||||
* | | | | .-- Direction (D4 Host to PN, D5 PN to Host)
|
||||
* | | | | | .-- Code
|
||||
* | | | | | | .-- Packet checksum
|
||||
* | | | | | | | .-- Postamble
|
||||
* V V V | | | | |
|
||||
* ----- ----- ----- V V V V V
|
||||
* 00 FF FF FF 00 02 FE D4 02 2A 00
|
||||
* .-- Preamble
|
||||
* | .-- Start
|
||||
* | | .-- Fixed to FF to enable extended frame
|
||||
* | | | .-- Packet length
|
||||
* | | | | .-- Length checksum
|
||||
* | | | | | .-- Direction (D4 Host to PN, D5 PN to Host)
|
||||
* | | | | | | .-- Code
|
||||
* | | | | | | | .-- Packet checksum
|
||||
* | | | | | | | | .-- Postamble
|
||||
* | V V V | | | | |
|
||||
* V ----- ----- ----- V V V V V
|
||||
* 00 00 FF FF FF 00 02 FE D4 02 2A 00
|
||||
*/
|
||||
|
||||
/**
|
||||
|
|
|
@ -75,6 +75,10 @@ const struct timespec rdyDelay = {
|
|||
.tv_nsec = PN532_RDY_LOOP_DELAY * 1000 * 1000
|
||||
};
|
||||
|
||||
/* preamble and start bytes, see pn532-internal.h for details */
|
||||
const uint8_t pn53x_preamble_and_start[] = { 0x00, 0x00, 0xff };
|
||||
#define PN53X_PREAMBLE_AND_START_LEN (sizeof(pn53x_preamble_and_start) / sizeof(pn53x_preamble_and_start[0]))
|
||||
|
||||
/* Private Functions Prototypes */
|
||||
|
||||
static nfc_device *pn532_i2c_open(const nfc_context *context, const nfc_connstring connstring);
|
||||
|
@ -334,9 +338,10 @@ pn532_i2c_send(nfc_device *pnd, const uint8_t *pbtData, const size_t szData, int
|
|||
break;
|
||||
};
|
||||
|
||||
uint8_t abtFrame[PN532_BUFFER_LEN] = { 0x00, 0x00, 0xff }; // Every packet must start with "00 00 ff"
|
||||
uint8_t abtFrame[PN532_BUFFER_LEN];
|
||||
size_t szFrame = 0;
|
||||
|
||||
memcpy(abtFrame, pn53x_preamble_and_start, PN53X_PREAMBLE_AND_START_LEN); // Every packet must start with the preamble and start bytes.
|
||||
if ((res = pn53x_build_frame(abtFrame, &szFrame, pbtData, szData)) < 0) {
|
||||
pnd->last_error = res;
|
||||
return pnd->last_error;
|
||||
|
@ -477,9 +482,7 @@ pn532_i2c_receive(nfc_device *pnd, uint8_t *pbtData, const size_t szDataLen, int
|
|||
goto error;
|
||||
}
|
||||
|
||||
const uint8_t pn53x_preamble[3] = { 0x00, 0x00, 0xff };
|
||||
|
||||
if (0 != (memcmp(frameBuf, pn53x_preamble, 3))) {
|
||||
if (0 != (memcmp(frameBuf, pn53x_preamble_and_start, PN53X_PREAMBLE_AND_START_LEN))) {
|
||||
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_ERROR, "%s", "Frame preamble+start code mismatch");
|
||||
pnd->last_error = NFC_EIO;
|
||||
goto error;
|
||||
|
|
Loading…
Reference in a new issue