Procházet zdrojové kódy

Add lux only mode (#35)

* Add lux meter only mode

* Update images and readme

* Update images
Oleksii Kutuzov před 3 roky
rodič
revize
78c2005e7f

+ 1 - 1
application.fam

@@ -9,7 +9,7 @@ App(
     ],
     stack_size=1 * 1024,
     order=90,
-    fap_version=(0, 6),
+    fap_version=(0, 7),
     fap_icon="lightmeter.png",
     fap_category="Tools",
     fap_private_libs=[

+ 28 - 2
gui/scenes/lightmeter_scene_config.c

@@ -46,10 +46,19 @@ static const char* backlight[] = {
     [BACKLIGHT_ON] = "On",
 };
 
+static const char* lux_only[] = {
+    [LUX_ONLY_OFF] = "Off",
+    [LUX_ONLY_ON] = "On",
+};
+
 enum LightMeterSubmenuIndex {
     LightMeterSubmenuIndexISO,
     LightMeterSubmenuIndexND,
     LightMeterSubmenuIndexDome,
+    LightMeterSubmenuIndexBacklight,
+    LightMeterSubmenuIndexLuxMeter,
+    LightMeterSubmenuIndexHelp,
+    LightMeterSubmenuIndexAbout,
 };
 
 static void iso_numbers_cb(VariableItem* item) {
@@ -107,14 +116,25 @@ static void backlight_cb(VariableItem* item) {
     lightmeter_app_set_config(app, config);
 }
 
+static void lux_only_cb(VariableItem* item) {
+    LightMeterApp* app = variable_item_get_context(item);
+    uint8_t index = variable_item_get_current_value_index(item);
+
+    variable_item_set_current_value_text(item, lux_only[index]);
+
+    LightMeterConfig* config = app->config;
+    config->lux_only = index;
+    lightmeter_app_set_config(app, config);
+}
+
 static void ok_cb(void* context, uint32_t index) {
     LightMeterApp* app = context;
     UNUSED(app);
     switch(index) {
-    case 4:
+    case LightMeterSubmenuIndexHelp:
         view_dispatcher_send_custom_event(app->view_dispatcher, LightMeterAppCustomEventHelp);
         break;
-    case 5:
+    case LightMeterSubmenuIndexAbout:
         view_dispatcher_send_custom_event(app->view_dispatcher, LightMeterAppCustomEventAbout);
         break;
     default:
@@ -148,6 +168,11 @@ void lightmeter_scene_config_on_enter(void* context) {
     variable_item_set_current_value_index(item, config->backlight);
     variable_item_set_current_value_text(item, backlight[config->backlight]);
 
+    item = variable_item_list_add(
+        var_item_list, "Lux meter only", COUNT_OF(lux_only), lux_only_cb, app);
+    variable_item_set_current_value_index(item, config->lux_only);
+    variable_item_set_current_value_text(item, lux_only[config->lux_only]);
+
     item = variable_item_list_add(var_item_list, "Help and Pinout", 0, NULL, NULL);
     item = variable_item_list_add(var_item_list, "About", 0, NULL, NULL);
 
@@ -187,4 +212,5 @@ void lightmeter_scene_config_on_exit(void* context) {
     main_view_set_iso(app->main_view, app->config->iso);
     main_view_set_nd(app->main_view, app->config->nd);
     main_view_set_dome(app->main_view, app->config->dome);
+    main_view_set_lux_only(app->main_view, app->config->lux_only);
 }

+ 2 - 0
gui/scenes/lightmeter_scene_help.c

@@ -10,6 +10,8 @@ void lightmeter_scene_help_on_enter(void* context) {
     furi_string_cat(temp_str, "\e#Pinout:\r\n");
     furi_string_cat(
         temp_str,
+        "    VCC: 3.3V\r\n"
+        "    GND: GND\r\n"
         "    SDA: 15 [C1]\r\n"
         "    SCL: 16 [C0]\r\n");
 

+ 58 - 22
gui/views/main_view.c

@@ -94,37 +94,39 @@ static void main_view_draw_callback(Canvas* canvas, void* context) {
     furi_assert(context);
     MainViewModel* model = context;
 
-    // FURI_LOG_D("MAIN VIEW", "Drawing");
-
     canvas_clear(canvas);
 
-    // top row
-    draw_top_row(canvas, model);
+    // draw button
+    canvas_set_font(canvas, FontSecondary);
+    elements_button_left(canvas, "Config");
 
-    // add f, T values
-    canvas_set_font(canvas, FontBigNumbers);
+    if(!model->lux_only) {
+        // top row
+        draw_top_row(canvas, model);
 
-    // draw f icon and number
-    canvas_draw_icon(canvas, 15, 17, &I_f_10x14);
-    draw_aperture(canvas, model);
+        // add f, T values
+        canvas_set_font(canvas, FontBigNumbers);
 
-    // draw T icon and number
-    canvas_draw_icon(canvas, 15, 34, &I_T_10x14);
-    draw_speed(canvas, model);
+        // draw f icon and number
+        canvas_draw_icon(canvas, 15, 17, &I_f_10x14);
+        draw_aperture(canvas, model);
 
-    // draw button
-    canvas_set_font(canvas, FontSecondary);
-    elements_button_left(canvas, "Config");
+        // draw T icon and number
+        canvas_draw_icon(canvas, 15, 34, &I_T_10x14);
+        draw_speed(canvas, model);
 
-    // draw ND number
-    draw_nd_number(canvas, model);
+        // draw ND number
+        draw_nd_number(canvas, model);
 
-    // draw EV number
-    canvas_set_font(canvas, FontSecondary);
-    draw_EV_number(canvas, model);
+        // draw EV number
+        canvas_set_font(canvas, FontSecondary);
+        draw_EV_number(canvas, model);
 
-    // draw mode indicator
-    draw_mode_indicator(canvas, model);
+        // draw mode indicator
+        draw_mode_indicator(canvas, model);
+    } else {
+        draw_lux_only_mode(canvas, model);
+    }
 }
 
 static void main_view_process(MainView* main_view, InputEvent* event) {
@@ -267,6 +269,12 @@ void main_view_set_dome(MainView* main_view, bool dome) {
         main_view->view, MainViewModel * model, { model->dome = dome; }, true);
 }
 
+void main_view_set_lux_only(MainView* main_view, bool lux_only) {
+    furi_assert(main_view);
+    with_view_model(
+        main_view->view, MainViewModel * model, { model->lux_only = lux_only; }, true);
+}
+
 bool main_view_get_dome(MainView* main_view) {
     furi_assert(main_view);
     bool val = false;
@@ -412,6 +420,8 @@ void draw_nd_number(Canvas* canvas, MainViewModel* context) {
 
     char str[9];
 
+    canvas_set_font(canvas, FontSecondary);
+
     if(model->response) {
         snprintf(str, sizeof(str), "ND: %d", nd_numbers[model->nd]);
     } else {
@@ -432,3 +442,29 @@ void draw_EV_number(Canvas* canvas, MainViewModel* context) {
         canvas_draw_str_aligned(canvas, 87, 29, AlignLeft, AlignBottom, "EV: --");
     }
 }
+
+void draw_lux_only_mode(Canvas* canvas, MainViewModel* context) {
+    MainViewModel* model = context;
+
+    if(!model->response) {
+        canvas_draw_box(canvas, 0, 0, 128, 12);
+        canvas_set_color(canvas, ColorWhite);
+        canvas_set_font(canvas, FontPrimary);
+        canvas_draw_str(canvas, 24, 10, "No sensor found");
+        canvas_set_color(canvas, ColorBlack);
+    } else {
+        char str[12];
+
+        canvas_set_font(canvas, FontPrimary);
+
+        canvas_draw_line(canvas, 0, 10, 128, 10);
+        canvas_draw_str_aligned(canvas, 64, 1, AlignCenter, AlignTop, "Lux meter mode");
+
+        canvas_set_font(canvas, FontBigNumbers);
+        snprintf(str, sizeof(str), "%.0f", (double)model->lux);
+        canvas_draw_str_aligned(canvas, 80, 32, AlignRight, AlignCenter, str);
+
+        canvas_set_font(canvas, FontSecondary);
+        canvas_draw_str_aligned(canvas, 85, 39, AlignLeft, AlignBottom, "Lux");
+    }
+}

+ 5 - 0
gui/views/main_view.h

@@ -27,6 +27,7 @@ typedef struct {
     int aperture;
     int speed;
     bool dome;
+    bool lux_only;
 } MainViewModel;
 
 typedef void (*LightMeterMainViewButtonCallback)(void* context);
@@ -58,6 +59,8 @@ void main_view_set_speed(MainView* main_view, int val);
 
 void main_view_set_dome(MainView* main_view, bool val);
 
+void main_view_set_lux_only(MainView* main_view, bool val);
+
 bool main_view_get_dome(MainView* main_view);
 
 void draw_top_row(Canvas* canvas, MainViewModel* context);
@@ -71,3 +74,5 @@ void draw_mode_indicator(Canvas* canvas, MainViewModel* context);
 void draw_nd_number(Canvas* canvas, MainViewModel* context);
 
 void draw_EV_number(Canvas* canvas, MainViewModel* context);
+
+void draw_lux_only_mode(Canvas* canvas, MainViewModel* context);

+ 1 - 0
lightmeter.h

@@ -25,6 +25,7 @@ typedef struct {
     int aperture;
     int dome;
     int backlight;
+    int lux_only;
 } LightMeterConfig;
 
 typedef struct {

+ 6 - 1
lightmeter_config.h

@@ -1,6 +1,6 @@
 #pragma once
 
-#define LM_VERSION_APP "0.6"
+#define LM_VERSION_APP "0.7"
 #define LM_DEVELOPED "Oleksii Kutuzov"
 #define LM_GITHUB "https://github.com/oleksiikutuzov/flipperzero-lightmeter"
 
@@ -99,4 +99,9 @@ typedef enum {
     WITH_DOME,
 } LightMeterDomePresence;
 
+typedef enum {
+    LUX_ONLY_OFF,
+    LUX_ONLY_ON,
+} LightMeterLuxOnlyMode;
+
 typedef enum { BACKLIGHT_AUTO, BACKLIGHT_ON } LightMeterBacklight;