[FL-2470, FL-2385, FL-2411] NFC fixes (#1138)
* mifare classic: increase data exchange timeout * nfc: exit from app if can't parse file * furi_hal_nfc: allow to switch context during detect Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
parent
d530d164b9
commit
cea118cf2d
@ -169,11 +169,16 @@ int32_t nfc_app(void* p) {
|
|||||||
char* args = p;
|
char* args = p;
|
||||||
|
|
||||||
// Check argument and run corresponding scene
|
// Check argument and run corresponding scene
|
||||||
if((*args != '\0') && nfc_device_load(nfc->dev, p)) {
|
if((*args != '\0')) {
|
||||||
if(nfc->dev->format == NfcDeviceSaveFormatMifareUl) {
|
if(nfc_device_load(nfc->dev, p)) {
|
||||||
scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateMifareUl);
|
if(nfc->dev->format == NfcDeviceSaveFormatMifareUl) {
|
||||||
|
scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateMifareUl);
|
||||||
|
} else {
|
||||||
|
scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateUid);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateUid);
|
// Exit app
|
||||||
|
view_dispatcher_stop(nfc->view_dispatcher);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
scene_manager_next_scene(nfc->scene_manager, NfcSceneStart);
|
scene_manager_next_scene(nfc->scene_manager, NfcSceneStart);
|
||||||
|
@ -96,7 +96,7 @@ bool furi_hal_nfc_detect(FuriHalNfcDevData* nfc_data, uint32_t timeout) {
|
|||||||
FURI_LOG_T(TAG, "Timeout");
|
FURI_LOG_T(TAG, "Timeout");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
osThreadYield();
|
osDelay(1);
|
||||||
}
|
}
|
||||||
rfalNfcGetDevicesFound(&dev_list, &dev_cnt);
|
rfalNfcGetDevicesFound(&dev_list, &dev_cnt);
|
||||||
if(detected) {
|
if(detected) {
|
||||||
|
@ -118,7 +118,7 @@ static bool mf_classic_auth(
|
|||||||
tx_rx->tx_data[1] = block;
|
tx_rx->tx_data[1] = block;
|
||||||
tx_rx->tx_rx_type = FuriHalNfcTxRxTypeRxNoCrc;
|
tx_rx->tx_rx_type = FuriHalNfcTxRxTypeRxNoCrc;
|
||||||
tx_rx->tx_bits = 2 * 8;
|
tx_rx->tx_bits = 2 * 8;
|
||||||
if(!furi_hal_nfc_tx_rx(tx_rx, 4)) break;
|
if(!furi_hal_nfc_tx_rx(tx_rx, 5)) break;
|
||||||
|
|
||||||
uint32_t nt = (uint32_t)nfc_util_bytes2num(tx_rx->rx_data, 4);
|
uint32_t nt = (uint32_t)nfc_util_bytes2num(tx_rx->rx_data, 4);
|
||||||
crypto1_init(crypto, key);
|
crypto1_init(crypto, key);
|
||||||
@ -140,7 +140,7 @@ static bool mf_classic_auth(
|
|||||||
}
|
}
|
||||||
tx_rx->tx_rx_type = FuriHalNfcTxRxTypeRaw;
|
tx_rx->tx_rx_type = FuriHalNfcTxRxTypeRaw;
|
||||||
tx_rx->tx_bits = 8 * 8;
|
tx_rx->tx_bits = 8 * 8;
|
||||||
if(!furi_hal_nfc_tx_rx(tx_rx, 4)) break;
|
if(!furi_hal_nfc_tx_rx(tx_rx, 5)) break;
|
||||||
if(tx_rx->rx_bits == 32) {
|
if(tx_rx->rx_bits == 32) {
|
||||||
crypto1_word(crypto, 0, 0);
|
crypto1_word(crypto, 0, 0);
|
||||||
auth_success = true;
|
auth_success = true;
|
||||||
@ -220,7 +220,7 @@ bool mf_classic_read_block(
|
|||||||
tx_rx->tx_bits = 4 * 9;
|
tx_rx->tx_bits = 4 * 9;
|
||||||
tx_rx->tx_rx_type = FuriHalNfcTxRxTypeRaw;
|
tx_rx->tx_rx_type = FuriHalNfcTxRxTypeRaw;
|
||||||
|
|
||||||
if(furi_hal_nfc_tx_rx(tx_rx, 4)) {
|
if(furi_hal_nfc_tx_rx(tx_rx, 5)) {
|
||||||
if(tx_rx->rx_bits == 8 * 18) {
|
if(tx_rx->rx_bits == 8 * 18) {
|
||||||
for(uint8_t i = 0; i < 18; i++) {
|
for(uint8_t i = 0; i < 18; i++) {
|
||||||
block->value[i] = crypto1_byte(crypto, 0, 0) ^ tx_rx->rx_data[i];
|
block->value[i] = crypto1_byte(crypto, 0, 0) ^ tx_rx->rx_data[i];
|
||||||
|
Loading…
Reference in New Issue
Block a user