[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,12 +169,17 @@ 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_device_load(nfc->dev, p)) { | ||||||
|             if(nfc->dev->format == NfcDeviceSaveFormatMifareUl) { |             if(nfc->dev->format == NfcDeviceSaveFormatMifareUl) { | ||||||
|                 scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateMifareUl); |                 scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateMifareUl); | ||||||
|             } else { |             } else { | ||||||
|                 scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateUid); |                 scene_manager_next_scene(nfc->scene_manager, NfcSceneEmulateUid); | ||||||
|             } |             } | ||||||
|  |         } else { | ||||||
|  |             // 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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 gornekich
						gornekich