ESPixelStick Firmware
Firmware for the ESPixelStick
Loading...
Searching...
No Matches
OutputCommon.hpp
Go to the documentation of this file.
1#pragma once
2/*
3* OutputCommon.hpp - Output base class
4*
5* Project: ESPixelStick - An ESP8266 / ESP32 and E1.31 based pixel driver
6* Copyright (c) 2021, 2022 Shelby Merrick
7* http://www.forkineye.com
8*
9* This program is provided free for you to use in any way that you wish,
10* subject to the laws and regulations where you are using it. Due diligence
11* is strongly suggested before using this code. Please give credit where due.
12*
13* The Author makes no warranty of any kind, express or implied, with regard
14* to this program or the documentation contained in this document. The
15* Author shall not be liable in any event for incidental or consequential
16* damages in connection with, or arising out of, the furnishing, performance
17* or use of these programs.
18*
19* This is a base class used to manage the output port. It provides a common API
20* for use by the factory class to manage the object.
21*/
22
23#include "ESPixelStick.h"
24#include "OutputMgr.hpp"
25#include "OutputMgrPortDefs.hpp"
26
27#ifdef ARDUINO_ARCH_ESP32
28# include <driver/uart.h>
29#endif
30
32{
33public:
36 virtual ~c_OutputCommon ();
37
39
40 // functions to be provided by the derived class
41 virtual void Begin () {}
42 virtual bool SetConfig (ArduinoJson::JsonObject & jsonConfig);
43 virtual void GetConfig (ArduinoJson::JsonObject & jsonConfig);
44 virtual uint32_t Poll () = 0;
45#ifdef ARDUINO_ARCH_ESP32
46 virtual bool RmtPoll () = 0;
47#endif // def ARDUINO_ARCH_ESP32
48 virtual void GetDriverName (String & sDriverName) = 0;
50 uint8_t * GetBufferAddress () { return pOutputBuffer;}
51 uint32_t GetBufferUsedSize () { return OutputBufferSize;}
54 virtual void GetStatus (ArduinoJson::JsonObject & jsonStatus) = 0;
55 virtual void BaseGetStatus (ArduinoJson::JsonObject & jsonStatus);
56 void SetOutputBufferAddress (uint8_t* pNewOutputBuffer) { pOutputBuffer = pNewOutputBuffer; }
57 virtual void SetOutputBufferSize (uint32_t NewOutputBufferSize) { OutputBufferSize = NewOutputBufferSize; };
58 virtual uint32_t GetNumOutputBufferBytesNeeded () = 0;
59 virtual uint32_t GetNumOutputBufferChannelsServiced () = 0;
60 virtual void PauseOutput (bool NewState) {Paused = NewState;}
61 virtual void WriteChannelData (uint32_t StartChannelId, uint32_t ChannelCount, byte *pSourceData);
62 virtual void ReadChannelData (uint32_t StartChannelId, uint32_t ChannelCount, byte *pTargetData);
63 virtual bool ValidateGpio (gpio_num_t ConsoleTxGpio, gpio_num_t ConsoleRxGpio);
64 virtual bool DriverIsSendingIntensityData() {return false;}
65 virtual uint32_t GetFrameTimeMs() {return 1 + (ActualFrameDurationMicroSec / 1000); }
66 bool IsPaused() {return Paused;}
67 virtual void ClearStatistics (void);
68
69protected:
70
72 OTYPE_t OutputType = OTYPE_t::OutputProtocol_Disabled;
73 bool HasBeenInitialized = false;
74 uint32_t FrameDurationInMicroSec = 25000;
75 uint32_t ActualFrameDurationMicroSec = 50000; // Default time for relays is every 50ms
76 uint8_t * pOutputBuffer = nullptr;
77 uint32_t OutputBufferSize = 0;
78 uint32_t FrameCount = 0;
79 bool Paused = false;
80
81 virtual void ReportNewFrame ();
82
83 inline bool canRefresh ()
84 {
85 uint32_t Now = micros ();
86 uint32_t FrameTimeDeltaInMicroSec = Now - FrameStartTimeInMicroSec; // how many us since the frame started
87
88 // did the counter wrap?
90 {
91 FrameTimeDeltaInMicroSec = Now + (0 - FrameStartTimeInMicroSec);
92 }
93
94 return (FrameTimeDeltaInMicroSec > FrameDurationInMicroSec);
95 }
96
97 #ifdef USE_RMT_DEBUG_COUNTERS
98 protected: uint32_t FrameStartTimeInMicroSec = 0;
99 #else
100 private: uint32_t FrameStartTimeInMicroSec = 0;
101 #endif // def USE_RMT_DEBUG_COUNTERS
102
103}; // c_OutputCommon
uint8_t OM_PortId_t
Definition OutputMgrPortDefs.hpp:71
Definition OutputCommon.hpp:32
uint32_t FrameStartTimeInMicroSec
Definition OutputCommon.hpp:100
void SetOutputBufferAddress(uint8_t *pNewOutputBuffer)
Definition OutputCommon.hpp:56
c_OutputMgr::e_OutputProtocolType OTYPE_t
Definition OutputCommon.hpp:38
c_OutputCommon(OM_OutputPortDefinition_t &OutputPortDefinition, c_OutputMgr::e_OutputProtocolType outputType)
< Start up the driver and put it into a safe mode
Definition OutputCommon.cpp:28
virtual ~c_OutputCommon()
Definition OutputCommon.cpp:46
uint32_t ActualFrameDurationMicroSec
Definition OutputCommon.hpp:75
virtual void GetDriverName(String &sDriverName)=0
get the name for the instantiated driver
virtual void Begin()
set up the operating environment based on the current config (or defaults)
Definition OutputCommon.hpp:41
uint32_t FrameCount
Definition OutputCommon.hpp:78
OM_OutputPortDefinition_t OutputPortDefinition
Definition OutputCommon.hpp:71
uint8_t * pOutputBuffer
Definition OutputCommon.hpp:76
OM_PortId_t GetOutputPortId()
return the output channel number
Definition OutputCommon.hpp:49
bool Paused
Definition OutputCommon.hpp:79
OM_GPIOS_t GetOutputGpio()
Definition OutputCommon.hpp:52
virtual bool ValidateGpio(gpio_num_t ConsoleTxGpio, gpio_num_t ConsoleRxGpio)
Definition OutputCommon.cpp:143
virtual void ClearStatistics(void)
Definition OutputCommon.cpp:154
bool canRefresh()
Definition OutputCommon.hpp:83
virtual uint32_t GetFrameTimeMs()
Definition OutputCommon.hpp:65
virtual uint32_t GetNumOutputBufferChannelsServiced()=0
virtual bool DriverIsSendingIntensityData()
Definition OutputCommon.hpp:64
uint32_t OutputBufferSize
Definition OutputCommon.hpp:77
uint32_t FrameDurationInMicroSec
Definition OutputCommon.hpp:74
virtual void PauseOutput(bool NewState)
Definition OutputCommon.hpp:60
uint8_t * GetBufferAddress()
Get the address of the buffer into which the E1.31 handler will stuff data.
Definition OutputCommon.hpp:50
virtual void WriteChannelData(uint32_t StartChannelId, uint32_t ChannelCount, byte *pSourceData)
Definition OutputCommon.cpp:108
virtual void BaseGetStatus(ArduinoJson::JsonObject &jsonStatus)
Definition OutputCommon.cpp:54
OTYPE_t OutputType
Definition OutputCommon.hpp:72
bool IsPaused()
Definition OutputCommon.hpp:66
virtual void GetStatus(ArduinoJson::JsonObject &jsonStatus)=0
virtual uint32_t Poll()=0
Call from loop(), renders output data.
virtual uint32_t GetNumOutputBufferBytesNeeded()=0
uint32_t GetBufferUsedSize()
Get the address of the buffer into which the E1.31 handler will stuff data.
Definition OutputCommon.hpp:51
virtual bool SetConfig(ArduinoJson::JsonObject &jsonConfig)
Set a new config in the driver.
Definition OutputCommon.cpp:78
OTYPE_t GetOutputType()
Have the instance report its type.
Definition OutputCommon.hpp:53
virtual void ReadChannelData(uint32_t StartChannelId, uint32_t ChannelCount, byte *pTargetData)
Definition OutputCommon.cpp:130
virtual void ReportNewFrame()
Definition OutputCommon.cpp:66
virtual void GetConfig(ArduinoJson::JsonObject &jsonConfig)
Get the current config used by the driver.
Definition OutputCommon.cpp:95
virtual void SetOutputBufferSize(uint32_t NewOutputBufferSize)
Definition OutputCommon.hpp:57
bool HasBeenInitialized
Definition OutputCommon.hpp:73
e_OutputProtocolType
Definition OutputMgr.hpp:78
Definition OutputMgrPortDefs.hpp:83
Definition OutputMgrPortDefs.hpp:90
OM_GPIOS_t gpios
Definition OutputMgrPortDefs.hpp:93
OM_PortId_t PortId
Definition OutputMgrPortDefs.hpp:91