mag_scene_settings.c 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include "../mag_i.h"
  2. #define TAG "MagSceneEmulateConfig"
  3. #define GPIO_COUNT 8
  4. static const char* gpio[GPIO_COUNT] = {
  5. [MagSettingPinA7] = "2 (A7)",
  6. [MagSettingPinA6] = "3 (A6)",
  7. [MagSettingPinA4] = "4 (A4)",
  8. [MagSettingPinB3] = "5 (B3)",
  9. [MagSettingPinB2] = "6 (B2)",
  10. [MagSettingPinC3] = "7 (C3)",
  11. [MagSettingPinC1] = "15 (C1)",
  12. [MagSettingPinC0] = "16 (C0)",
  13. };
  14. static void mag_scene_settings_set_gpio(VariableItem* item, MagSettingPin* pin_to_set) {
  15. MagSettingPin pin = variable_item_get_current_value_index(item);
  16. variable_item_set_current_value_text(item, gpio[pin]);
  17. *pin_to_set = pin;
  18. }
  19. static void mag_scene_settings_set_gpio_input(VariableItem* item) {
  20. Mag* mag = variable_item_get_context(item);
  21. mag_scene_settings_set_gpio(item, &mag->setting->pin_input);
  22. };
  23. static void mag_scene_settings_set_gpio_output(VariableItem* item) {
  24. Mag* mag = variable_item_get_context(item);
  25. mag_scene_settings_set_gpio(item, &mag->setting->pin_output);
  26. };
  27. static void mag_scene_settings_set_gpio_enable(VariableItem* item) {
  28. Mag* mag = variable_item_get_context(item);
  29. mag_scene_settings_set_gpio(item, &mag->setting->pin_enable);
  30. };
  31. static void mag_pin_variable_item_list_add(
  32. Mag* mag,
  33. const char* label,
  34. MagSettingPin pin,
  35. VariableItemChangeCallback change_callback) {
  36. VariableItem* item =
  37. variable_item_list_add(mag->variable_item_list, label, GPIO_COUNT, change_callback, mag);
  38. variable_item_set_current_value_index(item, pin);
  39. variable_item_set_current_value_text(item, gpio[pin]);
  40. }
  41. // static const char* uart_pins[] = {[DapUartTypeUSART1] = "13,14", [DapUartTypeLPUART1] = "15,16"};
  42. // static const char* uart_swap[] = {[DapUartTXRXNormal] = "No", [DapUartTXRXSwap] = "Yes"};
  43. void mag_scene_settings_on_enter(void* context) {
  44. Mag* mag = context;
  45. mag_pin_variable_item_list_add(
  46. mag, "Input pin:", mag->setting->pin_input, mag_scene_settings_set_gpio_input);
  47. mag_pin_variable_item_list_add(
  48. mag, "Output pin:", mag->setting->pin_output, mag_scene_settings_set_gpio_output);
  49. mag_pin_variable_item_list_add(
  50. mag, "Enable pin:", mag->setting->pin_enable, mag_scene_settings_set_gpio_enable);
  51. view_dispatcher_switch_to_view(mag->view_dispatcher, MagViewVariableItemList);
  52. }
  53. bool mag_scene_settings_on_event(void* context, SceneManagerEvent event) {
  54. Mag* mag = context;
  55. SceneManager* scene_manager = mag->scene_manager;
  56. bool consumed = false;
  57. UNUSED(mag);
  58. UNUSED(scene_manager);
  59. UNUSED(event);
  60. return consumed;
  61. }
  62. void mag_scene_settings_on_exit(void* context) {
  63. Mag* mag = context;
  64. variable_item_list_set_selected_item(mag->variable_item_list, 0);
  65. variable_item_list_reset(mag->variable_item_list);
  66. }