X-Git-Url: https://git.friedersdorff.com/?a=blobdiff_plain;f=converter%2Fsun_usb%2Fmatrix.c;h=717c131e627c0b2593fb408265e7a587ff5476a5;hb=e59fb6f908e3e05ed135bf6d004524b0b6bf9119;hp=c1e98257d9876efaf082e251c9a24511e080fdc5;hpb=97ee1be59da06063275d315d1ea5fa4f14eee6b0;p=max%2Ftmk_keyboard.git diff --git a/converter/sun_usb/matrix.c b/converter/sun_usb/matrix.c index c1e98257..717c131e 100644 --- a/converter/sun_usb/matrix.c +++ b/converter/sun_usb/matrix.c @@ -21,9 +21,9 @@ along with this program. If not, see . #include #include "print.h" #include "util.h" -#include "serial.h" #include "matrix.h" #include "debug.h" +#include "protocol/serial.h" /* @@ -41,39 +41,6 @@ along with this program. If not, see . * E|70 ... 77| * F|78 ... 7F| * +---------+ - * - * Command From System To Keyboard - * 0x01 Reset - * 0x02 Bell On - * 0x03 Bell Off - * 0x0A Click On - * 0x0B Click Off - * 0x0E LED - * 0x0F Layout - * - * Command From Keyboard To System - * 0x7F Idle - * 0xFE Layout Response - * 0xFF Reset Response(followed by 0x04) - * - * bit: 3 2 1 0 - * LED: CapsLk ScrLk Compose NumLk - * - * Connector - * 8Pin mini DIN - * 8 7 6 - * 5 4 3 - * 2 1 - * receptacle - * - * 1: GND - * 2: GND - * 3: 5V - * 4: RX/TX(Mouse) - * 5: RX - * 6: TX - * 7: GND - * 8: 5V */ static uint8_t matrix[MATRIX_ROWS]; #define ROW(code) ((code>>3)&0xF) @@ -113,14 +80,26 @@ uint8_t matrix_scan(void) uint8_t code; code = serial_recv(); - if (code == 0) { - return 0; + if (!code) return 0; + + debug_hex(code); debug(" "); + + switch (code) { + case 0x7E: // reset fail + case 0xFE: // layout + case 0xFF: // reset success + _delay_ms(500); + // ignore response byte + debug("(response ignored:"); + while ((code = serial_recv())) { debug(" "); debug_hex(code); } + debug(") "); + // FALL THROUGH + case 0x7F: + // all keys up + for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00; + return 0; } - phex(code); print("("); - code = ~code; - phex(code); print(")"); -return 0; if (code&0x80) { // break code if (matrix_is_on(ROW(code), COL(code))) {