diff --git a/converter/adb_usb/matrix.c b/converter/adb_usb/matrix.c index df786810..5a2d2bb1 100644 --- a/converter/adb_usb/matrix.c +++ b/converter/adb_usb/matrix.c @@ -36,7 +36,18 @@ along with this program. If not, see . // matrix state buffer(1:on, 0:off) static matrix_row_t matrix[MATRIX_ROWS]; -static void register_key(uint8_t key); +static void register_key(uint8_t key) +{ + uint8_t col, row; + col = key&0x07; + row = (key>>3)&0x0F; + if (key&0x80) { + matrix[row] &= ~(1< 7; addr--) { - if (device_table[addr].addr_default == 0) - return addr; - } - - uint16_t reg3; - for (uint8_t addr = 15; addr > 7; addr--) { - reg3 = adb_host_talk(addr, ADB_REG_3); - if (!reg3) return addr; - } - return 0; -} - static void print_device_table(void) { xprintf("\nTable:\n"); @@ -688,6 +683,22 @@ static uint8_t appliance_proc(uint8_t addr) //////////////////////////////////////////////////////////////////////////////// // Address Resolution - hot-plug support //////////////////////////////////////////////////////////////////////////////// +static uint8_t free_address(void) +{ + // address for dynamic assignment + for (uint8_t addr = 15; addr > 7; addr--) { + if (device_table[addr].addr_default == 0) + return addr; + } + + uint16_t reg3; + for (uint8_t addr = 15; addr > 7; addr--) { + reg3 = adb_host_talk(addr, ADB_REG_3); + if (!reg3) return addr; + } + return 0; +} + static void resolve_address(void) { uint16_t reg3; @@ -744,6 +755,9 @@ again: } +//////////////////////////////////////////////////////////////////////////////// +// Core API +//////////////////////////////////////////////////////////////////////////////// void hook_late_init(void) { debug_enable = true; @@ -796,19 +810,6 @@ matrix_row_t matrix_get_row(uint8_t row) return matrix[row]; } -inline -static void register_key(uint8_t key) -{ - uint8_t col, row; - col = key&0x07; - row = (key>>3)&0x0F; - if (key&0x80) { - matrix[row] &= ~(1< 7; addr--) {