spi_mem_scene_verify.c 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "../spi_mem_app_i.h"
  2. #include "../spi_mem_files.h"
  3. #include "../lib/spi/spi_mem_chip.h"
  4. #include "../lib/spi/spi_mem_tools.h"
  5. void spi_mem_scene_verify_view_result_callback(void* context) {
  6. SPIMemApp* app = context;
  7. view_dispatcher_send_custom_event(app->view_dispatcher, SPIMemCustomEventViewVerifySkip);
  8. }
  9. static void spi_mem_scene_verify_callback(void* context, SPIMemCustomEventWorker event) {
  10. SPIMemApp* app = context;
  11. view_dispatcher_send_custom_event(app->view_dispatcher, event);
  12. }
  13. void spi_mem_scene_verify_on_enter(void* context) {
  14. SPIMemApp* app = context;
  15. spi_mem_view_progress_set_verify_callback(
  16. app->view_progress, spi_mem_scene_verify_view_result_callback, app);
  17. notification_message(app->notifications, &sequence_blink_start_cyan);
  18. spi_mem_view_progress_set_chip_size(app->view_progress, spi_mem_chip_get_size(app->chip_info));
  19. spi_mem_view_progress_set_file_size(app->view_progress, spi_mem_file_get_size(app));
  20. spi_mem_view_progress_set_block_size(
  21. app->view_progress, spi_mem_tools_get_file_max_block_size(app->chip_info));
  22. view_dispatcher_switch_to_view(app->view_dispatcher, SPIMemViewProgress);
  23. spi_mem_worker_start_thread(app->worker);
  24. spi_mem_worker_verify_start(app->chip_info, app->worker, spi_mem_scene_verify_callback, app);
  25. }
  26. bool spi_mem_scene_verify_on_event(void* context, SceneManagerEvent event) {
  27. SPIMemApp* app = context;
  28. UNUSED(app);
  29. bool success = false;
  30. if(event.type == SceneManagerEventTypeBack) {
  31. success = true;
  32. } else if(event.type == SceneManagerEventTypeCustom) {
  33. success = true;
  34. if(event.event == SPIMemCustomEventViewVerifySkip) {
  35. scene_manager_next_scene(app->scene_manager, SPIMemSceneSuccess);
  36. } else if(event.event == SPIMemCustomEventWorkerBlockReaded) {
  37. spi_mem_view_progress_inc_progress(app->view_progress);
  38. } else if(event.event == SPIMemCustomEventWorkerChipFail) {
  39. scene_manager_next_scene(app->scene_manager, SPIMemSceneChipError);
  40. } else if(event.event == SPIMemCustomEventWorkerFileFail) {
  41. scene_manager_next_scene(app->scene_manager, SPIMemSceneStorageError);
  42. } else if(event.event == SPIMemCustomEventWorkerDone) {
  43. scene_manager_next_scene(app->scene_manager, SPIMemSceneSuccess);
  44. } else if(event.event == SPIMemCustomEventWorkerVerifyFail) {
  45. scene_manager_next_scene(app->scene_manager, SPIMemSceneVerifyError);
  46. }
  47. }
  48. return success;
  49. }
  50. void spi_mem_scene_verify_on_exit(void* context) {
  51. SPIMemApp* app = context;
  52. spi_mem_worker_stop_thread(app->worker);
  53. spi_mem_view_progress_reset(app->view_progress);
  54. notification_message(app->notifications, &sequence_blink_stop);
  55. }