Просмотр исходного кода

Notification: backlight always on lock. Gpio: backlight always on lock in uart brige app. (#1007)

あく 3 лет назад
Родитель
Сommit
92734f1bb3

+ 2 - 0
applications/gpio/scenes/gpio_scene_usb_uart.c

@@ -33,6 +33,7 @@ void gpio_scene_usb_uart_on_enter(void* context) {
     gpio_usb_uart_set_callback(app->gpio_usb_uart, gpio_scene_usb_uart_callback, app);
     gpio_usb_uart_set_callback(app->gpio_usb_uart, gpio_scene_usb_uart_callback, app);
     scene_manager_set_scene_state(app->scene_manager, GpioAppViewUsbUart, 0);
     scene_manager_set_scene_state(app->scene_manager, GpioAppViewUsbUart, 0);
     view_dispatcher_switch_to_view(app->view_dispatcher, GpioAppViewUsbUart);
     view_dispatcher_switch_to_view(app->view_dispatcher, GpioAppViewUsbUart);
+    notification_message(app->notifications, &sequence_display_lock);
 }
 }
 
 
 bool gpio_scene_usb_uart_on_event(void* context, SceneManagerEvent event) {
 bool gpio_scene_usb_uart_on_event(void* context, SceneManagerEvent event) {
@@ -62,4 +63,5 @@ void gpio_scene_usb_uart_on_exit(void* context) {
         usb_uart_disable(app->usb_uart_bridge);
         usb_uart_disable(app->usb_uart_bridge);
         free(scene_usb_uart);
         free(scene_usb_uart);
     }
     }
+    notification_message(app->notifications, &sequence_display_unlock);
 }
 }

+ 9 - 1
applications/notification/notification.h

@@ -40,14 +40,22 @@ typedef union {
 
 
 typedef enum {
 typedef enum {
     NotificationMessageTypeVibro,
     NotificationMessageTypeVibro,
+
     NotificationMessageTypeSoundOn,
     NotificationMessageTypeSoundOn,
     NotificationMessageTypeSoundOff,
     NotificationMessageTypeSoundOff,
+
     NotificationMessageTypeLedRed,
     NotificationMessageTypeLedRed,
     NotificationMessageTypeLedGreen,
     NotificationMessageTypeLedGreen,
     NotificationMessageTypeLedBlue,
     NotificationMessageTypeLedBlue,
+
     NotificationMessageTypeDelay,
     NotificationMessageTypeDelay,
+
     NotificationMessageTypeLedDisplay,
     NotificationMessageTypeLedDisplay,
+    NotificationMessageTypeLedDisplayLock,
+    NotificationMessageTypeLedDisplayUnlock,
+
     NotificationMessageTypeDoNotReset,
     NotificationMessageTypeDoNotReset,
+
     NotificationMessageTypeForceSpeakerVolumeSetting,
     NotificationMessageTypeForceSpeakerVolumeSetting,
     NotificationMessageTypeForceVibroSetting,
     NotificationMessageTypeForceVibroSetting,
     NotificationMessageTypeForceDisplayBrightnessSetting,
     NotificationMessageTypeForceDisplayBrightnessSetting,
@@ -83,4 +91,4 @@ void notification_internal_message_block(
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus
 }
 }
-#endif
+#endif

+ 19 - 0
applications/notification/notification_app.c

@@ -163,6 +163,7 @@ void notification_process_notification_message(
     notification_message = (*message->sequence)[notification_message_index];
     notification_message = (*message->sequence)[notification_message_index];
 
 
     bool led_active = false;
     bool led_active = false;
+    uint8_t display_led_lock = 0;
     uint8_t led_values[NOTIFICATION_LED_COUNT] = {0x00, 0x00, 0x00};
     uint8_t led_values[NOTIFICATION_LED_COUNT] = {0x00, 0x00, 0x00};
     bool reset_notifications = true;
     bool reset_notifications = true;
     float speaker_volume_setting = app->settings.speaker_volume;
     float speaker_volume_setting = app->settings.speaker_volume;
@@ -189,6 +190,24 @@ void notification_process_notification_message(
             }
             }
             reset_mask |= reset_display_mask;
             reset_mask |= reset_display_mask;
             break;
             break;
+        case NotificationMessageTypeLedDisplayLock:
+            furi_assert(display_led_lock < UINT8_MAX);
+            display_led_lock++;
+            if(display_led_lock == 1) {
+                notification_apply_internal_led_layer(
+                    &app->display,
+                    notification_message->data.led.value * display_brightness_setting);
+            }
+            break;
+        case NotificationMessageTypeLedDisplayUnlock:
+            furi_assert(display_led_lock > 0);
+            display_led_lock--;
+            if(display_led_lock == 0) {
+                notification_apply_internal_led_layer(
+                    &app->display,
+                    notification_message->data.led.value * display_brightness_setting);
+            }
+            break;
         case NotificationMessageTypeLedRed:
         case NotificationMessageTypeLedRed:
             // store and send on delay or after seq
             // store and send on delay or after seq
             led_active = true;
             led_active = true;

+ 1 - 1
applications/notification/notification_app.h

@@ -53,4 +53,4 @@ struct NotificationApp {
     NotificationSettings settings;
     NotificationSettings settings;
 };
 };
 
 
-void notification_message_save_settings(NotificationApp* app);
+void notification_message_save_settings(NotificationApp* app);

+ 21 - 1
applications/notification/notification_messages.c

@@ -15,6 +15,16 @@ const NotificationMessage message_display_off = {
     .data.led.value = 0x00,
     .data.led.value = 0x00,
 };
 };
 
 
+const NotificationMessage message_display_lock = {
+    .type = NotificationMessageTypeLedDisplayLock,
+    .data.led.value = 0xFF,
+};
+
+const NotificationMessage message_display_unlock = {
+    .type = NotificationMessageTypeLedDisplayLock,
+    .data.led.value = 0x00,
+};
+
 // Led ON
 // Led ON
 const NotificationMessage message_red_255 = {
 const NotificationMessage message_red_255 = {
     .type = NotificationMessageTypeLedRed,
     .type = NotificationMessageTypeLedRed,
@@ -188,6 +198,16 @@ const NotificationSequence sequence_display_off = {
     NULL,
     NULL,
 };
 };
 
 
+const NotificationSequence sequence_display_lock = {
+    &message_display_lock,
+    NULL,
+};
+
+const NotificationSequence sequence_display_unlock = {
+    &message_display_unlock,
+    NULL,
+};
+
 // Charging
 // Charging
 const NotificationSequence sequence_charging = {
 const NotificationSequence sequence_charging = {
     &message_red_255,
     &message_red_255,
@@ -416,4 +436,4 @@ const NotificationSequence sequence_audiovisual_alert = {
     &message_sound_off,
     &message_sound_off,
     &message_vibro_off,
     &message_vibro_off,
     NULL,
     NULL,
-};
+};

+ 13 - 0
applications/notification/notification_messages.h

@@ -9,8 +9,15 @@ extern "C" {
 /*********************************** Messages **********************************/
 /*********************************** Messages **********************************/
 
 
 // Display
 // Display
+
+/** Display: backlight wakeup */
 extern const NotificationMessage message_display_on;
 extern const NotificationMessage message_display_on;
+/** Display: backlight force off */
 extern const NotificationMessage message_display_off;
 extern const NotificationMessage message_display_off;
+/** Display: backlight always on lock */
+extern const NotificationMessage message_display_lock;
+/** Display: backlight always on unlock */
+extern const NotificationMessage message_display_unlock;
 
 
 // Led ON
 // Led ON
 extern const NotificationMessage message_red_255;
 extern const NotificationMessage message_red_255;
@@ -63,8 +70,14 @@ extern const NotificationSequence sequence_reset_vibro;
 extern const NotificationSequence sequence_set_vibro_on;
 extern const NotificationSequence sequence_set_vibro_on;
 
 
 // Display
 // Display
+/** Display: backlight wakeup */
 extern const NotificationSequence sequence_display_on;
 extern const NotificationSequence sequence_display_on;
+/** Display: backlight force off */
 extern const NotificationSequence sequence_display_off;
 extern const NotificationSequence sequence_display_off;
+/** Display: backlight always on lock */
+extern const NotificationSequence sequence_display_lock;
+/** Display: backlight always on unlock */
+extern const NotificationSequence sequence_display_unlock;
 
 
 // Charging
 // Charging
 extern const NotificationSequence sequence_charging;
 extern const NotificationSequence sequence_charging;