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

Bubbles rising in the sea. The user ramp control the random generation. More...

#include <automaton.hpp>

Inheritance diagram for lampda::modes::automaton::BubbleMode:
lampda::modes::BasicMode

Classes

struct  StateTy
 

Public Types

using GridTy = draw::grid::LineRule<>
 Cellular automaton type.
 

Static Public Member Functions

static void on_enter_mode (auto &ctx)
 
static void loop (auto &ctx)
 
static void on_exit_mode (auto &ctx)
 Custom callback when mode goes outside of focus (optional)
 
static void sunset_update (auto &ctx, float progress)
 Custom callback when sunset mode is updated (optional)
 
static void brightness_update (auto &ctx, brightness_t brightness)
 Custom callback when brightness changes (optional)
 
static void custom_ramp_update (auto &ctx, uint8_t rampValue)
 Custom callback when system sets user ramp (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 int nbBubbles = 4
 0-10 max number of bubble per turn
 
static constexpr int bubbleFreq = 70
 0-255 the more the less bubbles
 
static constexpr int minBubbleDist = 4
 0-5 min distance of bubbles?
 
static constexpr int eventFreq = 70
 0-255 how likely are events?
 
static constexpr int algeaFreq = 60
 0-255 how likely event is algea?
 
static constexpr int algeaLength = 3000
 (ms) +/- 1s average algea size
 
static constexpr int algeaSwims = 400
 (ms) how fast algea ondulates
 
static constexpr int starFreq = 3
 0-255 how likely event is star?
 
static constexpr auto waterColor = colors::DarkBlue
 color of the water
 
static constexpr auto algeaColor = colors::ForestGreen
 color of the algea
 
static constexpr auto starColor = colors::Gold
 color of ???
 
static constexpr bool hasCustomRamp = true
 hint manager that we have a custom ramp
 
static constexpr bool isGroupManager = false
 
static constexpr bool hasSunsetAnimation = false
 Toggles the use of custom BasicMode::sunset_update() callback.
 
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

Bubbles rising in the sea. The user ramp control the random generation.

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

◆ custom_ramp_update()

static void lampda::modes::BasicMode::custom_ramp_update ( auto &  ctx,
uint8_t  rampValue 
)
inlinestaticinherited

Custom callback when system sets user ramp (optional)

This can be used to make a mode configurable through the 3H click+hold user action, which will cycle through the 0-255 values in a ~2s ramp

Parameters
[in]ctxThe current context
[in]rampValueThe custom value set by the user
Remarks
This behavior is in user::button_hold_default() and may be prevented if custom "usermode UI" via custom_hold() is enabled

◆ on_enter_mode()

static void lampda::modes::automaton::BubbleMode::on_enter_mode ( auto &  ctx)
inlinestatic

prevent the ramp from looping around

◆ 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

◆ sunset_update()

static void lampda::modes::BasicMode::sunset_update ( auto &  ctx,
float  progress 
)
inlinestaticinherited

Custom callback when sunset mode is updated (optional)

Callback active only if BasicMode::hasSunsetAnimation is True

Parameters
[in]ctxThe current context
[in]progressBetween 0 and 1, progress of the sunset. At 1, the system turns off

◆ 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 that we have a custom ramp
Definition: automaton.hpp:148

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: