+ led_set(host_keyboard_leds());
+
+ device_scan();
+
+ // LED off
+ DDRD |= (1<<6); PORTD &= ~(1<<6);
+ return;
+}
+
+#ifdef ADB_MOUSE_ENABLE
+static void mouse_init(uint8_t orig_addr)
+{
+ uint16_t reg3;
+ uint8_t mouse_handler;
+ uint8_t addr;
+
+again:
+ // Move to tmp address 15 to setup mouse function
+ mouse_handler = (reg3 = adb_host_talk(orig_addr, ADB_REG_3)) & 0xFF;
+ if (!reg3) return;
+ dmprintf("addr%d reg3: %04X\n", orig_addr, reg3);
+
+ // Move device to tmp address
+ adb_host_flush(orig_addr);
+ adb_host_listen(orig_addr, ADB_REG_3, ((reg3 >> 8) & 0xF0) | ADB_ADDR_TMP, 0xFE);
+ adb_host_flush(ADB_ADDR_TMP);
+
+ mouse_handler = (reg3 = adb_host_talk(ADB_ADDR_TMP, ADB_REG_3)) & 0xFF;
+ if (!reg3) {
+ dmprintf("move fail\n");
+ goto again;
+ }
+ addr = ADB_ADDR_TMP;
+
+
+detect_again:
+ // Try to escalate into extended/classic2 protocol
+ if (mouse_handler == ADB_HANDLER_CLASSIC1_MOUSE || mouse_handler == ADB_HANDLER_CLASSIC2_MOUSE) {
+ adb_host_flush(addr);
+ adb_host_listen(addr, ADB_REG_3, (reg3 >> 8), ADB_HANDLER_EXTENDED_MOUSE);