aboutsummaryrefslogtreecommitdiff
path: root/fsm/events.h (unfollow)
Commit message (Collapse)AuthorFilesLines
2023-11-02reorganized project files (part 1)Selene ToyKeeper1-0/+0
(just moved files, didn't change the contents yet, and nothing will work without updating #includes and build scripts and stuff)
2023-10-29fixed delay timing on attiny1616 (it was about 17% too long this whole time)Selene ToyKeeper1-3/+3
(and re-adjusted smooth step timing accordingly)
2023-10-29converted noctigon-dm11-boost to use PWM+DSM, and recalibrated timing for ↵Selene ToyKeeper1-0/+5
delays + smooth steps Anduril has gradually gotten faster over the years, apparently, so it needed longer delays to get accurate-ish timing for beacon and other modes. Adding DSM also changes the timing perceptibly, so I made it possible to calibrate the delay fudge factor on a per-build basis.
2023-04-17switched the rest of FSM + Anduril to use SPDX license headersSelene ToyKeeper1-22/+4
instead of full GPL headers (or all too often, nothing at all) There are a few "FIXME" entries where I'm not sure about the correct copyright.
2020-09-14reorganized code in fsm-events.* to put things in a more coherent orderSelene ToyKeeper1-35/+42
(no functional changes, but it does change the order of some code in ROM, so the compiled md5sum is different now)
2020-09-14fixed bug: ticks_since_last_event wasn't getting reset on button hold releaseSelene ToyKeeper1-1/+1
The visible symptom was: Ramp up for 1s or longer, release, wait more than 1s, then hold again. It should ramp up, but it would ramp down instead. The clause for resetting ramp_direction wasn't happening, because the EV_tick counter started at a value higher than 1s where it would normally trigger. The underlying cause was a bit complicated. Recent changes in PCINT_inner() were causing ticks_since_last_event to get set to 0 (at push_event()) and then back to its previous value (at emit_current_event()). The EV_tick counter would then start at whatever the button release event used. The fix involved removing the part of emit_current_event() where it would set ticks_since_last_event to "arg". That line was a very old bug which simply hadn't caused any visible issues until recently. Instead, it needs to set ticks_since_last_event more carefully, at other locations. Specifically, it resets to 0 now in empty_event_sequence() and one more location in the deferred WDT handler (when HOLD_TIMEOUT triggers). Additionally, push_event() was only ever used from PCINT_inner()... so I moved the tick reset logic to PCINT_inner() instead. This allows us to decrease size by about 10 bytes, since PCINT_inner() no longer needs to copy the counter before it gets reset. However, it also means push_event() should never be called from any other function.
2020-07-29reduced ROM 42 bytes by making "emissions" non-volatileSelene ToyKeeper1-1/+3
(doesn't seem to be needed any more, ever since the IRQ rewrite a few months ago)
2020-05-14fixed build of "momentary" example UISelene ToyKeeper1-1/+1
2020-01-30saving state of ADC / WDT refactoring before doing more changes... what ↵Selene ToyKeeper1-0/+1
changed so far: - removed LVP lowpass and thermal regulation lowpass logic; it's probably redundant now - slowed ADC deferred logic timing to 4X per second instead of 16X, because there doesn't seem to be much reason to do it any faster - reduced thermal event rate-limit to just 1 second, for more responsive regulation - added "EV_temperature_okay" signal, to help stop adjustments at an appropriate time instead of going to far - sped up sleep LVP to one measurement every 8 seconds instead of 16, to help the aux LEDs respond to voltage changes faster (effect on standby time is negligible) - make sure the WDT doesn't set the ADC channel or counter... except in standby mode
2019-06-02made button release timeout faster (384ms -> 288ms) to make light shut off ↵Selene ToyKeeper1-1/+1
sooner after 1 click
2018-11-11Made event definitions a little cleaner.Selene ToyKeeper1-32/+32
2018-11-11Fixed the sleep tick counter wrapping around to 0 instead of 32768.Selene ToyKeeper1-10/+5
2018-11-11Several fixes...Selene ToyKeeper1-3/+3
- Made momentary+lockout modes smaller and work better. - Fixed buggy timing on hold events; made ticks_since_last_event reset when it should. - Reduced ROM size by caching volatile ticks_since_last_event sometimes. - Swapped what the top Event bit means, because it makes event handlers easier to write. - Made the maximum click event keep triggering if user keeps pressing, instead of dropping everything after the limit.
2018-11-11Rewrote the event system to use a single byte for each event instead of an ↵Selene ToyKeeper1-471/+136
array of actions. Not thoroughly tested yet, not done yet, have only updated Anduril to fit, and only partially.
2018-06-26Mostly got Emisar UI working... I think. Not yet tested.Selene ToyKeeper1-0/+74
2018-06-17Changed halfsleep mode to TICK_DURING_STANDBY. Added blinking indicator LED ↵Selene ToyKeeper1-14/+13
support to Anduril.
2018-06-17Implemented halfsleep mode.Selene ToyKeeper1-0/+6
Will probably change it quite a bit though, so I'm checking in changes first. Needs to be "tick during standby" instead of "half sleep".
2018-01-24Save a few bytes by changing how PCINT is defined.Selene ToyKeeper1-2/+0
Minor comment cleaning.
2017-10-20Er, don't save_config() every frame... wait until the user lets go of the ↵Selene ToyKeeper1-3/+1
button.
2017-10-06Made HOLD_TIMEOUT and RELEASE_TIMEOUT define-able in the UI code.Selene ToyKeeper1-0/+4
2017-09-10Moved strobes from 5 clicks to "click, click, long-click".Selene ToyKeeper1-0/+21
Moved momentary mode from 6 clicks to 5 clicks.
2017-08-31Started a Meteor M43 clone UI.Selene ToyKeeper1-0/+168
So far, UI1 and battcheck both work. UI2 and UI3 and other blinkies aren't implement yet. Added 6-bar battcheck style to match Meteor (ish). Increased maximum number of clicks to 12, because WTF. If your UI needs 12 clicks, what are you even doing in life?
2017-08-27Ramp config mode actually works now...Selene ToyKeeper1-9/+13
Added EV_reenter_state event to indicate an obscuring state was popped off the stack and the underlying one is now on top again.
2017-08-27Made it easier to configure the maximum number of clicks it'll try to count ↵Selene ToyKeeper1-1/+57
in one sequence. (use #define MAX_CLICKS 5, for example) Keeps data sizes from being excessively large without having to edit FSM sources per UI.
2017-08-26Added eeprom load/save API (no wear levelling yet), verified it works in ↵Selene ToyKeeper1-0/+8
DarkHorse.
2017-08-26Added beacons/strobes to DarkHorse.Selene ToyKeeper1-0/+1
Added a way to explicitly cancel the current "nice" delay without changing state.
2017-08-25Added battcheck mode to ramping-ui. It's bigger than I had hoped. :(Selene ToyKeeper1-0/+2
Added fsm-misc.*, which currently only has interruptible blink functions in it. (for blinking out numbers and such)
2017-08-24Started on some documentation, spaghetti-monster.txt.Selene ToyKeeper1-0/+5
Added #defines for State return values: EVENT_HANDLED, EVENT_NOT_HANDLED Improved handling of delay includes. Managed mischief.
2017-08-24Added loop() to API, executes constantly.Selene ToyKeeper1-0/+3
Added nice_delay_ms() to process events while waiting, and abort on state change. Converted ramping-ui strobe to smoothly variable with party and tactical modes.
2017-08-24Made ramping UI able to toggle between smooth and discrete ramping with 4 ↵Selene ToyKeeper1-0/+13
clicks.
2017-08-24Added a ramping UI example.Selene ToyKeeper1-0/+7
Added ramping support in general.
2017-08-19Completely reorganized SpaghettiMonster code into smaller logical pieces: ↵Selene ToyKeeper1-0/+197
fsm-*.c and fsm-*.h.