MCPcopy Create free account
hub / github.com/FastLED/FastLED / Arduino_I2S_Audio

Class Arduino_I2S_Audio

src/platforms/arduino/audio_input.hpp:62–198  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

60#if ARDUINO_I2S_FULLY_SUPPORTED
61
62class Arduino_I2S_Audio : public audio::IInput {
63public:
64 Arduino_I2S_Audio(const audio::ConfigI2S &config)
65 : mConfig(config), mHasError(false), mTotalSamplesRead(0), mInitialized(false) {}
66
67 ~Arduino_I2S_Audio() {
68 stop();
69 }
70
71 void start() FL_NOEXCEPT override {
72 if (mInitialized) {
73 FL_WARN("Arduino I2S is already initialized");
74 return;
75 }
76
77 // Initialize Arduino I2S library using standard API
78 // WARNING: Arduino I2S uses board-specific pins, not the pins from mConfig!
79 // For Arduino Zero: WS=0, CLK=1, SD=9
80 // For MKR boards: WS=3, CLK=2, SD=A6
81 // Pin configuration in mConfig is ignored on Arduino platforms
82 int i2s_mode = convertCommFormatToMode(mConfig.mCommFormat);
83 bool success = I2S.begin(
84 i2s_mode,
85 static_cast<long>(mConfig.mSampleRate),
86 static_cast<int>(mConfig.mBitResolution)
87 );
88
89 if (!success) {
90 mHasError = true;
91 mErrorMessage = "Failed to initialize Arduino I2S";
92 FL_WARN(mErrorMessage.c_str());
93 return;
94 }
95
96 mInitialized = true;
97 mTotalSamplesRead = 0;
98 FL_WARN("Arduino I2S audio input started successfully");
99 }
100
101 void stop() FL_NOEXCEPT override {
102 if (!mInitialized) {
103 return;
104 }
105
106 I2S.end();
107 mInitialized = false;
108 mTotalSamplesRead = 0;
109 FL_WARN("Arduino I2S audio input stopped");
110 }
111
112 bool error(fl::string *msg = nullptr) FL_NOEXCEPT override {
113 if (msg && mHasError) {
114 *msg = mErrorMessage;
115 }
116 return mHasError;
117 }
118
119 audio::Sample read() FL_NOEXCEPT override {

Callers

nothing calls this directly

Calls 6

SampleClass · 0.50
beginMethod · 0.45
c_strMethod · 0.45
endMethod · 0.45
availableMethod · 0.45
readMethod · 0.45

Tested by

no test coverage detected