#pragma once // switch debouncing and status #include #define INJECTED B10000000 #define IS_PRESSED B00000010 #define WAS_PRESSED B00000001 /* keyIsPressed(): This is true if the key is pressed during this scan cycle. * This will be true for several consecutive cycles even for a single tap of * the key. * Use this for events which should fire every scan cycle the key is held. * If you want an event which fires only once when a key is pressed, use * keyToggledOn() or keyToggledOff() (defined below). */ #define keyIsPressed(keyState) ((keyState) & IS_PRESSED) /* keyWasPressed(): This is true if the key was pressed during the previous scan cycle, regardless of whether it is pressed or not in this scan cycle. */ #define keyWasPressed(keyState) ((keyState) & WAS_PRESSED) /* keyToggledOn(): This is true if the key is newly pressed during this scan * cycle, i.e. was not pressed in the previous scan cycle but is now. * Use this for events which should fire exactly once per keypress, on a * "key-down" event. */ #define keyToggledOn(keyState) (keyIsPressed(keyState) && ! keyWasPressed(keyState)) /* keyToggledOff(): This is true if the key is newly not-pressed during this * scan cycle, i.e. is not pressed now but was in the previous scan cycle. * Use this for events which should fire exactly once per keypress, on a * "key-up" event. */ #define keyToggledOff(keyState) (keyWasPressed(keyState) && ! keyIsPressed(keyState)) // Deprecated - Remove once the core has transitioned inline uint8_t __attribute__((deprecated("Use keyWasPressed instead"))) key_was_pressed(uint8_t keyState) { return keyWasPressed(keyState); } inline uint8_t __attribute__((deprecated("Use keyIsPressed instead"))) key_is_pressed(uint8_t keyState) { return keyIsPressed(keyState); } inline uint8_t __attribute__((deprecated("Use keyToggledOn instead"))) key_toggled_on(uint8_t keyState) { return keyToggledOn(keyState); } inline uint8_t __attribute__((deprecated("Use keyToggledOff instead"))) key_toggled_off(uint8_t keyState) { return keyToggledOff(keyState); }