Handles requests for a specific device; the requests are executed by the relevant controller. More...

#include <Device.h>

Inheritance diagram for IO::Device:
Collaboration diagram for IO::Device:

Classes

struct  Config
 Inherited classes expand this definition as required. More...
 
class  Factory
 Abstract class which allows device instances to be created. More...
 

Public Types

enum class  State { stopped , starting , fault , normal }
 
using OwnedList = OwnedLinkedObjectListTemplate< Device >
 
- Public Types inherited from LinkedObjectTemplate< Device >
using Iterator = IteratorTemplate< Device, Device *, Device & >
 
using ConstIterator = IteratorTemplate< const Device, const Device *, const Device & >
 

Public Member Functions

 Device (Controller &controller, const char *id)
 Device constructor. More...
 
virtual ~Device ()
 
virtual const DeviceType type () const =0
 
ErrorCode init (const Config &config)
 
virtual ErrorCode init (JsonObjectConst config)=0
 
virtual RequestcreateRequest ()=0
 Create a request object for this device. More...
 
const CStringgetId () const
 The unique device identifier. More...
 
bool operator== (const String &id) const
 
const CStringgetName () const
 Optional descriptive name for the device. More...
 
virtual uint16_t address () const
 Devices with a numeric address should implement this method. More...
 
unsigned minTransactionInterval () const
 
String caption () const
 Obtain a descriptive caption for this device. More...
 
ControllergetController () const
 Obtain the owning controller. More...
 
State getState ()
 Get current device state. More...
 
virtual DevNode::ID nodeIdMin () const
 Get minimum valid Node ID for this device. More...
 
DevNode::ID nodeIdMax () const
 Get maximum valid Node ID for this device. More...
 
virtual uint16_t maxNodes () const
 Determine maximum number of nodes supported by the device. More...
 
virtual DevNode::States getNodeStates (DevNode node) const
 Return the current set of states for all nodes controlled by this device. More...
 
virtual void handleEvent (Request *request, Event event)
 Implementations may override this method to customise event handling. More...
 
- Public Member Functions inherited from LinkedObjectTemplate< Device >
Device * getNext () const
 
bool insertAfter (Device *object)
 
Iterator begin () const
 
Iterator end () const
 
Iterator cbegin () const
 
Iterator cend () const
 
- Public Member Functions inherited from LinkedObject
virtual ~LinkedObject ()
 
virtual LinkedObjectnext () const
 
bool insertAfter (LinkedObject *object)
 
bool operator== (const LinkedObject &other) const
 
bool operator!= (const LinkedObject &other) const
 

Protected Member Functions

void parseJson (JsonObjectConst json, Config &cfg)
 
virtual ErrorCode start ()
 
virtual ErrorCode stop ()
 
void submit (Request *request)
 

Protected Attributes

Controllercontroller
 

Detailed Description

Handles requests for a specific device; the requests are executed by the relevant controller.

Member Typedef Documentation

◆ OwnedList

Member Enumeration Documentation

◆ State

enum IO::Device::State
strong
Enumerator
stopped 

Awaiting initialisation by controller.

starting 

Initialisation in progress.

fault 

Initialisation or other request failed.

normal 

Normal operation.

Constructor & Destructor Documentation

◆ Device()

IO::Device::Device ( Controller controller,
const char *  id 
)
inline

Device constructor.

Parameters
controllerThe owning controller
idUnique device identifier

◆ ~Device()

virtual IO::Device::~Device ( )
inlinevirtual

Member Function Documentation

◆ address()

virtual uint16_t IO::Device::address ( ) const
inlinevirtual

Devices with a numeric address should implement this method.

Reimplemented in IO::RS485::Device.

◆ caption()

String IO::Device::caption ( ) const

Obtain a descriptive caption for this device.

◆ createRequest()

virtual Request* IO::Device::createRequest ( )
pure virtual

Create a request object for this device.

Return values
Request*Caller must destroy or submit the request

Implemented in IO::RFSwitch::Device, IO::Modbus::STS::Fan::Device, IO::Modbus::STM8Relay::Device, IO::Modbus::RID35::Device, IO::Modbus::R421A::Device, IO::Modbus::NT18B07::Device, IO::Modbus::Device, IO::DMX512::Device, and IO::Custom::Device.

◆ getController()

Controller& IO::Device::getController ( ) const
inline

Obtain the owning controller.

◆ getId()

const CString& IO::Device::getId ( ) const
inline

The unique device identifier.

◆ getName()

const CString& IO::Device::getName ( ) const
inline

Optional descriptive name for the device.

◆ getNodeStates()

virtual DevNode::States IO::Device::getNodeStates ( DevNode  node) const
inlinevirtual

Return the current set of states for all nodes controlled by this device.

Used to determine if, say, all nodes are ON, OFF or a combination.

Reimplemented in IO::Modbus::STM8Relay::Device, and IO::Modbus::R421A::Device.

◆ getState()

State IO::Device::getState ( )
inline

Get current device state.

◆ handleEvent()

virtual void IO::Device::handleEvent ( Request request,
Event  event 
)
virtual

Implementations may override this method to customise event handling.

Reimplemented in IO::RS485::Device, IO::Modbus::STM8Relay::Device, IO::Modbus::R421A::Device, IO::Modbus::Device, and IO::DMX512::Device.

◆ init() [1/2]

ErrorCode IO::Device::init ( const Config config)

◆ init() [2/2]

virtual ErrorCode IO::Device::init ( JsonObjectConst  config)
pure virtual

◆ maxNodes()

virtual uint16_t IO::Device::maxNodes ( ) const
inlinevirtual

Determine maximum number of nodes supported by the device.

Return values
uint16_t0 if device doesn't support nodes

Reimplemented in IO::Modbus::STS::Fan::Device, IO::Modbus::STM8Relay::Device, IO::Modbus::R421A::Device, IO::Modbus::NT18B07::Device, and IO::DMX512::Device.

◆ minTransactionInterval()

unsigned IO::Device::minTransactionInterval ( ) const
inline

◆ nodeIdMax()

DevNode::ID IO::Device::nodeIdMax ( ) const
inline

Get maximum valid Node ID for this device.

◆ nodeIdMin()

virtual DevNode::ID IO::Device::nodeIdMin ( ) const
inlinevirtual

Get minimum valid Node ID for this device.

Typically devices have a contiguous valid range of node IDs

Reimplemented in IO::Modbus::STM8Relay::Device, and IO::Modbus::R421A::Device.

◆ operator==()

bool IO::Device::operator== ( const String id) const
inline

◆ parseJson()

void IO::Device::parseJson ( JsonObjectConst  json,
Config cfg 
)
protected

◆ start()

virtual ErrorCode IO::Device::start ( )
protectedvirtual

Reimplemented in IO::DMX512::Device.

◆ stop()

virtual ErrorCode IO::Device::stop ( )
protectedvirtual

◆ submit()

void IO::Device::submit ( Request request)
protected

◆ type()

virtual const DeviceType IO::Device::type ( ) const
pure virtual

Member Data Documentation

◆ controller

Controller& IO::Device::controller
protected

The documentation for this class was generated from the following file: