5#ifndef INDEXABLE_BEHAVIOR_MANAGER_H
6#define INDEXABLE_BEHAVIOR_MANAGER_H
27 auto manager = get_context();
32 if (manager.state.isInFavoriteMockGroup)
35 manager.state.lastFavoriteStep += 1;
37 manager.state.isInFavoriteMockGroup = manager.jump_to_favorite(manager.state.lastFavoriteStep,
false);
41 if (manager.state.isLastScrollAGroupChange and manager.lamp.now - manager.state.lastScrollStopped < 2000)
48 manager.state.isLastScrollAGroupChange =
false;
59 if (manager.state.isInFavoriteMockGroup)
62 fprintf(stderr,
"Exit fake favorite group\n");
65 manager.state.isInFavoriteMockGroup =
false;
67 manager.set_active_group(manager.state.beforeFavoriteGroupIndex);
68 manager.set_active_mode(manager.state.beforeFavoriteModeIndex);
82 if (not manager.state.isInFavoriteMockGroup)
85 if (manager.jump_to_favorite(manager.state.lastFavoriteStep,
true))
87 manager.state.isInFavoriteMockGroup =
true;
97 int _groupId = manager.get_active_group();
98 int _modeId = manager.get_active_mode();
99 fprintf(stderr,
"group %d *mode %d\n", _groupId, _modeId);
100 if (manager.everySunsetCallback[_groupId][_modeId])
101 fprintf(stderr,
" - hasSunsetAnimation\n");
102 if (manager.everyBrightCallback[_groupId][_modeId])
103 fprintf(stderr,
" - hasBrightCallback\n");
104 if (manager.everyCustomRamp[_groupId][_modeId])
105 fprintf(stderr,
" - hasCustomRamp\n");
106 if (manager.state.rampHandler.animEffect)
107 fprintf(stderr,
" - has anim effect\n");
108 if (manager.everyRequireUserThread[_groupId][_modeId])
109 fprintf(stderr,
" - requireUserThread\n");
110 if (manager.everySystemCallbacks[_groupId][_modeId])
111 fprintf(stderr,
" - hasSystemCallbacks\n");
112 if (manager.everyButtonCustomUI[_groupId][_modeId])
113 fprintf(stderr,
" - hasButtonCustomUI\n");
127 auto manager = get_context();
128 auto& rampHandler = manager.state.rampHandler;
133 if (not isEndOfHoldEvent)
137 if (not manager.state.isInFavoriteMockGroup && not manager.state.isInDeleteFavorite)
140 manager.animate_favorite_pick(holdDuration, 1500);
145 manager.animate_favorite_delete(holdDuration, 2000);
150 manager.state.isInDeleteFavorite =
false;
156 if (not manager.state.isInFavoriteMockGroup)
159 if (isEndOfHoldEvent)
162 manager.state.lastScrollStopped = manager.lamp.now;
166 manager.handle_scroll_modes(holdDuration);
176namespace __private_elk {
190 auto manager = get_context();
191 if (manager.get_hidden_groups_count() <= 0)
197 const auto bluetoothGroup = manager.template get_group_id_of_mode<modes::bluetooth::ColorControlMode>();
198 if (bluetoothGroup < 0)
204 const auto availableModes = manager.get_modes_count();
205 if (availableModes <= patternIndex)
211 manager.set_active_group(bluetoothGroup);
212 manager.set_active_mode(patternIndex);
215 const int trueIndex = manager.template get_mode_id<modes::bluetooth::ColorControlMode>();
216 assert(trueIndex == 0 &&
"Bluetooth group should have the programmable color output as the first group index");
219 if (patternIndex == 0)
221 auto& modeState = manager.template get_state_of_mode<modes::bluetooth::ColorControlMode>();
222 modeState.color = requestedColor;
231 if (default_behaviors::handle_elk_command(elkControlCommand))
237 switch (elkControlCommand.type)
241 const uint32_t color =
242 elkControlCommand.data[0] << 16 | elkControlCommand.data[1] << 8 | elkControlCommand.data[2];
243 __private_elk::handle_pattern_select_command(0, color);
248 __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:183
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
void handle_elk_command(const utils::ELK::Package &elkControlCommand)
Handle a ELK BLE package.
Definition: indexable_behavior.hpp:228
void 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:118
void button_clicked_default(const uint8_t)
Called to handle button click events for default user mode behaviors.
Definition: indexable_behavior.hpp:18
@ PATTERN_SELECT
select a display pattern in a list
@ COLOR_SELECT
set output as a target color
Definition: elk_decoder.h:33