IOControl/include/IO/RFSwitch/Controller.h
Go to the documentation of this file.
1 
20 #pragma once
21 
22 #include <IO/Controller.h>
23 #include <HardwareTimer.h>
24 
25 namespace IO::RFSwitch
26 {
27 DECLARE_FSTR(CONTROLLER_CLASSNAME)
28 
29 class Request;
30 
38 class Controller : public IO::Controller
39 {
40 public:
41  Controller(uint8_t instance, uint8_t outputPin, bool outputInvert) : IO::Controller(instance)
42  {
43  this->outputPin = outputPin;
44  this->outputInvert = outputInvert;
45  setOutput(false);
46  pinMode(outputPin, OUTPUT);
47  setOutput(false);
48  }
49 
50  const FlashString& classname() const override
51  {
52  return CONTROLLER_CLASSNAME;
53  }
54 
55  void handleEvent(IO::Request* request, Event event) override;
56 
57 private:
58  enum TransmitState {
59  idle,
60  startHigh,
61  startLow,
62  dataHigh,
63  dataLow,
64  };
65 
66  static void __forceinline setOutput(bool state)
67  {
68  digitalWrite(outputPin, state ^ outputInvert);
69  }
70 
71  static void setTransmit(TransmitState state, bool output, unsigned duration);
72  static void transmitInterruptHandler();
73  bool execute(IO::Request& request);
74 
75  static uint32_t transmitData; //< The data to transmit
76  static uint32_t transmitMask; //< Position of bit to transmit next
77  static uint16_t lowDuration; //< Calculated when high started to balance bit period
78  static uint8_t repeatsRemaining; //< How many remaining code repeats
79  static Request* activeRequest; //< Active request
80  static HardwareTimer hardwareTimer;
81  static uint8_t outputPin;
82  static bool outputInvert;
83  static volatile TransmitState transmitState;
84 };
85 
86 } // namespace IO::RFSwitch
#define OUTPUT
Definition: WConstants.h:46
Callback timer class template.
Definition: CallbackTimer.h:76
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
Controller for 433MHz transmitter.
Definition: IOControl/include/IO/RFSwitch/Controller.h:39
Controller(uint8_t instance, uint8_t outputPin, bool outputInvert)
Definition: IOControl/include/IO/RFSwitch/Controller.h:41
void handleEvent(IO::Request *request, Event event) override
Implementations override this method to process events as they pass through the stack.
const FlashString & classname() const override
Get the class name for this Controller.
Definition: IOControl/include/IO/RFSwitch/Controller.h:50
Definition: IOControl/include/IO/RFSwitch/Request.h:30
Request represents a single user request/response over a bus.
Definition: IOControl/include/IO/Request.h:80
#define DECLARE_FSTR(name)
Declare a global FSTR::String& reference.
Definition: String.hpp:63
void pinMode(uint16_t pin, uint8_t mode)
Set the mode of a GPIO pin.
void digitalWrite(uint16_t pin, uint8_t val)
Set a digital output.
Definition: IOControl/include/IO/RFSwitch/Controller.h:26
Definition: IOControl/include/IO/Controller.h:26
Event
Definition: Event.h:36