qmk/users/dennytom/chording_engine/state_machine.dot
DennyTom e409fb47f2
DennyTom's buttery_engine (#8138)
* Selectively adding pieces

* Adding georgi keymap

* Adding more files, fixing make

* Smaller makefiles

* Fixing make rules

* README more inline with QMK's guidelines

* Turning off buggy assert

* Improving documentation based on a user feedback.

* Slightly better schema

* Resurrected state machine diagram
2020-04-07 21:13:17 +10:00

49 lines
1.6 KiB
Plaintext

digraph {
IDLE
READY
ACTIVATED
DEACTIVATED
PRESS_FROM_ACTIVE
FINISHED_FROM_ACTIVE
IDLE_IN_DANCE
READY_IN_DANCE
FINISHED
LOCKED
READY_LOCKED
RESTART
IN_ONE_SHOT
// common
FINISHED -> RESTART;
RESTART -> IDLE;
DEACTIVATED -> IDLE_IN_DANCE;
// kill_one_shots()
IN_ONE_SHOT -> RESTART [label="non-one-shot key went through", color="blue"];
// process_finished_dances()
ACTIVATED -> PRESS_FROM_ACTIVE [label="dance timer", color="green"];
IDLE_IN_DANCE -> FINISHED [label="dance timer", color="green"];
PRESS_FROM_ACTIVE -> FINISHED_FROM_ACTIVE [label="dance timer", color="green"];
// remove_subchords()
READY -> IDLE [label="superchord active", color="red"];
READY_IN_DANCE -> IDLE_IN_DANCE [label="superchord active", color="red"];
READY_LOCKED -> LOCKED [label="superchord active", color="red"];
// process_ready_chords()
LOCKED -> READY_LOCKED [label="all keys pressed", color="orange"];
IDLE -> READY [label="all keys pressed", color="orange"];
IDLE_IN_DANCE -> READY_IN_DANCE [label="all keys pressed", color="orange"];
READY_LOCKED -> RESTART [label="chord timer", color="orange"];
READY -> ACTIVATED [label="chord timer", color="orange"];
READY_IN_DANCE -> ACTIVATED [label="chord timer", color="orange"];
ACTIVATED -> PRESS_FROM_ACTIVE [label="lock next", color="orange"];
PRESS_FROM_ACTIVE -> LOCKED [label="lock next", color="orange"];
// deactivate_active_chords()
ACTIVATED -> DEACTIVATED [label="a key lifted", color="purple"];
PRESS_FROM_ACTIVE -> RESTART [label="a key lifted", color="orange"];
FINISHED_FROM_ACTIVE -> DEACTIVATED [label="a key lifted", color="orange"];
}