Merge branch 'mueller_framework' into front_branch
This commit is contained in:
commit
9b5095e5b8
@ -417,7 +417,7 @@ void DeviceHandlerBase::setTransition(Mode_t modeTo, Submode_t submodeTo) {
|
|||||||
transitionSourceSubMode = submode;
|
transitionSourceSubMode = submode;
|
||||||
childTransitionFailure = CHILD_TIMEOUT;
|
childTransitionFailure = CHILD_TIMEOUT;
|
||||||
|
|
||||||
//transitionTargetMode is set by setMode
|
// transitionTargetMode is set by setMode
|
||||||
setMode((modeTo | TRANSITION_MODE_CHILD_ACTION_MASK), submodeTo);
|
setMode((modeTo | TRANSITION_MODE_CHILD_ACTION_MASK), submodeTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,8 +232,9 @@ protected:
|
|||||||
* Build the device command to send for a transitional mode.
|
* Build the device command to send for a transitional mode.
|
||||||
*
|
*
|
||||||
* This is only called in @c _MODE_TO_NORMAL, @c _MODE_TO_ON, @c _MODE_TO_RAW,
|
* This is only called in @c _MODE_TO_NORMAL, @c _MODE_TO_ON, @c _MODE_TO_RAW,
|
||||||
* @c _MODE_START_UP and @c _MODE_TO_POWER_DOWN. So it is used by doStartUp()
|
* @c _MODE_START_UP and @c _MODE_SHUT_DOWN. So it is used by doStartUp()
|
||||||
* and doShutDown() as well as doTransition()
|
* and doShutDown() as well as doTransition(), by setting those
|
||||||
|
* modes in the respective functions.
|
||||||
*
|
*
|
||||||
* A good idea is to implement a flag indicating a command has to be built
|
* A good idea is to implement a flag indicating a command has to be built
|
||||||
* and a variable containing the command number to be built
|
* and a variable containing the command number to be built
|
||||||
@ -493,7 +494,7 @@ public:
|
|||||||
ReturnValue_t setHealth(HealthState health);
|
ReturnValue_t setHealth(HealthState health);
|
||||||
virtual ReturnValue_t getParameter(uint8_t domainId, uint16_t parameterId,
|
virtual ReturnValue_t getParameter(uint8_t domainId, uint16_t parameterId,
|
||||||
ParameterWrapper *parameterWrapper,
|
ParameterWrapper *parameterWrapper,
|
||||||
const ParameterWrapper *newValues, uint16_t startAtIndex);
|
const ParameterWrapper *newValues, uint16_t startAtIndex) override;
|
||||||
/**
|
/**
|
||||||
* Implementation of ExecutableObjectIF function
|
* Implementation of ExecutableObjectIF function
|
||||||
*
|
*
|
||||||
@ -509,26 +510,16 @@ protected:
|
|||||||
*/
|
*/
|
||||||
static const uint8_t INTERFACE_ID = CLASS_ID::DEVICE_HANDLER_BASE;
|
static const uint8_t INTERFACE_ID = CLASS_ID::DEVICE_HANDLER_BASE;
|
||||||
|
|
||||||
/* These returnvalues can be returned from abstract functions
|
|
||||||
* to alter the behaviour of DHB.For error values, refer to
|
|
||||||
* DeviceHandlerIF.h returnvalues. */
|
|
||||||
// (Robin): maybe this would be better in DeviceHandlerIF?
|
|
||||||
static const ReturnValue_t INVALID_CHANNEL = MAKE_RETURN_CODE(0xA0);
|
static const ReturnValue_t INVALID_CHANNEL = MAKE_RETURN_CODE(0xA0);
|
||||||
|
|
||||||
// Returnvalues for scanForReply()
|
// Returnvalues for scanForReply()
|
||||||
static const ReturnValue_t APERIODIC_REPLY = MAKE_RETURN_CODE(0xB0); //!< This is used to specify for replies from a device which are not replies to requests
|
static const ReturnValue_t APERIODIC_REPLY = MAKE_RETURN_CODE(0xB0); //!< This is used to specify for replies from a device which are not replies to requests
|
||||||
static const ReturnValue_t IGNORE_REPLY_DATA = MAKE_RETURN_CODE(0xB1); //!< Ignore parts of the received packet
|
static const ReturnValue_t IGNORE_REPLY_DATA = MAKE_RETURN_CODE(0xB1); //!< Ignore parts of the received packet
|
||||||
static const ReturnValue_t IGNORE_FULL_PACKET = MAKE_RETURN_CODE(0xB2); //!< Ignore full received packet
|
static const ReturnValue_t IGNORE_FULL_PACKET = MAKE_RETURN_CODE(0xB2); //!< Ignore full received packet
|
||||||
|
|
||||||
// Returnvalues for command building
|
// Returnvalues for command building
|
||||||
static const ReturnValue_t NOTHING_TO_SEND = MAKE_RETURN_CODE(0xC0); //!< Return this if no command sending in required
|
static const ReturnValue_t NOTHING_TO_SEND = MAKE_RETURN_CODE(0xC0); //!< Return this if no command sending in required
|
||||||
// (Robin): Maybe this would be better in DeviceHandlerIF?
|
|
||||||
static const ReturnValue_t COMMAND_MAP_ERROR = MAKE_RETURN_CODE(0xC2);
|
static const ReturnValue_t COMMAND_MAP_ERROR = MAKE_RETURN_CODE(0xC2);
|
||||||
|
|
||||||
// Returnvalues for getSwitches()
|
// Returnvalues for getSwitches()
|
||||||
static const ReturnValue_t NO_SWITCH = MAKE_RETURN_CODE(0xD0);
|
static const ReturnValue_t NO_SWITCH = MAKE_RETURN_CODE(0xD0);
|
||||||
|
|
||||||
// (Robin): Maybe this would be better in DeviceHandlerIF?
|
|
||||||
// Mode handling error Codes
|
// Mode handling error Codes
|
||||||
static const ReturnValue_t CHILD_TIMEOUT = MAKE_RETURN_CODE(0xE0);
|
static const ReturnValue_t CHILD_TIMEOUT = MAKE_RETURN_CODE(0xE0);
|
||||||
static const ReturnValue_t SWITCH_FAILED = MAKE_RETURN_CODE(0xE1);
|
static const ReturnValue_t SWITCH_FAILED = MAKE_RETURN_CODE(0xE1);
|
||||||
@ -740,28 +731,40 @@ protected:
|
|||||||
/**
|
/**
|
||||||
* Do the transition to the main modes (MODE_ON, MODE_NORMAL and MODE_RAW).
|
* Do the transition to the main modes (MODE_ON, MODE_NORMAL and MODE_RAW).
|
||||||
*
|
*
|
||||||
* If the transition is complete, the mode should be set to the target mode, which can be deduced from the current mode which is
|
* If the transition is complete, the mode should be set to the target mode,
|
||||||
|
* which can be deduced from the current mode which is
|
||||||
* [_MODE_TO_ON, _MODE_TO_NORMAL, _MODE_TO_RAW]
|
* [_MODE_TO_ON, _MODE_TO_NORMAL, _MODE_TO_RAW]
|
||||||
*
|
*
|
||||||
* The intended target submode is already set. The origin submode can be read in subModeFrom.
|
* The intended target submode is already set.
|
||||||
|
* The origin submode can be read in subModeFrom.
|
||||||
*
|
*
|
||||||
* If the transition can not be completed, the child class can try to reach an working mode by setting the mode either directly
|
* If the transition can not be completed, the child class can try to reach
|
||||||
* or setting the mode to an transitional mode (TO_ON, TO_NORMAL, TO_RAW) if the device needs to be reconfigured.
|
* an working mode by setting the mode either directly
|
||||||
|
* or setting the mode to an transitional mode (TO_ON, TO_NORMAL, TO_RAW)
|
||||||
|
* if the device needs to be reconfigured.
|
||||||
*
|
*
|
||||||
* If nothing works, the child class can wait for the timeout and the base class will reset the mode to the mode where the transition
|
* If nothing works, the child class can wait for the timeout and the base
|
||||||
|
* class will reset the mode to the mode where the transition
|
||||||
* originated from (the child should report the reason for the failed transition).
|
* originated from (the child should report the reason for the failed transition).
|
||||||
*
|
*
|
||||||
* The intended way to send commands is to set a flag (enum) indicating which command is to be sent here
|
* The intended way to send commands is to set a flag (enum) indicating
|
||||||
* and then to check in buildTransitionCommand() for the flag. This flag can also be used by doStartUp() and
|
* which command is to be sent here and then to check in
|
||||||
* doShutDown() to get a nice and clean implementation of buildTransitionCommand() without switching through modes.
|
* buildTransitionCommand() for the flag. This flag can also be used by
|
||||||
|
* doStartUp() and doShutDown() to get a nice and clean implementation of
|
||||||
|
* buildTransitionCommand() without switching through modes.
|
||||||
*
|
*
|
||||||
* When the the condition for the completion of the transition is met, the mode can be set, for example in the parseReply() function.
|
* When the the condition for the completion of the transition is met, the
|
||||||
|
* mode can be set, for example in the scanForReply() function.
|
||||||
*
|
*
|
||||||
* The default implementation goes into the target mode;
|
* The default implementation goes into the target mode directly.
|
||||||
*
|
*
|
||||||
* #transitionFailure can be set to a failure code indicating the reason for a failed transition
|
* #transitionFailure can be set to a failure code indicating the reason
|
||||||
|
* for a failed transition
|
||||||
*
|
*
|
||||||
* @param modeFrom the mode the transition originated from: [MODE_ON, MODE_NORMAL, MODE_RAW and _MODE_POWER_DOWN (if the mode changed from _MODE_START_UP to _MODE_TO_ON)]
|
* @param modeFrom
|
||||||
|
* The mode the transition originated from:
|
||||||
|
* [MODE_ON, MODE_NORMAL, MODE_RAW and _MODE_POWER_DOWN (if the mode changed
|
||||||
|
* from _MODE_START_UP to _MODE_TO_ON)]
|
||||||
* @param subModeFrom the subMode of modeFrom
|
* @param subModeFrom the subMode of modeFrom
|
||||||
*/
|
*/
|
||||||
virtual void doTransition(Mode_t modeFrom, Submode_t subModeFrom);
|
virtual void doTransition(Mode_t modeFrom, Submode_t subModeFrom);
|
||||||
|
@ -47,6 +47,8 @@ public:
|
|||||||
//! This is a transitional state which can not be commanded.
|
//! This is a transitional state which can not be commanded.
|
||||||
//! The device handler performs all actions and commands to get the device
|
//! The device handler performs all actions and commands to get the device
|
||||||
//! shut down. When the device is off, the mode changes to @c MODE_OFF.
|
//! shut down. When the device is off, the mode changes to @c MODE_OFF.
|
||||||
|
//! It is possible to set the mode to _MODE_SHUT_DOWN to use the to off
|
||||||
|
//! transition if available.
|
||||||
static const Mode_t _MODE_SHUT_DOWN = TRANSITION_MODE_CHILD_ACTION_MASK | 6;
|
static const Mode_t _MODE_SHUT_DOWN = TRANSITION_MODE_CHILD_ACTION_MASK | 6;
|
||||||
//! It is possible to set the mode to _MODE_TO_ON to use the to on
|
//! It is possible to set the mode to _MODE_TO_ON to use the to on
|
||||||
//! transition if available.
|
//! transition if available.
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
#include <framework/serviceinterface/ServiceInterfaceStream.h>
|
#include <framework/serviceinterface/ServiceInterfaceStream.h>
|
||||||
|
|
||||||
SemaphoreFactory* SemaphoreFactory::factoryInstance = nullptr;
|
SemaphoreFactory* SemaphoreFactory::factoryInstance = nullptr;
|
||||||
|
const uint32_t SemaphoreIF::NO_TIMEOUT = 0;
|
||||||
|
const uint32_t SemaphoreIF::MAX_TIMEOUT = portMAX_DELAY;
|
||||||
|
|
||||||
SemaphoreFactory::SemaphoreFactory() {
|
SemaphoreFactory::SemaphoreFactory() {
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,9 @@ Mutex::Mutex() {
|
|||||||
sif::error << "Mutex: creation with name, id " << mutex.__data.__count
|
sif::error << "Mutex: creation with name, id " << mutex.__data.__count
|
||||||
<< ", " << " failed with " << strerror(status) << std::endl;
|
<< ", " << " failed with " << strerror(status) << std::endl;
|
||||||
}
|
}
|
||||||
//After a mutex attributes object has been used to initialize one or more mutexes, any function affecting the attributes object (including destruction) shall not affect any previously initialized mutexes.
|
// After a mutex attributes object has been used to initialize one or more
|
||||||
|
// mutexes, any function affecting the attributes object
|
||||||
|
// (including destruction) shall not affect any previously initialized mutexes.
|
||||||
status = pthread_mutexattr_destroy(&mutexAttr);
|
status = pthread_mutexattr_destroy(&mutexAttr);
|
||||||
if (status != 0) {
|
if (status != 0) {
|
||||||
sif::error << "Mutex: Attribute destroy failed with " << strerror(status) << std::endl;
|
sif::error << "Mutex: Attribute destroy failed with " << strerror(status) << std::endl;
|
||||||
|
@ -2,7 +2,11 @@
|
|||||||
#define OS_RTEMS_MUTEX_H_
|
#define OS_RTEMS_MUTEX_H_
|
||||||
|
|
||||||
#include <framework/ipc/MutexIF.h>
|
#include <framework/ipc/MutexIF.h>
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class Mutex : public MutexIF {
|
class Mutex : public MutexIF {
|
||||||
public:
|
public:
|
||||||
|
37
osal/linux/SemaphoreFactory.cpp
Normal file
37
osal/linux/SemaphoreFactory.cpp
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#include <framework/tasks/SemaphoreFactory.h>
|
||||||
|
#include <framework/serviceinterface/ServiceInterfaceStream.h>
|
||||||
|
|
||||||
|
const uint32_t SemaphoreIF::NO_TIMEOUT = 0;
|
||||||
|
const uint32_t SemaphoreIF::MAX_TIMEOUT = 0xFFFFFFFF;
|
||||||
|
|
||||||
|
SemaphoreFactory* SemaphoreFactory::factoryInstance = nullptr;
|
||||||
|
|
||||||
|
SemaphoreFactory::SemaphoreFactory() {
|
||||||
|
}
|
||||||
|
|
||||||
|
SemaphoreFactory::~SemaphoreFactory() {
|
||||||
|
delete factoryInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
SemaphoreFactory* SemaphoreFactory::instance() {
|
||||||
|
if (factoryInstance == nullptr){
|
||||||
|
factoryInstance = new SemaphoreFactory();
|
||||||
|
}
|
||||||
|
return SemaphoreFactory::factoryInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
SemaphoreIF* SemaphoreFactory::createBinarySemaphore() {
|
||||||
|
sif::error << "Semaphore not implemented for Linux yet" << std::endl;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
SemaphoreIF* SemaphoreFactory::createCountingSemaphore(uint8_t count,
|
||||||
|
uint8_t initCount) {
|
||||||
|
sif::error << "Counting Semaphore not implemented for "
|
||||||
|
"Linux yet" << std::endl;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SemaphoreFactory::deleteMutex(SemaphoreIF* semaphore) {
|
||||||
|
delete semaphore;
|
||||||
|
}
|
@ -20,8 +20,10 @@
|
|||||||
class SemaphoreIF {
|
class SemaphoreIF {
|
||||||
public:
|
public:
|
||||||
virtual~ SemaphoreIF() {};
|
virtual~ SemaphoreIF() {};
|
||||||
//!< Needs to be defined in implementation.
|
//! Needs to be defined in implementation. No blocking time
|
||||||
static const uint32_t NO_TIMEOUT;
|
static const uint32_t NO_TIMEOUT;
|
||||||
|
//! Needs to be defined in implementation. Blocks indefinitely.
|
||||||
|
static const uint32_t MAX_TIMEOUT;
|
||||||
static const uint8_t INTERFACE_ID = CLASS_ID::SEMAPHORE_IF;
|
static const uint8_t INTERFACE_ID = CLASS_ID::SEMAPHORE_IF;
|
||||||
//! Semaphore timeout
|
//! Semaphore timeout
|
||||||
static constexpr ReturnValue_t SEMAPHORE_TIMEOUT = MAKE_RETURN_CODE(1);
|
static constexpr ReturnValue_t SEMAPHORE_TIMEOUT = MAKE_RETURN_CODE(1);
|
||||||
|
Loading…
Reference in New Issue
Block a user