mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-22 05:14:46 -07:00
RGB mod rainbow effect done.
This commit is contained in:
@@ -189,7 +189,7 @@ static void notification_display_timer(void* ctx) {
|
||||
notification_message(app, &sequence_display_backlight_off);
|
||||
}
|
||||
|
||||
// RGB MOD RAINBOW SECTION
|
||||
// --- RGB MOD RAINBOW SECTION ---
|
||||
|
||||
//start furi timer for rgb_mod_rainbow
|
||||
static void rgb_mod_rainbow_timer_start(NotificationApp* app) {
|
||||
@@ -202,10 +202,15 @@ 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) {
|
||||
// start/restart/stop rgb_mod_rainbow_timer only if rgb_mod_installed and apply rainbow colors to backlight
|
||||
static void rgb_mod_rainbow_timer_starter(NotificationApp* app) {
|
||||
if(app->settings.rgb_mod_installed) {
|
||||
if(app->settings.rgb_mod_rainbow) {
|
||||
if(app->settings.rgb_mod_rainbow_mode > 0) {
|
||||
rgb_mod_rainbow_update(
|
||||
app->rgb_mod_rainbow_red,
|
||||
app->rgb_mod_rainbow_green,
|
||||
app->rgb_mod_rainbow_blue,
|
||||
app->settings.display_brightness);
|
||||
rgb_mod_rainbow_timer_start(app);
|
||||
} else {
|
||||
if(furi_timer_is_running(app->rgb_mod_rainbow_timer)) {
|
||||
@@ -220,34 +225,74 @@ static void rgb_mod_rainbow_timer_callback(void* context) {
|
||||
furi_assert(context);
|
||||
NotificationApp* app = context;
|
||||
|
||||
// При выключении радуги активировать настроенный в меню цвет
|
||||
// if rgb_mode_rainbow_mode is rainbow do rainbow effect
|
||||
if(app->settings.rgb_mod_rainbow_mode == 1) {
|
||||
switch(app->rgb_mod_rainbow_stage) {
|
||||
// from red to yellow
|
||||
case 1:
|
||||
app->rgb_mod_rainbow_green += app->settings.rgb_mod_rainbow_step;
|
||||
if(app->rgb_mod_rainbow_green >= 255) {
|
||||
app->rgb_mod_rainbow_green = 255;
|
||||
app->rgb_mod_rainbow_stage++;
|
||||
}
|
||||
break;
|
||||
// yellow red to green
|
||||
case 2:
|
||||
app->rgb_mod_rainbow_red -= app->settings.rgb_mod_rainbow_step;
|
||||
if(app->rgb_mod_rainbow_red <= 0) {
|
||||
app->rgb_mod_rainbow_red = 0;
|
||||
app->rgb_mod_rainbow_stage++;
|
||||
}
|
||||
break;
|
||||
// from green to light blue
|
||||
case 3:
|
||||
app->rgb_mod_rainbow_blue += app->settings.rgb_mod_rainbow_step;
|
||||
if(app->rgb_mod_rainbow_blue >= 255) {
|
||||
app->rgb_mod_rainbow_blue = 255;
|
||||
app->rgb_mod_rainbow_stage++;
|
||||
}
|
||||
break;
|
||||
//from light blue to blue
|
||||
case 4:
|
||||
app->rgb_mod_rainbow_green -= app->settings.rgb_mod_rainbow_step;
|
||||
if(app->rgb_mod_rainbow_green <= 0) {
|
||||
app->rgb_mod_rainbow_green = 0;
|
||||
app->rgb_mod_rainbow_stage++;
|
||||
}
|
||||
break;
|
||||
//from blue to violet
|
||||
case 5:
|
||||
app->rgb_mod_rainbow_red += app->settings.rgb_mod_rainbow_step;
|
||||
if(app->rgb_mod_rainbow_red >= 255) {
|
||||
app->rgb_mod_rainbow_red = 255;
|
||||
app->rgb_mod_rainbow_stage++;
|
||||
}
|
||||
break;
|
||||
//from violet to red
|
||||
case 6:
|
||||
app->rgb_mod_rainbow_blue -= app->settings.rgb_mod_rainbow_step;
|
||||
if(app->rgb_mod_rainbow_blue <= 0) {
|
||||
app->rgb_mod_rainbow_blue = 0;
|
||||
app->rgb_mod_rainbow_stage = 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if(app->rgb_mod_rainbow_red >= 255) {
|
||||
app->rgb_mod_rainbow_red = 1;
|
||||
app->rgb_mod_rainbow_green += app->settings.rgb_mod_rainbow_step;
|
||||
rgb_mod_rainbow_update(
|
||||
app->rgb_mod_rainbow_red,
|
||||
app->rgb_mod_rainbow_green,
|
||||
app->rgb_mod_rainbow_blue,
|
||||
app->settings.display_brightness);
|
||||
}
|
||||
|
||||
if(app->rgb_mod_rainbow_green >= 255) {
|
||||
app->rgb_mod_rainbow_green = 1;
|
||||
app->rgb_mod_rainbow_blue += app->settings.rgb_mod_rainbow_step;
|
||||
}
|
||||
|
||||
if(app->rgb_mod_rainbow_blue >= 255) {
|
||||
app->rgb_mod_rainbow_blue = 1;
|
||||
}
|
||||
|
||||
rgb_backlight_set_custom_color(app->rgb_mod_rainbow_red, 0);
|
||||
rgb_backlight_set_custom_color(app->rgb_mod_rainbow_green, 1);
|
||||
rgb_backlight_set_custom_color(app->rgb_mod_rainbow_blue, 2);
|
||||
|
||||
FURI_LOG_I("RAINBOW", "RED %u", app->rgb_mod_rainbow_red);
|
||||
FURI_LOG_I("RAINBOW", "GREEN %u", app->rgb_mod_rainbow_green);
|
||||
FURI_LOG_I("RAINBOW", "BLUE %u", app->rgb_mod_rainbow_blue);
|
||||
|
||||
app->rgb_mod_rainbow_red += app->settings.rgb_mod_rainbow_step;
|
||||
// if rgb_mode_rainbow_mode is ..... do another effect
|
||||
// if(app->settings.rgb_mod_rainbow_mode == 2) {
|
||||
// }
|
||||
}
|
||||
|
||||
// END OF RGB MOD RAINBOW SECTION
|
||||
// --- END OF RGB MOD RAINBOW SECTION ---
|
||||
|
||||
// message processing
|
||||
static void notification_process_notification_message(
|
||||
@@ -279,8 +324,10 @@ 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 and all corresponding settings is ON too
|
||||
rgb_mod_rainbow_timer_control(app);
|
||||
rgb_mod_rainbow_timer_starter(app);
|
||||
|
||||
} else {
|
||||
reset_mask &= ~reset_display_mask;
|
||||
notification_reset_notification_led_layer(&app->display);
|
||||
@@ -617,25 +664,23 @@ static NotificationApp* notification_app_alloc(void) {
|
||||
furi_pubsub_subscribe(app->event_record, input_event_callback, app);
|
||||
notification_message(app, &sequence_display_backlight_on);
|
||||
|
||||
//RGB MOD SECTION
|
||||
// --- RGB MOD INIT SETTINGS SECTION ---
|
||||
|
||||
//rgb mod
|
||||
app->settings.rgb_mod_installed = false;
|
||||
|
||||
//rgb mod rainbow init settings
|
||||
app->settings.rgb_mod_rainbow = false;
|
||||
app->settings.rgb_mod_rainbow_speed_ms = 1000;
|
||||
app->settings.rgb_mod_rainbow_step = 1;
|
||||
app->rgb_mod_rainbow_red = 1;
|
||||
app->rgb_mod_rainbow_green = 1;
|
||||
app->rgb_mod_rainbow_blue = 1;
|
||||
app->settings.rgb_mod_rainbow_mode = 0;
|
||||
app->settings.rgb_mod_rainbow_speed_ms = 100;
|
||||
app->settings.rgb_mod_rainbow_step = 5;
|
||||
app->rgb_mod_rainbow_red = 255;
|
||||
app->rgb_mod_rainbow_green = 0;
|
||||
app->rgb_mod_rainbow_blue = 0;
|
||||
app->rgb_mod_rainbow_stage = 1;
|
||||
|
||||
//define rgb_mod_rainbow_timer and they callback
|
||||
app->rgb_mod_rainbow_timer =
|
||||
furi_timer_alloc(rgb_mod_rainbow_timer_callback, FuriTimerTypePeriodic, app);
|
||||
return app;
|
||||
|
||||
// END OF RGB SECTION
|
||||
// --- END OF RGB MOD INIT SETTINGS SECTION ---
|
||||
}
|
||||
|
||||
static void notification_storage_callback(const void* message, void* context) {
|
||||
@@ -658,8 +703,8 @@ static void notification_apply_settings(NotificationApp* app) {
|
||||
}
|
||||
|
||||
notification_apply_lcd_contrast(app);
|
||||
// on system init start rgb_mod_rainbow_timer if they ON in config
|
||||
rgb_mod_rainbow_timer_control(app);
|
||||
//start rgb_mod_rainbow_timer on system init if they ON in config
|
||||
rgb_mod_rainbow_timer_starter(app);
|
||||
}
|
||||
|
||||
static void notification_init_settings(NotificationApp* app) {
|
||||
@@ -702,10 +747,10 @@ int32_t notification_srv(void* p) {
|
||||
notification_process_internal_message(app, &message);
|
||||
break;
|
||||
case SaveSettingsMessage:
|
||||
notification_save_settings(app);
|
||||
rgb_backlight_save_settings();
|
||||
//call rgb_mod_timer_control (start or stop) when we save settings
|
||||
rgb_mod_rainbow_timer_control(app);
|
||||
rgb_mod_rainbow_timer_starter(app);
|
||||
rgb_backlight_save_settings();
|
||||
notification_save_settings(app);
|
||||
break;
|
||||
case LoadSettingsMessage:
|
||||
notification_load_settings(app);
|
||||
|
||||
@@ -44,11 +44,12 @@ typedef struct {
|
||||
uint32_t display_off_delay_ms;
|
||||
int8_t contrast;
|
||||
bool vibro_on;
|
||||
|
||||
/// --- RGB MOD SETTINGS SECTION ---
|
||||
bool rgb_mod_installed;
|
||||
bool rgb_mod_rainbow;
|
||||
uint32_t rgb_mod_rainbow_mode;
|
||||
uint32_t rgb_mod_rainbow_speed_ms;
|
||||
uint16_t rgb_mod_rainbow_step;
|
||||
/// --- END OF RGB MOD SETTINGS SECTION ---
|
||||
|
||||
} NotificationSettings;
|
||||
|
||||
@@ -61,13 +62,15 @@ struct NotificationApp {
|
||||
NotificationLedLayer led[NOTIFICATION_LED_COUNT];
|
||||
uint8_t display_led_lock;
|
||||
|
||||
// rainbow mode section
|
||||
// --- RGB RAINBOW MODE VARIABLES SECTION ---
|
||||
FuriTimer* rgb_mod_rainbow_timer;
|
||||
uint16_t rgb_mod_rainbow_red;
|
||||
uint16_t rgb_mod_rainbow_green;
|
||||
uint16_t rgb_mod_rainbow_blue;
|
||||
|
||||
int16_t rgb_mod_rainbow_red;
|
||||
int16_t rgb_mod_rainbow_green;
|
||||
int16_t rgb_mod_rainbow_blue;
|
||||
uint8_t rgb_mod_rainbow_stage;
|
||||
// --- ENd OF RGB RAINBOW MODE VARIABLES SECTION ---
|
||||
|
||||
NotificationSettings settings;
|
||||
};
|
||||
|
||||
void notification_message_save_settings(NotificationApp* app);
|
||||
void notification_message_save_settings(NotificationApp* app);
|
||||
Reference in New Issue
Block a user