[FL-663] Read EMV cards (#460)
* nfc: add emv decoder * api-hal-nfc: add data exchange api * nfc_worker: add read emv routine * nfc: add emv reader view * nfc: add support for Mastercard reading * api-hal-nfc: fix incorrect merge changes * nfc_worker: set to zero emv app object on each cycle * api-hal-nfc: add api for f6 target * nfc: move emv_decoder to lib folder Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
@@ -40,7 +40,7 @@ static void api_hal_nfc_change_state_cb(rfalNfcState st) {
|
||||
}
|
||||
}
|
||||
|
||||
bool api_hal_nfc_detect(rfalNfcDevice **dev_list, uint8_t* dev_cnt, uint32_t cycles) {
|
||||
bool api_hal_nfc_detect(rfalNfcDevice **dev_list, uint8_t* dev_cnt, uint32_t cycles, bool deactivate) {
|
||||
furi_assert(dev_list);
|
||||
furi_assert(dev_cnt);
|
||||
|
||||
@@ -74,8 +74,10 @@ bool api_hal_nfc_detect(rfalNfcDevice **dev_list, uint8_t* dev_cnt, uint32_t cyc
|
||||
}
|
||||
osDelay(5);
|
||||
}
|
||||
rfalNfcDeactivate(false);
|
||||
rfalLowPowerModeStart();
|
||||
if(deactivate) {
|
||||
rfalNfcDeactivate(false);
|
||||
rfalLowPowerModeStart();
|
||||
}
|
||||
if(!cycles) {
|
||||
FURI_LOG_D("HAL NFC", "Timeout");
|
||||
return false;
|
||||
@@ -83,3 +85,44 @@ bool api_hal_nfc_detect(rfalNfcDevice **dev_list, uint8_t* dev_cnt, uint32_t cyc
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
ReturnCode api_hal_nfc_data_exchange(rfalNfcDevice* dev, uint8_t* tx_buff, uint16_t tx_len, uint8_t** rx_buff, uint16_t** rx_len, bool deactivate) {
|
||||
furi_assert(dev);
|
||||
furi_assert(tx_buff);
|
||||
furi_assert(rx_buff);
|
||||
furi_assert(rx_len);
|
||||
|
||||
ReturnCode ret;
|
||||
rfalNfcDevice* active_dev;
|
||||
rfalNfcState state = RFAL_NFC_STATE_ACTIVATED;
|
||||
|
||||
ret = rfalNfcGetActiveDevice(&active_dev);
|
||||
if(ret != ERR_NONE) {
|
||||
return ret;
|
||||
}
|
||||
if (active_dev != dev) {
|
||||
return ERR_NOTFOUND;
|
||||
}
|
||||
ret = rfalNfcDataExchangeStart(tx_buff, tx_len, rx_buff, rx_len, 0);
|
||||
if(ret != ERR_NONE) {
|
||||
return ret;
|
||||
}
|
||||
FURI_LOG_D("HAL NFC", "Start data exchange");
|
||||
while(state != RFAL_NFC_STATE_DATAEXCHANGE_DONE) {
|
||||
rfalNfcWorker();
|
||||
state = rfalNfcGetState();
|
||||
FURI_LOG_D("HAL NFC", "Data exchange status: %d", rfalNfcDataExchangeGetStatus());
|
||||
osDelay(10);
|
||||
}
|
||||
FURI_LOG_D("HAL NFC", "Data exchange complete");
|
||||
if(deactivate) {
|
||||
rfalNfcDeactivate(false);
|
||||
rfalLowPowerModeStart();
|
||||
}
|
||||
return ERR_NONE;
|
||||
}
|
||||
|
||||
void api_hal_nfc_deactivate() {
|
||||
rfalNfcDeactivate(false);
|
||||
rfalLowPowerModeStart();
|
||||
}
|
||||
|
Reference in New Issue
Block a user