|
|
@@ -0,0 +1,133 @@
|
|
|
+#include "../uhf_app_i.h"
|
|
|
+#include <dolphin/dolphin.h>
|
|
|
+
|
|
|
+typedef enum { EPC_INFO, TID_INFO, USER_INFO } UHFTagInfo;
|
|
|
+
|
|
|
+static UHFTagInfo current_info;
|
|
|
+
|
|
|
+char* get_current_bank_info_str() {
|
|
|
+ switch(current_info) {
|
|
|
+ case EPC_INFO:
|
|
|
+ return "EPC Bank";
|
|
|
+ case TID_INFO:
|
|
|
+ return "TID Bank";
|
|
|
+ case USER_INFO:
|
|
|
+ return "User Bank";
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+}
|
|
|
+
|
|
|
+char* get_next_bank_info_str() {
|
|
|
+ switch(current_info) {
|
|
|
+ case EPC_INFO:
|
|
|
+ current_info = TID_INFO;
|
|
|
+ return "TID";
|
|
|
+ case TID_INFO:
|
|
|
+ current_info = USER_INFO;
|
|
|
+ return "USER";
|
|
|
+ case USER_INFO:
|
|
|
+ current_info = EPC_INFO;
|
|
|
+ return "EPC";
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+}
|
|
|
+
|
|
|
+void uhf_scene_device_info_widget_callback(GuiButtonType result, InputType type, void* context) {
|
|
|
+ UHFApp* uhf_app = context;
|
|
|
+ if(type == InputTypeShort) {
|
|
|
+ view_dispatcher_send_custom_event(uhf_app->view_dispatcher, result);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void change_view_on_event(UHFApp* uhf_app) {
|
|
|
+ UHFTag* uhf_tag = uhf_app->uhf_device->uhf_tag;
|
|
|
+ FuriString* furi_temp_str;
|
|
|
+ furi_temp_str = furi_string_alloc();
|
|
|
+ char* temp_str;
|
|
|
+ size_t length;
|
|
|
+
|
|
|
+ widget_reset(uhf_app->widget);
|
|
|
+ widget_add_string_element(
|
|
|
+ uhf_app->widget, 64, 5, AlignCenter, AlignCenter, FontPrimary, get_current_bank_info_str());
|
|
|
+
|
|
|
+ switch(current_info) {
|
|
|
+ case EPC_INFO:
|
|
|
+ temp_str = convertToHexString(uhf_tag->epc, uhf_tag->epc_length);
|
|
|
+ length = uhf_tag->epc_length;
|
|
|
+ break;
|
|
|
+ case TID_INFO:
|
|
|
+ temp_str = convertToHexString(uhf_tag->tid, uhf_tag->tid_length);
|
|
|
+ length = uhf_tag->tid_length;
|
|
|
+ break;
|
|
|
+ case USER_INFO:
|
|
|
+ temp_str = convertToHexString(uhf_tag->user, uhf_tag->user_length);
|
|
|
+ length = uhf_tag->user_length;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ temp_str = NULL;
|
|
|
+ length = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ furi_string_cat_printf(furi_temp_str, "Length: %d bytes", length);
|
|
|
+
|
|
|
+ widget_add_string_element(
|
|
|
+ uhf_app->widget,
|
|
|
+ 3,
|
|
|
+ 12,
|
|
|
+ AlignLeft,
|
|
|
+ AlignTop,
|
|
|
+ FontKeyboard,
|
|
|
+ furi_string_get_cstr(furi_temp_str));
|
|
|
+
|
|
|
+ widget_add_string_multiline_element(
|
|
|
+ uhf_app->widget, 3, 24, AlignLeft, AlignTop, FontBatteryPercent, temp_str);
|
|
|
+
|
|
|
+ widget_add_button_element(
|
|
|
+ uhf_app->widget,
|
|
|
+ GuiButtonTypeRight,
|
|
|
+ get_next_bank_info_str(),
|
|
|
+ uhf_scene_device_info_widget_callback,
|
|
|
+ uhf_app);
|
|
|
+
|
|
|
+ widget_add_button_element(
|
|
|
+ uhf_app->widget, GuiButtonTypeLeft, "Back", uhf_scene_device_info_widget_callback, uhf_app);
|
|
|
+
|
|
|
+ furi_string_free(furi_temp_str);
|
|
|
+ free(temp_str);
|
|
|
+}
|
|
|
+
|
|
|
+void uhf_scene_device_info_on_enter(void* context) {
|
|
|
+ UHFApp* uhf_app = context;
|
|
|
+ current_info = EPC_INFO;
|
|
|
+ dolphin_deed(DolphinDeedNfcReadSuccess);
|
|
|
+ change_view_on_event(uhf_app);
|
|
|
+ view_dispatcher_switch_to_view(uhf_app->view_dispatcher, UHFViewWidget);
|
|
|
+}
|
|
|
+
|
|
|
+bool uhf_scene_device_info_on_event(void* context, SceneManagerEvent event) {
|
|
|
+ UHFApp* uhf_app = context;
|
|
|
+ bool consumed = false;
|
|
|
+ if(event.type == SceneManagerEventTypeTick) return false;
|
|
|
+ if(event.type == SceneManagerEventTypeCustom) {
|
|
|
+ if(event.event == GuiButtonTypeLeft) {
|
|
|
+ consumed = scene_manager_previous_scene(uhf_app->scene_manager);
|
|
|
+ } else if(event.event == GuiButtonTypeRight) {
|
|
|
+ change_view_on_event(uhf_app);
|
|
|
+ } else if(event.event == UHFCustomEventViewExit) {
|
|
|
+ view_dispatcher_switch_to_view(uhf_app->view_dispatcher, UHFViewWidget);
|
|
|
+ consumed = true;
|
|
|
+ }
|
|
|
+ } else if(event.type == SceneManagerEventTypeBack) {
|
|
|
+ scene_manager_previous_scene(uhf_app->scene_manager);
|
|
|
+ consumed = true;
|
|
|
+ }
|
|
|
+ return consumed;
|
|
|
+}
|
|
|
+
|
|
|
+void uhf_scene_device_info_on_exit(void* context) {
|
|
|
+ UHFApp* uhf_app = context;
|
|
|
+
|
|
|
+ // Clear views
|
|
|
+ widget_reset(uhf_app->widget);
|
|
|
+}
|