##// END OF EJS Templates
New Plugin Manager and interface to remove all the previous crap!...
New Plugin Manager and interface to remove all the previous crap! Let's use Qt plugin API and make it much simpler.

File last commit:

r0:1aa783210b8e default
r118:de85e8465e67 tip 1.0
Show More
rmapoperations.h
140 lines | 4.9 KiB | text/x-c | CLexer
#ifndef RMAPOPERATIONS_H
#define RMAPOPERATIONS_H
#include "qhexspinbox.h"
static const unsigned char RMAP_CRCTable[] = {
0x00, 0x91, 0xe3, 0x72, 0x07, 0x96, 0xe4, 0x75,
0x0e, 0x9f, 0xed, 0x7c, 0x09, 0x98, 0xea, 0x7b,
0x1c, 0x8d, 0xff, 0x6e, 0x1b, 0x8a, 0xf8, 0x69,
0x12, 0x83, 0xf1, 0x60, 0x15, 0x84, 0xf6, 0x67,
0x38, 0xa9, 0xdb, 0x4a, 0x3f, 0xae, 0xdc, 0x4d,
0x36, 0xa7, 0xd5, 0x44, 0x31, 0xa0, 0xd2, 0x43,
0x24, 0xb5, 0xc7, 0x56, 0x23, 0xb2, 0xc0, 0x51,
0x2a, 0xbb, 0xc9, 0x58, 0x2d, 0xbc, 0xce, 0x5f,
0x70, 0xe1, 0x93, 0x02, 0x77, 0xe6, 0x94, 0x05,
0x7e, 0xef, 0x9d, 0x0c, 0x79, 0xe8, 0x9a, 0x0b,
0x6c, 0xfd, 0x8f, 0x1e, 0x6b, 0xfa, 0x88, 0x19,
0x62, 0xf3, 0x81, 0x10, 0x65, 0xf4, 0x86, 0x17,
0x48, 0xd9, 0xab, 0x3a, 0x4f, 0xde, 0xac, 0x3d,
0x46, 0xd7, 0xa5, 0x34, 0x41, 0xd0, 0xa2, 0x33,
0x54, 0xc5, 0xb7, 0x26, 0x53, 0xc2, 0xb0, 0x21,
0x5a, 0xcb, 0xb9, 0x28, 0x5d, 0xcc, 0xbe, 0x2f,
0xe0, 0x71, 0x03, 0x92, 0xe7, 0x76, 0x04, 0x95,
0xee, 0x7f, 0x0d, 0x9c, 0xe9, 0x78, 0x0a, 0x9b,
0xfc, 0x6d, 0x1f, 0x8e, 0xfb, 0x6a, 0x18, 0x89,
0xf2, 0x63, 0x11, 0x80, 0xf5, 0x64, 0x16, 0x87,
0xd8, 0x49, 0x3b, 0xaa, 0xdf, 0x4e, 0x3c, 0xad,
0xd6, 0x47, 0x35, 0xa4, 0xd1, 0x40, 0x32, 0xa3,
0xc4, 0x55, 0x27, 0xb6, 0xc3, 0x52, 0x20, 0xb1,
0xca, 0x5b, 0x29, 0xb8, 0xcd, 0x5c, 0x2e, 0xbf,
0x90, 0x01, 0x73, 0xe2, 0x97, 0x06, 0x74, 0xe5,
0x9e, 0x0f, 0x7d, 0xec, 0x99, 0x08, 0x7a, 0xeb,
0x8c, 0x1d, 0x6f, 0xfe, 0x8b, 0x1a, 0x68, 0xf9,
0x82, 0x13, 0x61, 0xf0, 0x85, 0x14, 0x66, 0xf7,
0xa8, 0x39, 0x4b, 0xda, 0xaf, 0x3e, 0x4c, 0xdd,
0xa6, 0x37, 0x45, 0xd4, 0xa1, 0x30, 0x42, 0xd3,
0xb4, 0x25, 0x57, 0xc6, 0xb3, 0x22, 0x50, 0xc1,
0xba, 0x2b, 0x59, 0xc8, 0xbd, 0x2c, 0x5e, 0xcf
};
enum RMAP_command_codes{
invalid0, //0000
invalid1, //0001
read_Single, //0010
read_Inc, //0011
invalid2, //0100
invalid3, //0101
invalid4, //0110
readModWri_Inc, //0111
writeSingle_noVer_noRep, //1000
writeInc_noVer_noRep, //1001
writeSingle_noVer_Rep, //1010
writeInc_noVer_Rep, //1011
writeSingle_ver_noRep, //1100
writeInc_ver_noRep, //1101
writeSingle_ver_rep, //1110
writeInc_ver_rep //1111
};
struct rmap_command_format_str
{
// char tagetSpaceWireAddress[]; // used for path addressing or regional addressing
char targetLogicalAddress;
char protocolIdentifier;
char instruction;
char key; // used for command authorization => check Gaisler GRSPW for compliance
//char replyAddress[]; // not needed if logical addressing is used (replyAddressLength = 0b00)
char initiatorLogicalAddress;
char transactionIdentifier1;
char transactionIdentifier0;
char extendedAddress;
char address3;
char address2;
char address1;
char address0;
unsigned char dataLength2;
unsigned char dataLength1;
unsigned char dataLength0;
char headerCRC;
};
typedef struct rmap_command_format_str rmap_command_format_t;
struct rmap_write_reply_str
{
unsigned char initiatorLogicalAddress;
unsigned char protocolIdentifier;
unsigned char instruction;
unsigned char status;
unsigned char targetLogicalAddress;
unsigned char transactionIdentifier1;
unsigned char transactionIdentifier2;
unsigned char headerCRC;
};
typedef struct rmap_write_reply_str rmap_write_reply_t;
struct rmap_read_reply_PcktHdr_str
{
//char replyAddress[]; // not needed if logical addressing is used
char initiatorLogicalAddress;
char protocolIdentifier;
char instruction;
char status;
char targetLogicalAddress;
char transactionIdentifier1;
char transactionIdentifier0;
char reserved;
unsigned char dataLength2;
unsigned char dataLength1;
unsigned char dataLength0;
char headerCRC;
};
typedef struct rmap_read_reply_PcktHdr_str rmap_read_reply_PcktHdr_t;
struct rmap_gresb_header_str
{
char GRESBProtocoleID;
unsigned char SPWPacketSize2;
unsigned char SPWPacketSize1;
unsigned char SPWPacketSize0;
};
typedef struct rmap_gresb_header_str rmap_gresb_header_str;
class RMAP
{
public:
RMAP(RMAP_command_codes commandCode,
char targetLogicalAddress,
char initiatorLogicalAddress,
int startAddress,
int nbBytes,
char *data);
unsigned char RMAPCalculateCRC(unsigned char INCR, unsigned char INBYTE); // ECSS-E-ST-50-52C
unsigned char RMAPCalculateHeaderCRC();
unsigned char RMAPCalculateDataCRC(char *data, int nbBytes);
rmap_gresb_header_str GRESBHeader;
rmap_command_format_t RMAPHeader;
char dataCRC;
};
#endif // RMAPOPERATIONS_H