5#ifndef INDEXABLE_BEHAVIOR_MANAGER_H
6#define INDEXABLE_BEHAVIOR_MANAGER_H
27 auto manager = get_context();
33 if (manager.state.isInFavoriteMockGroup)
36 manager.state.lastFavoriteStep += 1;
38 manager.state.isInFavoriteMockGroup = manager.jump_to_favorite(manager.state.lastFavoriteStep,
false);
42 if (manager.state.isLastScrollAGroupChange and manager.lamp.now - manager.state.lastScrollStopped < 2000)
49 manager.state.isLastScrollAGroupChange =
false;
59 int _groupId = manager.get_active_group();
60 int _modeId = manager.get_active_mode();
61 fprintf(stderr,
"group %d *mode %d\n", _groupId, _modeId);
62 if (manager.everySunsetCallback[_groupId][_modeId])
63 fprintf(stderr,
" - hasSunsetAnimation\n");
64 if (manager.everyBrightCallback[_groupId][_modeId])
65 fprintf(stderr,
" - hasBrightCallback\n");
66 if (manager.everyCustomRamp[_groupId][_modeId])
67 fprintf(stderr,
" - hasCustomRamp\n");
68 if (manager.state.rampHandler.animEffect)
69 fprintf(stderr,
" - has anim effect\n");
70 if (manager.everyRequireUserThread[_groupId][_modeId])
71 fprintf(stderr,
" - requireUserThread\n");
72 if (manager.everySystemCallbacks[_groupId][_modeId])
73 fprintf(stderr,
" - hasSystemCallbacks\n");
74 if (manager.everyButtonCustomUI[_groupId][_modeId])
75 fprintf(stderr,
" - hasButtonCustomUI\n");
84 if (manager.state.isInFavoriteMockGroup)
87 fprintf(stderr,
"Exit fake favorite group\n");
90 manager.state.isInFavoriteMockGroup =
false;
92 manager.set_active_group(manager.state.beforeFavoriteGroupIndex);
93 manager.set_active_mode(manager.state.beforeFavoriteModeIndex);
101 manager.next_group();
104#ifdef LMBD_SIMULATION
106 int _groupId = manager.get_active_group();
107 int _modeId = manager.get_active_mode();
108 fprintf(stderr,
"group %d *mode %d\n", _groupId, _modeId);
109 if (manager.everySunsetCallback[_groupId][_modeId])
110 fprintf(stderr,
" - hasSunsetAnimation\n");
111 if (manager.everyBrightCallback[_groupId][_modeId])
112 fprintf(stderr,
" - hasBrightCallback\n");
113 if (manager.everyCustomRamp[_groupId][_modeId])
114 fprintf(stderr,
" - hasCustomRamp\n");
115 if (manager.state.rampHandler.animEffect)
116 fprintf(stderr,
" - has anim effect\n");
117 if (manager.everyRequireUserThread[_groupId][_modeId])
118 fprintf(stderr,
" - requireUserThread\n");
119 if (manager.everySystemCallbacks[_groupId][_modeId])
120 fprintf(stderr,
" - hasSystemCallbacks\n");
121 if (manager.everyButtonCustomUI[_groupId][_modeId])
122 fprintf(stderr,
" - hasButtonCustomUI\n");
130 if (not manager.state.isInFavoriteMockGroup)
133 if (manager.jump_to_favorite(manager.state.lastFavoriteStep,
true))
135 manager.state.isInFavoriteMockGroup =
true;
140#ifdef LMBD_SIMULATION
142 int _groupId = manager.get_active_group();
143 int _modeId = manager.get_active_mode();
144 fprintf(stderr,
"group %d *mode %d\n", _groupId, _modeId);
145 if (manager.everySunsetCallback[_groupId][_modeId])
146 fprintf(stderr,
" - hasSunsetAnimation\n");
147 if (manager.everyBrightCallback[_groupId][_modeId])
148 fprintf(stderr,
" - hasBrightCallback\n");
149 if (manager.everyCustomRamp[_groupId][_modeId])
150 fprintf(stderr,
" - hasCustomRamp\n");
151 if (manager.state.rampHandler.animEffect)
152 fprintf(stderr,
" - has anim effect\n");
153 if (manager.everyRequireUserThread[_groupId][_modeId])
154 fprintf(stderr,
" - requireUserThread\n");
155 if (manager.everySystemCallbacks[_groupId][_modeId])
156 fprintf(stderr,
" - hasSystemCallbacks\n");
157 if (manager.everyButtonCustomUI[_groupId][_modeId])
158 fprintf(stderr,
" - hasButtonCustomUI\n");
177 auto manager = get_context();
178 auto& rampHandler = manager.state.rampHandler;
184 if (not isEndOfHoldEvent)
188 if (not manager.state.isInFavoriteMockGroup && not manager.state.isInDeleteFavorite)
191 manager.animate_favorite_pick(holdDuration, 1500);
196 manager.animate_favorite_delete(holdDuration, 2000);
201 manager.state.isInDeleteFavorite =
false;
209 if (not manager.state.isInFavoriteMockGroup)
212 if (isEndOfHoldEvent)
215 manager.state.lastScrollStopped = manager.lamp.now;
219 manager.handle_scroll_modes(holdDuration);
231namespace __private_elk {
245 auto manager = get_context();
246 if (manager.get_hidden_groups_count() <= 0)
252 const auto bluetoothGroup = manager.template get_group_id_of_mode<modes::bluetooth::ColorControlMode>();
253 if (bluetoothGroup < 0)
259 const auto availableModes = manager.get_modes_count();
260 if (availableModes <= patternIndex)
266 manager.set_active_group(bluetoothGroup);
267 manager.set_active_mode(patternIndex);
270 const int trueIndex = manager.template get_mode_id<modes::bluetooth::ColorControlMode>();
271 assert(trueIndex == 0 &&
"Bluetooth group should have the programmable color output as the first group index");
274 if (patternIndex == 0)
276 auto& modeState = manager.template get_state_of_mode<modes::bluetooth::ColorControlMode>();
277 modeState.color = requestedColor;
286 if (default_behaviors::handle_elk_command(elkControlCommand))
292 switch (elkControlCommand.type)
296 const uint32_t color =
297 elkControlCommand.data[0] << 16 | elkControlCommand.data[1] << 8 | elkControlCommand.data[2];
298 __private_elk::handle_pattern_select_command(0, color);
303 __private_elk::handle_pattern_select_command(elkControlCommand.data[0] + 1);
Define assertions helpers.
void handle_pattern_select_command(const uint8_t patternIndex, const uint32_t requestedColor=0)
Handle a pattern change command.
Definition: indexable_behavior.hpp:238
bool is_in_output_state()
return true if the system is in output mode
Definition: behavior.cpp:137
bool button_hold(const uint8_t clicks, const bool isEndOfHoldEvent, const uint32_t holdDuration)
must be called by the lampda::user::button_hold_default
Definition: default_behavior.hpp:197
bool button_clicked(const uint8_t clicks)
must be called by the lampda::user::button_clicked_default
Definition: default_behavior.hpp:172
Contains code handling custom user mode functions for indexable strips.
Definition: default_behavior.hpp:15
bool button_clicked_default(const uint8_t)
Called to handle button click events for default user mode behaviors.
Definition: indexable_behavior.hpp:18
bool button_hold_default(const uint8_t, const bool, const uint32_t)
Called to handle button click+hold events for user mode behaviors.
Definition: indexable_behavior.hpp:168
void handle_elk_command(const utils::ELK::Package &elkControlCommand)
Handle a ELK BLE package.
Definition: indexable_behavior.hpp:283
@ PATTERN_SELECT
select a display pattern in a list
@ COLOR_SELECT
set output as a target color
Definition: elk_decoder.h:33