[FL-3122] Re-init NFC when starting the worker (#2399)
* Re-init NFC when starting the worker * FuriHal: cleanup nfc init/deinit sequence * FuriHal: a little bit more defensive nfc init Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
		
							parent
							
								
									738e0df4f4
								
							
						
					
					
						commit
						b15c4afea1
					
				| @ -1,5 +1,5 @@ | |||||||
| entry,status,name,type,params | entry,status,name,type,params | ||||||
| Version,+,14.0,, | Version,+,14.1,, | ||||||
| Header,+,applications/services/bt/bt_service/bt.h,, | Header,+,applications/services/bt/bt_service/bt.h,, | ||||||
| Header,+,applications/services/cli/cli.h,, | Header,+,applications/services/cli/cli.h,, | ||||||
| Header,+,applications/services/cli/cli_vcp.h,, | Header,+,applications/services/cli/cli_vcp.h,, | ||||||
| @ -1171,6 +1171,7 @@ Function,+,furi_hal_mpu_protect_disable,void,FuriHalMpuRegion | |||||||
| Function,+,furi_hal_mpu_protect_no_access,void,"FuriHalMpuRegion, uint32_t, FuriHalMPURegionSize" | Function,+,furi_hal_mpu_protect_no_access,void,"FuriHalMpuRegion, uint32_t, FuriHalMPURegionSize" | ||||||
| Function,+,furi_hal_mpu_protect_read_only,void,"FuriHalMpuRegion, uint32_t, FuriHalMPURegionSize" | Function,+,furi_hal_mpu_protect_read_only,void,"FuriHalMpuRegion, uint32_t, FuriHalMPURegionSize" | ||||||
| Function,+,furi_hal_nfc_activate_nfca,_Bool,"uint32_t, uint32_t*" | Function,+,furi_hal_nfc_activate_nfca,_Bool,"uint32_t, uint32_t*" | ||||||
|  | Function,-,furi_hal_nfc_deinit,void, | ||||||
| Function,+,furi_hal_nfc_detect,_Bool,"FuriHalNfcDevData*, uint32_t" | Function,+,furi_hal_nfc_detect,_Bool,"FuriHalNfcDevData*, uint32_t" | ||||||
| Function,+,furi_hal_nfc_emulate_nfca,_Bool,"uint8_t*, uint8_t, uint8_t*, uint8_t, FuriHalNfcEmulateCallback, void*, uint32_t" | Function,+,furi_hal_nfc_emulate_nfca,_Bool,"uint8_t*, uint8_t, uint8_t*, uint8_t, FuriHalNfcEmulateCallback, void*, uint32_t" | ||||||
| Function,+,furi_hal_nfc_exit_sleep,void, | Function,+,furi_hal_nfc_exit_sleep,void, | ||||||
|  | |||||||
| 
 | 
| @ -24,13 +24,29 @@ FuriEventFlag* event = NULL; | |||||||
| #define FURI_HAL_NFC_UID_INCOMPLETE (0x04) | #define FURI_HAL_NFC_UID_INCOMPLETE (0x04) | ||||||
| 
 | 
 | ||||||
| void furi_hal_nfc_init() { | void furi_hal_nfc_init() { | ||||||
|  |     furi_assert(!event); | ||||||
|  |     event = furi_event_flag_alloc(); | ||||||
|  | 
 | ||||||
|     ReturnCode ret = rfalNfcInitialize(); |     ReturnCode ret = rfalNfcInitialize(); | ||||||
|     if(ret == ERR_NONE) { |     if(ret == ERR_NONE) { | ||||||
|         furi_hal_nfc_start_sleep(); |         furi_hal_nfc_start_sleep(); | ||||||
|         event = furi_event_flag_alloc(); |  | ||||||
|         FURI_LOG_I(TAG, "Init OK"); |         FURI_LOG_I(TAG, "Init OK"); | ||||||
|     } else { |     } else { | ||||||
|         FURI_LOG_W(TAG, "Initialization failed, RFAL returned: %d", ret); |         FURI_LOG_W(TAG, "Init Failed, RFAL returned: %d", ret); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void furi_hal_nfc_deinit() { | ||||||
|  |     ReturnCode ret = rfalDeinitialize(); | ||||||
|  |     if(ret == ERR_NONE) { | ||||||
|  |         FURI_LOG_I(TAG, "Deinit OK"); | ||||||
|  |     } else { | ||||||
|  |         FURI_LOG_W(TAG, "Deinit Failed, RFAL returned: %d", ret); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if(event) { | ||||||
|  |         furi_event_flag_free(event); | ||||||
|  |         event = NULL; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -101,6 +101,10 @@ typedef struct { | |||||||
|  */ |  */ | ||||||
| void furi_hal_nfc_init(); | void furi_hal_nfc_init(); | ||||||
| 
 | 
 | ||||||
|  | /** Deinit nfc
 | ||||||
|  |  */ | ||||||
|  | void furi_hal_nfc_deinit(); | ||||||
|  | 
 | ||||||
| /** Check if nfc worker is busy
 | /** Check if nfc worker is busy
 | ||||||
|  * |  * | ||||||
|  * @return     true if busy |  * @return     true if busy | ||||||
|  | |||||||
| @ -56,6 +56,8 @@ void nfc_worker_start( | |||||||
|     while(furi_hal_nfc_is_busy()) { |     while(furi_hal_nfc_is_busy()) { | ||||||
|         furi_delay_ms(10); |         furi_delay_ms(10); | ||||||
|     } |     } | ||||||
|  |     furi_hal_nfc_deinit(); | ||||||
|  |     furi_hal_nfc_init(); | ||||||
| 
 | 
 | ||||||
|     nfc_worker->callback = callback; |     nfc_worker->callback = callback; | ||||||
|     nfc_worker->context = context; |     nfc_worker->context = context; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Astra
						Astra