23#include "i2s_parallel.hpp"
24#include "driver/gpio.h"
32 #define I2S_NUM_SLOTA i2s_bits_per_chan_t::I2S_BITS_PER_CHAN_8BIT
33 #define I2S_MAX_NUM_PORTS 8
34 typedef uint8_t I2S_Item_t;
36 struct OutputI2SChannelConfig_t
38 uint32_t I2SChannelId;
41 void (*GetNextIntensityBitSlices) (
void*arg, I2S_Item_t * data, uint32_t numSlices) =
nullptr;
46 #define I2S_NumSendBufferItems 1024
48 struct TransmitDmaBuffer_t
50 alignas (4) lldesc_t
header;
51 #ifdef USE_I2S_DEBUG_COUNTERS
52 alignas (4) uint32_t
id;
53 alignas (4) uint32_t UsageCounter;
55 alignas (4) I2S_Item_t data[I2S_NumSendBufferItems];
60 OutputI2SChannelConfig_t OutputI2SSlotConfigs[I2S_MAX_NUM_PORTS];
63 #define I2S_NumSendBuffers 4
66 esp_i2s_parallel i2sParallel;
70 virtual ~c_OutputI2S ();
73 void RegisterSlotDevice (OutputI2SChannelConfig_t
config, uint32_t * DataBit, uint32_t * DataBitMask);
74 void RemoveSlotDevice (uint32_t I2SChannelId);
75 void GetStatus (ArduinoJson::JsonObject& jsonStatus);
77 uint32_t GetNumTimeSlicesForTargetTimeNS (uint32_t BitTimeInNanoSec);
78 void SetOutputState (uint32_t I2SChannelId,
bool NewState);
79 void SetGpio (uint32_t I2SChannelId, gpio_num_t NewGpio);
80 void ISR_Handler (
void * _TransmitDmaBuffer);
82#ifdef USE_I2S_DEBUG_COUNTERS
84 struct I2SDebugCounters_t
86 uint32_t DataTaskcounter = 0;
87 uint32_t IntensityBitsSent = 0;
88 uint32_t IntensityBitsSentLastFrame = 0;
89 uint32_t I2SEntriesTransfered = 0;
90 uint32_t I2SXmtFills = 0;
91 uint32_t ISRpaused = 0;
92 uint32_t WriteToBuffer = 0;
93 uint32_t ISR_handler_count = 0;
94 uint32_t ISR_FillBuffer = 0;
95 uint32_t BufferOwnerFlagError = 0;
96 uint32_t ISR_NullBufferPointer = 0;
98 I2SDebugCounters_t I2SDebugCounters;
100#define I2S_DEBUG_INC_COUNTER(p) (++I2SDebugCounters.p)
101#define I2S_DEBUG_COUNTER(p) (I2SDebugCounters.p)
105#define I2S_DEBUG_INC_COUNTER(p)
106#define I2S_DEBUG_COUNTER(p)
uint8_t header[4]
Definition fseq.h:0
config_t config
Definition main.cpp:98
void GetDriverName(String &Name)
Definition main.cpp:121