[FL-2182] NFC-V UID show fix (#955)
* nfc: rework static inline functions * nfc: show uid for NFC-B,F,V
This commit is contained in:
		
							parent
							
								
									a0c16e8a19
								
							
						
					
					
						commit
						407f68c08a
					
				
							
								
								
									
										75
									
								
								applications/nfc/nfc_types.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								applications/nfc/nfc_types.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,75 @@ | ||||
| #include "nfc_types.h" | ||||
| 
 | ||||
| const char* nfc_get_rfal_type(rfalNfcDevType type) { | ||||
|     if(type == RFAL_NFC_LISTEN_TYPE_NFCA) { | ||||
|         return "NFC-A"; | ||||
|     } else if(type == RFAL_NFC_LISTEN_TYPE_NFCB) { | ||||
|         return "NFC-B"; | ||||
|     } else if(type == RFAL_NFC_LISTEN_TYPE_NFCF) { | ||||
|         return "NFC-F"; | ||||
|     } else if(type == RFAL_NFC_LISTEN_TYPE_NFCV) { | ||||
|         return "NFC-V"; | ||||
|     } else if(type == RFAL_NFC_LISTEN_TYPE_ST25TB) { | ||||
|         return "NFC-ST25TB"; | ||||
|     } else if(type == RFAL_NFC_LISTEN_TYPE_AP2P) { | ||||
|         return "NFC-AP2P"; | ||||
|     } else { | ||||
|         return "Unknown"; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| const char* nfc_get_dev_type(NfcDeviceType type) { | ||||
|     if(type == NfcDeviceNfca) { | ||||
|         return "NFC-A"; | ||||
|     } else if(type == NfcDeviceNfcb) { | ||||
|         return "NFC-B"; | ||||
|     } else if(type == NfcDeviceNfcf) { | ||||
|         return "NFC-F"; | ||||
|     } else if(type == NfcDeviceNfcv) { | ||||
|         return "NFC-V"; | ||||
|     } else { | ||||
|         return "Unknown"; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| const char* nfc_get_nfca_type(rfalNfcaListenDeviceType type) { | ||||
|     if(type == RFAL_NFCA_T1T) { | ||||
|         return "T1T"; | ||||
|     } else if(type == RFAL_NFCA_T2T) { | ||||
|         return "T2T"; | ||||
|     } else if(type == RFAL_NFCA_T4T) { | ||||
|         return "T4T"; | ||||
|     } else if(type == RFAL_NFCA_NFCDEP) { | ||||
|         return "NFCDEP"; | ||||
|     } else if(type == RFAL_NFCA_T4T_NFCDEP) { | ||||
|         return "T4T_NFCDEP"; | ||||
|     } else { | ||||
|         return "Unknown"; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| const char* nfc_guess_protocol(NfcProtocol protocol) { | ||||
|     if(protocol == NfcDeviceProtocolEMV) { | ||||
|         return "EMV bank card"; | ||||
|     } else if(protocol == NfcDeviceProtocolMifareUl) { | ||||
|         return "Mifare Ultral/NTAG"; | ||||
|     } else { | ||||
|         return "Unrecognized"; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| const char* nfc_mf_ul_type(MfUltralightType type, bool full_name) { | ||||
|     if(type == MfUltralightTypeNTAG213) { | ||||
|         return "NTAG213"; | ||||
|     } else if(type == MfUltralightTypeNTAG215) { | ||||
|         return "NTAG215"; | ||||
|     } else if(type == MfUltralightTypeNTAG216) { | ||||
|         return "NTAG216"; | ||||
|     } else if(type == MfUltralightTypeUL11 && full_name) { | ||||
|         return "Mifare Ultralight 11"; | ||||
|     } else if(type == MfUltralightTypeUL21 && full_name) { | ||||
|         return "Mifare Ultralight 21"; | ||||
|     } else { | ||||
|         return "Mifare Ultralight"; | ||||
|     } | ||||
| } | ||||
| @ -6,76 +6,12 @@ | ||||
| #include <gui/view_dispatcher.h> | ||||
| #include "nfc_worker.h" | ||||
| 
 | ||||
| static inline const char* nfc_get_rfal_type(rfalNfcDevType type) { | ||||
|     if(type == RFAL_NFC_LISTEN_TYPE_NFCA) { | ||||
|         return "NFC-A"; | ||||
|     } else if(type == RFAL_NFC_LISTEN_TYPE_NFCB) { | ||||
|         return "NFC-B"; | ||||
|     } else if(type == RFAL_NFC_LISTEN_TYPE_NFCF) { | ||||
|         return "NFC-F"; | ||||
|     } else if(type == RFAL_NFC_LISTEN_TYPE_NFCV) { | ||||
|         return "NFC-V"; | ||||
|     } else if(type == RFAL_NFC_LISTEN_TYPE_ST25TB) { | ||||
|         return "NFC-ST25TB"; | ||||
|     } else if(type == RFAL_NFC_LISTEN_TYPE_AP2P) { | ||||
|         return "NFC-AP2P"; | ||||
|     } else { | ||||
|         return "Unknown"; | ||||
|     } | ||||
| } | ||||
| const char* nfc_get_rfal_type(rfalNfcDevType type); | ||||
| 
 | ||||
| static inline const char* nfc_get_dev_type(NfcDeviceType type) { | ||||
|     if(type == NfcDeviceNfca) { | ||||
|         return "NFC-A may be:"; | ||||
|     } else if(type == NfcDeviceNfcb) { | ||||
|         return "NFC-B may be:"; | ||||
|     } else if(type == NfcDeviceNfcf) { | ||||
|         return "NFC-F may be:"; | ||||
|     } else if(type == NfcDeviceNfcv) { | ||||
|         return "NFC-V may be:"; | ||||
|     } else { | ||||
|         return "Unknown"; | ||||
|     } | ||||
| } | ||||
| const char* nfc_get_dev_type(NfcDeviceType type); | ||||
| 
 | ||||
| static inline const char* nfc_get_nfca_type(rfalNfcaListenDeviceType type) { | ||||
|     if(type == RFAL_NFCA_T1T) { | ||||
|         return "T1T"; | ||||
|     } else if(type == RFAL_NFCA_T2T) { | ||||
|         return "T2T"; | ||||
|     } else if(type == RFAL_NFCA_T4T) { | ||||
|         return "T4T"; | ||||
|     } else if(type == RFAL_NFCA_NFCDEP) { | ||||
|         return "NFCDEP"; | ||||
|     } else if(type == RFAL_NFCA_T4T_NFCDEP) { | ||||
|         return "T4T_NFCDEP"; | ||||
|     } else { | ||||
|         return "Unknown"; | ||||
|     } | ||||
| } | ||||
| const char* nfc_get_nfca_type(rfalNfcaListenDeviceType type); | ||||
| 
 | ||||
| static inline const char* nfc_guess_protocol(NfcProtocol protocol) { | ||||
|     if(protocol == NfcDeviceProtocolEMV) { | ||||
|         return "EMV bank card"; | ||||
|     } else if(protocol == NfcDeviceProtocolMifareUl) { | ||||
|         return "Mifare Ultral/NTAG"; | ||||
|     } else { | ||||
|         return "Unrecognized"; | ||||
|     } | ||||
| } | ||||
| const char* nfc_guess_protocol(NfcProtocol protocol); | ||||
| 
 | ||||
| static inline const char* nfc_mf_ul_type(MfUltralightType type, bool full_name) { | ||||
|     if(type == MfUltralightTypeNTAG213) { | ||||
|         return "NTAG213"; | ||||
|     } else if(type == MfUltralightTypeNTAG215) { | ||||
|         return "NTAG215"; | ||||
|     } else if(type == MfUltralightTypeNTAG216) { | ||||
|         return "NTAG216"; | ||||
|     } else if(type == MfUltralightTypeUL11 && full_name) { | ||||
|         return "Mifare Ultralight 11"; | ||||
|     } else if(type == MfUltralightTypeUL21 && full_name) { | ||||
|         return "Mifare Ultralight 21"; | ||||
|     } else { | ||||
|         return "Mifare Ultralight"; | ||||
|     } | ||||
| } | ||||
| const char* nfc_mf_ul_type(MfUltralightType type, bool full_name); | ||||
|  | ||||
| @ -1,90 +1,87 @@ | ||||
| #include "../nfc_i.h" | ||||
| 
 | ||||
| #define NFC_SCENE_READ_SUCCESS_SHIFT "              " | ||||
| 
 | ||||
| void nfc_scene_read_card_success_dialog_callback(DialogExResult result, void* context) { | ||||
|     Nfc* nfc = (Nfc*)context; | ||||
| 
 | ||||
|     view_dispatcher_send_custom_event(nfc->view_dispatcher, result); | ||||
| void nfc_scene_read_card_success_widget_callback( | ||||
|     GuiButtonType result, | ||||
|     InputType type, | ||||
|     void* context) { | ||||
|     furi_assert(context); | ||||
|     Nfc* nfc = context; | ||||
|     if(type == InputTypeShort) { | ||||
|         view_dispatcher_send_custom_event(nfc->view_dispatcher, result); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void nfc_scene_read_card_success_on_enter(void* context) { | ||||
|     Nfc* nfc = (Nfc*)context; | ||||
|     string_t data_str; | ||||
|     string_t uid_str; | ||||
|     string_init(data_str); | ||||
|     string_init(uid_str); | ||||
| 
 | ||||
|     // Send notification
 | ||||
|     notification_message(nfc->notifications, &sequence_success); | ||||
| 
 | ||||
|     // Setup view
 | ||||
|     NfcDeviceCommonData* data = &nfc->dev->dev_data.nfc_data; | ||||
|     DialogEx* dialog_ex = nfc->dialog_ex; | ||||
|     dialog_ex_set_left_button_text(dialog_ex, "Retry"); | ||||
|     dialog_ex_set_right_button_text(dialog_ex, "More"); | ||||
|     dialog_ex_set_header(dialog_ex, nfc_get_dev_type(data->device), 36, 8, AlignLeft, AlignCenter); | ||||
|     dialog_ex_set_icon(dialog_ex, 8, 13, &I_Medium_chip_22x21); | ||||
|     // Display UID
 | ||||
|     if(data->uid_len == 4) { | ||||
|         nfc_text_store_set( | ||||
|             nfc, | ||||
|             NFC_SCENE_READ_SUCCESS_SHIFT "%s\n" NFC_SCENE_READ_SUCCESS_SHIFT | ||||
|                                          "ATQA: %02X%02X SAK: %02X\nUID: %02X %02X %02X %02X", | ||||
|             nfc_guess_protocol(data->protocol), | ||||
|             data->atqa[0], | ||||
|             data->atqa[1], | ||||
|             data->sak, | ||||
|             data->uid[0], | ||||
|             data->uid[1], | ||||
|             data->uid[2], | ||||
|             data->uid[3]); | ||||
|     } else if(data->uid_len == 7) { | ||||
|         nfc_text_store_set( | ||||
|             nfc, | ||||
|             NFC_SCENE_READ_SUCCESS_SHIFT | ||||
|             "%s\n" NFC_SCENE_READ_SUCCESS_SHIFT | ||||
|             "ATQA: %02X%02X SAK: %02X\nUID: %02X %02X %02X %02X %02X %02X %02X", | ||||
|             nfc_guess_protocol(data->protocol), | ||||
|             data->atqa[0], | ||||
|             data->atqa[1], | ||||
|             data->sak, | ||||
|             data->uid[0], | ||||
|             data->uid[1], | ||||
|             data->uid[2], | ||||
|             data->uid[3], | ||||
|             data->uid[4], | ||||
|             data->uid[5], | ||||
|             data->uid[6]); | ||||
|     Widget* widget = nfc->widget; | ||||
|     string_set_str(data_str, nfc_get_dev_type(data->device)); | ||||
|     string_set_str(uid_str, "UID:"); | ||||
|     for(uint8_t i = 0; i < data->uid_len; i++) { | ||||
|         string_cat_printf(uid_str, " %02X", data->uid[i]); | ||||
|     } | ||||
|     dialog_ex_set_text(dialog_ex, nfc->text_store, 8, 16, AlignLeft, AlignTop); | ||||
|     dialog_ex_set_context(dialog_ex, nfc); | ||||
|     dialog_ex_set_result_callback(dialog_ex, nfc_scene_read_card_success_dialog_callback); | ||||
| 
 | ||||
|     view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewDialogEx); | ||||
|     widget_add_button_element( | ||||
|         widget, GuiButtonTypeLeft, "Retry", nfc_scene_read_card_success_widget_callback, nfc); | ||||
|     if(data->device == NfcDeviceNfca) { | ||||
|         widget_add_button_element( | ||||
|             widget, GuiButtonTypeRight, "More", nfc_scene_read_card_success_widget_callback, nfc); | ||||
|         widget_add_icon_element(widget, 8, 13, &I_Medium_chip_22x21); | ||||
|         string_cat_printf(data_str, " may be:"); | ||||
|         widget_add_string_element( | ||||
|             widget, 37, 12, AlignLeft, AlignBottom, FontPrimary, string_get_cstr(data_str)); | ||||
|         string_printf( | ||||
|             data_str, | ||||
|             "%s\nATQA: %02X%02X SAK: %02X", | ||||
|             nfc_guess_protocol(data->protocol), | ||||
|             data->atqa[0], | ||||
|             data->atqa[1], | ||||
|             data->sak); | ||||
|         widget_add_string_multiline_element( | ||||
|             widget, 37, 16, AlignLeft, AlignTop, FontSecondary, string_get_cstr(data_str)); | ||||
|         widget_add_string_element( | ||||
|             widget, 64, 46, AlignCenter, AlignBottom, FontSecondary, string_get_cstr(uid_str)); | ||||
|     } else { | ||||
|         widget_add_string_element( | ||||
|             widget, 64, 12, AlignCenter, AlignBottom, FontPrimary, string_get_cstr(data_str)); | ||||
|         widget_add_string_element( | ||||
|             widget, 64, 32, AlignCenter, AlignCenter, FontSecondary, string_get_cstr(uid_str)); | ||||
|     } | ||||
| 
 | ||||
|     string_clear(data_str); | ||||
|     string_clear(uid_str); | ||||
| 
 | ||||
|     view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewWidget); | ||||
| } | ||||
| 
 | ||||
| bool nfc_scene_read_card_success_on_event(void* context, SceneManagerEvent event) { | ||||
|     Nfc* nfc = (Nfc*)context; | ||||
|     NfcDeviceCommonData* data = &nfc->dev->dev_data.nfc_data; | ||||
|     bool consumed = false; | ||||
| 
 | ||||
|     if(event.type == SceneManagerEventTypeCustom) { | ||||
|         if(event.event == DialogExResultLeft) { | ||||
|             return scene_manager_previous_scene(nfc->scene_manager); | ||||
|         } else if(event.event == DialogExResultRight) { | ||||
|         if(event.event == GuiButtonTypeLeft) { | ||||
|             consumed = scene_manager_previous_scene(nfc->scene_manager); | ||||
|         } else if(data->device == NfcDeviceNfca && event.event == GuiButtonTypeRight) { | ||||
|             // Clear device name
 | ||||
|             nfc_device_set_name(nfc->dev, ""); | ||||
|             scene_manager_next_scene(nfc->scene_manager, NfcSceneCardMenu); | ||||
|             return true; | ||||
|             consumed = true; | ||||
|         } | ||||
|     } | ||||
|     return false; | ||||
|     return consumed; | ||||
| } | ||||
| 
 | ||||
| void nfc_scene_read_card_success_on_exit(void* context) { | ||||
|     Nfc* nfc = (Nfc*)context; | ||||
| 
 | ||||
|     DialogEx* dialog_ex = nfc->dialog_ex; | ||||
|     dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter); | ||||
|     dialog_ex_set_text(dialog_ex, NULL, 0, 0, AlignCenter, AlignTop); | ||||
|     dialog_ex_set_icon(dialog_ex, 0, 0, NULL); | ||||
|     dialog_ex_set_left_button_text(dialog_ex, NULL); | ||||
|     dialog_ex_set_right_button_text(dialog_ex, NULL); | ||||
|     dialog_ex_set_result_callback(dialog_ex, NULL); | ||||
|     dialog_ex_set_context(dialog_ex, NULL); | ||||
|     widget_clear(nfc->widget); | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 gornekich
						gornekich