ibutton_scene_read_crc_error.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "ibutton_scene_read_crc_error.h"
  2. #include "../ibutton_app.h"
  3. #include "../ibutton_view_manager.h"
  4. #include "../ibutton_event.h"
  5. #include <callback-connector.h>
  6. void iButtonSceneReadCRCError::on_enter(iButtonApp* app) {
  7. iButtonAppViewManager* view_manager = app->get_view_manager();
  8. DialogEx* dialog_ex = view_manager->get_dialog_ex();
  9. auto callback = cbc::obtain_connector(this, &iButtonSceneReadCRCError::dialog_ex_callback);
  10. iButtonKey* key = app->get_key();
  11. uint8_t* key_data = key->get_data();
  12. app->set_text_store(
  13. "%02X %02X %02X %02X %02X %02X %02X %02X\nExpected CRC: %X",
  14. key_data[0],
  15. key_data[1],
  16. key_data[2],
  17. key_data[3],
  18. key_data[4],
  19. key_data[5],
  20. key_data[6],
  21. key_data[7],
  22. maxim_crc8(key_data, 7));
  23. dialog_ex_set_header(dialog_ex, "CRC ERROR", 64, 10, AlignCenter, AlignCenter);
  24. dialog_ex_set_text(dialog_ex, app->get_text_store(), 64, 19, AlignCenter, AlignTop);
  25. dialog_ex_set_left_button_text(dialog_ex, "Retry");
  26. dialog_ex_set_right_button_text(dialog_ex, "More");
  27. dialog_ex_set_result_callback(dialog_ex, callback);
  28. dialog_ex_set_context(dialog_ex, app);
  29. view_manager->switch_to(iButtonAppViewManager::Type::iButtonAppViewDialogEx);
  30. app->notify_error();
  31. app->notify_red_on();
  32. }
  33. bool iButtonSceneReadCRCError::on_event(iButtonApp* app, iButtonEvent* event) {
  34. bool consumed = false;
  35. if(event->type == iButtonEvent::Type::EventTypeDialogResult) {
  36. if(event->payload.dialog_result == DialogExResultRight) {
  37. app->switch_to_next_scene(iButtonApp::Scene::SceneReadedKeyMenu);
  38. } else {
  39. app->switch_to_previous_scene();
  40. }
  41. consumed = true;
  42. }
  43. return consumed;
  44. }
  45. void iButtonSceneReadCRCError::on_exit(iButtonApp* app) {
  46. iButtonAppViewManager* view_manager = app->get_view_manager();
  47. DialogEx* dialog_ex = view_manager->get_dialog_ex();
  48. app->set_text_store("");
  49. dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter);
  50. dialog_ex_set_text(dialog_ex, NULL, 0, 0, AlignCenter, AlignTop);
  51. dialog_ex_set_left_button_text(dialog_ex, NULL);
  52. dialog_ex_set_result_callback(dialog_ex, NULL);
  53. dialog_ex_set_context(dialog_ex, NULL);
  54. app->notify_red_off();
  55. }
  56. void iButtonSceneReadCRCError::dialog_ex_callback(DialogExResult result, void* context) {
  57. iButtonApp* app = static_cast<iButtonApp*>(context);
  58. iButtonEvent event;
  59. event.type = iButtonEvent::Type::EventTypeDialogResult;
  60. event.payload.dialog_result = result;
  61. app->get_view_manager()->send_event(&event);
  62. }