Browse Source

fix endianess of transport write

stefan 3 years ago
parent
commit
f1e729037e
4 changed files with 10 additions and 9 deletions
  1. 2 1
      makefile
  2. 1 1
      src/shellmatta.c
  3. 4 4
      src/shellmatta_transport.c
  4. 3 3
      test/integrationtest/test_integration_transport.cpp

+ 2 - 1
makefile

@@ -54,7 +54,8 @@ INTEGRATIONTEST_SOURCES :=  test/integrationtest/test_main.cpp
                             test/integrationtest/test_integration_continue.cpp  \
                             test/integrationtest/test_integration_busy.cpp      \
                             test/integrationtest/test_integration_history.cpp   \
-                            test/integrationtest/test_integration_help.cpp
+                            test/integrationtest/test_integration_help.cpp      \
+                            test/integrationtest/test_integration_transport.cpp
 
 UNITTEST_CPPOBJ  := $(patsubst %.cpp,$(UNITTEST_OBJ_DIR)%.o,$(UNITTEST_SOURCES))
 

+ 1 - 1
src/shellmatta.c

@@ -442,7 +442,7 @@ shellmatta_retCode_t shellmatta_processData(shellmatta_handle_t     handle,
 
                 case STATE_GET_CRC:
                     transportLayerInst.continueStep = false;
-                    crc32 |= (uint8_t)data[headerCounter] << (SHELLMATTA_LENGTH_CRC - 1 - crcCounter++) * 8u;
+                    crc32 |= (uint8_t)data[headerCounter] << (SHELLMATTA_LENGTH_CRC - 1u - crcCounter++) * 8u;
                     break;
                 
                 default:

+ 4 - 4
src/shellmatta_transport.c

@@ -331,10 +331,10 @@ shellmatta_retCode_t shellmatta_write_transport(const char* data, uint32_t lengt
         uint32_t outCrc = crc32Calc((char*) outputBuffer, SHELLMATTA_HEADER_LENGTH + splitPayloadLength);
 
         /* append crc to end of payload */
-        outputBuffer[splitPayloadLength + SHELLMATTA_HEADER_LENGTH] = (uint8_t)(outCrc);
-        outputBuffer[splitPayloadLength + SHELLMATTA_HEADER_LENGTH + SHELLMATTA_SHIFT_BY_1] = (uint8_t)(outCrc >> SHELLMATTA_SHIFT_BY_8);
-        outputBuffer[splitPayloadLength + SHELLMATTA_HEADER_LENGTH + SHELLMATTA_SHIFT_BY_2] = (uint8_t)(outCrc >> SHELLMATTA_SHIFT_BY_16);
-        outputBuffer[splitPayloadLength + SHELLMATTA_HEADER_LENGTH + SHELLMATTA_SHIFT_BY_3] = (uint8_t)(outCrc >> SHELLMATTA_SHIFT_BY_24);
+        outputBuffer[splitPayloadLength + SHELLMATTA_HEADER_LENGTH] = (uint8_t)(outCrc >> SHELLMATTA_SHIFT_BY_24);
+        outputBuffer[splitPayloadLength + SHELLMATTA_HEADER_LENGTH + SHELLMATTA_SHIFT_BY_1] = (uint8_t)(outCrc >> SHELLMATTA_SHIFT_BY_16);
+        outputBuffer[splitPayloadLength + SHELLMATTA_HEADER_LENGTH + SHELLMATTA_SHIFT_BY_2] = (uint8_t)(outCrc >> SHELLMATTA_SHIFT_BY_8);
+        outputBuffer[splitPayloadLength + SHELLMATTA_HEADER_LENGTH + SHELLMATTA_SHIFT_BY_3] = (uint8_t)(outCrc);
 
         /* use original write function to send full buffer */
         ret = transportLayerInst.originalWrite((char*) outputBuffer, splitLength);

+ 3 - 3
test/integrationtest/test_integration_transport.cpp

@@ -94,13 +94,13 @@ TEST_CASE( "shellmatta transport success" ) {
     char historyBuffer[1024];
     char *dummyData =   (char*)"\x01\x01\x00\x21\x00\x00\x01\x01"
                                "doSomething argument - length: 20"
-                               "\x4f\xe9\xf5\xac"
+                               "\xac\xf5\xe9\x4f"
                                "\x01\x01\x00\x02\x00\x00\x01\x02"
                                "\r\n"
-                               "\x7a\x22\xef\x62"
+                               "\x62\xef\x22\x7a"
                                "\x01\x01\x00\x0C\x00\x00\x01\x03"
                                "shellmatta->"
-                               "\x3e\x8f\x0b\xd2";
+                               "\xd2\x0b\x8f\x3e";
 
     shellmatta_doInit(  &inst,
                         &handle,