updates as per @goedox comments
This commit is contained in:
parent
19a51dc2bd
commit
dcc52cd4d5
5 changed files with 23 additions and 16 deletions
|
@ -293,7 +293,7 @@ typedef union {
|
||||||
nfc_jewel_info nji;
|
nfc_jewel_info nji;
|
||||||
nfc_barcode_info nti; // "t" for Thinfilm, "b" already used
|
nfc_barcode_info nti; // "t" for Thinfilm, "b" already used
|
||||||
nfc_dep_info ndi;
|
nfc_dep_info ndi;
|
||||||
nfc_iso14443biclass_info nic; // iclass - nbi already used
|
nfc_iso14443biclass_info nhi; // hid iclass / picopass - nii already used
|
||||||
} nfc_target_info;
|
} nfc_target_info;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -581,7 +581,7 @@ pn53x_decode_target_data(const uint8_t *pbtRawData, size_t szRawData, pn53x_type
|
||||||
case NMT_ISO14443BICLASS:
|
case NMT_ISO14443BICLASS:
|
||||||
// Store the UID
|
// Store the UID
|
||||||
for(uint8_t i= 0 ; i < 8 ; ++i)
|
for(uint8_t i= 0 ; i < 8 ; ++i)
|
||||||
pnti->nic.abtUID[7 - i]= pbtRawData[i];
|
pnti->nhi.abtUID[7 - i]= pbtRawData[i];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NMT_ISO14443B2CT:
|
case NMT_ISO14443B2CT:
|
||||||
|
@ -1062,7 +1062,7 @@ pn53x_initiator_init(struct nfc_device *pnd)
|
||||||
// iclass requires special modulation settings
|
// iclass requires special modulation settings
|
||||||
void pn53x_initiator_init_iclass_modulation(struct nfc_device *pnd)
|
void pn53x_initiator_init_iclass_modulation(struct nfc_device *pnd)
|
||||||
{
|
{
|
||||||
// send a bunch of low level commands I reverse engineered from a working iClass reader
|
// send a bunch of low level commands reverse engineered from a working iClass reader
|
||||||
// original device was using a PN512
|
// original device was using a PN512
|
||||||
//
|
//
|
||||||
// // TxModeReg - Defines the data rate and framing during transmission.
|
// // TxModeReg - Defines the data rate and framing during transmission.
|
||||||
|
@ -1196,12 +1196,12 @@ pn53x_initiator_select_passive_target_ext(struct nfc_device *pnd,
|
||||||
abtReqt[0]= 0x0c; // iClass SELECT
|
abtReqt[0]= 0x0c; // iClass SELECT
|
||||||
abtAnticol[0]= 0x81; // iClass ANTICOL
|
abtAnticol[0]= 0x81; // iClass ANTICOL
|
||||||
if ((res = pn53x_initiator_transceive_bytes(pnd, abtReqt, sizeof(abtReqt), &abtAnticol[1], sizeof(abtAnticol) - 1, timeout)) < 0) {
|
if ((res = pn53x_initiator_transceive_bytes(pnd, abtReqt, sizeof(abtReqt), &abtAnticol[1], sizeof(abtAnticol) - 1, timeout)) < 0) {
|
||||||
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_ERROR, "timeout on iClass anticol");
|
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_DEBUG, "timeout on iClass anticol");
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
// write back anticol handle to get UID
|
// write back anticol handle to get UID
|
||||||
if ((res = pn53x_initiator_transceive_bytes(pnd, abtAnticol, 9, abtTargetsData, 10, timeout)) < 0) {
|
if ((res = pn53x_initiator_transceive_bytes(pnd, abtAnticol, 9, abtTargetsData, 10, timeout)) < 0) {
|
||||||
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_ERROR, "timeout on iClass get UID");
|
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_DEBUG, "timeout on iClass get UID");
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_DEBUG, "iClass raw UID: %02x %02x %02x %02x %02x %02x %02x %02x", abtTargetsData[0], abtTargetsData[1], abtTargetsData[2], abtTargetsData[3], abtTargetsData[4], abtTargetsData[5], abtTargetsData[6], abtTargetsData[7]);
|
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_DEBUG, "iClass raw UID: %02x %02x %02x %02x %02x %02x %02x %02x", abtTargetsData[0], abtTargetsData[1], abtTargetsData[2], abtTargetsData[3], abtTargetsData[4], abtTargetsData[5], abtTargetsData[6], abtTargetsData[7]);
|
||||||
|
@ -1210,6 +1210,15 @@ pn53x_initiator_select_passive_target_ext(struct nfc_device *pnd,
|
||||||
if ((res = pn53x_decode_target_data(abtTargetsData, szTargetsData, CHIP_DATA(pnd)->type, nm.nmt, &(nttmp.nti))) < 0) {
|
if ((res = pn53x_decode_target_data(abtTargetsData, szTargetsData, CHIP_DATA(pnd)->type, nm.nmt, &(nttmp.nti))) < 0) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if ((res = pn53x_initiator_transceive_bytes(pnd, pbtInitData, szInitData, abtTargetsData, sizeof(abtTargetsData), timeout)) < 0) {
|
||||||
|
if ((res == NFC_ERFTRANS) && (CHIP_DATA(pnd)->last_status_byte == 0x01)) { // Chip timeout
|
||||||
|
continue;
|
||||||
|
} else
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
szTargetsData = (size_t)res;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nm.nmt == NMT_ISO14443B2CT) {
|
if (nm.nmt == NMT_ISO14443B2CT) {
|
||||||
|
|
|
@ -170,37 +170,33 @@ void
|
||||||
prepare_initiator_data(const nfc_modulation nm, uint8_t **ppbtInitiatorData, size_t *pszInitiatorData)
|
prepare_initiator_data(const nfc_modulation nm, uint8_t **ppbtInitiatorData, size_t *pszInitiatorData)
|
||||||
{
|
{
|
||||||
switch (nm.nmt) {
|
switch (nm.nmt) {
|
||||||
case NMT_ISO14443B: {
|
case NMT_ISO14443B:
|
||||||
// Application Family Identifier (AFI) must equals 0x00 in order to wakeup all ISO14443-B PICCs (see ISO/IEC 14443-3)
|
// Application Family Identifier (AFI) must equals 0x00 in order to wakeup all ISO14443-B PICCs (see ISO/IEC 14443-3)
|
||||||
*ppbtInitiatorData = (uint8_t *) "\x00";
|
*ppbtInitiatorData = (uint8_t *) "\x00";
|
||||||
*pszInitiatorData = 1;
|
*pszInitiatorData = 1;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case NMT_ISO14443BI: {
|
case NMT_ISO14443BI:
|
||||||
// APGEN
|
// APGEN
|
||||||
*ppbtInitiatorData = (uint8_t *) "\x01\x0b\x3f\x80";
|
*ppbtInitiatorData = (uint8_t *) "\x01\x0b\x3f\x80";
|
||||||
*pszInitiatorData = 4;
|
*pszInitiatorData = 4;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case NMT_ISO14443B2SR: {
|
case NMT_ISO14443B2SR:
|
||||||
// Get_UID
|
// Get_UID
|
||||||
*ppbtInitiatorData = (uint8_t *) "\x0b";
|
*ppbtInitiatorData = (uint8_t *) "\x0b";
|
||||||
*pszInitiatorData = 1;
|
*pszInitiatorData = 1;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case NMT_ISO14443B2CT: {
|
case NMT_ISO14443B2CT:
|
||||||
// SELECT-ALL
|
// SELECT-ALL
|
||||||
*ppbtInitiatorData = (uint8_t *) "\x9F\xFF\xFF";
|
*ppbtInitiatorData = (uint8_t *) "\x9F\xFF\xFF";
|
||||||
*pszInitiatorData = 3;
|
*pszInitiatorData = 3;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case NMT_FELICA: {
|
case NMT_FELICA:
|
||||||
// polling payload must be present (see ISO/IEC 18092 11.2.2.5)
|
// polling payload must be present (see ISO/IEC 18092 11.2.2.5)
|
||||||
*ppbtInitiatorData = (uint8_t *) "\x00\xff\xff\x01\x00";
|
*ppbtInitiatorData = (uint8_t *) "\x00\xff\xff\x01\x00";
|
||||||
*pszInitiatorData = 5;
|
*pszInitiatorData = 5;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case NMT_ISO14443A:
|
case NMT_ISO14443A:
|
||||||
|
case NMT_ISO14443BICLASS:
|
||||||
case NMT_JEWEL:
|
case NMT_JEWEL:
|
||||||
case NMT_BARCODE:
|
case NMT_BARCODE:
|
||||||
case NMT_DEP:
|
case NMT_DEP:
|
||||||
|
|
|
@ -1390,6 +1390,8 @@ str_nfc_modulation_type(const nfc_modulation_type nmt)
|
||||||
return "ISO/IEC 14443-4B";
|
return "ISO/IEC 14443-4B";
|
||||||
case NMT_ISO14443BI:
|
case NMT_ISO14443BI:
|
||||||
return "ISO/IEC 14443-4B'";
|
return "ISO/IEC 14443-4B'";
|
||||||
|
case NMT_ISO14443BICLASS:
|
||||||
|
return "ISO/IEC 14443-2B-3B iClass (Picopass)";
|
||||||
case NMT_ISO14443B2CT:
|
case NMT_ISO14443B2CT:
|
||||||
return "ISO/IEC 14443-2B ASK CTx";
|
return "ISO/IEC 14443-2B ASK CTx";
|
||||||
case NMT_ISO14443B2SR:
|
case NMT_ISO14443B2SR:
|
||||||
|
|
|
@ -679,7 +679,7 @@ snprint_nfc_target(char *dst, size_t size, const nfc_target *pnt, bool verbose)
|
||||||
snprint_nfc_iso14443b2sr_info(dst + off, size - off, &pnt->nti.nsi, verbose);
|
snprint_nfc_iso14443b2sr_info(dst + off, size - off, &pnt->nti.nsi, verbose);
|
||||||
break;
|
break;
|
||||||
case NMT_ISO14443BICLASS:
|
case NMT_ISO14443BICLASS:
|
||||||
snprint_nfc_iso14443biclass_info(dst + off, size - off, &pnt->nti.nic, verbose);
|
snprint_nfc_iso14443biclass_info(dst + off, size - off, &pnt->nti.nhi, verbose);
|
||||||
break;
|
break;
|
||||||
case NMT_ISO14443B2CT:
|
case NMT_ISO14443B2CT:
|
||||||
snprint_nfc_iso14443b2ct_info(dst + off, size - off, &pnt->nti.nci, verbose);
|
snprint_nfc_iso14443b2ct_info(dst + off, size - off, &pnt->nti.nci, verbose);
|
||||||
|
|
Loading…
Reference in a new issue