2020-07-16 12:49:53 +02:00
|
|
|
|
#ifndef FRAMEWORK_ACTION_HASACTIONSIF_H_
|
|
|
|
|
#define FRAMEWORK_ACTION_HASACTIONSIF_H_
|
2016-06-15 23:48:41 +02:00
|
|
|
|
|
2020-08-13 20:53:35 +02:00
|
|
|
|
#include "ActionHelper.h"
|
|
|
|
|
#include "ActionMessage.h"
|
|
|
|
|
#include "SimpleActionHelper.h"
|
|
|
|
|
#include "../returnvalues/HasReturnvaluesIF.h"
|
|
|
|
|
#include "../ipc/MessageQueueIF.h"
|
2018-07-13 18:28:26 +02:00
|
|
|
|
/**
|
2020-07-16 12:49:53 +02:00
|
|
|
|
* @brief
|
|
|
|
|
* Interface for component which uses actions
|
2018-07-13 18:28:26 +02:00
|
|
|
|
*
|
2020-07-16 12:49:53 +02:00
|
|
|
|
* @details
|
|
|
|
|
* This interface is used to execute actions in the component. Actions, in the
|
|
|
|
|
* sense of this interface, are activities with a well-defined beginning and
|
|
|
|
|
* end in time. They may adjust sub-states of components, but are not supposed
|
|
|
|
|
* to change the main mode of operation, which is handled with the HasModesIF
|
|
|
|
|
* described below.
|
2018-07-13 18:28:26 +02:00
|
|
|
|
*
|
2020-07-16 12:49:53 +02:00
|
|
|
|
* The HasActionsIF allows components to define such actions and make them
|
|
|
|
|
* available for other components to use. Implementing the interface is
|
|
|
|
|
* straightforward: There’s a single executeAction call, which provides an
|
|
|
|
|
* identifier for the action to execute, as well as arbitrary parameters for
|
|
|
|
|
* input.
|
|
|
|
|
* Aside from direct, software-based actions, it is used in device handler
|
|
|
|
|
* components as an interface to forward commands to devices.
|
|
|
|
|
* Implementing components of the interface are supposed to check identifier
|
|
|
|
|
* (ID) and parameters and immediately start execution of the action.
|
|
|
|
|
* It is, however, not required to immediately finish execution.
|
|
|
|
|
* Instead, this may be deferred to a later point in time, at which the
|
|
|
|
|
* component needs to inform the caller about finished or failed execution.
|
|
|
|
|
*
|
|
|
|
|
* @ingroup interfaces
|
2018-07-13 18:28:26 +02:00
|
|
|
|
*/
|
2016-06-15 23:48:41 +02:00
|
|
|
|
class HasActionsIF {
|
|
|
|
|
public:
|
2018-07-12 16:29:32 +02:00
|
|
|
|
static const uint8_t INTERFACE_ID = CLASS_ID::HAS_ACTIONS_IF;
|
2020-07-16 12:49:53 +02:00
|
|
|
|
static const ReturnValue_t IS_BUSY = MAKE_RETURN_CODE(1);
|
2016-06-15 23:48:41 +02:00
|
|
|
|
static const ReturnValue_t INVALID_PARAMETERS = MAKE_RETURN_CODE(2);
|
|
|
|
|
static const ReturnValue_t EXECUTION_FINISHED = MAKE_RETURN_CODE(3);
|
|
|
|
|
static const ReturnValue_t INVALID_ACTION_ID = MAKE_RETURN_CODE(4);
|
|
|
|
|
virtual ~HasActionsIF() { }
|
2018-07-13 18:28:26 +02:00
|
|
|
|
/**
|
|
|
|
|
* Function to get the MessageQueueId_t of the implementing object
|
|
|
|
|
* @return MessageQueueId_t of the object
|
|
|
|
|
*/
|
2016-06-15 23:48:41 +02:00
|
|
|
|
virtual MessageQueueId_t getCommandQueue() const = 0;
|
|
|
|
|
/**
|
|
|
|
|
* Execute or initialize the execution of a certain function.
|
2020-10-12 16:58:04 +02:00
|
|
|
|
* When used in conjunction with the ActionHelper class, returning
|
|
|
|
|
* a return code which is not equal to RETURN_OK will trigger a step reply
|
|
|
|
|
* with step 0.
|
2016-06-15 23:48:41 +02:00
|
|
|
|
*/
|
2020-07-16 12:49:53 +02:00
|
|
|
|
virtual ReturnValue_t executeAction(ActionId_t actionId,
|
|
|
|
|
MessageQueueId_t commandedBy, const uint8_t* data, size_t size) = 0;
|
2016-06-15 23:48:41 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2020-07-16 12:49:53 +02:00
|
|
|
|
#endif /* FRAMEWORK_ACTION_HASACTIONSIF_H_ */
|