mag_scene_settings.c 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "../mag_i.h"
  2. #include "../mag_state.h"
  3. #include "../helpers/mag_helpers.h"
  4. #define TAG "MagSceneEmulateConfig"
  5. static const char* gpio[] = {
  6. [MagPinA7] = "2 (A7)",
  7. [MagPinA6] = "3 (A6)",
  8. [MagPinA4] = "4 (A4)",
  9. [MagPinB3] = "5 (B3)",
  10. [MagPinB2] = "6 (B2)",
  11. [MagPinC3] = "7 (C3)",
  12. [MagPinC1] = "15 (C1)",
  13. [MagPinC0] = "16 (C0)",
  14. };
  15. const uint8_t GPIO_COUNT = COUNT_OF(gpio);
  16. static void mag_scene_settings_set_gpio(VariableItem* item, MagPin* pin_out) {
  17. MagPin pin = variable_item_get_current_value_index(item);
  18. variable_item_set_current_value_text(item, gpio[pin]);
  19. *pin_out = pin;
  20. }
  21. static void mag_scene_settings_set_gpio_input(VariableItem* item) {
  22. Mag* mag = variable_item_get_context(item);
  23. mag_scene_settings_set_gpio(item, &mag->state.pin_input);
  24. };
  25. static void mag_scene_settings_set_gpio_output(VariableItem* item) {
  26. Mag* mag = variable_item_get_context(item);
  27. mag_scene_settings_set_gpio(item, &mag->state.pin_output);
  28. };
  29. static void mag_scene_settings_set_gpio_enable(VariableItem* item) {
  30. Mag* mag = variable_item_get_context(item);
  31. mag_scene_settings_set_gpio(item, &mag->state.pin_enable);
  32. };
  33. static void mag_pin_variable_item_list_add(
  34. Mag* mag,
  35. const char* label,
  36. MagPin pin,
  37. VariableItemChangeCallback change_callback) {
  38. VariableItem* item =
  39. variable_item_list_add(mag->variable_item_list, label, GPIO_COUNT, change_callback, mag);
  40. variable_item_set_current_value_index(item, pin);
  41. variable_item_set_current_value_text(item, gpio[pin]);
  42. }
  43. // static const char* uart_pins[] = {[DapUartTypeUSART1] = "13,14", [DapUartTypeLPUART1] = "15,16"};
  44. // static const char* uart_swap[] = {[DapUartTXRXNormal] = "No", [DapUartTXRXSwap] = "Yes"};
  45. void mag_scene_settings_on_enter(void* context) {
  46. Mag* mag = context;
  47. mag_pin_variable_item_list_add(
  48. mag, "Input pin:", mag->state.pin_input, mag_scene_settings_set_gpio_input);
  49. mag_pin_variable_item_list_add(
  50. mag, "Output pin:", mag->state.pin_output, mag_scene_settings_set_gpio_output);
  51. mag_pin_variable_item_list_add(
  52. mag, "Enable pin:", mag->state.pin_enable, mag_scene_settings_set_gpio_enable);
  53. view_dispatcher_switch_to_view(mag->view_dispatcher, MagViewVariableItemList);
  54. }
  55. bool mag_scene_settings_on_event(void* context, SceneManagerEvent event) {
  56. Mag* mag = context;
  57. SceneManager* scene_manager = mag->scene_manager;
  58. bool consumed = false;
  59. UNUSED(mag);
  60. UNUSED(scene_manager);
  61. UNUSED(event);
  62. return consumed;
  63. }
  64. void mag_scene_settings_on_exit(void* context) {
  65. Mag* mag = context;
  66. variable_item_list_reset(mag->variable_item_list);
  67. if(!mag_state_gpio_is_valid(&mag->state)) {
  68. scene_manager_next_scene(mag->scene_manager, MagSceneSettingsInvalid);
  69. }
  70. mag_state_save(&mag->state);
  71. }