adb_usb: Fix Address Resolution timing
- when there is no data transfer for 1000 ms
This commit is contained in:
parent
15b401a8f2
commit
ca1af1a03f
1 changed files with 30 additions and 25 deletions
|
|
@ -442,7 +442,7 @@ static int32_t scroll_state = 0;
|
||||||
static uint8_t scroll_speed = ADB_MOUSE_SCROLL_SPEED;
|
static uint8_t scroll_speed = ADB_MOUSE_SCROLL_SPEED;
|
||||||
static uint8_t scroll_button_mask = (1 << ADB_MOUSE_SCROLL_BUTTON) >> 1;
|
static uint8_t scroll_button_mask = (1 << ADB_MOUSE_SCROLL_BUTTON) >> 1;
|
||||||
|
|
||||||
static void mouse_proc(uint8_t addr)
|
static uint8_t mouse_proc(uint8_t addr)
|
||||||
{
|
{
|
||||||
uint8_t len;
|
uint8_t len;
|
||||||
uint8_t buf[5];
|
uint8_t buf[5];
|
||||||
|
|
@ -454,7 +454,7 @@ static void mouse_proc(uint8_t addr)
|
||||||
|
|
||||||
len = adb_host_talk_buf(addr, ADB_REG_0, buf, sizeof(buf));
|
len = adb_host_talk_buf(addr, ADB_REG_0, buf, sizeof(buf));
|
||||||
if (len < 2) {
|
if (len < 2) {
|
||||||
return;
|
return 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
xprintf("M:$%X[ ", addr);
|
xprintf("M:$%X[ ", addr);
|
||||||
|
|
@ -627,7 +627,7 @@ static void mouse_proc(uint8_t addr)
|
||||||
// Send result by usb.
|
// Send result by usb.
|
||||||
host_mouse_send(&mouse_report);
|
host_mouse_send(&mouse_report);
|
||||||
|
|
||||||
return;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t adb_mouse_buttons(void)
|
uint8_t adb_mouse_buttons(void)
|
||||||
|
|
@ -660,11 +660,11 @@ static uint8_t appliance_keymap(uint8_t code)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void appliance_proc(uint8_t addr)
|
static uint8_t appliance_proc(uint8_t addr)
|
||||||
{
|
{
|
||||||
// Adjustable keybaord M1242 media keys: handler=2
|
// Adjustable keybaord M1242 media keys: handler=2
|
||||||
uint16_t codes = adb_host_kbd_recv(addr);
|
uint16_t codes = adb_host_kbd_recv(addr);
|
||||||
if (!codes) return;
|
if (!codes) return 0;
|
||||||
xprintf("m:$%X:%04X ", addr, codes);
|
xprintf("m:$%X:%04X ", addr, codes);
|
||||||
|
|
||||||
uint8_t key;
|
uint8_t key;
|
||||||
|
|
@ -680,6 +680,8 @@ static void appliance_proc(uint8_t addr)
|
||||||
register_key(key);
|
register_key(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -842,47 +844,40 @@ void hook_main_loop(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Address Resolution
|
|
||||||
if (timer_elapsed(detect_ms) > 1000) {
|
|
||||||
detect_ms = timer_read();
|
|
||||||
resolve_address();
|
|
||||||
poll_ms = timer_read();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Polling with 11ms interval
|
|
||||||
if (timer_elapsed(poll_ms) < 11) return;
|
|
||||||
|
|
||||||
uint8_t len;
|
uint8_t len;
|
||||||
uint8_t buf[8];
|
uint8_t buf[8];
|
||||||
uint8_t addr = active_addr;
|
uint8_t addr = active_addr;
|
||||||
do {
|
uint8_t busy = 0;
|
||||||
|
|
||||||
|
// Polling with 11ms interval
|
||||||
|
if (timer_elapsed(poll_ms) >= 11) do {
|
||||||
addr %= 16;
|
addr %= 16;
|
||||||
|
|
||||||
// Ignore Address 0
|
// Ignore Address 0
|
||||||
if (addr == 0) continue;
|
if (addr == 0) continue;
|
||||||
|
|
||||||
|
poll_ms = timer_read();
|
||||||
switch (device_table[addr].addr_default) {
|
switch (device_table[addr].addr_default) {
|
||||||
case ADB_ADDR_KEYBOARD:
|
case ADB_ADDR_KEYBOARD:
|
||||||
keyboard_proc(addr);
|
busy = keyboard_proc(addr);
|
||||||
break;
|
break;
|
||||||
case ADB_ADDR_MOUSE:
|
case ADB_ADDR_MOUSE:
|
||||||
mouse_proc(addr);
|
busy = mouse_proc(addr);
|
||||||
break;
|
break;
|
||||||
case ADB_ADDR_APPLIANCE:
|
case ADB_ADDR_APPLIANCE:
|
||||||
appliance_proc(addr);
|
busy = appliance_proc(addr);
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
// No device or dumb device #733
|
// No device entry but 'dumb' device may exist #733
|
||||||
switch (addr) {
|
switch (addr) {
|
||||||
case ADB_ADDR_KEYBOARD:
|
case ADB_ADDR_KEYBOARD:
|
||||||
keyboard_proc(addr);
|
busy = keyboard_proc(addr);
|
||||||
break;
|
break;
|
||||||
case ADB_ADDR_MOUSE:
|
case ADB_ADDR_MOUSE:
|
||||||
mouse_proc(addr);
|
busy = mouse_proc(addr);
|
||||||
break;
|
break;
|
||||||
case ADB_ADDR_APPLIANCE:
|
case ADB_ADDR_APPLIANCE:
|
||||||
appliance_proc(addr);
|
busy = appliance_proc(addr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -896,6 +891,7 @@ void hook_main_loop(void)
|
||||||
}
|
}
|
||||||
xprintf("]\n");
|
xprintf("]\n");
|
||||||
#endif
|
#endif
|
||||||
|
busy = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -906,5 +902,14 @@ void hook_main_loop(void)
|
||||||
}
|
}
|
||||||
} while (++addr != active_addr);
|
} while (++addr != active_addr);
|
||||||
active_addr = addr % 16;
|
active_addr = addr % 16;
|
||||||
poll_ms = timer_read();
|
|
||||||
|
// Address Resolution
|
||||||
|
if (!busy) {
|
||||||
|
if (timer_elapsed(detect_ms) >= 1000) {
|
||||||
|
detect_ms = timer_read();
|
||||||
|
resolve_address();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
detect_ms = timer_read();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue