nfc-anticol now works even after running another program that change the modulation (Fixes Issue 111) (Thanks to Phil for help).
This commit is contained in:
parent
868919107a
commit
ccfd24a682
4 changed files with 37 additions and 2 deletions
|
@ -167,6 +167,11 @@ main (int argc, char *argv[])
|
||||||
nfc_perror (pnd, "nfc_configure");
|
nfc_perror (pnd, "nfc_configure");
|
||||||
exit (EXIT_FAILURE);
|
exit (EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
// Force 14443-A mode
|
||||||
|
if (!nfc_configure (pnd, NDO_FORCE_ISO14443_A, true)) {
|
||||||
|
nfc_perror (pnd, "nfc_configure");
|
||||||
|
exit (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
// Enable field so more power consuming cards can power themselves up
|
// Enable field so more power consuming cards can power themselves up
|
||||||
if (!nfc_configure (pnd, NDO_ACTIVATE_FIELD, true)) {
|
if (!nfc_configure (pnd, NDO_ACTIVATE_FIELD, true)) {
|
||||||
|
|
|
@ -162,6 +162,8 @@ typedef enum {
|
||||||
NDO_AUTO_ISO14443_4 = 0x40,
|
NDO_AUTO_ISO14443_4 = 0x40,
|
||||||
/** Use automatic frames encapsulation and chaining. */
|
/** Use automatic frames encapsulation and chaining. */
|
||||||
NDO_EASY_FRAMING = 0x41,
|
NDO_EASY_FRAMING = 0x41,
|
||||||
|
/** Force the chip to switch in ISO14443-A */
|
||||||
|
NDO_FORCE_ISO14443_A = 0x42,
|
||||||
} nfc_device_option_t;
|
} nfc_device_option_t;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -708,12 +708,26 @@ pn53x_configure (nfc_device_t * pnd, const nfc_device_option_t ndo, const bool b
|
||||||
case NDO_AUTO_ISO14443_4:
|
case NDO_AUTO_ISO14443_4:
|
||||||
// TODO: PN53x parameters could not be read, so we have to buffered current value in order to prevent from configuration overwrite
|
// TODO: PN53x parameters could not be read, so we have to buffered current value in order to prevent from configuration overwrite
|
||||||
// ATM, buffered current value is not needed due to a single usage of these parameters
|
// ATM, buffered current value is not needed due to a single usage of these parameters
|
||||||
btValue =
|
btValue = (bEnable) ? (SYMBOL_PARAM_fAutomaticRATS | SYMBOL_PARAM_fAutomaticATR_RES) : SYMBOL_PARAM_fAutomaticATR_RES;
|
||||||
(bEnable) ? (SYMBOL_PARAM_fAutomaticRATS | SYMBOL_PARAM_fAutomaticATR_RES) : SYMBOL_PARAM_fAutomaticATR_RES;
|
|
||||||
if (!pn53x_set_parameters (pnd, btValue))
|
if (!pn53x_set_parameters (pnd, btValue))
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NDO_FORCE_ISO14443_A:
|
||||||
|
if(!bEnable) {
|
||||||
|
// Nothing to do
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// Force pn53x to be in ISO1444-A mode
|
||||||
|
if (!pn53x_set_reg (pnd, REG_CIU_TX_MODE, SYMBOL_TX_FRAMING, 0x00)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!pn53x_set_reg (pnd, REG_CIU_RX_MODE, SYMBOL_RX_FRAMING, 0x00)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// When we reach this, the configuration is completed and succesful
|
// When we reach this, the configuration is completed and succesful
|
||||||
|
|
|
@ -32,21 +32,35 @@
|
||||||
// Registers and symbols masks used to covers parts within a register
|
// Registers and symbols masks used to covers parts within a register
|
||||||
# define REG_CIU_TX_MODE 0x6302
|
# define REG_CIU_TX_MODE 0x6302
|
||||||
# define SYMBOL_TX_CRC_ENABLE 0x80
|
# define SYMBOL_TX_CRC_ENABLE 0x80
|
||||||
|
// TX_FRAMING bits explanation:
|
||||||
|
// 00 : ISO/IEC 14443A/MIFARE and Passive Communication mode 106 kbit/s
|
||||||
|
// 01 : Active Communication mode
|
||||||
|
// 10 : FeliCa and Passive Communication mode at 212 kbit/s and 424 kbit/s
|
||||||
|
// 11 : ISO/IEC 14443B
|
||||||
|
# define SYMBOL_TX_FRAMING 0x03
|
||||||
|
|
||||||
# define REG_CIU_RX_MODE 0x6303
|
# define REG_CIU_RX_MODE 0x6303
|
||||||
# define SYMBOL_RX_CRC_ENABLE 0x80
|
# define SYMBOL_RX_CRC_ENABLE 0x80
|
||||||
# define SYMBOL_RX_NO_ERROR 0x08
|
# define SYMBOL_RX_NO_ERROR 0x08
|
||||||
# define SYMBOL_RX_MULTIPLE 0x04
|
# define SYMBOL_RX_MULTIPLE 0x04
|
||||||
|
// RX_FRAMING follow same scheme than TX_FRAMING
|
||||||
|
# define SYMBOL_RX_FRAMING 0x03
|
||||||
|
|
||||||
# define REG_CIU_TX_AUTO 0x6305
|
# define REG_CIU_TX_AUTO 0x6305
|
||||||
# define SYMBOL_FORCE_100_ASK 0x40
|
# define SYMBOL_FORCE_100_ASK 0x40
|
||||||
# define SYMBOL_AUTO_WAKE_UP 0x20
|
# define SYMBOL_AUTO_WAKE_UP 0x20
|
||||||
# define SYMBOL_INITIAL_RF_ON 0x04
|
# define SYMBOL_INITIAL_RF_ON 0x04
|
||||||
|
|
||||||
# define REG_CIU_MANUAL_RCV 0x630D
|
# define REG_CIU_MANUAL_RCV 0x630D
|
||||||
# define SYMBOL_PARITY_DISABLE 0x10
|
# define SYMBOL_PARITY_DISABLE 0x10
|
||||||
|
|
||||||
# define REG_CIU_STATUS2 0x6338
|
# define REG_CIU_STATUS2 0x6338
|
||||||
# define SYMBOL_MF_CRYPTO1_ON 0x08
|
# define SYMBOL_MF_CRYPTO1_ON 0x08
|
||||||
|
|
||||||
# define REG_CIU_CONTROL 0x633C
|
# define REG_CIU_CONTROL 0x633C
|
||||||
# define SYMBOL_INITIATOR 0x10
|
# define SYMBOL_INITIATOR 0x10
|
||||||
# define SYMBOL_RX_LAST_BITS 0x07
|
# define SYMBOL_RX_LAST_BITS 0x07
|
||||||
|
|
||||||
# define REG_CIU_BIT_FRAMING 0x633D
|
# define REG_CIU_BIT_FRAMING 0x633D
|
||||||
# define SYMBOL_TX_LAST_BITS 0x07
|
# define SYMBOL_TX_LAST_BITS 0x07
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue