Keyboard: Fix spurious errors, improve debug

main
radex 2024-02-14 17:15:27 +01:00
parent 800998f759
commit a4f9e1b55e
Signed by: radex
SSH Key Fingerprint: SHA256:hvqRXAGG1h89yqnS+cyFTLKQbzjWD4uXIqw7Y+0ws30
1 changed files with 20 additions and 3 deletions

View File

@ -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;