00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
#include "../GeneralInclude/CompilerSwitches.h"
00011
#include "../GeneralInclude/TestConstants.h"
00012
#include "../GeneralInclude/ClassId.h"
00013
#include "../GeneralInclude/Constants.h"
00014
#include "../Base/CC_RootObject.h"
00015
#include "../Utilities/Checksum.h"
00016
#include "../Telecommand/PUSTelecommand.h"
00017
#include "../Telemetry/PUSTelemetryPacket.h"
00018
#include "../Telemetry/DC_PUSMemoryDumpAbsolute.h"
00019
00020
#include <string.h>
00021
00022 DC_PUSMemoryDumpAbsolute::DC_PUSMemoryDumpAbsolute(
void) {
00023 setClassId(ID_PUSMEMORYDUMPABSOLUTE);
00024 setSubType(
PUS_ST_TM_DMP_ABS);
00025 }
00026
00027 void DC_PUSMemoryDumpAbsolute::update(
void) {
00028 assert( memId!=0 );
00029 assert(
isObjectConfigured() );
00030
00031
unsigned int offset = 0;
00032 memcpy(data+offset,&memId,
sizeof(
TD_PUSMemId));
00033 offset = offset +
sizeof(
TD_PUSMemId);
00034 memcpy(data+offset,&numberBlocks,
sizeof(
TD_PUSNumberMemBlocks));
00035 offset = offset +
sizeof(
TD_PUSNumberMemBlocks);
00036
00037 assert( numberBlocks<maxNumberBlocks );
00038
00039
for (
TD_PUSNumberMemBlocks i=0; i<numberBlocks; i++) {
00040 memcpy(data+offset,&block[i].startAddress,
sizeof(
TD_PUSMemData*));
00041 offset = offset +
sizeof(
TD_PUSMemData*);
00042 memcpy(data+offset,&block[i].length,
sizeof(
TD_PUSMemLength));
00043 offset = offset +
sizeof(
TD_PUSMemLength);
00044
00045
unsigned char* start = (
unsigned char*)(block[i].startAddress);
00046
unsigned int nBytes = (block[i].length)*
sizeof(
TD_PUSMemData);
00047 memcpy(data+offset,start,nBytes);
00048 offset = offset + nBytes;
00049
00050
unsigned short checksum;
00051
if (
isChecksumFlagSet() )
00052 checksum = doChecksum(start,nBytes);
00053
else
00054 checksum = 0;
00055 memcpy(data+offset,&checksum,
sizeof(
unsigned short));
00056 offset = offset+
sizeof(
unsigned short);
00057 assert(
sizeof(
unsigned short)==2);
00058 }
00059 }