Keyboard: Fix spurious errors, improve debug
parent
800998f759
commit
a4f9e1b55e
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include "constants.h"
|
||||
#include "debug.h"
|
||||
#include "buzzer.h"
|
||||
#include "keyboard.h"
|
||||
|
||||
PCF8574 kbd(KBD_I2C_ADDR, &Wire);
|
||||
|
@ -90,19 +91,35 @@ Key getPressedKey() {
|
|||
else if (colState & 0b0100) colPressed = 1;
|
||||
else if (colState & 0b0010) colPressed = 2;
|
||||
else if (colState & 0b0001) colPressed = 3;
|
||||
else fatal();
|
||||
else {
|
||||
Serial.print("Invalid kbd column state: ");
|
||||
Serial.println(cols, BIN);
|
||||
sadBuzz();
|
||||
return KEY_NONE;
|
||||
}
|
||||
|
||||
// check pressed row
|
||||
// last 4 bits are rows, low when pressed
|
||||
kbd.write8(KBD_ROW_MASK);
|
||||
|
||||
uint8_t rowState = ~kbd.read8();
|
||||
uint8_t rows = kbd.read8();
|
||||
if (rows == KBD_ROW_MASK) {
|
||||
// between col and row read, a key could be released
|
||||
return KEY_NONE;
|
||||
}
|
||||
|
||||
uint8_t rowState = ~rows;
|
||||
uint8_t rowPressed = 0;
|
||||
if (rowState & 0b1000) rowPressed = 0;
|
||||
else if (rowState & 0b0100) rowPressed = 1;
|
||||
else if (rowState & 0b0010) rowPressed = 2;
|
||||
else if (rowState & 0b0001) rowPressed = 3;
|
||||
else fatal();
|
||||
else {
|
||||
Serial.print("Invalid kbd row state: ");
|
||||
Serial.println(rowState, BIN);
|
||||
sadBuzz();
|
||||
return KEY_NONE;
|
||||
}
|
||||
|
||||
// return key
|
||||
return (rowPressed * 4) + colPressed;
|
||||
|
|
Loading…
Reference in New Issue