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 {
33  uint16_t starth;
34  uint16_t startl;
35  uint16_t period;
36  uint16_t bit0;
37  uint16_t bit1;
38  uint16_t gap;
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 {
73  uint8_t repeats;
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 
89 
90  const Timing& getTiming() const
91  {
92  return timing;
93  }
94 
95  uint8_t getRepeats() const
96  {
97  return repeats;
98  }
99 
100 protected:
101  void parseJson(JsonObjectConst json, Config& cfg);
102 
103 protected:
105  uint8_t repeats;
106 };
107 
108 } // namespace IO::RFSwitch
describes a counted string stored in flash memory
Definition: String.hpp:174
A Controller is responsible for serialising requests for a physical bus.
Definition: IOControl/include/IO/Controller.h:42
Abstract class which allows device instances to be created.
Definition: Libraries/IOControl/include/IO/Device.h:45
Handles requests for a specific device; the requests are executed by the relevant controller.
Definition: Libraries/IOControl/include/IO/Device.h:36
Controller & controller
Definition: Libraries/IOControl/include/IO/Device.h:234
Controller for 433MHz transmitter.
Definition: IOControl/include/IO/RFSwitch/Controller.h:39
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:49
const FlashString & deviceClass() const override
Return the Device class name, e.g. 'r421a'.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:61
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
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: Libraries/IOControl/include/IO/RFSwitch/Device.h:46
ErrorCode init(const Config &config)
IO::Request * createRequest() override
Create a request object for this device.
Timing timing
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:104
const Timing & getTiming() const
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:90
void parseJson(JsonObjectConst json, Config &cfg)
ErrorCode init(JsonObjectConst config) override
uint8_t repeats
Number of times to repeat code.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:105
uint8_t getRepeats() const
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:95
const DeviceType type() const override
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:76
static const Factory factory
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:68
Device(Controller &controller, const char *id)
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:84
Request represents a single user request/response over a bus.
Definition: IOControl/include/IO/Request.h:80
#define DEFINE_FSTR_LOCAL(name, str)
Like DEFINE_FSTR except reference is declared static constexpr.
Definition: String.hpp:84
#define DECLARE_FSTR(name)
Declare a global FSTR::String& reference.
Definition: String.hpp:63
Json json
Definition: IOControl/include/IO/RFSwitch/Controller.h:26
Definition: IOControl/include/IO/Controller.h:26
DeviceType
Definition: DeviceType.h:24
int16_t ErrorCode
Definition: Libraries/IOControl/include/IO/Error.h:27
Inherited classes expand this definition as required.
Definition: Libraries/IOControl/include/IO/Device.h:80
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:70
uint8_t repeats
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:73
IO::Device::Config base
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:71
Timing timing
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:72
Protocol timings in microseconds.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:32
uint16_t period
Bit period.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:35
uint16_t startl
Width of start Low pulse.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:34
uint16_t bit1
Width of a '1' high pulse.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:37
uint16_t gap
Gap after final bit before repeating.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:38
uint16_t starth
Width of start High pulse.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:33
uint16_t bit0
Width of a '0' high pulse.
Definition: Libraries/IOControl/include/IO/RFSwitch/Device.h:36