GlobalBpiLib  1.0
MessageTypes.h
1 /*
2  * MessageTypes.h
3  *
4  * Author: Valentin Fitz
5  * Institute: University of Duisburg-Essen, Germany
6  */
7 
8 #ifndef PROTOCOLS_MESSAGETYPES_H_
9 #define PROTOCOLS_MESSAGETYPES_H_
10 
11 #include <stdint.h>
12 #include <string>
13 
14 #define CRC32GENP 0x04C11DB7
15 #define FABDATAMIN 38
16 #define ETHDATAMIN 46
17 
21 typedef struct MsgMeta {
22 } MsgMeta;
23 
27 typedef struct EthMsgMeta: MsgMeta {
28  int port;
29 } EthMsgMeta;
30 
34 typedef struct FabanMeta: EthMsgMeta {
35  // TODO
36 } FabanMeta;
37 
41 typedef struct ExtMessage {
42  uint16_t size;
44 } ExtMessage;
45 
49 typedef struct Message: ExtMessage {
50  char* data;
51 } Message;
52 
56 typedef struct EthernetMessage: ExtMessage {
57  char destination[6]; /* 6 octets */
58  char source[6]; /* 6 octets */
59  unsigned short ether_type; /* 2 octets */
60  Message* data; /* Data - 46..1500 octets */
61  uint32_t fcs; /* 4 octets */
63 
67 typedef struct FabanMessage: ExtMessage {
68  uint8_t senderId; /* 1 octet */
69  uint8_t sequenceNumber; /* 1 octet */
70  uint64_t deliveryTime :48; /* 6 octets */
71  Message* data; /* Data - 38..1492 octets */
72 } FabanMessage;
73 
74 Message* createMessageData(const char* data, size_t sizeofdata, size_t mindatasize = 0);
75 Message* copyMessage(Message* msg);
76 void deleteMessage(Message* msg);
77 std::string printMessage(Message* msg, bool clear=false);
78 
79 EthernetMessage* createEthernetMessage(char dest[], char source[], short ether_type, Message* data);
80 EthernetMessage* copyEthernetMessage(EthernetMessage* em);
81 void deleteMessage(EthernetMessage* msg);
82 Message* serializeEthernetMessage(EthernetMessage* em);
83 EthernetMessage* deserializeEthernetMessage(Message* raw);
84 EthernetMessage* deserializeEthernetMessage(const char* raw, uint16_t sizeofdata);
85 std::string printMessage(EthernetMessage* msg);
86 uint32_t generateCrc32(EthernetMessage* msg);
87 
88 FabanMessage* createFabanMessage(uint8_t senderId, uint8_t sequenceNumber, uint64_t deliveryTime, Message* data);
89 void deleteMessage(FabanMessage* msg);
90 Message* serializeFabanMessage(FabanMessage* fabMsg);
91 FabanMessage* deserializeFabanMessage(Message* msg);
92 std::string printMessage(FabanMessage* fabMsg);
93 
94 #endif /* PROTOCOLS_MESSAGETYPES_H_ */
Ethernet message meta information.
Definition: MessageTypes.h:27
Basic message meta information.
Definition: MessageTypes.h:21
Basic message struct from which every other message type is derived from. This struct provides a link...
Definition: MessageTypes.h:41
MsgMeta * meta
Definition: MessageTypes.h:43
Raw message type.
Definition: MessageTypes.h:49
Faban message meta information.
Definition: MessageTypes.h:34
uint16_t size
Definition: MessageTypes.h:42
Faban message type.
Definition: MessageTypes.h:67
Ethernet v2 message type.
Definition: MessageTypes.h:56