Libraries/IOControl/include/IO/Custom/Device.h
Go to the documentation of this file.
1 
20 #pragma once
21 
22 #include <IO/Device.h>
23 #include "Controller.h"
24 
25 namespace IO::Custom
26 {
27 class Request;
28 
29 class Device : public IO::Device
30 {
31  friend Request;
32 
33 public:
34  template <class DeviceClass> class FactoryTemplate : public IO::Device::Factory
35  {
36  public:
37  IO::Device* createDevice(IO::Controller& controller, const char* id) const override
38  {
39  return new DeviceClass(static_cast<Controller&>(controller), id);
40  }
41 
42  const FlashString& controllerClass() const override
43  {
44  return CONTROLLER_CLASSNAME;
45  }
46  };
47 
48  using IO::Device::Device;
49 
50  const DeviceType type() const override
51  {
52  return DeviceType::Custom;
53  }
54 
55  IO::Request* createRequest() override;
56 
57  virtual int getNodeValue(IO::DevNode node) const
58  {
59  return 0;
60  }
61 
62 protected:
63  virtual ErrorCode execute(Request& request) = 0;
64  virtual void getRequestJson(const Request& request, JsonObject json) const;
65 
66 private:
67  uint32_t param1{0};
68  uint32_t param2{0};
69 };
70 
71 } // namespace IO::Custom
const DeviceType type() const override
Definition: Libraries/IOControl/include/IO/Custom/Device.h:50
describes a counted string stored in flash memory
Definition: String.hpp:173
int16_t ErrorCode
Definition: Libraries/IOControl/include/IO/Error.h:27
DeviceType
Definition: DeviceType.h:24
virtual int getNodeValue(IO::DevNode node) const
Definition: Libraries/IOControl/include/IO/Custom/Device.h:57
Request represents a single user request/response over a bus.
Definition: IOControl/include/IO/Request.h:79
virtual void getRequestJson(const Request &request, JsonObject json) const
IO::Device * createDevice(IO::Controller &controller, const char *id) const override
Create a new device instance.
Definition: Libraries/IOControl/include/IO/Custom/Device.h:37
Identifies a device node.
Definition: DevNode.h:30
Definition: IOControl/include/IO/Custom/Controller.h:24
IO::Request * createRequest() override
Create a request object for this device.
Definition: Libraries/IOControl/include/IO/Custom/Device.h:34
Abstract class which allows device instances to be created.
Definition: Libraries/IOControl/include/IO/Device.h:44
Definition: IOControl/include/IO/Custom/Request.h:29
Handles requests for a specific device; the requests are executed by the relevant controller.
Definition: Libraries/IOControl/include/IO/Device.h:35
Json json
Controller for PWM output.
Definition: IOControl/include/IO/Custom/Controller.h:34
virtual ErrorCode execute(Request &request)=0
Definition: Libraries/IOControl/include/IO/Custom/Device.h:29
Device(Controller &controller, const char *id)
Device constructor.
Definition: Libraries/IOControl/include/IO/Device.h:110
A Controller is responsible for serialising requests for a physical bus.
Definition: IOControl/include/IO/Controller.h:41
const FlashString & controllerClass() const override
Return the expected controller type for this device class, e.g. 'rs485'.
Definition: Libraries/IOControl/include/IO/Custom/Device.h:42
Controller & controller
Definition: Libraries/IOControl/include/IO/Device.h:234