Merge remote-tracking branch 'upstream/master' into mueller/Linux-SetTaskIF-Fix
This commit is contained in:
commit
11e23420f2
@ -1,9 +1,9 @@
|
|||||||
#include <framework/action/ActionHelper.h>
|
#include <framework/action/ActionHelper.h>
|
||||||
#include <framework/action/HasActionsIF.h>
|
#include <framework/action/HasActionsIF.h>
|
||||||
#include <framework/objectmanager/ObjectManagerIF.h>
|
#include <framework/objectmanager/ObjectManagerIF.h>
|
||||||
|
|
||||||
ActionHelper::ActionHelper(HasActionsIF* setOwner, MessageQueueIF* useThisQueue) :
|
ActionHelper::ActionHelper(HasActionsIF* setOwner, MessageQueueIF* useThisQueue) :
|
||||||
owner(setOwner), queueToUse(useThisQueue), ipcStore(
|
owner(setOwner), queueToUse(useThisQueue), ipcStore(nullptr) {
|
||||||
NULL) {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ActionHelper::~ActionHelper() {
|
ActionHelper::~ActionHelper() {
|
||||||
@ -16,16 +16,18 @@ ReturnValue_t ActionHelper::handleActionMessage(CommandMessage* command) {
|
|||||||
ActionMessage::getStoreId(command));
|
ActionMessage::getStoreId(command));
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
} else {
|
} else {
|
||||||
return CommandMessage::UNKNOW_COMMAND;
|
return CommandMessage::UNKNOWN_COMMAND;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t ActionHelper::initialize(MessageQueueIF* queueToUse_) {
|
ReturnValue_t ActionHelper::initialize(MessageQueueIF* queueToUse_) {
|
||||||
ipcStore = objectManager->get<StorageManagerIF>(objects::IPC_STORE);
|
ipcStore = objectManager->get<StorageManagerIF>(objects::IPC_STORE);
|
||||||
if (ipcStore == NULL) {
|
if (ipcStore == nullptr) {
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
setQueueToUse(queueToUse_);
|
if(queueToUse_ != nullptr) {
|
||||||
|
setQueueToUse(queueToUse_);
|
||||||
|
}
|
||||||
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
@ -67,7 +69,8 @@ void ActionHelper::prepareExecution(MessageQueueId_t commandedBy, ActionId_t act
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t ActionHelper::reportData(MessageQueueId_t reportTo, ActionId_t replyId, SerializeIF* data, bool hideSender) {
|
ReturnValue_t ActionHelper::reportData(MessageQueueId_t reportTo,
|
||||||
|
ActionId_t replyId, SerializeIF* data, bool hideSender) {
|
||||||
CommandMessage reply;
|
CommandMessage reply;
|
||||||
store_address_t storeAddress;
|
store_address_t storeAddress;
|
||||||
uint8_t *dataPtr;
|
uint8_t *dataPtr;
|
||||||
|
@ -35,10 +35,10 @@ public:
|
|||||||
ReturnValue_t handleActionMessage(CommandMessage* command);
|
ReturnValue_t handleActionMessage(CommandMessage* command);
|
||||||
/**
|
/**
|
||||||
* Helper initialize function. Must be called before use of any other helper function
|
* Helper initialize function. Must be called before use of any other helper function
|
||||||
* @param queueToUse_ Pointer to the messageQueue to be used
|
* @param queueToUse_ Pointer to the messageQueue to be used, optional if queue was set in constructor
|
||||||
* @return Returns RETURN_OK if successful
|
* @return Returns RETURN_OK if successful
|
||||||
*/
|
*/
|
||||||
ReturnValue_t initialize(MessageQueueIF* queueToUse_);
|
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.
|
* Function to be called from the owner to send a step message. Success or failure will be determined by the result value.
|
||||||
*
|
*
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#ifndef HASACTIONSIF_H_
|
#ifndef FRAMEWORK_ACTION_HASACTIONSIF_H_
|
||||||
#define HASACTIONSIF_H_
|
#define FRAMEWORK_ACTION_HASACTIONSIF_H_
|
||||||
|
|
||||||
#include <framework/action/ActionHelper.h>
|
#include <framework/action/ActionHelper.h>
|
||||||
#include <framework/action/ActionMessage.h>
|
#include <framework/action/ActionMessage.h>
|
||||||
@ -7,27 +7,35 @@
|
|||||||
#include <framework/returnvalues/HasReturnvaluesIF.h>
|
#include <framework/returnvalues/HasReturnvaluesIF.h>
|
||||||
#include <framework/ipc/MessageQueueIF.h>
|
#include <framework/ipc/MessageQueueIF.h>
|
||||||
/**
|
/**
|
||||||
* \brief Interface for component which uses actions
|
* @brief
|
||||||
|
* Interface for component which uses actions
|
||||||
*
|
*
|
||||||
* 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
|
* @details
|
||||||
* end in time. They may adjust sub-states of components, but are not supposed to change
|
* This interface is used to execute actions in the component. Actions, in the
|
||||||
* the main mode of operation, which is handled with the HasModesIF described below.
|
* 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.
|
||||||
*
|
*
|
||||||
* The HasActionsIF allows components to define such actions and make them available
|
* The HasActionsIF allows components to define such actions and make them
|
||||||
* for other components to use. Implementing the interface is straightforward: There’s a
|
* available for other components to use. Implementing the interface is
|
||||||
* single executeAction call, which provides an identifier for the action to execute, as well
|
* straightforward: There’s a single executeAction call, which provides an
|
||||||
* as arbitrary parameters for input. Aside from direct, software-based
|
* identifier for the action to execute, as well as arbitrary parameters for
|
||||||
* actions, it is used in device handler components as an interface to forward commands to
|
* input.
|
||||||
* devices.
|
* Aside from direct, software-based actions, it is used in device handler
|
||||||
* Implementing components of the interface are supposed to check identifier (ID) and
|
* components as an interface to forward commands to devices.
|
||||||
* parameters and immediately start execution of the action. It is, however, not required to
|
* Implementing components of the interface are supposed to check identifier
|
||||||
* immediately finish execution. Instead, this may be deferred to a later point in time, at
|
* (ID) and parameters and immediately start execution of the action.
|
||||||
* which the component needs to inform the caller about finished or failed execution.
|
* 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
|
||||||
*/
|
*/
|
||||||
class HasActionsIF {
|
class HasActionsIF {
|
||||||
public:
|
public:
|
||||||
static const uint8_t INTERFACE_ID = CLASS_ID::HAS_ACTIONS_IF;
|
static const uint8_t INTERFACE_ID = CLASS_ID::HAS_ACTIONS_IF;
|
||||||
static const ReturnValue_t IS_BUSY = MAKE_RETURN_CODE(1);//!<
|
static const ReturnValue_t IS_BUSY = MAKE_RETURN_CODE(1);
|
||||||
static const ReturnValue_t INVALID_PARAMETERS = MAKE_RETURN_CODE(2);
|
static const ReturnValue_t INVALID_PARAMETERS = MAKE_RETURN_CODE(2);
|
||||||
static const ReturnValue_t EXECUTION_FINISHED = MAKE_RETURN_CODE(3);
|
static const ReturnValue_t EXECUTION_FINISHED = MAKE_RETURN_CODE(3);
|
||||||
static const ReturnValue_t INVALID_ACTION_ID = MAKE_RETURN_CODE(4);
|
static const ReturnValue_t INVALID_ACTION_ID = MAKE_RETURN_CODE(4);
|
||||||
@ -39,12 +47,14 @@ public:
|
|||||||
virtual MessageQueueId_t getCommandQueue() const = 0;
|
virtual MessageQueueId_t getCommandQueue() const = 0;
|
||||||
/**
|
/**
|
||||||
* Execute or initialize the execution of a certain function.
|
* Execute or initialize the execution of a certain function.
|
||||||
* Returning #EXECUTION_FINISHED or a failure code, nothing else needs to be done.
|
* Returning #EXECUTION_FINISHED or a failure code, nothing else needs to
|
||||||
* When needing more steps, return RETURN_OK and issue steps and completion manually. One "step failed" or completion report must
|
* be done. When needing more steps, return RETURN_OK and issue steps and
|
||||||
* be issued!
|
* completion manually.
|
||||||
|
* One "step failed" or completion report must be issued!
|
||||||
*/
|
*/
|
||||||
virtual ReturnValue_t executeAction(ActionId_t actionId, MessageQueueId_t commandedBy, const uint8_t* data, uint32_t size) = 0;
|
virtual ReturnValue_t executeAction(ActionId_t actionId,
|
||||||
|
MessageQueueId_t commandedBy, const uint8_t* data, size_t size) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif /* HASACTIONSIF_H_ */
|
#endif /* FRAMEWORK_ACTION_HASACTIONSIF_H_ */
|
||||||
|
@ -236,7 +236,7 @@ void DeviceHandlerBase::readCommandQueue() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
replyReturnvalueToCommand(CommandMessage::UNKNOW_COMMAND);
|
replyReturnvalueToCommand(CommandMessage::UNKNOWN_COMMAND);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1149,7 +1149,7 @@ void DeviceHandlerBase::handleDeviceTM(SerializeIF* data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t DeviceHandlerBase::executeAction(ActionId_t actionId,
|
ReturnValue_t DeviceHandlerBase::executeAction(ActionId_t actionId,
|
||||||
MessageQueueId_t commandedBy, const uint8_t* data, uint32_t size) {
|
MessageQueueId_t commandedBy, const uint8_t* data, size_t size) {
|
||||||
ReturnValue_t result = acceptExternalDeviceCommands();
|
ReturnValue_t result = acceptExternalDeviceCommands();
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
|
@ -484,7 +484,7 @@ public:
|
|||||||
/** @brief Implementation required for HasActionIF */
|
/** @brief Implementation required for HasActionIF */
|
||||||
ReturnValue_t executeAction(ActionId_t actionId,
|
ReturnValue_t executeAction(ActionId_t actionId,
|
||||||
MessageQueueId_t commandedBy, const uint8_t* data,
|
MessageQueueId_t commandedBy, const uint8_t* data,
|
||||||
uint32_t size) override;
|
size_t size) override;
|
||||||
|
|
||||||
Mode_t getTransitionSourceMode() const;
|
Mode_t getTransitionSourceMode() const;
|
||||||
Submode_t getTransitionSourceSubMode() const;
|
Submode_t getTransitionSourceSubMode() const;
|
||||||
|
@ -111,7 +111,7 @@ size_t CommandMessage::getMinimumMessageSize() const {
|
|||||||
void CommandMessage::setToUnknownCommand() {
|
void CommandMessage::setToUnknownCommand() {
|
||||||
Command_t initialCommand = getCommand();
|
Command_t initialCommand = getCommand();
|
||||||
clearCommandMessage();
|
clearCommandMessage();
|
||||||
setReplyRejected(UNKNOW_COMMAND, initialCommand);
|
setReplyRejected(UNKNOWN_COMMAND, initialCommand);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CommandMessage::setReplyRejected(ReturnValue_t reason,
|
void CommandMessage::setReplyRejected(ReturnValue_t reason,
|
||||||
|
@ -20,7 +20,7 @@ typedef ReturnValue_t Command_t;
|
|||||||
class CommandMessage : public MessageQueueMessage {
|
class CommandMessage : public MessageQueueMessage {
|
||||||
public:
|
public:
|
||||||
static const uint8_t INTERFACE_ID = CLASS_ID::COMMAND_MESSAGE;
|
static const uint8_t INTERFACE_ID = CLASS_ID::COMMAND_MESSAGE;
|
||||||
static const ReturnValue_t UNKNOW_COMMAND = MAKE_RETURN_CODE(0x01);
|
static const ReturnValue_t UNKNOWN_COMMAND = MAKE_RETURN_CODE(0x01);
|
||||||
|
|
||||||
|
|
||||||
static const uint8_t MESSAGE_ID = MESSAGE_TYPE::COMMAND;
|
static const uint8_t MESSAGE_ID = MESSAGE_TYPE::COMMAND;
|
||||||
|
@ -125,19 +125,18 @@ void FixedTimeslotTask::checkMissedDeadline(const TickType_t xLastWakeTime,
|
|||||||
* it. */
|
* it. */
|
||||||
TickType_t currentTickCount = xTaskGetTickCount();
|
TickType_t currentTickCount = xTaskGetTickCount();
|
||||||
TickType_t timeToWake = xLastWakeTime + interval;
|
TickType_t timeToWake = xLastWakeTime + interval;
|
||||||
// Tick count has overflown
|
// Time to wake has not overflown.
|
||||||
if(currentTickCount < xLastWakeTime) {
|
if(timeToWake > xLastWakeTime) {
|
||||||
// Time to wake has overflown as well. If the tick count
|
/* If the current time has overflown exclusively or the current
|
||||||
// is larger than the time to wake, a deadline was missed.
|
* tick count is simply larger than the time to wake, a deadline was
|
||||||
if(timeToWake < xLastWakeTime and
|
* missed */
|
||||||
currentTickCount > timeToWake) {
|
if((currentTickCount < xLastWakeTime) or (currentTickCount > timeToWake)) {
|
||||||
handleMissedDeadline();
|
handleMissedDeadline();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// No tick count overflow. If the timeToWake has not overflown
|
/* Time to wake has overflown. A deadline was missed if the current time
|
||||||
// and the current tick count is larger than the time to wake,
|
* is larger than the time to wake */
|
||||||
// a deadline was missed.
|
else if((timeToWake < xLastWakeTime) and (currentTickCount > timeToWake)) {
|
||||||
else if(timeToWake > xLastWakeTime and currentTickCount > timeToWake) {
|
|
||||||
handleMissedDeadline();
|
handleMissedDeadline();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -106,19 +106,18 @@ void PeriodicTask::checkMissedDeadline(const TickType_t xLastWakeTime,
|
|||||||
* it. */
|
* it. */
|
||||||
TickType_t currentTickCount = xTaskGetTickCount();
|
TickType_t currentTickCount = xTaskGetTickCount();
|
||||||
TickType_t timeToWake = xLastWakeTime + interval;
|
TickType_t timeToWake = xLastWakeTime + interval;
|
||||||
// Tick count has overflown
|
// Time to wake has not overflown.
|
||||||
if(currentTickCount < xLastWakeTime) {
|
if(timeToWake > xLastWakeTime) {
|
||||||
// Time to wake has overflown as well. If the tick count
|
/* If the current time has overflown exclusively or the current
|
||||||
// is larger than the time to wake, a deadline was missed.
|
* tick count is simply larger than the time to wake, a deadline was
|
||||||
if(timeToWake < xLastWakeTime and
|
* missed */
|
||||||
currentTickCount > timeToWake) {
|
if((currentTickCount < xLastWakeTime) or (currentTickCount > timeToWake)) {
|
||||||
handleMissedDeadline();
|
handleMissedDeadline();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// No tick count overflow. If the timeToWake has not overflown
|
/* Time to wake has overflown. A deadline was missed if the current time
|
||||||
// and the current tick count is larger than the time to wake,
|
* is larger than the time to wake */
|
||||||
// a deadline was missed.
|
else if((timeToWake < xLastWakeTime) and (currentTickCount > timeToWake)) {
|
||||||
else if(timeToWake > xLastWakeTime and currentTickCount > timeToWake) {
|
|
||||||
handleMissedDeadline();
|
handleMissedDeadline();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,8 +28,8 @@ ReturnValue_t PeriodicPosixTask::addComponent(object_id_t object) {
|
|||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
objectList.push_back(newObject);
|
objectList.push_back(newObject);
|
||||||
|
|
||||||
newObject->setTaskIF(this);
|
newObject->setTaskIF(this);
|
||||||
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -329,7 +329,7 @@ void SubsystemBase::checkCommandQueue() {
|
|||||||
result = handleCommandMessage(&message);
|
result = handleCommandMessage(&message);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
CommandMessage reply;
|
CommandMessage reply;
|
||||||
reply.setReplyRejected(CommandMessage::UNKNOW_COMMAND,
|
reply.setReplyRejected(CommandMessage::UNKNOWN_COMMAND,
|
||||||
message.getCommand());
|
message.getCommand());
|
||||||
replyToCommand(&reply);
|
replyToCommand(&reply);
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ void TmStoreMessage::clear(CommandMessage* cmd) {
|
|||||||
case DELETE_STORE_CONTENT_BLOCKS:
|
case DELETE_STORE_CONTENT_BLOCKS:
|
||||||
case DOWNLINK_STORE_CONTENT_BLOCKS:
|
case DOWNLINK_STORE_CONTENT_BLOCKS:
|
||||||
case REPORT_INDEX_REQUEST:
|
case REPORT_INDEX_REQUEST:
|
||||||
cmd->setCommand(UNKNOW_COMMAND);
|
cmd->setCommand(UNKNOWN_COMMAND);
|
||||||
cmd->setParameter(0);
|
cmd->setParameter(0);
|
||||||
cmd->setParameter2(0);
|
cmd->setParameter2(0);
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user