camera_suite_scene_cam_settings.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. #include "../camera_suite.h"
  2. #include <lib/toolbox/value_index.h>
  3. // Camera orientation, in degrees.
  4. const char* const orientation_text[4] = {
  5. "0",
  6. "90",
  7. "180",
  8. "270",
  9. };
  10. const uint32_t orientation_value[4] = {
  11. CameraSuiteOrientation0,
  12. CameraSuiteOrientation90,
  13. CameraSuiteOrientation180,
  14. CameraSuiteOrientation270,
  15. };
  16. // Possible dithering types for the camera.
  17. const char* const dither_text[28] = {
  18. "Floyd-Steinberg",
  19. "Stucki",
  20. "Jarvis-Judice-Ninke",
  21. };
  22. const uint32_t dither_value[4] = {
  23. CameraSuiteDitherFloydSteinberg,
  24. CameraSuiteDitherStucki,
  25. CameraSuiteDitherJarvisJudiceNinke,
  26. };
  27. const char* const flash_text[2] = {
  28. "OFF",
  29. "ON",
  30. };
  31. const uint32_t flash_value[2] = {
  32. CameraSuiteFlashOff,
  33. CameraSuiteFlashOn,
  34. };
  35. const char* const jpeg_text[2] = {
  36. "OFF",
  37. "ON",
  38. };
  39. const uint32_t jpeg_value[2] = {
  40. CameraSuiteJpegOff,
  41. CameraSuiteJpegOn,
  42. };
  43. static void camera_suite_scene_cam_settings_set_camera_orientation(VariableItem* item) {
  44. CameraSuite* app = static_cast<CameraSuite*>(variable_item_get_context(item));
  45. uint8_t index = variable_item_get_current_value_index(item);
  46. variable_item_set_current_value_text(item, orientation_text[index]);
  47. app->orientation = orientation_value[index];
  48. }
  49. static void camera_suite_scene_cam_settings_set_camera_dither(VariableItem* item) {
  50. CameraSuite* app = static_cast<CameraSuite*>(variable_item_get_context(item));
  51. uint8_t index = variable_item_get_current_value_index(item);
  52. variable_item_set_current_value_text(item, dither_text[index]);
  53. app->dither = dither_value[index];
  54. }
  55. static void camera_suite_scene_cam_settings_set_flash(VariableItem* item) {
  56. CameraSuite* app = static_cast<CameraSuite*>(variable_item_get_context(item));
  57. uint8_t index = variable_item_get_current_value_index(item);
  58. variable_item_set_current_value_text(item, flash_text[index]);
  59. app->flash = flash_value[index];
  60. }
  61. static void camera_suite_scene_cam_settings_set_jpeg(VariableItem* item) {
  62. CameraSuite* app = static_cast<CameraSuite*>(variable_item_get_context(item));
  63. uint8_t index = variable_item_get_current_value_index(item);
  64. variable_item_set_current_value_text(item, jpeg_text[index]);
  65. app->jpeg = jpeg_value[index];
  66. }
  67. void camera_suite_scene_cam_settings_submenu_callback(void* context, uint32_t index) {
  68. CameraSuite* app = static_cast<CameraSuite*>(context);
  69. view_dispatcher_send_custom_event(app->view_dispatcher, index);
  70. }
  71. void camera_suite_scene_cam_settings_on_enter(void* context) {
  72. CameraSuite* app = static_cast<CameraSuite*>(context);
  73. VariableItem* item;
  74. uint8_t value_index;
  75. // Camera Orientation
  76. item = variable_item_list_add(
  77. app->variable_item_list,
  78. "Orientation:",
  79. 4,
  80. camera_suite_scene_cam_settings_set_camera_orientation,
  81. app);
  82. value_index = value_index_uint32(app->orientation, orientation_value, 4);
  83. variable_item_set_current_value_index(item, value_index);
  84. variable_item_set_current_value_text(item, orientation_text[value_index]);
  85. // Camera Dither Type
  86. item = variable_item_list_add(
  87. app->variable_item_list,
  88. "Dithering Type:",
  89. 3,
  90. camera_suite_scene_cam_settings_set_camera_dither,
  91. app);
  92. value_index = value_index_uint32(app->dither, dither_value, 3);
  93. variable_item_set_current_value_index(item, value_index);
  94. variable_item_set_current_value_text(item, dither_text[value_index]);
  95. // Flash ON/OFF
  96. item = variable_item_list_add(
  97. app->variable_item_list, "Flash:", 2, camera_suite_scene_cam_settings_set_flash, app);
  98. value_index = value_index_uint32(app->flash, flash_value, 2);
  99. variable_item_set_current_value_index(item, value_index);
  100. variable_item_set_current_value_text(item, flash_text[value_index]);
  101. // @todo - Save picture to ESP32-CAM sd-card instead of Flipper Zero
  102. // sd-card. This hides the setting for it, for now.
  103. // Save JPEG to ESP32-CAM sd-card instead of Flipper Zero sd-card ON/OFF
  104. // item = variable_item_list_add(
  105. // app->variable_item_list,
  106. // "Save JPEG to ext sdcard:",
  107. // 2,
  108. // camera_suite_scene_cam_settings_set_jpeg,
  109. // app);
  110. // value_index = value_index_uint32(app->jpeg, jpeg_value, 2);
  111. // variable_item_set_current_value_index(item, value_index);
  112. // variable_item_set_current_value_text(item, jpeg_text[value_index]);
  113. UNUSED(camera_suite_scene_cam_settings_set_jpeg);
  114. view_dispatcher_switch_to_view(app->view_dispatcher, CameraSuiteViewIdCamSettings);
  115. }
  116. bool camera_suite_scene_cam_settings_on_event(void* context, SceneManagerEvent event) {
  117. CameraSuite* app = static_cast<CameraSuite*>(context);
  118. UNUSED(app);
  119. bool consumed = false;
  120. if(event.type == SceneManagerEventTypeCustom) {
  121. }
  122. return consumed;
  123. }
  124. void camera_suite_scene_cam_settings_on_exit(void* context) {
  125. CameraSuite* app = static_cast<CameraSuite*>(context);
  126. variable_item_list_set_selected_item(app->variable_item_list, 0);
  127. variable_item_list_reset(app->variable_item_list);
  128. }