#include <driver.h>
Public Types | |
typedef char | state_t |
Public Member Functions | |
void | clearRecoveryComplete () |
bool | close () |
Driver () | |
virtual std::string | getID ()=0 |
bool | getRecoveryComplete () |
state_t | getState () |
const std::string | getStateName () |
const std::string | getStatusMessage () |
bool | getStatusOk () |
bool | goClosed () |
bool | goOpened () |
bool | goRunning () |
bool | goState (state_t target) |
bool | isClosed () |
bool | isOpened () |
bool | isRunning () |
bool | isStopped () |
bool | lowerState (state_t target) |
bool | open () |
bool | raiseState (state_t target) |
void | setPostOpenHook (hookFunction f) |
void | setStatusMessage (const std::string &msg, bool ok=false, bool recovery_complete=false) |
void | setStatusMessagef (const char *format,...) |
bool | start () |
bool | stop () |
virtual | ~Driver () |
Static Public Member Functions | |
static const std::string & | getStateName (state_t s) |
Public Attributes | |
boost::recursive_mutex | mutex_ |
Static Public Attributes | |
static const state_t | CLOSED = 0 |
static const state_t | OPENED = 1 |
static const state_t | RUNNING = 2 |
Protected Types | |
typedef boost::function< void() > | hookFunction |
Protected Member Functions | |
virtual void | doClose ()=0 |
virtual void | doOpen ()=0 |
virtual void | doStart ()=0 |
virtual void | doStop ()=0 |
Protected Attributes | |
hookFunction | postOpenHook |
state_t | state_ |
Private Member Functions | |
const std::string & | getTransitionName (void(Driver::*transition)()) |
bool | tryTransition (state_t target, void(Driver::*transition)()) |
Private Attributes | |
std::string | status_message_ |
boost::mutex | status_message_mutex_ |
bool | status_ok_ |
bool | status_recovery_complete_ |
State transition functions assume that they are called from the correct state. It is the caller's responsibility to check that the state is correct. The Driver mutex_ should always be locked by the caller before checking the current state and throughout the call to the transition function.
State should not change between calls to the transition function except for transitions from RUNNING to STOPPED. The device must hold its lock while doing this transition to allow the caller to enforce that stop is only called from the RUNNING state.
Transitions may fail. It is the caller's responsibility to check success by looking at the device's state_. After a failure, the device can set itself into any state. For example, if a call to start() fails, the device may end up in the CLOSED state.
typedef boost::function< void() > driver_base::Driver::hookFunction [protected] |
typedef char driver_base::Driver::state_t |
driver_base::Driver::Driver | ( | ) | [inline] |
virtual driver_base::Driver::~Driver | ( | ) | [inline, virtual] |
void driver_base::Driver::clearRecoveryComplete | ( | ) | [inline] |
bool driver_base::Driver::close | ( | ) | [inline] |
virtual void driver_base::Driver::doClose | ( | ) | [protected, pure virtual] |
virtual void driver_base::Driver::doOpen | ( | ) | [protected, pure virtual] |
virtual void driver_base::Driver::doStart | ( | ) | [protected, pure virtual] |
virtual void driver_base::Driver::doStop | ( | ) | [protected, pure virtual] |
virtual std::string driver_base::Driver::getID | ( | ) | [pure virtual] |
bool driver_base::Driver::getRecoveryComplete | ( | ) | [inline] |
state_t driver_base::Driver::getState | ( | ) | [inline] |
const std::string driver_base::Driver::getStateName | ( | ) | [inline] |
static const std::string& driver_base::Driver::getStateName | ( | state_t | s | ) | [inline, static] |
const std::string driver_base::Driver::getStatusMessage | ( | ) | [inline] |
bool driver_base::Driver::getStatusOk | ( | ) | [inline] |
const std::string& driver_base::Driver::getTransitionName | ( | void(Driver::*)() | transition | ) | [inline, private] |
bool driver_base::Driver::goClosed | ( | ) | [inline] |
bool driver_base::Driver::goOpened | ( | ) | [inline] |
bool driver_base::Driver::goRunning | ( | ) | [inline] |
bool driver_base::Driver::goState | ( | state_t | target | ) | [inline] |
bool driver_base::Driver::isClosed | ( | ) | [inline] |
bool driver_base::Driver::isOpened | ( | ) | [inline] |
bool driver_base::Driver::isRunning | ( | ) | [inline] |
bool driver_base::Driver::isStopped | ( | ) | [inline] |
bool driver_base::Driver::lowerState | ( | state_t | target | ) | [inline] |
bool driver_base::Driver::open | ( | ) | [inline] |
bool driver_base::Driver::raiseState | ( | state_t | target | ) | [inline] |
void driver_base::Driver::setPostOpenHook | ( | hookFunction | f | ) | [inline] |
void driver_base::Driver::setStatusMessage | ( | const std::string & | msg, |
bool | ok = false , |
||
bool | recovery_complete = false |
||
) | [inline] |
void driver_base::Driver::setStatusMessagef | ( | const char * | format, |
... | |||
) | [inline] |
bool driver_base::Driver::start | ( | ) | [inline] |
bool driver_base::Driver::stop | ( | ) | [inline] |
bool driver_base::Driver::tryTransition | ( | state_t | target, |
void(Driver::*)() | transition | ||
) | [inline, private] |
const state_t driver_base::Driver::CLOSED = 0 [static] |
boost::recursive_mutex driver_base::Driver::mutex_ |
const state_t driver_base::Driver::OPENED = 1 [static] |
hookFunction driver_base::Driver::postOpenHook [protected] |
const state_t driver_base::Driver::RUNNING = 2 [static] |
state_t driver_base::Driver::state_ [protected] |
boost::mutex driver_base::Driver::status_message_mutex_ [private] |
bool driver_base::Driver::status_ok_ [private] |
bool driver_base::Driver::status_recovery_complete_ [private] |