2016-06-15 23:48:41 +02:00
# ifndef ACTIONHELPER_H_
# define ACTIONHELPER_H_
# include <framework/action/ActionMessage.h>
# include <framework/serialize/SerializeIF.h>
2018-07-12 16:29:32 +02:00
# include <framework/ipc/MessageQueueIF.h>
2018-07-13 18:28:26 +02:00
/**
* \ 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 !
*/
2016-06-15 23:48:41 +02:00
class HasActionsIF ;
2018-07-12 16:29:32 +02:00
2016-06-15 23:48:41 +02:00
class ActionHelper {
public :
2018-07-13 18:28:26 +02:00
/**
* 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 .
*/
2018-07-12 16:29:32 +02:00
ActionHelper ( HasActionsIF * setOwner , MessageQueueIF * useThisQueue ) ;
2018-07-13 18:28:26 +02:00
2016-06-15 23:48:41 +02:00
virtual ~ ActionHelper ( ) ;
2018-07-13 18:28:26 +02:00
/**
* 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
*/
2016-06-15 23:48:41 +02:00
ReturnValue_t handleActionMessage ( CommandMessage * command ) ;
2018-07-13 18:28:26 +02:00
/**
* Helper initialize function . Must be called before use of any other helper function
2020-08-04 12:22:45 +02:00
* @ param queueToUse_ Pointer to the messageQueue to be used , optional if queue was set in constructor
2018-07-13 18:28:26 +02:00
* @ return Returns RETURN_OK if successful
*/
2020-07-16 12:49:53 +02:00
ReturnValue_t initialize ( MessageQueueIF * queueToUse_ = nullptr ) ;
2018-07-13 18:28:26 +02:00
/**
* 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
*/
2016-06-15 23:48:41 +02:00
void step ( uint8_t step , MessageQueueId_t reportTo , ActionId_t commandId , ReturnValue_t result = HasReturnvaluesIF : : RETURN_OK ) ;
2018-07-13 18:28:26 +02:00
/**
* 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
*/
2016-06-15 23:48:41 +02:00
void finish ( MessageQueueId_t reportTo , ActionId_t commandId , ReturnValue_t result = HasReturnvaluesIF : : RETURN_OK ) ;
2018-07-13 18:28:26 +02:00
/**
* 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
*/
2018-07-12 16:29:32 +02:00
ReturnValue_t reportData ( MessageQueueId_t reportTo , ActionId_t replyId , SerializeIF * data , bool hideSender = false ) ;
2018-07-13 18:28:26 +02:00
/**
* 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
*/
2018-07-12 16:29:32 +02:00
void setQueueToUse ( MessageQueueIF * queue ) ;
2016-06-15 23:48:41 +02:00
protected :
2018-07-13 18:28:26 +02:00
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
*/
2016-06-15 23:48:41 +02:00
virtual void prepareExecution ( MessageQueueId_t commandedBy , ActionId_t actionId , store_address_t dataAddress ) ;
2018-07-13 18:28:26 +02:00
/**
*
*/
virtual void resetHelper ( ) ;
2016-06-15 23:48:41 +02:00
} ;
# endif /* ACTIONHELPER_H_ */