diff --git a/firmware/CHANGELOG.md b/firmware/CHANGELOG.md index 22eaf8254d..d90698e2d0 100644 --- a/firmware/CHANGELOG.md +++ b/firmware/CHANGELOG.md @@ -37,6 +37,9 @@ All notable user-facing or behavior-altering changes will be documented in this - Improved TLE8888 driver on microRusEfi - Improved setting ECU presets/defaults from TunerStudio +### Fixed + - Improved TunerStudio protocol reliability - should see fewer CRC errors now + ## October 2020 Release - "Sausage Pizza Day" ### Added diff --git a/firmware/console/binary/tunerstudio.cpp b/firmware/console/binary/tunerstudio.cpp index d0765be104..d027ddb5c5 100644 --- a/firmware/console/binary/tunerstudio.cpp +++ b/firmware/console/binary/tunerstudio.cpp @@ -678,13 +678,14 @@ static void handleGetText(ts_channel_s *tsChannel) { } static void handleExecuteCommand(ts_channel_s *tsChannel, char *data, int incomingPacketSize) { - sr5WriteCrcPacket(tsChannel, TS_RESPONSE_COMMAND_OK, nullptr, 0); data[incomingPacketSize] = 0; char *trimmed = efiTrim(data); #if EFI_SIMULATOR logMsg("execute [%s]\r\n", trimmed); #endif (console_line_callback)(trimmed); + + sr5WriteCrcPacket(tsChannel, TS_RESPONSE_COMMAND_OK, nullptr, 0); } /** diff --git a/firmware/console/binary/tunerstudio_io.cpp b/firmware/console/binary/tunerstudio_io.cpp index 6d4a630986..6531a35fa3 100644 --- a/firmware/console/binary/tunerstudio_io.cpp +++ b/firmware/console/binary/tunerstudio_io.cpp @@ -311,17 +311,13 @@ void sr5WriteCrcPacket(ts_channel_s *tsChannel, uint8_t responseCode, const uint return; } #endif /* TS_CAN_DEVICE */ - -/* if (size <= BLOCKING_FACTOR + 7) { // small packets use small packet optimization sr5WriteCrcPacketSmall(tsChannel, responseCode, buf, size); } else { -*/ sr5WriteCrcPacketLarge(tsChannel, responseCode, buf, size); -/* } -*/ + sr5FlushData(tsChannel); } diff --git a/unit_tests/tests/test_tunerstudio.cpp b/unit_tests/tests/test_tunerstudio.cpp index 68c7d7b98f..18ad11983e 100644 --- a/unit_tests/tests/test_tunerstudio.cpp +++ b/unit_tests/tests/test_tunerstudio.cpp @@ -30,14 +30,17 @@ static void assertCrcPacket() { TEST(binary, testWriteCrc) { static ts_channel_s test; + // Let it pick which impl (small vs large) to use sr5TestWriteDataIndex = 0; - sr5WriteCrcPacket(nullptr, CODE, (const uint8_t * )PAYLOAD, SIZE); + sr5WriteCrcPacket(&test, CODE, (const uint8_t * )PAYLOAD, SIZE); assertCrcPacket(); + // Force the large impl sr5TestWriteDataIndex = 0; - sr5WriteCrcPacketLarge(nullptr, CODE, (const uint8_t * )PAYLOAD, SIZE); + sr5WriteCrcPacketLarge(&test, CODE, (const uint8_t * )PAYLOAD, SIZE); assertCrcPacket(); + // Force the small impl sr5TestWriteDataIndex = 0; sr5WriteCrcPacketSmall(&test, CODE, (const uint8_t * )PAYLOAD, SIZE); assertCrcPacket();