Communication Message continued

This commit is contained in:
2020-03-04 23:07:54 +01:00
parent fb6172fdc5
commit 43ac0ec04b
3 changed files with 160 additions and 52 deletions

View File

@ -10,6 +10,7 @@
#include <framework/ipc/MessageQueueMessage.h>
#include <framework/storagemanager/StorageManagerIF.h>
#include <framework/devicehandlers/DeviceHandlerBase.h>
/**
* @brief Used to pass communication information between tasks
@ -26,6 +27,7 @@
class CommunicationMessage: public MessageQueueMessage {
public:
enum messageType {
NONE,
SEND_DATA_FROM_POINTER,
SEND_DATA_FROM_IPC_STORE,
SEND_DATA_RAW,
@ -41,6 +43,24 @@ public:
CommunicationMessage();
virtual ~CommunicationMessage();
/**
* Message Type is stored as the fifth byte of the message data
* @param status
*/
void setMessageType(messageType status);
messageType getMessageType() const;
/**
* This is a unique ID which can be used to handle different kinds of messages.
* For example, the same interface (e.g. SPI) could be used to exchange raw data
* (e.g. sensor values) and data stored in the IPC store.
* The ID can be used to distinguish the messages in child implementations.
* The message ID is stored as the sixth byte of the message data.
* @param messageId
*/
void setMessageId(uint8_t messageId);
uint8_t getMessageId() const;
/**
* Send requests with pointer to the data to be sent and send data length
* @param address Target Address, first four bytes
@ -65,7 +85,8 @@ public:
* @param data Pointer to data to send
*
*/
void setSendRequestRaw(uint32_t address, uint32_t length);
void setSendRequestRaw(uint32_t address, uint32_t length,
uint16_t sendBufferPosition = 0);
/**
* Data message with data stored in IPC store
@ -97,31 +118,27 @@ public:
* First four bytes of message data
* @param address
*/
void setAddress(uint32_t address);
void setAddress(address_t address);
address_t getAddress() const;
/**
* Set byte as position of 4 byte data field
* @param byte
* @param position Position, 0 to 3 possible
*/
void setDataByte(uint8_t byte, uint8_t position);
uint8_t getDataByte(uint8_t position) const;
/**
* Message Type is stored as the fifth byte of the message data
* @param status
* Set 2 byte value at position 1 or 2 of data field
* @param data
* @param position 0 or 1 possible
*/
void setMessageType(messageType status);
messageType getMessageType();
void setDataUint16(uint16_t data, uint8_t position);
uint16_t getDataUint16(uint8_t position) const;
void setMessageId(uint8_t messageId);
messageType getMessageId();
/*
* The following functions can be used to
* set the data field (4 bytes possible);
*/
void setDataByte1(uint8_t byte1);
void setDataByte2(uint8_t byte2);
void setDataByte3(uint8_t byte3);
void setDataByte4(uint8_t byte4);
void setDataUINT16_1(uint16_t data1);
void setDataUINT16_2(uint16_t data2);
void setData(uint32_t data);
void setUint32Data(uint32_t data);
uint32_t getUint32Data() const;
/**
* Stored in Bytes 13-16 of message data
@ -129,6 +146,8 @@ public:
*/
void setDataLen(uint32_t length);
uint32_t getDataLen() const;
/**
* Stored in last four bytes (Bytes 17-20) of message data
* @param sendData
@ -136,19 +155,22 @@ public:
void setDataPointer(const void * data);
/**
* Buffer Position is stored as the seventh and eigth byte of
* In case the send request data or reply data is to be stored in a buffer,
* a buffer Position can be stored here as the seventh and eigth byte of
* the message, so the receive buffer can't be larger than sizeof(uint16_t) for now.
* @param bufferPosition
* @param bufferPosition In case the data is stored in a buffer, the position can be supplied here
*/
void setReceiveBufferPosition(uint16_t bufferPosition);
void setBufferPosition(uint16_t bufferPosition);
uint16_t getBufferPosition() const;
void setStoreId(store_address_t storeId);
store_address_t getStoreId() const;
/**
* Clear the message
* Clear the message. Deletes IPC Store data
* and sets all data to 0. Also sets message type to NONE
*/
void clearCommunicationMessage();
private:
bool uninitialized; //!< Could be used to warn if data has not been set.
};