1
// ramp-mode.h: Ramping functions for Anduril.
2
// Copyright (C) 2017-2023 Selene ToyKeeper
3
// SPDX-License-Identifier: GPL-3.0-or-later
8
#define RAMP_LENGTH 150 // default, if not overridden in a driver cfg file
11
// thermal properties, if not defined per-driver
12
#ifndef MIN_THERM_STEPDOWN
13
// TODO: Replace MAX_Xx7135 with MAX_CH1, MAX_CH2, MAX_REGULATED, etc
14
#define MIN_THERM_STEPDOWN MAX_1x7135 // lowest value it'll step down to
16
#ifndef THERM_FASTER_LEVEL
18
#define THERM_FASTER_LEVEL MAX_Nx7135 // throttle back faster when high
20
#define THERM_FASTER_LEVEL (RAMP_SIZE*4/5) // throttle back faster when high
24
#if defined(USE_SIMPLE_UI)
25
// TODO: Move these settings to config-default.h?
26
// start in the simple UI after each factory reset?
27
#ifndef SIMPLE_UI_ACTIVE
28
#define SIMPLE_UI_ACTIVE 1
30
#ifndef SIMPLE_UI_FLOOR
31
#define SIMPLE_UI_FLOOR (RAMP_SIZE*2/15)
33
#ifndef SIMPLE_UI_CEIL
34
#define SIMPLE_UI_CEIL (RAMP_SIZE*9/15)
36
#ifndef SIMPLE_UI_STEPS
37
#define SIMPLE_UI_STEPS 5
42
// configure the timing of turning on/off in regular ramp mode
43
// press: react as soon as the button is pressed
45
// release: react as soon as the button is released
47
// timeout: react as soon as we're sure the user isn't doing a double-click
49
// defaults are release on, timeout off
51
//#define B_TIMING_ON B_PRESS_T
52
#define B_TIMING_ON B_RELEASE_T
55
//#define B_TIMING_OFF B_RELEASE_T
56
#define B_TIMING_OFF B_TIMEOUT_T
60
// default ramp options if not overridden earlier per-driver
62
#define RAMP_STYLE 0 // smooth default
64
#ifndef DEFAULT_RAMP_SPEED
65
#define DEFAULT_RAMP_SPEED 1 // WDT ticks per "frame", must be 1 or more
67
#ifndef RAMP_SMOOTH_FLOOR
68
#define RAMP_SMOOTH_FLOOR 1
70
#ifndef RAMP_SMOOTH_CEIL
72
#define RAMP_SMOOTH_CEIL MAX_Nx7135
74
#define RAMP_SMOOTH_CEIL MAX_LEVEL - 30
77
#ifndef RAMP_DISCRETE_FLOOR
78
#define RAMP_DISCRETE_FLOOR 20
80
#ifndef RAMP_DISCRETE_CEIL
81
#define RAMP_DISCRETE_CEIL RAMP_SMOOTH_CEIL
83
#ifndef RAMP_DISCRETE_STEPS
84
#define RAMP_DISCRETE_STEPS 7
87
// mile marker(s) partway up the ramp
88
// default: blink only at border between regulated and FET
89
#ifdef BLINK_AT_RAMP_MIDDLE
90
// FIXME: remove PWM_CHANNELS, use some other abstraction
92
#ifndef BLINK_AT_RAMP_MIDDLE_1
93
#define BLINK_AT_RAMP_MIDDLE_1 MAX_Nx7135
94
#ifndef BLINK_AT_RAMP_MIDDLE_2
95
#define BLINK_AT_RAMP_MIDDLE_2 MAX_1x7135
99
#ifndef BLINK_AT_RAMP_MIDDLE_1
100
#define BLINK_AT_RAMP_MIDDLE_1 MAX_1x7135
106
// ramping mode and its related config mode
107
uint8_t steady_state(Event event, uint16_t arg);
109
#ifdef USE_RAMP_CONFIG
110
uint8_t ramp_config_state(Event event, uint16_t arg);
111
void ramp_config_save(uint8_t step, uint8_t value);
113
uint8_t simple_ui_config_state(Event event, uint16_t arg);
117
#if defined(USE_MANUAL_MEMORY_TIMER) || defined(USE_RAMP_AFTER_MOON_CONFIG) || defined(USE_2C_STYLE_CONFIG) || defined(USE_AUTO_SUNSET)
118
#define USE_RAMP_EXTRAS_CONFIG
120
#ifdef USE_RAMP_EXTRAS_CONFIG
121
uint8_t ramp_extras_config_state(Event event, uint16_t arg);
124
// calculate the nearest ramp level which would be valid at the moment
125
// (is a no-op for smooth ramp, but limits discrete ramp to only the
126
// correct levels for the user's config)
127
uint8_t nearest_level(int16_t target);
129
// ensure ramp globals are correct
130
void ramp_update_config();
132
#if defined(USE_THERMAL_REGULATION) || defined(USE_SMOOTH_STEPS)
133
// brightness before thermal step-down
134
uint8_t target_level = 0;
135
void set_level_and_therm_target(uint8_t level);
137
#define set_level_and_therm_target(level) set_level(level)
141
// brightness control
142
uint8_t memorized_level = DEFAULT_LEVEL;
143
#ifdef USE_MANUAL_MEMORY
144
void manual_memory_restore();
145
void manual_memory_save();
146
#ifndef DEFAULT_MANUAL_MEMORY
147
#define DEFAULT_MANUAL_MEMORY 0
149
#ifdef USE_MANUAL_MEMORY_TIMER
150
#ifndef DEFAULT_MANUAL_MEMORY_TIMER
151
#define DEFAULT_MANUAL_MEMORY_TIMER 0
156
#ifndef DEFAULT_2C_STYLE_SIMPLE
157
#define DEFAULT_2C_STYLE_SIMPLE 0
160
#ifdef USE_2C_STYLE_CONFIG
161
#ifndef DEFAULT_2C_STYLE
162
#define DEFAULT_2C_STYLE 2
165
#ifdef USE_2C_MAX_TURBO
166
#error Cannot use USE_2C_MAX_TURBO and USE_2C_STYLE_CONFIG at the same time.
170
#ifdef USE_RAMP_SPEED_CONFIG
171
#define ramp_speed (cfg.ramp_stepss[0])
173
#ifdef USE_RAMP_AFTER_MOON_CONFIG
174
#ifndef DEFAULT_DONT_RAMP_AFTER_MOON
175
#define DEFAULT_DONT_RAMP_AFTER_MOON 0
178
// current values, regardless of style
179
uint8_t ramp_floor = RAMP_SMOOTH_FLOOR;
180
uint8_t ramp_ceil = RAMP_SMOOTH_CEIL;
182
uint8_t ramp_discrete_step_size; // don't set this
184
#ifdef USE_SUNSET_TIMER
185
uint8_t sunset_timer_orig_level = 0;
186
void reset_sunset_timer();
189
#ifdef USE_RAMP_EXTRAS_CONFIG
191
ramp_extras_cfg_zero = 0,
192
manual_memory_config_step,
193
#ifdef USE_MANUAL_MEMORY_TIMER
194
manual_memory_timer_config_step,
196
#ifdef USE_RAMP_AFTER_MOON_CONFIG
197
dont_ramp_after_moon_config_step,
199
#ifdef USE_2C_STYLE_CONFIG
200
ramp_2c_style_config_step,
202
#ifdef USE_SMOOTH_STEPS
203
smooth_steps_style_config_step,
205
ramp_extras_config_num_steps
206
} ramp_extras_config_steps_e;
209
#ifdef USE_GLOBALS_CONFIG
211
globals_cfg_zero = 0,
212
#if defined(USE_CHANNEL_MODE_ARGS) && defined(USE_STEPPED_TINT_RAMPING)
213
tint_style_config_step,
215
#ifdef USE_JUMP_START
216
jump_start_config_step,
218
globals_config_num_steps
219
} globals_config_steps_e;
221
void globals_config_save(uint8_t step, uint8_t value);
222
uint8_t globals_config_state(Event event, uint16_t arg);