Merge pull request #26 from keyboardio/f/isKeyswitchPressed

Better keyswitch state APIs
pull/365/head
Jesse Vincent 6 years ago committed by GitHub
commit 88ef2cfe3a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -259,17 +259,27 @@ void Model01::attachToHost() {
UDCON &= ~(1 << DETACH); UDCON &= ~(1 << DETACH);
} }
uint8_t Model01::getKeyswitchStateAtPosition(byte row, byte col) { bool Model01::isKeyswitchPressed(byte row, byte col) {
if (col <= 7) { if (col <= 7) {
return bitRead(leftHandState.rows[row], 7 - col); return (bitRead(leftHandState.rows[row], 7 - col) != 0);
} else { } else {
return bitRead(rightHandState.rows[row], 7 - (col - 8)); return (bitRead(rightHandState.rows[row], 7 - (col - 8)) != 0);
} }
} }
uint8_t Model01::getKeyswitchStateAtPosition(uint8_t keyIndex) { bool Model01::isKeyswitchPressed(uint8_t keyIndex) {
keyIndex--; keyIndex--;
return getKeyswitchStateAtPosition(keyIndex / COLS, keyIndex % COLS); return isKeyswitchPressed(keyIndex / COLS, keyIndex % COLS);
}
uint8_t Model01::pressedKeyswitchCount() {
uint8_t count = 0;
for (uint8_t i = 0; i < 32; i++) {
count += bitRead(leftHandState.all, i) + bitRead(rightHandState.all, i);
}
return count;
} }
HARDWARE_IMPLEMENTATION KeyboardHardware; HARDWARE_IMPLEMENTATION KeyboardHardware;

@ -62,17 +62,38 @@ class Model01 {
bool isKeyMasked(byte row, byte col); bool isKeyMasked(byte row, byte col);
void maskHeldKeys(void); void maskHeldKeys(void);
/** Key switch state /** Key switch states
* *
* These two methods return the state of the keyswitch at any given position, * These methods offer a way to peek at the key switch states, for those cases
* regardless of which half they are on. This is a hardware-agnostic access to * where we need to deal with the state closest to the hardware. Some methods
* the key switch states. * offer a way to check if a key is pressed, others return the number of
* pressed keys.
*/
/**
* Check if a key is pressed at a given position.
*
* @param row is the row the key is located at in the matrix.
* @param col is the column the key is located at in the matrix.
*
* @returns true if the key is pressed, false otherwise.
*/
bool isKeyswitchPressed(byte row, byte col);
/**
* Check if a key is pressed at a given position.
*
* @param keyIndex is the key index, as calculated by `keyIndex`.
*
* @note Key indexes start at 1, not 0!
*
* @returns true if the key is pressed, false otherwise.
*/
bool isKeyswitchPressed(uint8_t keyIndex);
/**
* Check the number of key switches currently pressed.
* *
* The first variant requires a row and a column, the second an index, as * @returns the number of keys pressed.
* returned by `keyIndex`.
*/ */
uint8_t getKeyswitchStateAtPosition(byte row, byte col); uint8_t pressedKeyswitchCount();
uint8_t getKeyswitchStateAtPosition(uint8_t keyIndex);
keydata_t leftHandState; keydata_t leftHandState;
keydata_t rightHandState; keydata_t rightHandState;

Loading…
Cancel
Save