mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-25 03:36:42 +00:00
small refactoring, more robust handling of commands (#21439)
This commit is contained in:
parent
009aa8d481
commit
7f7bcd0ab6
@ -90,7 +90,8 @@ struct AUDIO_I2S_MP3_t {
|
|||||||
uint8_t mic_stop;
|
uint8_t mic_stop;
|
||||||
int8_t mic_error;
|
int8_t mic_error;
|
||||||
bool use_stream = false;
|
bool use_stream = false;
|
||||||
|
bool task_running = false;
|
||||||
|
bool task_has_ended = false;
|
||||||
|
|
||||||
// SHINE
|
// SHINE
|
||||||
uint32_t recdur;
|
uint32_t recdur;
|
||||||
@ -117,7 +118,7 @@ struct AUDIO_I2S_MP3_t {
|
|||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
const char kI2SAudio_Commands[] PROGMEM = "I2S|"
|
const char kI2SAudio_Commands[] PROGMEM = "I2S|"
|
||||||
"Gain|Rec|MGain|Stop|Config"
|
"Gain|Rec|Stop|Config"
|
||||||
#ifdef USE_I2S_MP3
|
#ifdef USE_I2S_MP3
|
||||||
"|Play"
|
"|Play"
|
||||||
#endif
|
#endif
|
||||||
@ -145,7 +146,7 @@ const char kI2SAudio_Commands[] PROGMEM = "I2S|"
|
|||||||
;
|
;
|
||||||
|
|
||||||
void (* const I2SAudio_Command[])(void) PROGMEM = {
|
void (* const I2SAudio_Command[])(void) PROGMEM = {
|
||||||
&CmndI2SGain, &CmndI2SMicRec, &CmndI2SMicGain, &CmndI2SStop, &CmndI2SConfig,
|
&CmndI2SGain, &CmndI2SMicRec, &CmndI2SStop, &CmndI2SConfig,
|
||||||
#ifdef USE_I2S_MP3
|
#ifdef USE_I2S_MP3
|
||||||
&CmndI2SPlay,
|
&CmndI2SPlay,
|
||||||
#endif
|
#endif
|
||||||
@ -776,6 +777,14 @@ void I2sInit(void) {
|
|||||||
//
|
//
|
||||||
// Returns `I2S_OK` if ok to send to output or error code
|
// Returns `I2S_OK` if ok to send to output or error code
|
||||||
int32_t I2SPrepareTx(void) {
|
int32_t I2SPrepareTx(void) {
|
||||||
|
|
||||||
|
if(audio_i2s_mp3.task_running){
|
||||||
|
audio_i2s_mp3.task_running = false;
|
||||||
|
while(!audio_i2s_mp3.task_has_ended){
|
||||||
|
delay(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
AddLog(LOG_LEVEL_DEBUG, "I2S: I2SPrepareTx out=%p", audio_i2s.out);
|
AddLog(LOG_LEVEL_DEBUG, "I2S: I2SPrepareTx out=%p", audio_i2s.out);
|
||||||
if (!audio_i2s.out) { return I2S_ERR_OUTPUT_NOT_CONFIGURED; }
|
if (!audio_i2s.out) { return I2S_ERR_OUTPUT_NOT_CONFIGURED; }
|
||||||
|
|
||||||
@ -831,28 +840,34 @@ void I2sStatusCallback(void *cbData, int code, const char *string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_I2S_MP3
|
#ifdef USE_I2S_MP3
|
||||||
void I2sMp3Task2(void *arg){
|
void I2sMp3WrTask(void *arg){
|
||||||
while (1) {
|
audio_i2s_mp3.task_running = true;
|
||||||
|
audio_i2s_mp3.task_has_ended = false;
|
||||||
|
while (audio_i2s_mp3.task_running) {
|
||||||
if (audio_i2s_mp3.decoder && audio_i2s_mp3.decoder->isRunning()) {
|
if (audio_i2s_mp3.decoder && audio_i2s_mp3.decoder->isRunning()) {
|
||||||
if (!audio_i2s_mp3.decoder->loop()) {
|
if (!audio_i2s_mp3.decoder->loop()) {
|
||||||
I2sStopPlaying();
|
audio_i2s_mp3.task_running = false;
|
||||||
//retryms = millis() + 2000;
|
//retryms = millis() + 2000;
|
||||||
}
|
}
|
||||||
vTaskDelay(pdMS_TO_TICKS(1));
|
vTaskDelay(pdMS_TO_TICKS(1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
audio_i2s_mp3.decoder->stop();
|
||||||
|
audio_i2s_mp3.task_has_ended = true;
|
||||||
|
I2sStopPlaying();
|
||||||
}
|
}
|
||||||
void I2SStopMP3Play(void) {
|
void I2SStopMP3Play(void) {
|
||||||
if (audio_i2s_mp3.mp3_task_handle) {
|
|
||||||
vTaskDelete(audio_i2s_mp3.mp3_task_handle);
|
|
||||||
audio_i2s_mp3.mp3_task_handle = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (audio_i2s_mp3.decoder) {
|
if (audio_i2s_mp3.decoder) {
|
||||||
audio_i2s_mp3.decoder->stop();
|
audio_i2s_mp3.decoder->stop();
|
||||||
delete audio_i2s_mp3.decoder;
|
delete audio_i2s_mp3.decoder;
|
||||||
audio_i2s_mp3.decoder = NULL;
|
audio_i2s_mp3.decoder = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (audio_i2s_mp3.mp3_task_handle) {
|
||||||
|
vTaskDelete(audio_i2s_mp3.mp3_task_handle);
|
||||||
|
audio_i2s_mp3.mp3_task_handle = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif // USE_I2S_MP3
|
#endif // USE_I2S_MP3
|
||||||
|
|
||||||
@ -1016,7 +1031,7 @@ void CmndI2SSay(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CmndI2SI2SRtttl(void) {
|
void CmndI2SI2SRtttl(void) {
|
||||||
if (I2SPrepareTx()) {
|
if (I2SPrepareTx() != I2S_OK) {
|
||||||
ResponseCmndChar("I2S output not configured");
|
ResponseCmndChar("I2S output not configured");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1060,15 +1075,6 @@ void CmndI2SMicRec(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// mic gain in factor not percent
|
|
||||||
void CmndI2SMicGain(void) {
|
|
||||||
// TODO - does nothing for now
|
|
||||||
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 256)) {
|
|
||||||
audio_i2s.Settings->rx.gain = XdrvMailbox.payload;
|
|
||||||
}
|
|
||||||
ResponseCmndNumber(audio_i2s.Settings->rx.gain);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
@ -120,7 +120,7 @@ AudioGeneratorTalkie *talkie = nullptr;
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Cmd_Time(void) {
|
void Cmd_Time(void) {
|
||||||
if (!audio_i2s.out) return;
|
if (I2SPrepareTx() != I2S_OK) return;
|
||||||
sayTime(RtcTime.hour, RtcTime.minute);
|
sayTime(RtcTime.hour, RtcTime.minute);
|
||||||
ResponseCmndDone();
|
ResponseCmndDone();
|
||||||
}
|
}
|
||||||
|
@ -26,8 +26,6 @@ void Rtttl(char *buffer);
|
|||||||
|
|
||||||
void Rtttl(char *buffer) {
|
void Rtttl(char *buffer) {
|
||||||
|
|
||||||
if (!audio_i2s.out) return;
|
|
||||||
|
|
||||||
AudioGeneratorRTTTL *rtttl;
|
AudioGeneratorRTTTL *rtttl;
|
||||||
AudioFileSourcePROGMEM *file = NULL;
|
AudioFileSourcePROGMEM *file = NULL;
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ void Webradio(const char *url) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
AddLog(LOG_LEVEL_DEBUG,PSTR("I2S: will launch webradio task"));
|
AddLog(LOG_LEVEL_DEBUG,PSTR("I2S: will launch webradio task"));
|
||||||
xTaskCreatePinnedToCore(I2sMp3Task2, "MP3-2", 8192, NULL, 3, &audio_i2s_mp3.mp3_task_handle, 1);
|
xTaskCreatePinnedToCore(I2sMp3WrTask, "MP3-WR", 8192, NULL, 3, &audio_i2s_mp3.mp3_task_handle, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_WEBSERVER
|
#ifdef USE_WEBSERVER
|
||||||
|
Loading…
x
Reference in New Issue
Block a user