Virtual fixes.
Pins.
This commit is contained in:
parent
562a206508
commit
bd45c67528
@ -7,6 +7,10 @@
|
|||||||
#error This audio reactive usermod does not support the ESP8266.
|
#error This audio reactive usermod does not support the ESP8266.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//The SCL and SDA pins are defined here.
|
||||||
|
#define HW_PIN_SCL 22
|
||||||
|
#define HW_PIN_SDA 21
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Usermods allow you to add own functionality to WLED more easily
|
* Usermods allow you to add own functionality to WLED more easily
|
||||||
* See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality
|
* See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality
|
||||||
@ -334,8 +338,8 @@ class AudioReactive : public Usermod {
|
|||||||
#else
|
#else
|
||||||
int8_t audioPin = AUDIOPIN;
|
int8_t audioPin = AUDIOPIN;
|
||||||
#endif
|
#endif
|
||||||
#ifndef DMENABLED // aka DOUT
|
#ifndef DMENABLED // I2S mic type
|
||||||
uint8_t dmType = 0;
|
uint8_t dmType = 0; // none/disabled
|
||||||
#else
|
#else
|
||||||
uint8_t dmType = DMENABLED;
|
uint8_t dmType = DMENABLED;
|
||||||
#endif
|
#endif
|
||||||
@ -355,17 +359,17 @@ class AudioReactive : public Usermod {
|
|||||||
int8_t i2sckPin = I2S_CKPIN;
|
int8_t i2sckPin = I2S_CKPIN;
|
||||||
#endif
|
#endif
|
||||||
#ifndef ES7243_SDAPIN
|
#ifndef ES7243_SDAPIN
|
||||||
int8_t sdaPin = 18;
|
int8_t sdaPin = -1;
|
||||||
#else
|
#else
|
||||||
int8_t sdaPin = ES7243_SDAPIN;
|
int8_t sdaPin = ES7243_SDAPIN;
|
||||||
#endif
|
#endif
|
||||||
#ifndef ES7243_SDAPIN
|
#ifndef ES7243_SDAPIN
|
||||||
int8_t sclPin = 23;
|
int8_t sclPin = -1;
|
||||||
#else
|
#else
|
||||||
int8_t sclPin = ES7243_SCLPIN;
|
int8_t sclPin = ES7243_SCLPIN;
|
||||||
#endif
|
#endif
|
||||||
#ifndef MCLK_PIN
|
#ifndef MCLK_PIN
|
||||||
int8_t mclkPin = 0;
|
int8_t mclkPin = -1;
|
||||||
#else
|
#else
|
||||||
int8_t mclkPin = MLCK_PIN;
|
int8_t mclkPin = MLCK_PIN;
|
||||||
#endif
|
#endif
|
||||||
@ -1118,6 +1122,9 @@ class AudioReactive : public Usermod {
|
|||||||
pinArray.add(i2ssdPin);
|
pinArray.add(i2ssdPin);
|
||||||
pinArray.add(i2swsPin);
|
pinArray.add(i2swsPin);
|
||||||
pinArray.add(i2sckPin);
|
pinArray.add(i2sckPin);
|
||||||
|
pinArray.add(mclkPin);
|
||||||
|
pinArray.add(sdaPin);
|
||||||
|
pinArray.add(sclPin);
|
||||||
|
|
||||||
JsonObject cfg = top.createNestedObject("cfg");
|
JsonObject cfg = top.createNestedObject("cfg");
|
||||||
cfg[F("squelch")] = soundSquelch;
|
cfg[F("squelch")] = soundSquelch;
|
||||||
@ -1158,6 +1165,9 @@ class AudioReactive : public Usermod {
|
|||||||
configComplete &= getJsonValue(top[FPSTR(_digitalmic)]["pin"][0], i2ssdPin);
|
configComplete &= getJsonValue(top[FPSTR(_digitalmic)]["pin"][0], i2ssdPin);
|
||||||
configComplete &= getJsonValue(top[FPSTR(_digitalmic)]["pin"][1], i2swsPin);
|
configComplete &= getJsonValue(top[FPSTR(_digitalmic)]["pin"][1], i2swsPin);
|
||||||
configComplete &= getJsonValue(top[FPSTR(_digitalmic)]["pin"][2], i2sckPin);
|
configComplete &= getJsonValue(top[FPSTR(_digitalmic)]["pin"][2], i2sckPin);
|
||||||
|
configComplete &= getJsonValue(top[FPSTR(_digitalmic)]["pin"][3], mclkPin);
|
||||||
|
configComplete &= getJsonValue(top[FPSTR(_digitalmic)]["pin"][4], sdaPin);
|
||||||
|
configComplete &= getJsonValue(top[FPSTR(_digitalmic)]["pin"][5], sclPin);
|
||||||
|
|
||||||
configComplete &= getJsonValue(top["cfg"][F("squelch")], soundSquelch);
|
configComplete &= getJsonValue(top["cfg"][F("squelch")], soundSquelch);
|
||||||
configComplete &= getJsonValue(top["cfg"][F("gain")], sampleGain);
|
configComplete &= getJsonValue(top["cfg"][F("gain")], sampleGain);
|
||||||
|
@ -38,7 +38,7 @@ class AudioSource {
|
|||||||
This function needs to take care of anything that needs to be done
|
This function needs to take care of anything that needs to be done
|
||||||
before samples can be obtained from the microphone.
|
before samples can be obtained from the microphone.
|
||||||
*/
|
*/
|
||||||
virtual void initialize(int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE) {};
|
virtual void initialize(int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE) = 0;
|
||||||
|
|
||||||
/* Deinitialize
|
/* Deinitialize
|
||||||
Release all resources and deactivate any functionality that is used
|
Release all resources and deactivate any functionality that is used
|
||||||
@ -95,17 +95,17 @@ class I2SSource : public AudioSource {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void initialize(int8_t i2swsPin = I2S_PIN_NO_CHANGE, int8_t i2ssdPin = I2S_PIN_NO_CHANGE, int8_t i2sckPin = I2S_PIN_NO_CHANGE) {
|
virtual void initialize(int8_t i2swsPin = I2S_PIN_NO_CHANGE, int8_t i2ssdPin = I2S_PIN_NO_CHANGE, int8_t i2sckPin = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE) {
|
||||||
if (i2swsPin != I2S_PIN_NO_CHANGE && i2ssdPin != I2S_PIN_NO_CHANGE) {
|
if (i2swsPin != I2S_PIN_NO_CHANGE && i2ssdPin != I2S_PIN_NO_CHANGE) {
|
||||||
if (!pinManager.allocatePin(i2swsPin, true, PinOwner::DigitalMic) ||
|
if (!pinManager.allocatePin(i2swsPin, true, PinOwner::UM_Audioreactive) ||
|
||||||
!pinManager.allocatePin(i2ssdPin, true, PinOwner::DigitalMic)) {
|
!pinManager.allocatePin(i2ssdPin, true, PinOwner::UM_Audioreactive)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// i2ssckPin needs special treatment, since it might be unused on PDM mics
|
// i2ssckPin needs special treatment, since it might be unused on PDM mics
|
||||||
if (i2sckPin != I2S_PIN_NO_CHANGE) {
|
if (i2sckPin != I2S_PIN_NO_CHANGE) {
|
||||||
if (!pinManager.allocatePin(i2sckPin, true, PinOwner::DigitalMic)) return;
|
if (!pinManager.allocatePin(i2sckPin, true, PinOwner::UM_Audioreactive)) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_pinConfig = {
|
_pinConfig = {
|
||||||
@ -130,16 +130,16 @@ class I2SSource : public AudioSource {
|
|||||||
_initialized = true;
|
_initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void deinitialize() {
|
virtual void deinitialize() {
|
||||||
_initialized = false;
|
_initialized = false;
|
||||||
esp_err_t err = i2s_driver_uninstall(I2S_NUM_0);
|
esp_err_t err = i2s_driver_uninstall(I2S_NUM_0);
|
||||||
if (err != ESP_OK) {
|
if (err != ESP_OK) {
|
||||||
DEBUGSR_PRINTF("Failed to uninstall i2s driver: %d\n", err);
|
DEBUGSR_PRINTF("Failed to uninstall i2s driver: %d\n", err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_pinConfig.ws_io_num != I2S_PIN_NO_CHANGE) pinManager.deallocatePin(_pinConfig.ws_io_num, PinOwner::DigitalMic);
|
if (_pinConfig.ws_io_num != I2S_PIN_NO_CHANGE) pinManager.deallocatePin(_pinConfig.ws_io_num, PinOwner::UM_Audioreactive);
|
||||||
if (_pinConfig.data_in_num != I2S_PIN_NO_CHANGE) pinManager.deallocatePin(_pinConfig.data_in_num, PinOwner::DigitalMic);
|
if (_pinConfig.data_in_num != I2S_PIN_NO_CHANGE) pinManager.deallocatePin(_pinConfig.data_in_num, PinOwner::UM_Audioreactive);
|
||||||
if (_pinConfig.bck_io_num != I2S_PIN_NO_CHANGE) pinManager.deallocatePin(_pinConfig.bck_io_num, PinOwner::DigitalMic);
|
if (_pinConfig.bck_io_num != I2S_PIN_NO_CHANGE) pinManager.deallocatePin(_pinConfig.bck_io_num, PinOwner::UM_Audioreactive);
|
||||||
}
|
}
|
||||||
|
|
||||||
void getSamples(double *buffer, uint16_t num_samples) {
|
void getSamples(double *buffer, uint16_t num_samples) {
|
||||||
@ -207,9 +207,9 @@ class I2SSourceWithMasterClock : public I2SSource {
|
|||||||
I2SSource(sampleRate, blockSize, lshift, mask) {
|
I2SSource(sampleRate, blockSize, lshift, mask) {
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual void initialize(int8_t mclkPin, int8_t i2swsPin = I2S_PIN_NO_CHANGE, int8_t i2ssdPin = I2S_PIN_NO_CHANGE, int8_t i2sckPin = I2S_PIN_NO_CHANGE) {
|
virtual void initialize(int8_t mclkPin, int8_t i2swsPin = I2S_PIN_NO_CHANGE, int8_t i2ssdPin = I2S_PIN_NO_CHANGE, int8_t i2sckPin = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE) {
|
||||||
// Reserve the master clock pin
|
// Reserve the master clock pin
|
||||||
if(!pinManager.allocatePin(mclkPin, true, PinOwner::DigitalMic)) {
|
if(!pinManager.allocatePin(mclkPin, true, PinOwner::UM_Audioreactive)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_mclkPin = mclkPin;
|
_mclkPin = mclkPin;
|
||||||
@ -219,7 +219,7 @@ class I2SSourceWithMasterClock : public I2SSource {
|
|||||||
|
|
||||||
virtual void deinitialize() {
|
virtual void deinitialize() {
|
||||||
// Release the master clock pin
|
// Release the master clock pin
|
||||||
pinManager.deallocatePin(_mclkPin, PinOwner::DigitalMic);
|
pinManager.deallocatePin(_mclkPin, PinOwner::UM_Audioreactive);
|
||||||
I2SSource::deinitialize();
|
I2SSource::deinitialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -284,8 +284,8 @@ public:
|
|||||||
|
|
||||||
void initialize(int8_t sdaPin, int8_t sclPin, int8_t i2swsPin = I2S_PIN_NO_CHANGE, int8_t i2ssdPin = I2S_PIN_NO_CHANGE, int8_t i2sckPin = I2S_PIN_NO_CHANGE) {
|
void initialize(int8_t sdaPin, int8_t sclPin, int8_t i2swsPin = I2S_PIN_NO_CHANGE, int8_t i2ssdPin = I2S_PIN_NO_CHANGE, int8_t i2sckPin = I2S_PIN_NO_CHANGE) {
|
||||||
// Reserve SDA and SCL pins of the I2C interface
|
// Reserve SDA and SCL pins of the I2C interface
|
||||||
if (!pinManager.allocatePin(sdaPin, true, PinOwner::DigitalMic) ||
|
if (!pinManager.allocatePin(sdaPin, true, PinOwner::HW_I2C) ||
|
||||||
!pinManager.allocatePin(sclPin, true, PinOwner::DigitalMic)) {
|
!pinManager.allocatePin(sclPin, true, PinOwner::HW_I2C)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,13 +294,13 @@ public:
|
|||||||
|
|
||||||
// First route mclk, then configure ADC over I2C, then configure I2S
|
// First route mclk, then configure ADC over I2C, then configure I2S
|
||||||
_es7243InitAdc();
|
_es7243InitAdc();
|
||||||
I2SSource::initialize();
|
I2SSource::initialize(i2swsPin, i2ssdPin, i2sckPin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void deinitialize() {
|
void deinitialize() {
|
||||||
// Release SDA and SCL pins of the I2C interface
|
// Release SDA and SCL pins of the I2C interface
|
||||||
pinManager.deallocatePin(pin_ES7243_SDA, PinOwner::DigitalMic);
|
pinManager.deallocatePin(pin_ES7243_SDA, PinOwner::HW_I2C);
|
||||||
pinManager.deallocatePin(pin_ES7243_SCL, PinOwner::DigitalMic);
|
pinManager.deallocatePin(pin_ES7243_SCL, PinOwner::HW_I2C);
|
||||||
I2SSource::deinitialize();
|
I2SSource::deinitialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -330,8 +330,8 @@ class I2SAdcSource : public I2SSource {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void initialize(int8_t audioPin) {
|
void initialize(int8_t audioPin, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE) {
|
||||||
if(!pinManager.allocatePin(audioPin, false, PinOwner::AnalogMic)) {
|
if(!pinManager.allocatePin(audioPin, false, PinOwner::UM_Audioreactive)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_audioPin = audioPin;
|
_audioPin = audioPin;
|
||||||
@ -401,7 +401,7 @@ class I2SAdcSource : public I2SSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void deinitialize() {
|
void deinitialize() {
|
||||||
pinManager.deallocatePin(_audioPin, PinOwner::AnalogMic);
|
pinManager.deallocatePin(_audioPin, PinOwner::UM_Audioreactive);
|
||||||
_initialized = false;
|
_initialized = false;
|
||||||
esp_err_t err;
|
esp_err_t err;
|
||||||
#if defined(ARDUINO_ARCH_ESP32)
|
#if defined(ARDUINO_ARCH_ESP32)
|
||||||
@ -433,7 +433,7 @@ class SPH0654 : public I2SSource {
|
|||||||
SPH0654(int sampleRate, int blockSize, int16_t lshift, uint32_t mask) :
|
SPH0654(int sampleRate, int blockSize, int16_t lshift, uint32_t mask) :
|
||||||
I2SSource(sampleRate, blockSize, lshift, mask){}
|
I2SSource(sampleRate, blockSize, lshift, mask){}
|
||||||
|
|
||||||
void initialize(uint8_t i2swsPin, uint8_t i2ssdPin, uint8_t i2sckPin) {
|
void initialize(uint8_t i2swsPin, uint8_t i2ssdPin, uint8_t i2sckPin, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE) {
|
||||||
I2SSource::initialize(i2swsPin, i2ssdPin, i2sckPin);
|
I2SSource::initialize(i2swsPin, i2ssdPin, i2sckPin);
|
||||||
REG_SET_BIT(I2S_TIMING_REG(I2S_NUM_0), BIT(9));
|
REG_SET_BIT(I2S_TIMING_REG(I2S_NUM_0), BIT(9));
|
||||||
REG_SET_BIT(I2S_CONF_REG(I2S_NUM_0), I2S_RX_MSB_SHIFT);
|
REG_SET_BIT(I2S_CONF_REG(I2S_NUM_0), I2S_RX_MSB_SHIFT);
|
||||||
@ -452,7 +452,7 @@ class I2SPdmSource : public I2SSource {
|
|||||||
_config.mode = i2s_mode_t(I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_PDM); // Change mode to pdm
|
_config.mode = i2s_mode_t(I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_PDM); // Change mode to pdm
|
||||||
}
|
}
|
||||||
|
|
||||||
void initialize(uint8_t i2swsPin, uint8_t i2ssdPin) {
|
void initialize(uint8_t i2swsPin, uint8_t i2ssdPin, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE, int8_t = I2S_PIN_NO_CHANGE) {
|
||||||
I2SSource::initialize(i2swsPin, i2ssdPin, I2S_PIN_NO_CHANGE);
|
I2SSource::initialize(i2swsPin, i2ssdPin, I2S_PIN_NO_CHANGE);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user