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