adb_usb: Scan unsupported devices with Reg0 by SRQ

This commit is contained in:
tmk 2022-04-25 17:26:12 +09:00
parent 083a008b66
commit da230d3896
2 changed files with 37 additions and 0 deletions

View file

@ -47,6 +47,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// https://github.com/tmk/tmk_keyboard/issues/724 // https://github.com/tmk/tmk_keyboard/issues/724
#define ADB_MOUSE_2ND_BUTTON_QUIRK #define ADB_MOUSE_2ND_BUTTON_QUIRK
// Scan unsupported devices with register0 when SRQ is asserted
#define ADB_SRQ_SCAN_REG0
/* ADB port setting */ /* ADB port setting */
#define ADB_PORT PORTD #define ADB_PORT PORTD

View file

@ -762,3 +762,37 @@ void led_set(uint8_t usb_led)
{ {
adb_host_kbd_led(ADB_ADDR_KBD_POLL, ~usb_led); adb_host_kbd_led(ADB_ADDR_KBD_POLL, ~usb_led);
} }
#ifdef ADB_SRQ_SCAN_REG0
void hook_main_loop(void)
{
// Scan unsupported devices when Service Request(SRQ) is asserted
uint8_t len;
uint8_t buf[16];
static uint8_t addr = 0;
if (!adb_service_request()) return;
for (addr = addr % 16; addr < 16; addr++) {
if (addr == ADB_ADDR_KEYBOARD ||
addr == ADB_ADDR_KBD_POLL ||
addr == ADB_ADDR_KBD_TMP ||
#ifdef ADB_MOUSE_ENABLE
addr == ADB_ADDR_MOUSE ||
addr == ADB_ADDR_MOUSE_POLL ||
addr == ADB_ADDR_MOUSE_TMP ||
#endif
addr == ADB_ADDR_APPLIANCE) {
continue;
}
len = adb_host_talk_buf(addr, ADB_REG_0, buf, sizeof(buf));
if (len) {
xprintf("addr%d reg0: [ ", addr);
for (uint8_t i = 0; i < len; i++) {
xprintf("%02X ", buf[i]);
}
xprintf("]\n");
break;
}
if (!adb_service_request()) return;
}
}
#endif