diff --git a/applications/services/notification/notification_app.c b/applications/services/notification/notification_app.c index 229f7c5ea..3811c2fde 100644 --- a/applications/services/notification/notification_app.c +++ b/applications/services/notification/notification_app.c @@ -189,6 +189,61 @@ static void notification_display_timer(void* ctx) { notification_message(app, &sequence_display_backlight_off); } +// RGB MOD RAINBOW SECTION + +//start furi timer for rgb_mod_rainbow +static void rgb_mod_rainbow_timer_start(NotificationApp* app) { + furi_timer_start( + app->rgb_mod_rainbow_timer, furi_ms_to_ticks(app->settings.rgb_mod_rainbow_speed_ms)); +} + +//stop furi timer for rgb_mod_rainbow +static void rgb_mod_rainbow_timer_stop(NotificationApp* app) { + furi_timer_stop(app->rgb_mod_rainbow_timer); +} + +// start/stop rgb_mod_rainbow_timer only if rgb_mod_installed +static void rgb_mod_rainbow_timer_control(NotificationApp* app) { + if(app->settings.rgb_mod_installed) { + if(app->settings.rgb_mod_rainbow) { + rgb_mod_rainbow_timer_start(app); + } else { + if(furi_timer_is_running(app->rgb_mod_rainbow_timer)) { + rgb_mod_rainbow_timer_stop(app); + } + } + } +} + +// callback for rgb_mod_rainbow_timer (what we do when timer end) +static void rgb_mod_rainbow_timer_callback(void* context) { + furi_assert(context); + NotificationApp* app = context; + +// УЧЕСТЬ СТЕП и его вероятность превысить 255 +// При выключении радуги активировать настроенный в меню цвет + + app->rgb_mod_rainbow_color3++; + + if(app->rgb_mod_rainbow_color3 == 255) { + app->rgb_mod_rainbow_color2++; + app->rgb_mod_rainbow_color3 = 1; + } + + if(app->rgb_mod_rainbow_color2 == 255) { + app->rgb_mod_rainbow_color1++; + app->rgb_mod_rainbow_color2 = 1; + } + if(app->rgb_mod_rainbow_color1 == 255) { + app->rgb_mod_rainbow_color1 = 1; + } + FURI_LOG_I("RAINBOW", "Color3 %u", app->rgb_mod_rainbow_color3); + FURI_LOG_I("RAINBOW", "Color2 %u", app->rgb_mod_rainbow_color2); + FURI_LOG_I("RAINBOW", "Color1 %u", app->rgb_mod_rainbow_color1); +} + +// END OF RGB MOD RAINBOW SECTION + // message processing static void notification_process_notification_message( NotificationApp* app, @@ -219,12 +274,18 @@ static void notification_process_notification_message( &app->display, notification_message->data.led.value * display_brightness_setting); reset_mask |= reset_display_mask; + //start rgb_mod_rainbow_timer when display backlight is ON + rgb_mod_rainbow_timer_control(app); } else { reset_mask &= ~reset_display_mask; notification_reset_notification_led_layer(&app->display); if(furi_timer_is_running(app->display_timer)) { furi_timer_stop(app->display_timer); } + //stop rgb_mod_rainbow_timer when display backlight is OFF + if(furi_timer_is_running(app->rgb_mod_rainbow_timer)) { + rgb_mod_rainbow_timer_stop(app); + } } break; case NotificationMessageTypeLedDisplayBacklightEnforceOn: @@ -512,38 +573,6 @@ static void input_event_callback(const void* value, void* context) { notification_message(app, &sequence_display_backlight_on); } -// RGB MOD RAINBOW SECTION - -//start furi timer for rgb_mod_rainbow -static void rgb_mod_rainbow_timer_start(NotificationApp* app) { - furi_timer_start( - app->rgb_mod_rainbow_timer, furi_ms_to_ticks(app->settings.rgb_mod_rainbow_speed_ms)); -} - -//stop furi timer for rgb_mod_rainbow -static void rgb_mod_rainbow_timer_stop(NotificationApp* app) { - furi_timer_stop(app->rgb_mod_rainbow_timer); -} - -// start/stop rgb_mod_rainbow_timer only if rgb_mod_installed -static void rgb_mod_rainbow_timer_control(NotificationApp* app) { - if(app->settings.rgb_mod_installed) { - if(app->settings.rgb_mod_rainbow) { - rgb_mod_rainbow_timer_start(app); - } else { - rgb_mod_rainbow_timer_stop(app); - } - } -} - -// callback for rgb_mod_rainbow_timer (what we do when timer end) -static void rgb_mod_rainbow_timer_callback(void* context) { - furi_assert(context); - FURI_LOG_I("RAINBOW", "Rainbow timer callback - change color"); -} - -// END OF RGB MOD RAINBOW SECTION - // App alloc static NotificationApp* notification_app_alloc(void) { NotificationApp* app = malloc(sizeof(NotificationApp)); diff --git a/applications/services/notification/notification_app.h b/applications/services/notification/notification_app.h index 098ef5ee7..13cfb7aac 100644 --- a/applications/services/notification/notification_app.h +++ b/applications/services/notification/notification_app.h @@ -63,9 +63,9 @@ struct NotificationApp { // rainbow mode section FuriTimer* rgb_mod_rainbow_timer; - int8_t rgb_mod_rainbow_color1; - int8_t rgb_mod_rainbow_color2; - int8_t rgb_mod_rainbow_color3; + uint8_t rgb_mod_rainbow_color1; + uint8_t rgb_mod_rainbow_color2; + uint8_t rgb_mod_rainbow_color3; NotificationSettings settings;