Cody Tolene 2 лет назад
Родитель
Сommit
522c207e3a

+ 4 - 3
src-fap/camera-suite.c

@@ -43,9 +43,10 @@ CameraSuite* camera_suite_app_alloc() {
     app->submenu = submenu_alloc();
 
     // Set defaults, in case no config loaded
-    app->haptic = 1;
-    app->speaker = 1;
-    app->led = 1;
+    app->orientation = 0; // Orientation is "portrait", zero degrees by default.
+    app->haptic = 1; // Haptic is on by default
+    app->speaker = 1; // Speaker is on by default
+    app->led = 1; // LED is on by default
 
     // Load configs
     camera_suite_read_settings(app);

+ 8 - 0
src-fap/camera-suite.h

@@ -32,6 +32,7 @@ typedef struct {
     CameraSuiteViewStyle1* camera_suite_view_style_1;
     CameraSuiteViewStyle2* camera_suite_view_style_2;
     CameraSuiteViewGuide* camera_suite_view_guide;
+    uint32_t orientation;
     uint32_t haptic;
     uint32_t speaker;
     uint32_t led;
@@ -47,6 +48,13 @@ typedef enum {
     CameraSuiteViewIdSettings,
 } CameraSuiteViewId;
 
+typedef enum {
+    CameraSuiteOrientation0,
+    CameraSuiteOrientation90,
+    CameraSuiteOrientation180,
+    CameraSuiteOrientation270,
+} CameraSuiteOrientationState;
+
 typedef enum {
     CameraSuiteHapticOff,
     CameraSuiteHapticOn,

+ 4 - 0
src-fap/helpers/camera_suite_storage.c

@@ -49,6 +49,8 @@ void camera_suite_save_settings(void* context) {
     // Store Settings
     flipper_format_write_header_cstr(
         fff_file, BOILERPLATE_SETTINGS_HEADER, BOILERPLATE_SETTINGS_FILE_VERSION);
+    flipper_format_write_uint32(
+        fff_file, BOILERPLATE_SETTINGS_KEY_ORIENTATION, &app->orientation, 1);
     flipper_format_write_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_HAPTIC, &app->haptic, 1);
     flipper_format_write_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_SPEAKER, &app->speaker, 1);
     flipper_format_write_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_LED, &app->led, 1);
@@ -98,6 +100,8 @@ void camera_suite_read_settings(void* context) {
         return;
     }
 
+    flipper_format_read_uint32(
+        fff_file, BOILERPLATE_SETTINGS_KEY_ORIENTATION, &app->orientation, 1);
     flipper_format_read_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_HAPTIC, &app->haptic, 1);
     flipper_format_read_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_SPEAKER, &app->speaker, 1);
     flipper_format_read_uint32(fff_file, BOILERPLATE_SETTINGS_KEY_LED, &app->led, 1);

+ 1 - 0
src-fap/helpers/camera_suite_storage.h

@@ -9,6 +9,7 @@
 #define BOILERPLATE_SETTINGS_SAVE_PATH CONFIG_FILE_DIRECTORY_PATH "/camera-suite.conf"
 #define BOILERPLATE_SETTINGS_SAVE_PATH_TMP BOILERPLATE_SETTINGS_SAVE_PATH ".tmp"
 #define BOILERPLATE_SETTINGS_HEADER "Camera Suite Config File"
+#define BOILERPLATE_SETTINGS_KEY_ORIENTATION "Orientation"
 #define BOILERPLATE_SETTINGS_KEY_HAPTIC "Haptic"
 #define BOILERPLATE_SETTINGS_KEY_LED "Led"
 #define BOILERPLATE_SETTINGS_KEY_SPEAKER "Speaker"

+ 34 - 0
src-fap/scenes/camera_suite_scene_settings.c

@@ -1,6 +1,21 @@
 #include "../camera-suite.h"
 #include <lib/toolbox/value_index.h>
 
+// Camera orientation, in degrees.
+const char* const orientation_text[4] = {
+    "0",
+    "90",
+    "180",
+    "270",
+};
+
+const uint32_t orientation_value[4] = {
+    CameraSuiteOrientation0,
+    CameraSuiteOrientation90,
+    CameraSuiteOrientation180,
+    CameraSuiteOrientation270,
+};
+
 const char* const haptic_text[2] = {
     "OFF",
     "ON",
@@ -31,6 +46,14 @@ const uint32_t led_value[2] = {
     CameraSuiteLedOn,
 };
 
+static void camera_suite_scene_settings_set_camera_orientation(VariableItem* item) {
+    CameraSuite* app = variable_item_get_context(item);
+    uint8_t index = variable_item_get_current_value_index(item);
+
+    variable_item_set_current_value_text(item, orientation_text[index]);
+    app->orientation = orientation_value[index];
+}
+
 static void camera_suite_scene_settings_set_haptic(VariableItem* item) {
     CameraSuite* app = variable_item_get_context(item);
     uint8_t index = variable_item_get_current_value_index(item);
@@ -63,6 +86,17 @@ void camera_suite_scene_settings_on_enter(void* context) {
     VariableItem* item;
     uint8_t value_index;
 
+    // Camera Orientation
+    item = variable_item_list_add(
+        app->variable_item_list,
+        "Orientation:",
+        4,
+        camera_suite_scene_settings_set_camera_orientation,
+        app);
+    value_index = value_index_uint32(app->orientation, orientation_value, 4);
+    variable_item_set_current_value_index(item, value_index);
+    variable_item_set_current_value_text(item, orientation_text[value_index]);
+
     // Haptic FX ON/OFF
     item = variable_item_list_add(
         app->variable_item_list, "Haptic FX:", 2, camera_suite_scene_settings_set_haptic, app);