Check for out of sequence PACKET_FLAG_START_OF_COMMAND.
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 commit is contained in:
parent
e57fa5d28e
commit
65f4a7102c
@ -203,6 +203,18 @@ void SMX::SMXDeviceConnection::HandleUsbPacket(const string &buf)
|
|||||||
if(!m_bActive)
|
if(!m_bActive)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
if(cmd & PACKET_FLAG_START_OF_COMMAND && !m_sCurrentReadBuffer.empty())
|
||||||
|
{
|
||||||
|
// When we get a start packet, the read buffer should already be empty. If
|
||||||
|
// it isn't, we got a command that didn't end with an END_OF_COMMAND packet,
|
||||||
|
// and something is wrong. This shouldn't happen, so warn about it and recover
|
||||||
|
// by clearing the junk in the buffer.
|
||||||
|
Log(ssprintf("Got PACKET_FLAG_START_OF_COMMAND, but we had %i bytes in the read buffer",
|
||||||
|
m_sCurrentReadBuffer.size()));
|
||||||
|
|
||||||
|
m_sCurrentReadBuffer.clear();
|
||||||
|
}
|
||||||
|
|
||||||
m_sCurrentReadBuffer.append(sPacket);
|
m_sCurrentReadBuffer.append(sPacket);
|
||||||
|
|
||||||
if(cmd & PACKET_FLAG_END_OF_COMMAND)
|
if(cmd & PACKET_FLAG_END_OF_COMMAND)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user