mifare_nested_scene_check_keys.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #include "../mifare_nested_i.h"
  2. void mifare_nested_scene_check_keys_widget_callback(
  3. GuiButtonType result,
  4. InputType type,
  5. void* context) {
  6. MifareNested* mifare_nested = context;
  7. if(type == InputTypeShort) {
  8. view_dispatcher_send_custom_event(mifare_nested->view_dispatcher, result);
  9. }
  10. }
  11. bool mifare_nested_check_keys_worker_callback(MifareNestedWorkerEvent event, void* context) {
  12. MifareNested* mifare_nested = context;
  13. CheckKeysState* plugin_state = mifare_nested->keys_state;
  14. if(event == MifareNestedWorkerEventKeyChecked) {
  15. mifare_nested_blink_nonce_collection_start(mifare_nested);
  16. KeyInfo_t* key_info = mifare_nested->keys;
  17. with_view_model(
  18. plugin_state->view,
  19. CheckKeysViewModel * model,
  20. {
  21. model->lost_tag = false;
  22. model->keys_checked = key_info->checked_keys;
  23. model->keys_found = key_info->found_keys;
  24. model->keys_total = key_info->sector_keys;
  25. model->keys_count = key_info->total_keys;
  26. },
  27. true);
  28. } else if(event == MifareNestedWorkerEventNoTagDetected) {
  29. mifare_nested_blink_start(mifare_nested);
  30. with_view_model(
  31. plugin_state->view, CheckKeysViewModel * model, { model->lost_tag = true; }, true);
  32. } else if(event == MifareNestedWorkerEventProcessingKeys) {
  33. with_view_model(
  34. plugin_state->view,
  35. CheckKeysViewModel * model,
  36. { model->processing_keys = true; },
  37. true);
  38. }
  39. view_dispatcher_send_custom_event(mifare_nested->view_dispatcher, event);
  40. return true;
  41. }
  42. void mifare_nested_scene_check_keys_on_enter(void* context) {
  43. MifareNested* mifare_nested = context;
  44. CheckKeysState* plugin_state = mifare_nested->keys_state;
  45. mifare_nested_worker_start(
  46. mifare_nested->worker,
  47. MifareNestedWorkerStateValidating,
  48. &mifare_nested->nfc_dev->dev_data,
  49. mifare_nested_check_keys_worker_callback,
  50. mifare_nested);
  51. mifare_nested_blink_start(mifare_nested);
  52. with_view_model(
  53. plugin_state->view,
  54. CheckKeysViewModel * model,
  55. {
  56. model->lost_tag = false;
  57. model->processing_keys = false;
  58. model->keys_count = 0;
  59. model->keys_checked = 0;
  60. model->keys_found = 0;
  61. },
  62. false);
  63. view_dispatcher_switch_to_view(mifare_nested->view_dispatcher, MifareNestedViewCheckKeys);
  64. }
  65. bool mifare_nested_scene_check_keys_on_event(void* context, SceneManagerEvent event) {
  66. MifareNested* mifare_nested = context;
  67. bool consumed = false;
  68. if(event.type == SceneManagerEventTypeCustom) {
  69. if(event.event == GuiButtonTypeCenter) {
  70. scene_manager_search_and_switch_to_previous_scene(mifare_nested->scene_manager, 0);
  71. consumed = true;
  72. } else if(event.event == MifareNestedWorkerEventKeysFound) {
  73. scene_manager_next_scene(mifare_nested->scene_manager, MifareNestedSceneAddedKeys);
  74. consumed = true;
  75. } else if(event.event == MifareNestedWorkerEventNeedKeyRecovery) {
  76. scene_manager_next_scene(
  77. mifare_nested->scene_manager, MifareNestedSceneNeedKeyRecovery);
  78. consumed = true;
  79. } else if(event.event == MifareNestedWorkerEventNeedCollection) {
  80. scene_manager_next_scene(
  81. mifare_nested->scene_manager, MifareNestedSceneNeedCollection);
  82. consumed = true;
  83. } else if(
  84. event.event == MifareNestedWorkerEventKeyChecked ||
  85. event.event == MifareNestedWorkerEventNoTagDetected ||
  86. event.event == MifareNestedWorkerEventProcessingKeys) {
  87. consumed = true;
  88. }
  89. }
  90. return consumed;
  91. }
  92. void mifare_nested_scene_check_keys_on_exit(void* context) {
  93. MifareNested* mifare_nested = context;
  94. mifare_nested_worker_stop(mifare_nested->worker);
  95. // Clear view
  96. mifare_nested_blink_stop(mifare_nested);
  97. popup_reset(mifare_nested->popup);
  98. widget_reset(mifare_nested->widget);
  99. }