diff --git a/applications/main/subghz/helpers/subghz_txrx.c b/applications/main/subghz/helpers/subghz_txrx.c index ca3f0b300..46d0a7eef 100644 --- a/applications/main/subghz/helpers/subghz_txrx.c +++ b/applications/main/subghz/helpers/subghz_txrx.c @@ -101,12 +101,39 @@ void subghz_txrx_set_preset( size_t preset_data_size) { furi_assert(instance); furi_string_set(instance->preset->name, preset_name); + SubGhzRadioPreset* preset = instance->preset; preset->frequency = frequency; preset->data = preset_data; preset->data_size = preset_data_size; } +uint8_t* + subghz_txrx_set_tx_power(uint8_t* preset_data, size_t preset_data_size, uint32_t tx_power) { +#define TX_POWER_OFFSET 7 +#define TX_PRESET_POWER_COUNT 11 + const uint32_t tx_power_value[TX_PRESET_POWER_COUNT] = { + 0, + 0xC0, + 0xC5, + 0xCD, + 0x86, + 0x50, + 0x37, + 0x26, + 0x1D, + 0x17, + 0x03, + }; + + //Set the TX Power Here in the CC1101 register... + if(tx_power) + preset_data[preset_data_size - TX_POWER_OFFSET] = (uint8_t)tx_power_value[tx_power]; + + //Pass back the preset_so we can call one liners. + return preset_data; +} + const char* subghz_txrx_get_preset_name(SubGhzTxRx* instance, const char* preset) { UNUSED(instance); const char* preset_name = ""; @@ -677,20 +704,27 @@ void subghz_txrx_set_default_preset(SubGhzTxRx* instance, uint32_t frequency) { subghz_txrx_set_preset(instance, default_modulation, frequency, NULL, 0); } -const char* - subghz_txrx_set_preset_internal(SubGhzTxRx* instance, uint32_t frequency, uint8_t index) { +const char* subghz_txrx_set_preset_internal( + SubGhzTxRx* instance, + uint32_t frequency, + uint8_t index, + uint32_t tx_power) { furi_assert(instance); + //Grab the prset name. SubGhzSetting* setting = subghz_txrx_get_setting(instance); const char* preset_name = subghz_setting_get_preset_name(setting, index); subghz_setting_set_default_frequency(setting, frequency); - subghz_txrx_set_preset( - instance, - preset_name, - frequency, - subghz_setting_get_preset_data(setting, index), - subghz_setting_get_preset_data_size(setting, index)); + //Get the preset data now so we can set TX power. + uint8_t* preset_data = subghz_setting_get_preset_data(setting, index); + size_t preset_data_size = subghz_setting_get_preset_data_size(setting, index); + + //Edit TX power, if necessary. + subghz_txrx_set_tx_power(preset_data, preset_data_size, tx_power); + + //Set the Updated Preset. + subghz_txrx_set_preset(instance, preset_name, frequency, preset_data, preset_data_size); return preset_name; } diff --git a/applications/main/subghz/helpers/subghz_txrx.h b/applications/main/subghz/helpers/subghz_txrx.h index 0f3b64304..259fddfc2 100644 --- a/applications/main/subghz/helpers/subghz_txrx.h +++ b/applications/main/subghz/helpers/subghz_txrx.h @@ -57,6 +57,16 @@ void subghz_txrx_set_preset( uint8_t* preset_data, size_t preset_data_size); +/** + * Set TX Power + * + * @param preset_data Data of preset + * @param preset_data_size Size of preset data + * @param tx_power Menu Index of TX Power Setting. (Saves iterating in Config enter) + */ +uint8_t* + subghz_txrx_set_tx_power(uint8_t* preset_data, size_t preset_data_size, uint32_t tx_power); + /** * Get name of preset * @@ -360,7 +370,11 @@ void subghz_txrx_set_default_preset(SubGhzTxRx* instance, uint32_t frequency); * @param instance - instance Pointer to a SubGhzTxRx * @param frequency - frequency of new preset * @param index - index of preset taken from SubGhzSetting + * @param tx_power - index of TX Power menu index option to use. * @return const char* - name of preset */ -const char* - subghz_txrx_set_preset_internal(SubGhzTxRx* instance, uint32_t frequency, uint8_t index); +const char* subghz_txrx_set_preset_internal( + SubGhzTxRx* instance, + uint32_t frequency, + uint8_t index, + uint32_t tx_power); diff --git a/applications/main/subghz/scenes/subghz_scene_radio_settings.c b/applications/main/subghz/scenes/subghz_scene_radio_settings.c index 8e48d0c91..87e2d8269 100644 --- a/applications/main/subghz/scenes/subghz_scene_radio_settings.c +++ b/applications/main/subghz/scenes/subghz_scene_radio_settings.c @@ -66,6 +66,22 @@ const int32_t debug_counter_val[DEBUG_COUNTER_COUNT] = { -50, }; +//TX Power +#define TX_POWER_COUNT 11 +const char* const tx_power_text[TX_POWER_COUNT] = { + "Preset", + "12dBm", + "10dBm", + "7dBm", + "5dBm", + "0dBm", + "-6dBm", + "-10dBm", + "-15dBm", + "-20dBm", + "-30dBm", +}; + static void subghz_scene_radio_settings_set_device(VariableItem* item) { SubGhz* subghz = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); @@ -80,6 +96,20 @@ static void subghz_scene_radio_settings_set_device(VariableItem* item) { subghz_txrx_radio_device_set(subghz->txrx, radio_device_value[index]); } +static void subghz_scene_radio_settings_set_tx_power(VariableItem* item) { + SubGhz* subghz = variable_item_get_context(item); + uint8_t index = variable_item_get_current_value_index(item); + + //Update the Menu Item on screen + variable_item_set_current_value_text(item, tx_power_text[index]); + + //Set TX power and remember setting + subghz->last_settings->tx_power = subghz->tx_power = index; + + //Save the settings now, this is the convention here! + subghz_last_settings_save(subghz->last_settings); +} + static void subghz_scene_receiver_config_set_debug_pin(VariableItem* item) { SubGhz* subghz = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); @@ -144,6 +174,18 @@ void subghz_scene_radio_settings_on_enter(void* context) { variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, radio_device_text[value_index]); + //Add TX Power + item = variable_item_list_add( + subghz->variable_item_list, + "TX Power", + TX_POWER_COUNT, + subghz_scene_radio_settings_set_tx_power, + subghz); + + value_index = subghz->tx_power; + variable_item_set_current_value_index(item, value_index); + variable_item_set_current_value_text(item, tx_power_text[value_index]); + item = variable_item_list_add( variable_item_list, "Protocol Names", diff --git a/applications/main/subghz/scenes/subghz_scene_read_raw.c b/applications/main/subghz/scenes/subghz_scene_read_raw.c index 355c339ff..6fe093dfc 100644 --- a/applications/main/subghz/scenes/subghz_scene_read_raw.c +++ b/applications/main/subghz/scenes/subghz_scene_read_raw.c @@ -110,7 +110,8 @@ void subghz_scene_read_raw_on_enter(void* context) { subghz_txrx_set_preset_internal( subghz->txrx, subghz->last_settings->frequency, - subghz->last_settings->preset_index); + subghz->last_settings->preset_index, + subghz->last_settings->tx_power); } } subghz_scene_read_raw_update_statusbar(subghz); diff --git a/applications/main/subghz/scenes/subghz_scene_receiver.c b/applications/main/subghz/scenes/subghz_scene_receiver.c index 1a0063418..b525a2847 100644 --- a/applications/main/subghz/scenes/subghz_scene_receiver.c +++ b/applications/main/subghz/scenes/subghz_scene_receiver.c @@ -165,11 +165,15 @@ void subghz_scene_receiver_on_enter(void* context) { if(subghz_rx_key_state_get(subghz) == SubGhzRxKeyStateIDLE) { subghz_txrx_set_preset_internal( - subghz->txrx, subghz->last_settings->frequency, subghz->last_settings->preset_index); + subghz->txrx, + subghz->last_settings->frequency, + subghz->last_settings->preset_index, + subghz->last_settings->tx_power); subghz->filter = subghz->last_settings->filter; subghz_txrx_receiver_set_filter(subghz->txrx, subghz->filter); subghz->ignore_filter = subghz->last_settings->ignore_filter; + subghz->tx_power = subghz->last_settings->tx_power; subghz_history_reset(history); subghz_rx_key_state_set(subghz, SubGhzRxKeyStateStart); diff --git a/applications/main/subghz/scenes/subghz_scene_receiver_config.c b/applications/main/subghz/scenes/subghz_scene_receiver_config.c index a6e3324be..4781b326e 100644 --- a/applications/main/subghz/scenes/subghz_scene_receiver_config.c +++ b/applications/main/subghz/scenes/subghz_scene_receiver_config.c @@ -185,6 +185,11 @@ static void subghz_scene_receiver_config_set_frequency(VariableItem* item) { frequency / 1000000, (frequency % 1000000) / 10000); variable_item_set_current_value_text(item, text_buf); + + //Set TX Power + subghz_txrx_set_tx_power(preset.data, preset.data_size, subghz->tx_power); + + //Set the preset now. subghz_txrx_set_preset( subghz->txrx, furi_string_get_cstr(preset.name), @@ -211,12 +216,14 @@ static void subghz_scene_receiver_config_set_preset(VariableItem* item) { variable_item_set_current_value_text(item, preset_name); //subghz->last_settings->preset = index; SubGhzRadioPreset preset = subghz_txrx_get_preset(subghz->txrx); + uint8_t* preset_data = subghz_setting_get_preset_data(setting, index); + size_t preset_data_size = subghz_setting_get_preset_data_size(setting, index); + + //Edit TX power, if necessary. + subghz_txrx_set_tx_power(preset_data, preset_data_size, subghz->tx_power); + subghz_txrx_set_preset( - subghz->txrx, - preset_name, - preset.frequency, - subghz_setting_get_preset_data(setting, index), - subghz_setting_get_preset_data_size(setting, index)); + subghz->txrx, preset_name, preset.frequency, preset_data, preset_data_size); subghz->last_settings->preset_index = index; } @@ -242,6 +249,9 @@ static void subghz_scene_receiver_config_set_hopping(VariableItem* item) { (frequency % 1000000) / 10000); variable_item_set_current_value_text(frequency_item, text_buf); + //Edit TX power, if necessary. + subghz_txrx_set_tx_power(preset.data, preset.data_size, subghz->tx_power); + // Maybe better add one more function with only with the frequency argument? subghz_txrx_set_preset( subghz->txrx, @@ -341,7 +351,8 @@ static void subghz_scene_receiver_config_var_list_enter_callback(void* context, subghz_txrx_set_preset_internal( subghz->txrx, SUBGHZ_LAST_SETTING_DEFAULT_FREQUENCY, - SUBGHZ_LAST_SETTING_DEFAULT_PRESET); + SUBGHZ_LAST_SETTING_DEFAULT_PRESET, + subghz->tx_power); SubGhzSetting* setting = subghz_txrx_get_setting(subghz->txrx); SubGhzRadioPreset preset = subghz_txrx_get_preset(subghz->txrx); @@ -359,7 +370,7 @@ static void subghz_scene_receiver_config_var_list_enter_callback(void* context, subghz->last_settings->ignore_filter = subghz->ignore_filter; subghz->last_settings->filter = subghz->filter; subghz->last_settings->delete_old_signals = false; - + subghz->last_settings->tx_power = subghz->tx_power = 0; subghz_txrx_speaker_set_state(subghz->txrx, speaker_value[default_index]); subghz_txrx_hopper_set_state(subghz->txrx, hopping_value[default_index]); diff --git a/applications/main/subghz/scenes/subghz_scene_receiver_info.c b/applications/main/subghz/scenes/subghz_scene_receiver_info.c index f2970d343..61502c16a 100644 --- a/applications/main/subghz/scenes/subghz_scene_receiver_info.c +++ b/applications/main/subghz/scenes/subghz_scene_receiver_info.c @@ -36,6 +36,10 @@ static bool subghz_scene_receiver_info_update_parser(void* context) { SubGhzRadioPreset* preset = subghz_history_get_radio_preset(subghz->history, subghz->idx_menu_chosen); + + //Edit TX power, if necessary. + subghz_txrx_set_tx_power(preset->data, preset->data_size, subghz->tx_power); + subghz_txrx_set_preset( subghz->txrx, furi_string_get_cstr(preset->name), diff --git a/applications/main/subghz/subghz.c b/applications/main/subghz/subghz.c index f8877551d..51b7316e4 100644 --- a/applications/main/subghz/subghz.c +++ b/applications/main/subghz/subghz.c @@ -207,7 +207,10 @@ SubGhz* subghz_alloc(bool alloc_for_tx_only) { if(!alloc_for_tx_only) { subghz_txrx_set_preset_internal( - subghz->txrx, subghz->last_settings->frequency, subghz->last_settings->preset_index); + subghz->txrx, + subghz->last_settings->frequency, + subghz->last_settings->preset_index, + subghz->tx_power); subghz->history = subghz_history_alloc(); } @@ -218,10 +221,13 @@ SubGhz* subghz_alloc(bool alloc_for_tx_only) { if(!alloc_for_tx_only) { subghz->ignore_filter = subghz->last_settings->ignore_filter; subghz->filter = subghz->last_settings->filter; + subghz->tx_power = subghz->last_settings->tx_power; } else { subghz->filter = SubGhzProtocolFlag_Decodable; subghz->ignore_filter = 0x0; + subghz->tx_power = 0; } + subghz_txrx_receiver_set_filter(subghz->txrx, subghz->filter); subghz_txrx_set_need_save_callback(subghz->txrx, subghz_save_to_file, subghz); diff --git a/applications/main/subghz/subghz_i.c b/applications/main/subghz/subghz_i.c index 1bdaf07d9..078fa1f2c 100644 --- a/applications/main/subghz/subghz_i.c +++ b/applications/main/subghz/subghz_i.c @@ -137,12 +137,19 @@ bool subghz_key_load(SubGhz* subghz, const char* file_path, bool show_dialog) { } size_t preset_index = subghz_setting_get_inx_preset_by_name(setting, furi_string_get_cstr(temp_str)); + + //Edit TX power, if necessary. + uint8_t* preset_data = subghz_setting_get_preset_data(setting, preset_index); + size_t preset_data_size = subghz_setting_get_preset_data_size(setting, preset_index); + subghz_txrx_set_tx_power(preset_data, preset_data_size, subghz->tx_power); + + //Set the Updated Preset. subghz_txrx_set_preset( subghz->txrx, furi_string_get_cstr(temp_str), temp_data32, - subghz_setting_get_preset_data(setting, preset_index), - subghz_setting_get_preset_data_size(setting, preset_index)); + preset_data, + preset_data_size); //Load protocol if(!flipper_format_read_string(fff_data_file, "Protocol", temp_str)) { diff --git a/applications/main/subghz/subghz_i.h b/applications/main/subghz/subghz_i.h index 10a2ce9f8..01f3ccf2f 100644 --- a/applications/main/subghz/subghz_i.h +++ b/applications/main/subghz/subghz_i.h @@ -93,7 +93,7 @@ struct SubGhz { uint16_t idx_menu_chosen; SubGhzLoadTypeFile load_type_file; - + uint32_t tx_power; void* rpc_ctx; }; diff --git a/applications/main/subghz/subghz_last_settings.c b/applications/main/subghz/subghz_last_settings.c index 0a4783a23..a38f39026 100644 --- a/applications/main/subghz/subghz_last_settings.c +++ b/applications/main/subghz/subghz_last_settings.c @@ -19,6 +19,7 @@ #define SUBGHZ_LAST_SETTING_FIELD_DELETE_OLD "DelOldSignals" #define SUBGHZ_LAST_SETTING_FIELD_HOPPING_THRESHOLD "HoppingThreshold" #define SUBGHZ_LAST_SETTING_FIELD_LED_AND_POWER_AMP "LedAndPowerAmp" +#define SUBGHZ_LAST_SETTING_FIELD_TX_POWER "TXPower" SubGhzLastSettings* subghz_last_settings_alloc(void) { SubGhzLastSettings* instance = malloc(sizeof(SubGhzLastSettings)); @@ -119,6 +120,10 @@ void subghz_last_settings_load(SubGhzLastSettings* instance, size_t preset_count 1)) { flipper_format_rewind(fff_data_file); } + if(!flipper_format_read_uint32( + fff_data_file, SUBGHZ_LAST_SETTING_FIELD_TX_POWER, &instance->tx_power, 1)) { + flipper_format_rewind(fff_data_file); + } if(!flipper_format_read_float( fff_data_file, SUBGHZ_LAST_SETTING_FIELD_HOPPING_THRESHOLD, @@ -222,6 +227,10 @@ bool subghz_last_settings_save(SubGhzLastSettings* instance) { file, SUBGHZ_LAST_SETTING_FIELD_DELETE_OLD, &instance->delete_old_signals, 1)) { break; } + if(!flipper_format_write_uint32( + file, SUBGHZ_LAST_SETTING_FIELD_TX_POWER, &instance->tx_power, 1)) { + break; + } if(!flipper_format_write_float( file, SUBGHZ_LAST_SETTING_FIELD_HOPPING_THRESHOLD, diff --git a/applications/main/subghz/subghz_last_settings.h b/applications/main/subghz/subghz_last_settings.h index 78de5e51c..e42ee868d 100644 --- a/applications/main/subghz/subghz_last_settings.h +++ b/applications/main/subghz/subghz_last_settings.h @@ -26,6 +26,7 @@ typedef struct { bool delete_old_signals; float hopping_threshold; bool leds_and_amp; + uint32_t tx_power; } SubGhzLastSettings; SubGhzLastSettings* subghz_last_settings_alloc(void); diff --git a/applications/services/notification/notification.h b/applications/services/notification/notification.h index 0e1c07e5d..54e1eb895 100644 --- a/applications/services/notification/notification.h +++ b/applications/services/notification/notification.h @@ -65,6 +65,7 @@ typedef enum { NotificationMessageTypeDelay, NotificationMessageTypeLedDisplayBacklight, + NotificationMessageTypeLedDisplayBacklightForceOn, NotificationMessageTypeLedDisplayBacklightEnforceOn, NotificationMessageTypeLedDisplayBacklightEnforceAuto, diff --git a/applications/services/notification/notification_app.c b/applications/services/notification/notification_app.c index 97a7401a8..8a62f7ac9 100644 --- a/applications/services/notification/notification_app.c +++ b/applications/services/notification/notification_app.c @@ -248,7 +248,7 @@ void night_shift_timer_start(NotificationApp* app) { if(furi_timer_is_running(app->night_shift_timer)) { furi_timer_stop(app->night_shift_timer); } - furi_timer_start(app->night_shift_timer, furi_ms_to_ticks(2000)); + furi_timer_start(app->night_shift_timer, furi_ms_to_ticks(1000)); } } @@ -277,6 +277,12 @@ void night_shift_timer_callback(void* context) { } } +// force backlight ON when night_shift_demo_timer will be ended +void night_shift_demo_timer_callback(void* context) { + furi_assert(context); + NotificationApp* app = context; + notification_message(app, &sequence_display_backlight_force_on); +} // --- NIGHT SHIFT END --- void notification_message_save_settings(NotificationApp* app) { @@ -498,6 +504,19 @@ static void notification_process_notification_message( } } break; + case NotificationMessageTypeLedDisplayBacklightForceOn: + // Force Backlight ON even if its ON now + lcd_backlight_is_on = false; + notification_apply_notification_led_layer( + &app->display, + notification_message->data.led.value * display_brightness_setting * + app->current_night_shift * 1.0f); + reset_mask |= reset_display_mask; + lcd_backlight_is_on = true; + + //start rgb_mod_rainbow_timer when display backlight is ON and all corresponding settings is ON too + rainbow_timer_starter(app); + break; case NotificationMessageTypeLedDisplayBacklightEnforceOn: if(!app->display_led_lock) { app->display_led_lock = true; @@ -740,6 +759,9 @@ static bool notification_load_settings(NotificationApp* app) { storage_file_free(file); furi_record_close(RECORD_STORAGE); + // "kostyl" for update old setting to new without change settings version + if(app->settings.display_off_delay_ms < 2000) app->settings.display_off_delay_ms = 2000; + return fs_result; } @@ -925,6 +947,11 @@ int32_t notification_srv(void* p) { // define rainbow_timer and they callback app->rainbow_timer = furi_timer_alloc(rainbow_timer_callback, FuriTimerTypePeriodic, app); + // define night_shift_demo_timer and they callback. + // used for Setting menu to demonstrate night_shift_backlight when user change value + app->night_shift_demo_timer = + furi_timer_alloc(night_shift_demo_timer_callback, FuriTimerTypeOnce, app); + // if rgb_backlight_installed then start rainbow or set leds colors from saved settings (default index = 0) if(app->settings.rgb.rgb_backlight_installed) { if(app->settings.rgb.rainbow_mode > 0) { diff --git a/applications/services/notification/notification_app.h b/applications/services/notification/notification_app.h index abf3cc15e..111fbd481 100644 --- a/applications/services/notification/notification_app.h +++ b/applications/services/notification/notification_app.h @@ -86,6 +86,7 @@ struct NotificationApp { NotificationSettings settings; FuriTimer* night_shift_timer; + FuriTimer* night_shift_demo_timer; float current_night_shift; FuriTimer* rainbow_timer; diff --git a/applications/services/notification/notification_messages.c b/applications/services/notification/notification_messages.c index 3dc154654..e3f4fbc2c 100644 --- a/applications/services/notification/notification_messages.c +++ b/applications/services/notification/notification_messages.c @@ -17,6 +17,12 @@ const NotificationMessage message_display_backlight_off = { .data.led.value = 0x00, }; +/** Display: backlight wakeup even if its ON now */ +const NotificationMessage message_display_backlight_force_on = { + .type = NotificationMessageTypeLedDisplayBacklightForceOn, + .data.led.value = 0xFF, +}; + /** Display: backlight always on */ const NotificationMessage message_display_backlight_enforce_on = { .type = NotificationMessageTypeLedDisplayBacklightEnforceOn, @@ -259,6 +265,12 @@ const NotificationSequence sequence_display_backlight_off = { NULL, }; +/** Display: backlight wakeup even if its ON now */ +const NotificationSequence sequence_display_backlight_force_on = { + &message_display_backlight_force_on, + NULL, +}; + /** Display: backlight always on lock */ const NotificationSequence sequence_display_backlight_enforce_on = { &message_display_backlight_enforce_on, diff --git a/applications/services/notification/notification_messages.h b/applications/services/notification/notification_messages.h index 3960d93b7..8af499841 100644 --- a/applications/services/notification/notification_messages.h +++ b/applications/services/notification/notification_messages.h @@ -87,7 +87,8 @@ extern const NotificationSequence sequence_display_backlight_on; extern const NotificationSequence sequence_display_backlight_off; /** Display: backlight force off after a delay of 1000ms */ extern const NotificationSequence sequence_display_backlight_off_delay_1000; - +/** Display: backlight wakeup even if its ON now */ +extern const NotificationSequence sequence_display_backlight_force_on; /** Display: backlight always on lock */ extern const NotificationSequence sequence_display_backlight_enforce_on; /** Display: backlight always on unlock */ diff --git a/applications/settings/notification_settings/notification_settings_app.c b/applications/settings/notification_settings/notification_settings_app.c index 533db3cd0..e82b02c87 100644 --- a/applications/settings/notification_settings/notification_settings_app.c +++ b/applications/settings/notification_settings/notification_settings_app.c @@ -87,7 +87,7 @@ const float volume_value[VOLUME_COUNT] = { #define DELAY_COUNT 12 const char* const delay_text[DELAY_COUNT] = { "Always ON", - "1s", + "2s", "5s", "10s", "15s", @@ -100,7 +100,7 @@ const char* const delay_text[DELAY_COUNT] = { "30min", }; const uint32_t delay_value[DELAY_COUNT] = - {0, 1000, 5000, 10000, 15000, 30000, 60000, 90000, 120000, 300000, 600000, 1800000}; + {0, 2000, 5000, 10000, 15000, 30000, 60000, 90000, 120000, 300000, 600000, 1800000}; #define VIBRO_COUNT 2 const char* const vibro_text[VIBRO_COUNT] = { @@ -295,7 +295,7 @@ static void backlight_changed(VariableItem* item) { variable_item_set_current_value_text(item, backlight_text[index]); app->notification->settings.display_brightness = backlight_value[index]; - notification_message(app->notification, &sequence_display_backlight_on); + notification_message(app->notification, &sequence_display_backlight_force_on); } static void screen_changed(VariableItem* item) { @@ -557,11 +557,6 @@ static void night_shift_changed(VariableItem* item) { variable_item_set_current_value_text(item, night_shift_text[index]); app->notification->settings.night_shift = night_shift_value[index]; - app->notification->current_night_shift = night_shift_value[index]; - app->notification->current_night_shift = night_shift_value[index]; - - // force demo night_shift brightness to rgb backlight and stock backlight - notification_message(app->notification, &sequence_display_backlight_on); for(int i = 4; i < 6; i++) { VariableItem* t_item = variable_item_list_get(app->variable_item_list, i); @@ -572,10 +567,22 @@ static void night_shift_changed(VariableItem* item) { } } + // force demo night_shift brightness to rgb backlight and stock backlight for 1,2 sec + // while 1,2 seconds are running, there is another timer "night_shift_timer" can change current_night_shift to day or night value + // so when night_shift_demo_timer ended backlight force ON to day or night brightness + app->notification->current_night_shift = night_shift_value[index]; + notification_message(app->notification, &sequence_display_backlight_force_on); + if(night_shift_value[index] != 1) { night_shift_timer_start(app->notification); + if(furi_timer_is_running(app->notification->night_shift_demo_timer)) { + furi_timer_stop(app->notification->night_shift_demo_timer); + } + furi_timer_start(app->notification->night_shift_demo_timer, furi_ms_to_ticks(1200)); } else { night_shift_timer_stop(app->notification); + if(furi_timer_is_running(app->notification->night_shift_demo_timer)) + furi_timer_stop(app->notification->night_shift_demo_timer); } notification_message_save_settings(app->notification); diff --git a/targets/f7/api_symbols.csv b/targets/f7/api_symbols.csv index 831932efe..e3159a17e 100755 --- a/targets/f7/api_symbols.csv +++ b/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,87.5,, +Version,+,87.6,, Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,, Header,+,applications/services/applications.h,, Header,+,applications/services/bt/bt_service/bt.h,, @@ -5383,6 +5383,7 @@ Variable,+,sequence_charged,const NotificationSequence, Variable,+,sequence_charging,const NotificationSequence, Variable,+,sequence_display_backlight_enforce_auto,const NotificationSequence, Variable,+,sequence_display_backlight_enforce_on,const NotificationSequence, +Variable,+,sequence_display_backlight_force_on,const NotificationSequence, Variable,+,sequence_display_backlight_off,const NotificationSequence, Variable,+,sequence_display_backlight_off_delay_1000,const NotificationSequence, Variable,+,sequence_display_backlight_on,const NotificationSequence,