Make smartcard support detection dynamic

This commit is contained in:
Philippe Teuwen 2019-05-03 09:04:28 +02:00
parent f33d0bf206
commit b723126deb
4 changed files with 35 additions and 20 deletions

View file

@ -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));
}

View file

@ -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) {

View file

@ -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.

View file

@ -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