Libraries/IOControl/include/IO/RFSwitch/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::RFSwitch
26 {
27 DECLARE_FSTR(ATTR_REPEATS)
28 
29 
32 struct Timing {
39 };
40 
41 /*
42  * A specific type of RF device protocol.
43  * Actual RF I/O is performed by Controller.
44  */
45 class Device : public IO::Device
46 {
47 public:
49  {
50  public:
51  IO::Device* createDevice(IO::Controller& controller, const char* id) const override
52  {
53  return new Device(static_cast<Controller&>(controller), id);
54  }
55 
56  const FlashString& controllerClass() const override
57  {
58  return CONTROLLER_CLASSNAME;
59  }
60 
61  const FlashString& deviceClass() const override
62  {
63  DEFINE_FSTR_LOCAL(DEVICE_CLASSNAME, "rfswitch")
64  return DEVICE_CLASSNAME;
65  }
66  };
67 
68  static const Factory factory;
69 
70  struct Config {
74  };
75 
76  const DeviceType type() const override
77  {
78  return DeviceType::RFSwitch;
79  }
80 
81  ErrorCode init(const Config& config);
82  ErrorCode init(JsonObjectConst config) override;
83 
84  Device(Controller& controller, const char* id) : IO::Device(controller, id)
85  {
86  }
87 
88  IO::Request* createRequest() override;
89 
90  const Timing& getTiming() const
91  {
92  return timing;
93  }
94 
96  {
97  return repeats;
98  }
99 
100 protected:
101  void parseJson(JsonObjectConst json, Config& cfg);
102 
103 protected:
106 };
107 
108 } // namespace IO::RFSwitch
Controller for 433MHz transmitter.
Definition: IOControl/include/IO/RFSwitch/Controller.h:38
const DeviceType type() const override
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:76
const Timing & getTiming() const
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:90
uint16_t bit1
Width of a '1' high pulse.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:37
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:45
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
void parseJson(JsonObjectConst json, Config &cfg)
Request represents a single user request/response over a bus.
Definition: IOControl/include/IO/Request.h:79
uint16_t bit0
Width of a '0' high pulse.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:36
uint8_t getRepeats() const
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:95
IO::Device * createDevice(IO::Controller &controller, const char *id) const override
Create a new device instance.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:51
Definition: IOControl/include/IO/Controller.h:25
uint16_t gap
Gap after final bit before repeating.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:38
Timing timing
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:72
const FlashString & deviceClass() const override
Return the Device class name, e.g. 'r421a'.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:61
Inherited classes expand this definition as required.
Definition: Libraries/IOControl/include/IO/Device.h:80
uint16_t starth
Width of start High pulse.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:33
Abstract class which allows device instances to be created.
Definition: Libraries/IOControl/include/IO/Device.h:44
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:70
#define DEFINE_FSTR_LOCAL(name, str)
Like DEFINE_FSTR except reference is declared static constexpr.
Definition: String.hpp:84
Protocol timings in microseconds.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:32
Timing timing
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:104
Handles requests for a specific device; the requests are executed by the relevant controller.
Definition: Libraries/IOControl/include/IO/Device.h:35
Json json
Device(Controller &controller, const char *id)
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:84
const FlashString & controllerClass() const override
Return the expected controller type for this device class, e.g. 'rs485'.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:56
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:48
uint8_t repeats
Number of times to repeat code.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:105
uint16_t startl
Width of start Low pulse.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:34
IO::Request * createRequest() override
Create a request object for this device.
uint16_t period
Bit period.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:35
Definition: IOControl/include/IO/RFSwitch/Controller.h:25
#define DECLARE_FSTR(name)
Declare a global FSTR::String& reference.
Definition: String.hpp:63
A Controller is responsible for serialising requests for a physical bus.
Definition: IOControl/include/IO/Controller.h:41
Controller & controller
Definition: Libraries/IOControl/include/IO/Device.h:234
IO::Device::Config base
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:71
ErrorCode init(const Config &config)
static const Factory factory
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:68
uint8_t repeats
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:73