If we don't get a response from a command in a while, resend it. This doesn't
normally happen (it only happened during firmware development), but it makes
command sending more robust, so let's keep it. This also uses a single OVERLAPPED
for a whole command, which is simpler.
This could cause us to stop sending config updates, since we're still
waiting for the previous one to complete. This is probably the cause
of threshold changes, etc. not being applied.
This fixes the pad flickering when dragging the color slider, because it
could briefly use an out-of-date configuration (only really visible when
going between red and white on the left).
This is the same as SMX_SetLights, but instead of taking one buffer with a
fixed size, it takes a separate buffer for each pad, and explicitly includes
the size of the buffer rather than assuming it's 864 bytes. SMX_SetLights
and SMX_SetLights2 call into the same underlying update.
This improves recovery if a start packet is received when we didn't receive a complete
packet earlier. This doesn't normally happen, this just matches the error recovery used
in game.
This caused SMXConfig to think it was setting both controller configurations even
when only one was connected, which made the UI not refresh correctly if only P2
was connected.