Bluetooth trainer byte parsing: catch XOR state errors

In XOR state only 0x7E ^ 0x20 = 0x5E or 0x7D ^ 0x20 = 0x5D are expected.
Copy of my https://github.com/opentx/opentx/pull/8427
This commit is contained in:
Risto
2021-11-27 16:26:43 +01:00
parent 2c845648cf
commit 1103a3c842
+16 -2
View File
@@ -208,8 +208,22 @@ void Bluetooth::processTrainerByte(uint8_t data)
break;
case STATE_DATA_XOR:
appendTrainerByte(data ^ STUFF_MASK);
dataState = STATE_DATA_IN_FRAME;
switch (data) {
case BYTE_STUFF ^ STUFF_MASK:
case START_STOP ^ STUFF_MASK:
// Expected content, save the data
appendTrainerByte(data ^ STUFF_MASK);
dataState = STATE_DATA_IN_FRAME;
break;
case START_STOP: // Illegal situation, as we have START_STOP, try to start from the beginning
bufferIndex = 0;
dataState = STATE_DATA_IN_FRAME;
break;
default:
// Illegal situation, start looking for a new START_STOP byte
dataState = STATE_DATA_START;
break;
}
break;
case STATE_DATA_IDLE: