Compare commits
	
		
			3 Commits
		
	
	
		
			v7.8.1
			...
			mpsoc-file
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						d60f4dd3e3
	
				 | 
					
					
						|||
| 
						
						
							
						
						6a0b18ffd0
	
				 | 
					
					
						|||
| 
						
						
							
						
						398e7a3a05
	
				 | 
					
					
						
@@ -48,6 +48,7 @@
 | 
			
		||||
#define OBSW_SWITCH_TO_NORMAL_MODE_AFTER_STARTUP    1
 | 
			
		||||
#define OBSW_PRINT_MISSED_DEADLINES                 1
 | 
			
		||||
 | 
			
		||||
#define OBSW_MPSOC_JTAG_BOOT                        0
 | 
			
		||||
#define OBSW_SYRLINKS_SIMULATED                     1
 | 
			
		||||
#define OBSW_ADD_TEST_CODE                          0
 | 
			
		||||
#define OBSW_ADD_TEST_TASK                          0
 | 
			
		||||
 
 | 
			
		||||
@@ -6,10 +6,10 @@
 | 
			
		||||
#include <linux/payload/mpsocRetvals.h>
 | 
			
		||||
#include <mission/payload/plocSpBase.h>
 | 
			
		||||
 | 
			
		||||
#include "OBSWConfig.h"
 | 
			
		||||
#include "eive/definitions.h"
 | 
			
		||||
#include "fsfw/globalfunctions/CRC.h"
 | 
			
		||||
#include "fsfw/returnvalues/returnvalue.h"
 | 
			
		||||
#include "fsfw/serialize/SerializeAdapter.h"
 | 
			
		||||
#include "fsfw/serialize/SerializeIF.h"
 | 
			
		||||
 | 
			
		||||
namespace mpsoc {
 | 
			
		||||
 | 
			
		||||
@@ -838,20 +838,47 @@ class TcSimplexSendFile : public TcBase {
 | 
			
		||||
      : TcBase(params, apid::TC_SIMPLEX_SEND_FILE, sequenceCount) {}
 | 
			
		||||
 | 
			
		||||
  ReturnValue_t setPayload(const uint8_t* commandData, size_t commandDataLen) {
 | 
			
		||||
    if (commandDataLen < MIN_DATA_LENGTH) {
 | 
			
		||||
      return INVALID_LENGTH;
 | 
			
		||||
    }
 | 
			
		||||
    if (commandDataLen > MAX_DATA_LENGTH) {
 | 
			
		||||
      return INVALID_LENGTH;
 | 
			
		||||
    }
 | 
			
		||||
    std::string fileName(reinterpret_cast<const char*>(commandData));
 | 
			
		||||
    const uint8_t** dataPtr = &commandData;
 | 
			
		||||
    ReturnValue_t result = SerializeAdapter::deSerialize(&chunkParameter, dataPtr, &commandDataLen,
 | 
			
		||||
                                                         SerializeIF::Endianness::NETWORK);
 | 
			
		||||
    if (result != returnvalue::OK) {
 | 
			
		||||
      return result;
 | 
			
		||||
    }
 | 
			
		||||
    /// No chunks makes no sense, and DIV str can not be longer than whats representable with 3
 | 
			
		||||
    /// decimal digits.
 | 
			
		||||
    if (chunkParameter == 0 or chunkParameter > 999) {
 | 
			
		||||
      return INVALID_PARAMETER;
 | 
			
		||||
    }
 | 
			
		||||
    std::string fileName(reinterpret_cast<const char*>(*dataPtr));
 | 
			
		||||
    if (fileName.size() + sizeof(NULL_TERMINATOR) > MAX_FILENAME_SIZE) {
 | 
			
		||||
      return FILENAME_TOO_LONG;
 | 
			
		||||
    }
 | 
			
		||||
    spParams.setFullPayloadLen(commandDataLen + CRC_SIZE);
 | 
			
		||||
    std::memcpy(payloadStart, commandData, commandDataLen);
 | 
			
		||||
    size_t currentCopyIdx = 0;
 | 
			
		||||
    size_t payloadLen = fileName.length() + sizeof(NULL_TERMINATOR) + CRC_SIZE;
 | 
			
		||||
    if (chunkParameter > 1) {
 | 
			
		||||
      char divStr[16]{};
 | 
			
		||||
      sprintf(divStr, "DIV%03u", chunkParameter);
 | 
			
		||||
      std::memcpy(payloadStart, divStr, DIV_STR_LEN);
 | 
			
		||||
      payloadLen += DIV_STR_LEN;
 | 
			
		||||
      currentCopyIdx += DIV_STR_LEN;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    std::memcpy(payloadStart + currentCopyIdx, *dataPtr, fileName.length());
 | 
			
		||||
    spParams.setFullPayloadLen(payloadLen);
 | 
			
		||||
    return returnvalue::OK;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  static const size_t MAX_DATA_LENGTH = 256;
 | 
			
		||||
  uint32_t chunkParameter = 0;
 | 
			
		||||
  static constexpr size_t MAX_DATA_LENGTH = 256;
 | 
			
		||||
  static constexpr size_t MIN_DATA_LENGTH = 4;
 | 
			
		||||
  static constexpr size_t DIV_STR_LEN = 6;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								tmtc
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								tmtc
									
									
									
									
									
								
							 Submodule tmtc updated: a8d0143b1e...37eafb722b
									
								
							@@ -6,5 +6,6 @@ target_sources(${UNITTEST_NAME} PRIVATE
 | 
			
		||||
    testEnvironment.cpp
 | 
			
		||||
    testGenericFilesystem.cpp
 | 
			
		||||
    hdlcEncodingRw.cpp
 | 
			
		||||
    mpsocTests.cpp
 | 
			
		||||
    printChar.cpp
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								unittest/mpsocTests.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								unittest/mpsocTests.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
 | 
			
		||||
#include <catch2/catch_test_macros.hpp>
 | 
			
		||||
 | 
			
		||||
TEST_CASE("MPSoC helper tests", "[payload]") {
 | 
			
		||||
  char divStr[16]{};
 | 
			
		||||
  uint32_t divParam = 0;
 | 
			
		||||
 | 
			
		||||
  SECTION("Simple Test") {
 | 
			
		||||
    divParam = 3;
 | 
			
		||||
    CHECK(divParam < 999);
 | 
			
		||||
    sprintf(divStr, "DIV%03u", divParam);
 | 
			
		||||
    REQUIRE(strcmp(divStr, "DIV003") == 0);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user