94 lines
4.1 KiB
C++
94 lines
4.1 KiB
C++
#ifndef ACTIONHELPER_H_
|
|
#define ACTIONHELPER_H_
|
|
|
|
#include "ActionMessage.h"
|
|
#include "../serialize/SerializeIF.h"
|
|
#include "../ipc/MessageQueueIF.h"
|
|
/**
|
|
* \brief Action Helper is a helper class which handles action messages
|
|
*
|
|
* Components which use the HasActionIF this helper can be used to handle the action messages.
|
|
* It does handle step messages as well as other answers to action calls. It uses the executeAction function
|
|
* of its owner as callback. The call of the initialize function is mandatory and it needs a valid messageQueueIF pointer!
|
|
*/
|
|
class HasActionsIF;
|
|
|
|
class ActionHelper {
|
|
public:
|
|
/**
|
|
* Constructor of the action helper
|
|
* @param setOwner Pointer to the owner of the interface
|
|
* @param useThisQueue messageQueue to be used, can be set during initialize function as well.
|
|
*/
|
|
ActionHelper(HasActionsIF* setOwner, MessageQueueIF* useThisQueue);
|
|
|
|
virtual ~ActionHelper();
|
|
/**
|
|
* Function to be called from the owner with a new command message
|
|
*
|
|
* If the message is a valid action message the helper will use the executeAction function from HasActionsIF.
|
|
* If the message is invalid or the callback fails a message reply will be send to the sender of the message automatically.
|
|
*
|
|
* @param command Pointer to a command message received by the owner
|
|
* @return HasReturnvaluesIF::RETURN_OK if the message is a action message, CommandMessage::UNKNOW_COMMAND if this message ID is unkown
|
|
*/
|
|
ReturnValue_t handleActionMessage(CommandMessage* command);
|
|
/**
|
|
* Helper initialize function. Must be called before use of any other helper function
|
|
* @param queueToUse_ Pointer to the messageQueue to be used, optional if queue was set in constructor
|
|
* @return Returns RETURN_OK if successful
|
|
*/
|
|
ReturnValue_t initialize(MessageQueueIF* queueToUse_ = nullptr);
|
|
/**
|
|
* Function to be called from the owner to send a step message. Success or failure will be determined by the result value.
|
|
*
|
|
* @param step Number of steps already done
|
|
* @param reportTo The messageQueueId to report the step message to
|
|
* @param commandId ID of the executed command
|
|
* @param result Result of the execution
|
|
*/
|
|
void step(uint8_t step, MessageQueueId_t reportTo, ActionId_t commandId, ReturnValue_t result = HasReturnvaluesIF::RETURN_OK);
|
|
/**
|
|
* Function to be called by the owner to send a action completion message
|
|
*
|
|
* @param reportTo MessageQueueId_t to report the action completion message to
|
|
* @param commandId ID of the executed command
|
|
* @param result Result of the execution
|
|
*/
|
|
void finish(MessageQueueId_t reportTo, ActionId_t commandId, ReturnValue_t result = HasReturnvaluesIF::RETURN_OK);
|
|
/**
|
|
* Function to be called by the owner if an action does report data
|
|
*
|
|
* @param reportTo MessageQueueId_t to report the action completion message to
|
|
* @param replyId ID of the executed command
|
|
* @param data Pointer to the data
|
|
* @return Returns RETURN_OK if successful, otherwise failure code
|
|
*/
|
|
ReturnValue_t reportData(MessageQueueId_t reportTo, ActionId_t replyId, SerializeIF* data, bool hideSender = false);
|
|
/**
|
|
* Function to setup the MessageQueueIF* of the helper. Can be used to set the messageQueueIF* if
|
|
* message queue is unavailable at construction and initialize but must be setup before first call of other functions.
|
|
* @param queue Queue to be used by the helper
|
|
*/
|
|
void setQueueToUse(MessageQueueIF *queue);
|
|
protected:
|
|
static const uint8_t STEP_OFFSET = 1;//!< Increase of value of this per step
|
|
HasActionsIF* owner;//!< Pointer to the owner
|
|
MessageQueueIF* queueToUse;//!< Queue to be used as response sender, has to be set with
|
|
StorageManagerIF* ipcStore;//!< Pointer to an IPC Store, initialized during construction or initialize(MessageQueueIF* queueToUse_) or with setQueueToUse(MessageQueueIF *queue)
|
|
/**
|
|
*Internal function called by handleActionMessage(CommandMessage* command)
|
|
*
|
|
* @param commandedBy MessageQueueID of Commander
|
|
* @param actionId ID of action to be done
|
|
* @param dataAddress Address of additional data in IPC Store
|
|
*/
|
|
virtual void prepareExecution(MessageQueueId_t commandedBy, ActionId_t actionId, store_address_t dataAddress);
|
|
/**
|
|
*
|
|
*/
|
|
virtual void resetHelper();
|
|
};
|
|
|
|
#endif /* ACTIONHELPER_H_ */
|