aboutsummaryrefslogtreecommitdiff
path: root/spaghetti-monster
diff options
context:
space:
mode:
authorSelene ToyKeeper2017-08-24 02:25:58 -0600
committerSelene ToyKeeper2017-08-24 02:25:58 -0600
commit939a13fe9949c576e21914939e1d847641f215c9 (patch)
tree567a37486c824492c5052dfd9d242fc13cfaaa86 /spaghetti-monster
parentAdded a ramping UI example. (diff)
downloadanduril-939a13fe9949c576e21914939e1d847641f215c9.tar.gz
anduril-939a13fe9949c576e21914939e1d847641f215c9.tar.bz2
anduril-939a13fe9949c576e21914939e1d847641f215c9.zip
Made ramping UI able to toggle between smooth and discrete ramping with 4 clicks.
Diffstat (limited to 'spaghetti-monster')
-rw-r--r--spaghetti-monster/fsm-events.h13
-rw-r--r--spaghetti-monster/ramping-ui.c32
2 files changed, 40 insertions, 5 deletions
diff --git a/spaghetti-monster/fsm-events.h b/spaghetti-monster/fsm-events.h
index 420baf1..246a4ee 100644
--- a/spaghetti-monster/fsm-events.h
+++ b/spaghetti-monster/fsm-events.h
@@ -161,6 +161,18 @@ Event EV_click3_complete[] = {
A_RELEASE,
A_RELEASE_TIMEOUT,
0 };
+#define EV_4clicks EV_click4_complete
+Event EV_click4_complete[] = {
+ A_PRESS,
+ A_RELEASE,
+ A_PRESS,
+ A_RELEASE,
+ A_PRESS,
+ A_RELEASE,
+ A_PRESS,
+ A_RELEASE,
+ A_RELEASE_TIMEOUT,
+ 0 };
// ... and so on
// A list of button event types for easy iteration
@@ -178,6 +190,7 @@ EventPtr event_sequences[] = {
EV_click3_press,
EV_click3_release,
EV_click3_complete,
+ EV_click4_complete,
// ...
};
diff --git a/spaghetti-monster/ramping-ui.c b/spaghetti-monster/ramping-ui.c
index b51d2f4..bd5a016 100644
--- a/spaghetti-monster/ramping-ui.c
+++ b/spaghetti-monster/ramping-ui.c
@@ -19,7 +19,7 @@
#define FSM_EMISAR_D4_LAYOUT
#define USE_LVP
-#define USE_THERMAL_REGULATION
+//#define USE_THERMAL_REGULATION
#define DEFAULT_THERM_CEIL 32
#define USE_DEBUG_BLINK
#define USE_DELAY_MS
@@ -35,7 +35,11 @@ uint8_t party_strobe_state(EventPtr event, uint16_t arg);
// brightness control
uint8_t memorized_level = 1;
+// smooth vs discrete ramping
+uint8_t ramp_step_size = 1;
+
#ifdef USE_THERMAL_REGULATION
+// brightness before thermal step-down
uint8_t target_level = 0;
#endif
@@ -134,11 +138,24 @@ uint8_t steady_state(EventPtr event, uint16_t arg) {
set_state(party_strobe_state, 0xff);
return 0;
}
+ // 4 clicks: toggle smooth vs discrete ramping
+ else if (event == EV_4clicks) {
+ if (ramp_step_size == 1) ramp_step_size = MAX_LEVEL/6;
+ else ramp_step_size = 1;
+ set_level(0);
+ delay_ms(20);
+ set_level(memorized_level);
+ return 0;
+ }
// hold: change brightness (brighter)
else if (event == EV_click1_hold) {
+ if (arg % ramp_step_size != 0) {
+ return 0;
+ }
// FIXME: make it ramp down instead, if already at max
- if (actual_level < MAX_LEVEL)
- memorized_level = (actual_level+1);
+ if (actual_level + ramp_step_size < MAX_LEVEL)
+ memorized_level = actual_level + ramp_step_size;
+ else memorized_level = MAX_LEVEL;
#ifdef USE_THERMAL_REGULATION
target_level = memorized_level;
#endif
@@ -152,9 +169,14 @@ uint8_t steady_state(EventPtr event, uint16_t arg) {
}
// click-release-hold: change brightness (dimmer)
else if (event == EV_click2_hold) {
+ if (arg % ramp_step_size != 0) {
+ return 0;
+ }
// FIXME: make it ramp up instead, if already at min
- if (actual_level > 1)
- memorized_level = (actual_level-1);
+ if (actual_level > ramp_step_size)
+ memorized_level = (actual_level-ramp_step_size);
+ else
+ memorized_level = 1;
#ifdef USE_THERMAL_REGULATION
target_level = memorized_level;
#endif