Lamp-Da 0.1
A compact lantern project
Loading...
Searching...
No Matches
Classes | Static Public Member Functions | Static Public Attributes | List of all members
lampda::modes::default_modes::RainMode Struct Reference

Emulate falling rain using the IMU. Interaction with the susnet timer to fade out the rain and make it stop at the same time then the lamp. More...

#include <rain_mode.hpp>

Inheritance diagram for lampda::modes::default_modes::RainMode:
lampda::modes::BasicMode

Classes

struct  StateTy
 

Static Public Member Functions

static void on_enter_mode (auto &ctx)
 
static void custom_ramp_update (auto &ctx, uint8_t rampValue)
 Custom ramp controls the rain density.
 
static void sunset_update (auto &ctx, float progress)
 Sunset timer will fade out the rain to zero.
 
static void loop (auto &ctx)
 
static void on_exit_mode (auto &ctx)
 Custom callback when mode goes outside of focus (optional)
 
static void brightness_update (auto &ctx, brightness_t brightness)
 Custom callback when brightness changes (optional)
 
static bool custom_click (auto &ctx, uint8_t nbClick)
 Custom "usermode" button UI for "click" action (optional)
 
static bool custom_hold (auto &ctx, uint8_t nbClickAndHold, bool isEndOfHoldEvent, uint32_t holdDuration)
 Custom "usermode" button UI for "click+hold" action (optional)
 
static void power_on_sequence (auto &ctx)
 Custom callback when the system powers on (optional)
 
static void power_off_sequence (auto &ctx)
 Custom callback when the system powers off (optional)
 
static void read_parameters (auto &ctx)
 Custom callback to read parameters from filesystem (optional)
 
static void write_parameters (auto &ctx)
 Custom callback to write parameters to filesystem (optional)
 
static void user_thread (auto &ctx)
 Custom secondary loop, executed in another thread (optional)
 

Static Public Attributes

static constexpr bool hasCustomRamp = true
 hint manager to save our custom ramp
 
static constexpr bool hasSunsetAnimation = true
 sunset animation on the rain
 
static constexpr float lightRainDropsPerSecond = 1
 average drops per seconds for a light rain
 
static constexpr float heavyRainDropsPerSecond = 700
 average drops per seconds for heavy rain
 
static constexpr bool isGroupManager = false
 
static constexpr bool hasBrightCallback = false
 Toggles the use of custom BasicMode::brightness_update() callback.
 
static constexpr bool hasButtonCustomUI = false
 Toggles "usermode" button UI custom_click() and custom_hold()
 
static constexpr bool hasSystemCallbacks = false
 Toggles advanced system callbacks, see list here .
 
static constexpr bool requireUserThread = false
 Toggles the use of custom BasicMode::user_thread() callback.
 
static constexpr uint32_t storeId = 0
 Store identifier for persistent storage (optional)
 

Detailed Description

Emulate falling rain using the IMU. Interaction with the susnet timer to fade out the rain and make it stop at the same time then the lamp.

Member Function Documentation

◆ brightness_update()

static void lampda::modes::BasicMode::brightness_update ( auto &  ctx,
brightness_t  brightness 
)
inlinestaticinherited

Custom callback when brightness changes (optional)

Callback active only if BasicMode::hasBrightCallback is True

Parameters
[in]ctxThe current context
[in]brightnessThe brightness value set by the system
Remarks
Use update_brightness() to change brightness in order for this callback to be correctly handled at runtime

◆ custom_click()

static bool lampda::modes::BasicMode::custom_click ( auto &  ctx,
uint8_t  nbClick 
)
inlinestaticinherited

Custom "usermode" button UI for "click" action (optional)

Callback active only if BasicMode::hasButtonCustomUI is True

Parameters
[in]ctxThe current context
[in]nbClickThe number of clicks made by the user
Returns
Returns True if default UI action should be prevented

◆ custom_hold()

static bool lampda::modes::BasicMode::custom_hold ( auto &  ctx,
uint8_t  nbClickAndHold,
bool  isEndOfHoldEvent,
uint32_t  holdDuration 
)
inlinestaticinherited

Custom "usermode" button UI for "click+hold" action (optional)

Callback active only if BasicMode::hasButtonCustomUI is True

Parameters
[in]ctxThe current context
[in]nbClickAndHoldThe number of clicks made by the user
[in]isEndOfHoldEventTrue if the user just released the button
[in]holdDurationThe duration of the on-going hold event
Returns
Returns True if default action must be prevented
Remarks
When isEndOfHoldEvent is True, then holdDuration is zero

◆ on_exit_mode()

static void lampda::modes::BasicMode::on_exit_mode ( auto &  ctx)
inlinestaticinherited

Custom callback when mode goes outside of focus (optional)

Parameters
[in]ctxThe current context

◆ power_off_sequence()

static void lampda::modes::BasicMode::power_off_sequence ( auto &  ctx)
inlinestaticinherited

Custom callback when the system powers off (optional)

Callback active only if BasicMode::hasSystemCallbacks is True

Parameters
[in]ctxThe current context
Remarks
This must be a non-blocking function

◆ power_on_sequence()

static void lampda::modes::BasicMode::power_on_sequence ( auto &  ctx)
inlinestaticinherited

Custom callback when the system powers on (optional)

Callback active only if BasicMode::hasSystemCallbacks is True

Parameters
[in]ctxThe current context
Remarks
This must be a non-blocking function

◆ read_parameters()

static void lampda::modes::BasicMode::read_parameters ( auto &  ctx)
inlinestaticinherited

Custom callback to read parameters from filesystem (optional)

Callback active only if BasicMode::hasSystemCallbacks is True

Parameters
[in]ctxThe current context

◆ user_thread()

static void lampda::modes::BasicMode::user_thread ( auto &  ctx)
inlinestaticinherited

Custom secondary loop, executed in another thread (optional)

Called only if BasicMode::requireUserThread is True

Parameters
[in]ctxThe current context
Remarks
This is executed as prologue of user::user_thread() and hence must complete quickly in order to keep the lamp responsive

◆ write_parameters()

static void lampda::modes::BasicMode::write_parameters ( auto &  ctx)
inlinestaticinherited

Custom callback to write parameters to filesystem (optional)

Callback active only if BasicMode::hasSystemCallbacks is True

Parameters
[in]ctxThe current context

Member Data Documentation

◆ hasSystemCallbacks

constexpr bool lampda::modes::BasicMode::hasSystemCallbacks = false
staticconstexprinherited

Toggles advanced system callbacks, see list here .

Required to use any of the following:

Remarks
By default, these callbacks are called for all modes (not only the active one) and thus should be kept minimal

◆ requireUserThread

constexpr bool lampda::modes::BasicMode::requireUserThread = false
staticconstexprinherited

Toggles the use of custom BasicMode::user_thread() callback.

Remarks
When this is enabled, default is to call hardware::LampTy's show() in user::user_thread() after the BasicMode::user_thread() callback

◆ storeId

constexpr uint32_t lampda::modes::BasicMode::storeId = 0
staticconstexprinherited

Store identifier for persistent storage (optional)

By default, all modes are reset upon a shutdown, providing no persistence of their state across several on/off cycles. To expose to the user a way to configure your mode in a persistent fashion, you can use:

static void loop(auto& ctx) {
uint8_t rampValue = ctx.get_active_custom_ramp();
// ... (use rampValue to pick a color or something) ...
}
static constexpr bool hasCustomRamp = true; // required
static constexpr bool hasCustomRamp
hint manager to save our custom ramp
Definition: rain_mode.hpp:21

This value is configurable through user interaction with the button. If you need a persistent value, private to your mode, you can use:

static void loop(auto& ctx) {
uint8_t indexValue = ctx.get_active_custom_index();
// ... (use indexValue to change how something works) ...
// at some point, indexValue is modified:
indexValue += 1;
ctx.set_active_custom_index(indexValue);
// next time mode is enabled, or saved as favorite, both custom
// values (rampValue, indexValue) are remembered by default
}
static constexpr bool hasCustomRamp = true; // also required

These are the two always-available persistent state that a mode can configure by default. However, for more advanced modes (like games, with a list of high-scores, for example) more flexibility can be required.

If you need such extended storage, see ContextTy::KeyProxy for usage.

If you don't need these capabilities, just ignore this identifier :)


The documentation for this struct was generated from the following file: