|
|
|
|
|
|
|
|
{ |
|
|
{ |
|
|
if (port > numports) return; |
|
|
if (port > numports) return; |
|
|
if (can_send_control_now()) { |
|
|
if (can_send_control_now()) { |
|
|
println("getstatus, port = ", port); |
|
|
|
|
|
|
|
|
println("getstatus, port = ", port); |
|
|
mk_setup(setup, ((port > 0) ? 0xA3 : 0xA0), 0, 0, port, 4); |
|
|
mk_setup(setup, ((port > 0) ? 0xA3 : 0xA0), 0, 0, port, 4); |
|
|
queue_Control_Transfer(device, &setup, &statusbits, this); |
|
|
queue_Control_Transfer(device, &setup, &statusbits, this); |
|
|
send_pending_getstatus &= ~(1 << port); |
|
|
send_pending_getstatus &= ~(1 << port); |
|
|
} else { |
|
|
} else { |
|
|
|
|
|
println("deferred getstatus, port = ", port); |
|
|
send_pending_getstatus |= (1 << port); |
|
|
send_pending_getstatus |= (1 << port); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
println(", timer = ", (uint32_t)timer, HEX); |
|
|
println(", timer = ", (uint32_t)timer, HEX); |
|
|
if (timer == &debouncetimer) { |
|
|
if (timer == &debouncetimer) { |
|
|
uint32_t in_use = debounce_in_use; |
|
|
uint32_t in_use = debounce_in_use; |
|
|
|
|
|
println("ports in use bitmask = ", in_use, HEX); |
|
|
if (in_use) { |
|
|
if (in_use) { |
|
|
for (uint32_t i=1; i < numports; i++) { |
|
|
|
|
|
|
|
|
for (uint32_t i=1; i <= numports; i++) { |
|
|
if (in_use & (1 << i)) send_getstatus(i); |
|
|
if (in_use & (1 << i)) send_getstatus(i); |
|
|
} |
|
|
} |
|
|
debouncetimer.start(20000); |
|
|
debouncetimer.start(20000); |