action
container
contrib
controller
coordinates
datalinklayer
datapool
datapoollocal
defaultcfg
devicehandlers
doc
events
fdir
globalfunctions
matching
math
AsciiConverter.cpp
AsciiConverter.h
CMakeLists.txt
CRC.cpp
CRC.h
DleEncoder.cpp
DleEncoder.h
PeriodicOperationDivider.cpp
PeriodicOperationDivider.h
Type.cpp
Type.h
arrayprinter.cpp
arrayprinter.h
constants.h
sign.h
timevalOperations.cpp
timevalOperations.h
health
housekeeping
internalError
ipc
logo
memory
modes
monitoring
objectmanager
osal
parameters
power
pus
returnvalues
rmap
serialize
serviceinterface
storagemanager
subsystem
tasks
tcdistribution
thermal
timemanager
tmstorage
tmtcpacket
tmtcservices
unittest
.gitignore
.gitmodules
CHANGELOG
CMakeLists.txt
FSFWVersion.h
LICENSE
NOTICE
README.md
fsfw.mk
182 lines
3.2 KiB
C++
182 lines
3.2 KiB
C++
#include "Type.h"
|
|
#include "../serialize/SerializeAdapter.h"
|
|
|
|
Type::Type() :
|
|
actualType(UNKNOWN_TYPE) {
|
|
}
|
|
|
|
Type::Type(ActualType_t actualType) :
|
|
actualType(actualType) {
|
|
}
|
|
|
|
Type::Type(const Type& type) :
|
|
actualType(type.actualType) {
|
|
}
|
|
|
|
Type& Type::operator =(Type rhs) {
|
|
this->actualType = rhs.actualType;
|
|
return *this;
|
|
}
|
|
|
|
Type& Type::operator =(ActualType_t actualType) {
|
|
this->actualType = actualType;
|
|
return *this;
|
|
}
|
|
|
|
Type::operator Type::ActualType_t() const {
|
|
return actualType;
|
|
}
|
|
|
|
bool Type::operator ==(const Type& rhs) {
|
|
return this->actualType == rhs.actualType;
|
|
}
|
|
|
|
bool Type::operator !=(const Type& rhs) {
|
|
return !operator==(rhs);
|
|
}
|
|
|
|
uint8_t Type::getSize() const {
|
|
switch (actualType) {
|
|
case UINT8_T:
|
|
return sizeof(uint8_t);
|
|
case INT8_T:
|
|
return sizeof(int8_t);
|
|
case UINT16_T:
|
|
return sizeof(uint16_t);
|
|
case INT16_T:
|
|
return sizeof(int16_t);
|
|
case UINT32_T:
|
|
return sizeof(uint32_t);
|
|
case INT32_T:
|
|
return sizeof(int32_t);
|
|
case FLOAT:
|
|
return sizeof(float);
|
|
case DOUBLE:
|
|
return sizeof(double);
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
ReturnValue_t Type::serialize(uint8_t** buffer, size_t* size,
|
|
size_t maxSize, Endianness streamEndianness) const {
|
|
uint8_t ptc;
|
|
uint8_t pfc;
|
|
ReturnValue_t result = getPtcPfc(&ptc, &pfc);
|
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
|
return result;
|
|
}
|
|
|
|
result = SerializeAdapter::serialize(&ptc, buffer, size, maxSize,
|
|
streamEndianness);
|
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
|
return result;
|
|
}
|
|
|
|
result = SerializeAdapter::serialize(&pfc, buffer, size, maxSize,
|
|
streamEndianness);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
size_t Type::getSerializedSize() const {
|
|
uint8_t dontcare = 0;
|
|
return 2 * SerializeAdapter::getSerializedSize(&dontcare);
|
|
}
|
|
|
|
ReturnValue_t Type::deSerialize(const uint8_t** buffer, size_t* size,
|
|
Endianness streamEndianness) {
|
|
uint8_t ptc;
|
|
uint8_t pfc;
|
|
ReturnValue_t result = SerializeAdapter::deSerialize(&ptc, buffer,
|
|
size, streamEndianness);
|
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
|
return result;
|
|
}
|
|
|
|
result = SerializeAdapter::deSerialize(&pfc, buffer, size,
|
|
streamEndianness);
|
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
|
return result;
|
|
}
|
|
|
|
actualType = getActualType(ptc, pfc);
|
|
|
|
return HasReturnvaluesIF::RETURN_OK;
|
|
}
|
|
|
|
ReturnValue_t Type::getPtcPfc(uint8_t* ptc, uint8_t* pfc) const {
|
|
switch (actualType) {
|
|
case UINT8_T:
|
|
*ptc = 3;
|
|
*pfc = 4;
|
|
break;
|
|
case INT8_T:
|
|
*ptc = 4;
|
|
*pfc = 4;
|
|
break;
|
|
case UINT16_T:
|
|
*ptc = 3;
|
|
*pfc = 12;
|
|
break;
|
|
case INT16_T:
|
|
*ptc = 4;
|
|
*pfc = 12;
|
|
break;
|
|
case UINT32_T:
|
|
*ptc = 3;
|
|
*pfc = 14;
|
|
break;
|
|
case INT32_T:
|
|
*ptc = 4;
|
|
*pfc = 14;
|
|
break;
|
|
case FLOAT:
|
|
*ptc = 5;
|
|
*pfc = 1;
|
|
break;
|
|
case DOUBLE:
|
|
*ptc = 5;
|
|
*pfc = 2;
|
|
break;
|
|
default:
|
|
return HasReturnvaluesIF::RETURN_FAILED;
|
|
}
|
|
return HasReturnvaluesIF::RETURN_OK;
|
|
}
|
|
|
|
Type::ActualType_t Type::getActualType(uint8_t ptc, uint8_t pfc) {
|
|
switch (ptc) {
|
|
case 3:
|
|
switch (pfc) {
|
|
case 4:
|
|
return UINT8_T;
|
|
case 12:
|
|
return UINT16_T;
|
|
case 14:
|
|
return UINT32_T;
|
|
}
|
|
break;
|
|
case 4:
|
|
switch (pfc) {
|
|
case 4:
|
|
return INT8_T;
|
|
case 12:
|
|
return INT16_T;
|
|
case 14:
|
|
return INT32_T;
|
|
}
|
|
break;
|
|
case 5:
|
|
switch (pfc) {
|
|
case 1:
|
|
return FLOAT;
|
|
case 2:
|
|
return DOUBLE;
|
|
}
|
|
break;
|
|
}
|
|
return UNKNOWN_TYPE;
|
|
}
|