doc for mqm improved
This commit is contained in:
parent
8ff6506ad9
commit
47aa9ddcc3
@ -152,3 +152,11 @@ void CommandMessage::setSender(MessageQueueId_t setId) {
|
|||||||
const uint8_t* CommandMessage::getBuffer() const {
|
const uint8_t* CommandMessage::getBuffer() const {
|
||||||
return internalMessage->getBuffer();
|
return internalMessage->getBuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t* CommandMessage::getData() {
|
||||||
|
return internalMessage->getData();
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint8_t* CommandMessage::getData() const {
|
||||||
|
return internalMessage->getData();
|
||||||
|
}
|
||||||
|
@ -1,16 +1,25 @@
|
|||||||
#ifndef FRAMEWORK_IPC_COMMANDMESSAGE_H_
|
#ifndef FRAMEWORK_IPC_COMMANDMESSAGE_H_
|
||||||
#define FRAMEWORK_IPC_COMMANDMESSAGE_H_
|
#define FRAMEWORK_IPC_COMMANDMESSAGE_H_
|
||||||
|
|
||||||
|
#include <framework/ipc/MessageQueueMessage.h>
|
||||||
#include <framework/ipc/FwMessageTypes.h>
|
#include <framework/ipc/FwMessageTypes.h>
|
||||||
#include <config/ipc/MissionMessageTypes.h>
|
#include <config/ipc/MissionMessageTypes.h>
|
||||||
|
|
||||||
#include <framework/ipc/MessageQueueMessage.h>
|
|
||||||
|
|
||||||
#define MAKE_COMMAND_ID( number ) ((MESSAGE_ID << 8) + (number))
|
#define MAKE_COMMAND_ID( number ) ((MESSAGE_ID << 8) + (number))
|
||||||
typedef uint16_t Command_t;
|
typedef uint16_t Command_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Used to pass command messages between tasks
|
* @brief Used to pass command messages between tasks. Primary message type
|
||||||
|
* for IPC. Contains sender, 2-byte command field, and 2 4-byte
|
||||||
|
* parameters.
|
||||||
|
* @details
|
||||||
|
* It operates on an external memory which is contained inside a
|
||||||
|
* MessageQueueMessage by taking its address.
|
||||||
|
* This allows for a more flexible designs of message implementations.
|
||||||
|
* The pointer can be passed to different message implementations without
|
||||||
|
* the need of unnecessary copying.
|
||||||
* @author Bastian Baetz
|
* @author Bastian Baetz
|
||||||
*/
|
*/
|
||||||
class CommandMessage: public MessageQueueMessageIF {
|
class CommandMessage: public MessageQueueMessageIF {
|
||||||
@ -53,13 +62,10 @@ public:
|
|||||||
uint32_t parameter1, uint32_t parameter2);
|
uint32_t parameter1, uint32_t parameter2);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default Destructor
|
* @brief Default Destructor
|
||||||
*/
|
*/
|
||||||
virtual ~CommandMessage() {
|
virtual ~CommandMessage() {}
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t * getBuffer() override;
|
|
||||||
const uint8_t * getBuffer() const override;
|
|
||||||
/**
|
/**
|
||||||
* Read the DeviceHandlerCommand_t that is stored in the message,
|
* Read the DeviceHandlerCommand_t that is stored in the message,
|
||||||
* usually used after receiving.
|
* usually used after receiving.
|
||||||
@ -68,53 +74,54 @@ public:
|
|||||||
*/
|
*/
|
||||||
Command_t getCommand() const;
|
Command_t getCommand() const;
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* @brief This method is used to set the sender's message queue id
|
* MessageQueueMessageIF functions, which generally just call the
|
||||||
* information prior to sending the message.
|
* respective functions of the internal message
|
||||||
* @param setId
|
|
||||||
* The message queue id that identifies the sending message queue.
|
|
||||||
*/
|
*/
|
||||||
|
uint8_t * getBuffer() override;
|
||||||
|
const uint8_t * getBuffer() const override;
|
||||||
void setSender(MessageQueueId_t setId) override;
|
void setSender(MessageQueueId_t setId) override;
|
||||||
|
|
||||||
MessageQueueId_t getSender() const override;
|
MessageQueueId_t getSender() const override;
|
||||||
|
uint8_t * getData() override;
|
||||||
|
const uint8_t* getData() const override;
|
||||||
|
size_t getMinimumMessageSize() const override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract message ID, which is the first byte of the command ID.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
uint8_t getMessageType() const;
|
uint8_t getMessageType() const;
|
||||||
/**
|
/**
|
||||||
* Set the DeviceHandlerCOmmand_t of the message
|
* Set the command type of the message
|
||||||
*
|
|
||||||
* @param the Command to be sent
|
* @param the Command to be sent
|
||||||
*/
|
*/
|
||||||
void setCommand(Command_t command);
|
void setCommand(Command_t command);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the first parameter of the message
|
* Get the first parameter of the message
|
||||||
*
|
|
||||||
* @return the first Parameter of the message
|
* @return the first Parameter of the message
|
||||||
*/
|
*/
|
||||||
uint32_t getParameter() const;
|
uint32_t getParameter() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the first parameter of the message
|
* Set the first parameter of the message
|
||||||
*
|
|
||||||
* @param the first parameter of the message
|
* @param the first parameter of the message
|
||||||
*/
|
*/
|
||||||
void setParameter(uint32_t parameter1);
|
void setParameter(uint32_t parameter1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the second parameter of the message
|
* Get the second parameter of the message
|
||||||
*
|
|
||||||
* @return the second Parameter of the message
|
* @return the second Parameter of the message
|
||||||
*/
|
*/
|
||||||
uint32_t getParameter2() const;
|
uint32_t getParameter2() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the second parameter of the message
|
* Set the second parameter of the message
|
||||||
*
|
|
||||||
* @param the second parameter of the message
|
* @param the second parameter of the message
|
||||||
*/
|
*/
|
||||||
void setParameter2(uint32_t parameter2);
|
void setParameter2(uint32_t parameter2);
|
||||||
|
|
||||||
void clear() override;
|
|
||||||
/**
|
/**
|
||||||
* Set the command to CMD_NONE and try to find
|
* Set the command to CMD_NONE and try to find
|
||||||
* the correct class to handle a more detailed
|
* the correct class to handle a more detailed
|
||||||
@ -126,6 +133,7 @@ public:
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void clearCommandMessage();
|
void clearCommandMessage();
|
||||||
|
void clear() override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check if a message was cleared
|
* check if a message was cleared
|
||||||
@ -134,7 +142,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool isClearedCommandMessage();
|
bool isClearedCommandMessage();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the command to REPLY_REJECTED with parameter UNKNOWN_COMMAND.
|
* Sets the command to REPLY_REJECTED with parameter UNKNOWN_COMMAND.
|
||||||
* Is needed quite often, so we better code it once only.
|
* Is needed quite often, so we better code it once only.
|
||||||
@ -142,9 +149,14 @@ public:
|
|||||||
void setToUnknownCommand();
|
void setToUnknownCommand();
|
||||||
void setReplyRejected(ReturnValue_t reason,
|
void setReplyRejected(ReturnValue_t reason,
|
||||||
Command_t initialCommand = CMD_NONE);
|
Command_t initialCommand = CMD_NONE);
|
||||||
size_t getMinimumMessageSize() const override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
/**
|
||||||
|
* @brief Pointer to the message containing the data.
|
||||||
|
* @details
|
||||||
|
* The command message does not actually own the memory containing a
|
||||||
|
* message, it just oprates on it via a pointer to a message queue message.
|
||||||
|
*/
|
||||||
MessageQueueMessage* internalMessage;
|
MessageQueueMessage* internalMessage;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#ifndef MESSAGEQUEUEMESSAGE_H_
|
#ifndef FRAMEWORK_IPC_MESSAGEQUEUEMESSAGE_H_
|
||||||
#define MESSAGEQUEUEMESSAGE_H_
|
#define FRAMEWORK_IPC_MESSAGEQUEUEMESSAGE_H_
|
||||||
|
|
||||||
#include <framework/ipc/MessageQueueMessageIF.h>
|
#include <framework/ipc/MessageQueueMessageIF.h>
|
||||||
#include <framework/ipc/MessageQueueSenderIF.h>
|
#include <framework/ipc/MessageQueueSenderIF.h>
|
||||||
@ -8,7 +8,6 @@
|
|||||||
/**
|
/**
|
||||||
* @brief This class is the representation and data organizer
|
* @brief This class is the representation and data organizer
|
||||||
* for interprocess messages.
|
* for interprocess messages.
|
||||||
*
|
|
||||||
* @details
|
* @details
|
||||||
* To facilitate and standardize interprocess communication, this class was
|
* To facilitate and standardize interprocess communication, this class was
|
||||||
* created to handle a lightweight "interprocess message protocol".
|
* created to handle a lightweight "interprocess message protocol".
|
||||||
@ -28,12 +27,14 @@ class MessageQueueMessage: public MessageQueueMessageIF {
|
|||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* @brief The class is initialized empty with this constructor.
|
* @brief The class is initialized empty with this constructor.
|
||||||
* @details The messageSize attribute is set to the header's size and the
|
* @details
|
||||||
* whole content is set to zero.
|
* The messageSize attribute is set to the header's size and the whole
|
||||||
|
* content is set to zero.
|
||||||
*/
|
*/
|
||||||
MessageQueueMessage();
|
MessageQueueMessage();
|
||||||
/**
|
/**
|
||||||
* @brief With this constructor the class is initialized with the given content.
|
* @brief With this constructor the class is initialized with
|
||||||
|
* the given content.
|
||||||
* @details
|
* @details
|
||||||
* If the passed message size fits into the buffer, the passed data is
|
* If the passed message size fits into the buffer, the passed data is
|
||||||
* copied to the internal buffer and the messageSize information is set.
|
* copied to the internal buffer and the messageSize information is set.
|
||||||
@ -46,7 +47,14 @@ public:
|
|||||||
MessageQueueMessage(uint8_t* data, size_t size);
|
MessageQueueMessage(uint8_t* data, size_t size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The size information of each message is stored in this attribute.
|
* @brief As no memory is allocated in this class,
|
||||||
|
* the destructor is empty.
|
||||||
|
*/
|
||||||
|
virtual ~MessageQueueMessage();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The size information of each message is stored in
|
||||||
|
* this attribute.
|
||||||
* @details
|
* @details
|
||||||
* It is public to simplify usage and to allow for passing the size
|
* It is public to simplify usage and to allow for passing the size
|
||||||
* address as a pointer. Care must be taken when inheriting from this class,
|
* address as a pointer. Care must be taken when inheriting from this class,
|
||||||
@ -59,19 +67,26 @@ public:
|
|||||||
*/
|
*/
|
||||||
size_t messageSize;
|
size_t messageSize;
|
||||||
/**
|
/**
|
||||||
* @brief This constant defines the maximum size of the data content, excluding the header.
|
* @brief This constant defines the maximum size of the data content,
|
||||||
* @details It may be changed if necessary, but in general should be kept as small as possible.
|
* excluding the header.
|
||||||
|
* @details
|
||||||
|
* It may be changed if necessary, but in general should be kept
|
||||||
|
* as small as possible.
|
||||||
*/
|
*/
|
||||||
static const size_t MAX_DATA_SIZE = 24;
|
static const size_t MAX_DATA_SIZE = 24;
|
||||||
/**
|
/**
|
||||||
* @brief This constants defines the size of the header, which is added to every message.
|
* @brief This constants defines the size of the header,
|
||||||
|
* which is added to every message.
|
||||||
*/
|
*/
|
||||||
static const size_t HEADER_SIZE = sizeof(MessageQueueId_t);
|
static const size_t HEADER_SIZE = sizeof(MessageQueueId_t);
|
||||||
/**
|
/**
|
||||||
* @brief This constant defines the maximum total size in bytes of a sent message.
|
* @brief This constant defines the maximum total size in bytes
|
||||||
* @details It is the sum of the maximum data and the header size. Be aware that this constant
|
* of a sent message.
|
||||||
* is used to define the buffer sizes for every message queue in the system. So, a change
|
* @details
|
||||||
* here may have significant impact on the required resources.
|
* It is the sum of the maximum data and the header size. Be aware that
|
||||||
|
* this constant is used to define the buffer sizes for every message
|
||||||
|
* queue in the system. So, a change here may have significant impact on
|
||||||
|
* the required resources.
|
||||||
*/
|
*/
|
||||||
static const size_t MAX_MESSAGE_SIZE = MAX_DATA_SIZE + HEADER_SIZE;
|
static const size_t MAX_MESSAGE_SIZE = MAX_DATA_SIZE + HEADER_SIZE;
|
||||||
/**
|
/**
|
||||||
@ -81,58 +96,64 @@ public:
|
|||||||
static const size_t MIN_MESSAGE_SIZE = HEADER_SIZE;
|
static const size_t MIN_MESSAGE_SIZE = HEADER_SIZE;
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* @brief This is the internal buffer that contains the actual message data.
|
* @brief This is the internal buffer that contains the
|
||||||
|
* actual message data.
|
||||||
*/
|
*/
|
||||||
uint8_t internalBuffer[MAX_MESSAGE_SIZE];
|
uint8_t internalBuffer[MAX_MESSAGE_SIZE];
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* @brief As no memory is allocated in this class, the destructor is empty.
|
* @brief This method is used to get the complete data of the message.
|
||||||
*/
|
*/
|
||||||
virtual ~MessageQueueMessage();
|
const uint8_t* getBuffer() const override;
|
||||||
/**
|
/**
|
||||||
* @brief This method is used to get the complete data of the message.
|
* @brief This method is used to get the complete data of the message.
|
||||||
*/
|
*/
|
||||||
const uint8_t* getBuffer() const;
|
uint8_t* getBuffer() override;
|
||||||
/**
|
|
||||||
* @brief This method is used to get the complete data of the message.
|
|
||||||
*/
|
|
||||||
uint8_t* getBuffer();
|
|
||||||
/**
|
/**
|
||||||
* @brief This method is used to fetch the data content of the message.
|
* @brief This method is used to fetch the data content of the message.
|
||||||
* @details It shall be used by child classes to add data at the right position.
|
* @details
|
||||||
|
* It shall be used by child classes to add data at the right position.
|
||||||
*/
|
*/
|
||||||
const uint8_t* getData() const;
|
const uint8_t* getData() const override;
|
||||||
/**
|
/**
|
||||||
* @brief This method is used to fetch the data content of the message.
|
* @brief This method is used to fetch the data content of the message.
|
||||||
* @details It shall be used by child classes to add data at the right position.
|
* @details
|
||||||
|
* It shall be used by child classes to add data at the right position.
|
||||||
*/
|
*/
|
||||||
uint8_t* getData();
|
uint8_t* getData() override;
|
||||||
/**
|
/**
|
||||||
* @brief This method is used to extract the sender's message queue id information from a
|
* @brief This method is used to extract the sender's message
|
||||||
* received message.
|
* queue id information from a received message.
|
||||||
*/
|
*/
|
||||||
MessageQueueId_t getSender() const;
|
MessageQueueId_t getSender() const override;
|
||||||
/**
|
/**
|
||||||
* @brief With this method, the whole content and the message size is set to zero.
|
* @brief With this method, the whole content
|
||||||
|
* and the message size is set to zero.
|
||||||
*/
|
*/
|
||||||
void clear();
|
void clear() override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This is a debug method that prints the content (till messageSize) to the debug output.
|
* @brief This method is used to set the sender's message queue id
|
||||||
|
* information prior to ing the message.
|
||||||
|
* @param setId
|
||||||
|
* The message queue id that identifies the sending message queue.
|
||||||
*/
|
*/
|
||||||
void print();
|
void setSender(MessageQueueId_t setId) override;
|
||||||
/**
|
/**
|
||||||
* @brief This method is used to set the sender's message queue id information prior to
|
* @brief This helper function is used by the MessageQueue class to check
|
||||||
* sending the message.
|
* the size of an incoming message.
|
||||||
* @param setId The message queue id that identifies the sending message queue.
|
* @details
|
||||||
*/
|
* The method must be overwritten by child classes if size
|
||||||
void setSender(MessageQueueId_t setId);
|
* checks shall be more strict.
|
||||||
/**
|
|
||||||
* @brief This helper function is used by the MessageQueue class to check the size of an
|
|
||||||
* incoming message.
|
|
||||||
* @details The method must be overwritten by child classes if size checks shall be more strict.
|
|
||||||
* @return The default implementation returns HEADER_SIZE.
|
* @return The default implementation returns HEADER_SIZE.
|
||||||
*/
|
*/
|
||||||
virtual size_t getMinimumMessageSize() const;
|
virtual size_t getMinimumMessageSize() const override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This is a debug method that prints the content
|
||||||
|
* (till messageSize) to the debug output.
|
||||||
|
*/
|
||||||
|
void print();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* MESSAGEQUEUEMESSAGE_H_ */
|
#endif /* MESSAGEQUEUEMESSAGE_H_ */
|
||||||
|
@ -11,7 +11,9 @@
|
|||||||
* lookup of queueIDs for every call does not sound ideal.
|
* lookup of queueIDs for every call does not sound ideal.
|
||||||
* In a first step, I'll circumvent the issue by not touching it,
|
* In a first step, I'll circumvent the issue by not touching it,
|
||||||
* maybe in a second step. This also influences Interface design
|
* maybe in a second step. This also influences Interface design
|
||||||
* (getCommandQueue) and some other issues.. */
|
* (getCommandQueue) and some other issues..
|
||||||
|
*/
|
||||||
|
|
||||||
typedef uint32_t MessageQueueId_t;
|
typedef uint32_t MessageQueueId_t;
|
||||||
|
|
||||||
class MessageQueueMessageIF {
|
class MessageQueueMessageIF {
|
||||||
@ -25,14 +27,9 @@ public:
|
|||||||
* size is set to zero.
|
* size is set to zero.
|
||||||
*/
|
*/
|
||||||
virtual void clear() = 0;
|
virtual void clear() = 0;
|
||||||
// /**
|
|
||||||
// * @brief This is a debug method that prints the content
|
|
||||||
// * (till messageSize) to the debug output.
|
|
||||||
// */
|
|
||||||
// virtual void print() = 0;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get read-only pointer to the raw buffer.
|
* @brief Get read-only pointer to the complete data of the message.
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
virtual const uint8_t* getBuffer() const = 0;
|
virtual const uint8_t* getBuffer() const = 0;
|
||||||
@ -50,8 +47,25 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual void setSender(MessageQueueId_t setId) = 0;
|
virtual void setSender(MessageQueueId_t setId) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This method is used to extract the sender's message queue id
|
||||||
|
* information from a received message.
|
||||||
|
*/
|
||||||
virtual MessageQueueId_t getSender() const = 0;
|
virtual MessageQueueId_t getSender() const = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This method is used to fetch the data content of the message.
|
||||||
|
* @details
|
||||||
|
* It shall be used by child classes to add data at the right position.
|
||||||
|
*/
|
||||||
|
virtual const uint8_t* getData() const = 0;
|
||||||
|
/**
|
||||||
|
* @brief This method is used to fetch the data content of the message.
|
||||||
|
* @details
|
||||||
|
* It shall be used by child classes to add data at the right position.
|
||||||
|
*/
|
||||||
|
virtual uint8_t* getData() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This helper function is used by the MessageQueue class to
|
* @brief This helper function is used by the MessageQueue class to
|
||||||
* check the size of an incoming message.
|
* check the size of an incoming message.
|
||||||
|
Loading…
Reference in New Issue
Block a user