/* Kaleidoscope - Firmware for computer input devices * Copyright (C) 2013-2018 Keyboard.io, Inc. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, version 3. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ #pragma once // switch debouncing and status #define INJECTED 0b10000000 #define IS_PRESSED 0b00000010 #define WAS_PRESSED 0b00000001 /* 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)) /* keyIsInjected(): This is true if the key was marked as injected by another * plugin, i.e. it was generated artificially instead of corresponding to a * "real" keypress. */ #define keyIsInjected(keyState) ((keyState)&INJECTED)