mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2024-09-20 15:26:13 +08:00
Make smartcard support detection dynamic
This commit is contained in:
parent
f33d0bf206
commit
b723126deb
|
@ -441,15 +441,20 @@ void SendCapabilities(void) {
|
|||
|
||||
#ifdef WITH_FLASH
|
||||
capabilities.compiled_with_flash = true;
|
||||
// TODO
|
||||
capabilities.hw_available_flash = true;
|
||||
#else
|
||||
capabilities.compiled_with_flash = false;
|
||||
capabilities.hw_available_flash = false;
|
||||
#endif
|
||||
#ifdef WITH_SMARTCARD
|
||||
capabilities.compiled_with_smartcard = true;
|
||||
uint8_t maj, min;
|
||||
capabilities.hw_available_smartcard = I2C_get_version(&maj, &min) == PM3_SUCCESS;
|
||||
#else
|
||||
capabilities.compiled_with_smartcard = false;
|
||||
capabilities.hw_available_smartcard = false;
|
||||
#endif
|
||||
|
||||
#ifdef WITH_FPC
|
||||
capabilities.compiled_with_fpc = true;
|
||||
#else
|
||||
|
@ -457,8 +462,11 @@ void SendCapabilities(void) {
|
|||
#endif
|
||||
#ifdef WITH_FPC_HOST
|
||||
capabilities.compiled_with_fpc_host = true;
|
||||
// TODO
|
||||
capabilities.hw_available_fpc_host = true;
|
||||
#else
|
||||
capabilities.compiled_with_fpc_host = false;
|
||||
capabilities.hw_available_fpc_host = false;
|
||||
#endif
|
||||
#ifdef WITH_LF
|
||||
capabilities.compiled_with_lf = true;
|
||||
|
@ -510,12 +518,6 @@ void SendCapabilities(void) {
|
|||
#else
|
||||
capabilities.compiled_with_lcd = false;
|
||||
#endif
|
||||
|
||||
// TODO
|
||||
// capabilities.hw_available_flash
|
||||
// capabilities.hw_available_smartcard
|
||||
// capabilities.hw_available_fpc_host
|
||||
|
||||
reply_ng(CMD_CAPABILITIES, PM3_SUCCESS, (uint8_t *)&capabilities, sizeof(capabilities));
|
||||
}
|
||||
|
||||
|
|
|
@ -30,17 +30,17 @@ bool IfPm3Present(void) {
|
|||
bool IfPm3Flash(void) {
|
||||
if (!IfPm3Present())
|
||||
return false;
|
||||
// TODO
|
||||
// capabilities.hw_available_flash
|
||||
return pm3_capabilities.compiled_with_flash;
|
||||
if (!pm3_capabilities.compiled_with_flash)
|
||||
return false;
|
||||
return pm3_capabilities.hw_available_flash;
|
||||
}
|
||||
|
||||
bool IfPm3Smartcard(void) {
|
||||
if (!IfPm3Present())
|
||||
return false;
|
||||
// TODO
|
||||
// capabilities.hw_available_smartcard
|
||||
return pm3_capabilities.compiled_with_smartcard;
|
||||
if (!pm3_capabilities.compiled_with_smartcard)
|
||||
return false;
|
||||
return pm3_capabilities.hw_available_smartcard;
|
||||
}
|
||||
|
||||
bool IfPm3Fpc(void) {
|
||||
|
@ -52,9 +52,9 @@ bool IfPm3Fpc(void) {
|
|||
bool IfPm3FpcHost(void) {
|
||||
if (!IfPm3Present())
|
||||
return false;
|
||||
// TODO
|
||||
// capabilities.hw_available_fpc_host
|
||||
return pm3_capabilities.compiled_with_fpc_host;
|
||||
if (!pm3_capabilities.compiled_with_fpc_host)
|
||||
return false;
|
||||
return pm3_capabilities.hw_available_fpc_host;
|
||||
}
|
||||
|
||||
bool IfPm3Lf(void) {
|
||||
|
|
20
common/i2c.c
20
common/i2c.c
|
@ -594,13 +594,25 @@ bool I2C_WriteFW(uint8_t *data, uint8_t len, uint8_t msb, uint8_t lsb, uint8_t d
|
|||
|
||||
void I2C_print_status(void) {
|
||||
DbpString(_BLUE_("Smart card module (ISO 7816)"));
|
||||
uint8_t maj, min;
|
||||
if (I2C_get_version(&maj, &min) == PM3_SUCCESS)
|
||||
Dbprintf(" version.................v%x.%02d", maj, min);
|
||||
else
|
||||
DbpString(" version................." _RED_("FAILED"));
|
||||
}
|
||||
|
||||
int I2C_get_version(uint8_t *maj, uint8_t *min) {
|
||||
uint8_t resp[] = {0, 0, 0, 0};
|
||||
I2C_Reset_EnterMainProgram();
|
||||
uint8_t len = I2C_BufferRead(resp, sizeof(resp), I2C_DEVICE_CMD_GETVERSION, I2C_DEVICE_ADDRESS_MAIN);
|
||||
if (len > 0)
|
||||
Dbprintf(" version.................v%x.%02d", resp[0], resp[1]);
|
||||
else
|
||||
DbpString(" version................." _RED_("FAILED"));
|
||||
if (len > 0) {
|
||||
Dbprintf(" version.................v%x.%02d", maj, min);
|
||||
*maj = resp[0];
|
||||
*min = resp[1];
|
||||
return PM3_SUCCESS;
|
||||
} else {
|
||||
return PM3_EDEVNOTSUPP;
|
||||
}
|
||||
}
|
||||
|
||||
// Will read response from smart card module, retries 3 times to get the data.
|
||||
|
|
|
@ -47,4 +47,5 @@ void SmartCardUpgrade(uint64_t arg0);
|
|||
void SmartCardSetBaud(uint64_t arg0);
|
||||
void SmartCardSetClock(uint64_t arg0);
|
||||
void I2C_print_status(void);
|
||||
int I2C_get_version(uint8_t *maj, uint8_t *min);
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue