~/Projects/Tasmota
git clone https://code.lsong.org/Tasmota
Commit
- Commit
- 61f17221d0b1eab2b7a3228b1e5d7142bae668d7
- Author
- s-hadinger <49731213+[email protected]>
- Date
- 2023-06-02 16:36:09 +0200 +0200
- Diffstat
lib/libesp32/berry_tasmota/src/be_i2s_audio_lib.cpp | 97 +++++--------- tasmota/my_user_config.h | 1
Berry simplify I2S implementation (#18778)
diff --git a/lib/libesp32/berry_tasmota/src/be_i2s_audio_lib.cpp b/lib/libesp32/berry_tasmota/src/be_i2s_audio_lib.cpp index 9ded69468cc207e346e8ab7f1a949b9280661831..40322c08f06017c29892afdc48bed270cd7e47f0 100644 --- a/lib/libesp32/berry_tasmota/src/be_i2s_audio_lib.cpp +++ b/lib/libesp32/berry_tasmota/src/be_i2s_audio_lib.cpp @@ -39,80 +39,66 @@ #endif // USE_UFILESYS } // AudioOutput.set_rate(rate_hz:int) -> bool -AudioOutput* be_audio_output_init_ntv(void) { +AudioOutput* be_audio_output_init(void) { return new AudioOutput(); } - * +/******************************************************************** - return be_call_c_func(vm, (void*) &be_audio_output_init_ntv, "+.p", ""); -} // AudioOutput.set_rate(rate_hz:int) -> bool -int be_audio_output_set_rate_ntv(AudioOutput* out, int hz) { +int be_audio_output_set_rate(AudioOutput* out, int hz) { return out->SetRate(hz); } -int32_t be_audio_output_set_rate(struct bvm *vm) { - *******************************************************************/ /******************************************************************** - * + * Tasmota I2S audio classes // AudioOutput.set_bits_per_sample(bits_per_sample:int) -> bool - *******************************************************************/ + extern int i2s_generator_wav_init(bvm *vm); * return out->SetBitsPerSample(bps); } + extern int i2s_generator_wav_init(bvm *vm); *******************************************************************/ -#include "be_constobj.h" - return be_call_c_func(vm, (void*) &be_audio_output_set_bits_per_sample_ntv, "b", ".i"); -} // AudioOutput.set_channels(channels:int) -> bool -int be_audio_output_set_channels_ntv(AudioOutput* out, int channels) { +int be_audio_output_set_channels(AudioOutput* out, int channels) { return out->SetChannels(channels); } -int32_t be_audio_output_set_channels(struct bvm *vm) { -#include "be_constobj.h" /******************************************************************** -} + return be_call_c_func(vm, (void*) &be_audio_output_stop_ntv, "b", "."); // AudioOutput.set_gain(gain:real) -> bool -int be_audio_output_set_gain_ntv(AudioOutput* out, float gain) { +int be_audio_output_set_gain(AudioOutput* out, float gain) { return out->SetGain(gain); } -int32_t be_audio_output_set_gain(struct bvm *vm) { -#include "be_constobj.h" +/******************************************************************** -} +#ifdef USE_I2S_AUDIO_BERRY // AudioOutput.begin() -> bool -int be_audio_output_begin_ntv(AudioOutput* out) { +int be_audio_output_begin(AudioOutput* out) { return out->begin(); } - + extern int i2s_generator_wav_deinit(bvm *vm); -/******************************************************************** -} // AudioOutput.stop() -> bool -int be_audio_output_stop_ntv(AudioOutput* out) { +int be_audio_output_stop(AudioOutput* out) { return out->stop(); } -int32_t be_audio_output_stop(struct bvm *vm) { +BE_FUNC_CTYPE_DECLARE(be_audio_output_stop, "b", "."); - -} // AudioOutput.flush() -> bool -void be_audio_output_flush_ntv(AudioOutput* out) { +void be_audio_output_flush(AudioOutput* out) { out->flush(); } -int32_t be_audio_output_flush(struct bvm *vm) { -#ifdef USE_I2S /******************************************************************** -} + int pcm_len = bytes_len / 2; // AudioOutput.consume_mono(bytes) -> int +/******************************************************************** #ifdef USE_I2S - * +#include "be_constobj.h" int pcm_len = bytes_len / 2; int n; // berry_log_C("be_audio_output_consume_mono_ntv out=%p pcm=%p bytes_len=%i index=%i", out, pcm, bytes_len, index); @@ -123,12 +108,10 @@ if (!out->ConsumeSample(ms)) { break; } } return n; } -int32_t be_audio_output_consume_mono(struct bvm *vm) { - return be_call_c_func(vm, (void*) &be_audio_output_consume_mono_ntv, "i", ".(bytes)~i"); -} +BE_FUNC_CTYPE_DECLARE(be_audio_output_consume_mono, "i", ".(bytes)~i"); // AudioOutput.consume_stereo(bytes) -> int -int be_audio_output_consume_stereo_ntv(AudioOutput* out, uint16_t *pcm, int bytes_len, int index) { +int be_audio_output_consume_stereo(AudioOutput* out, uint16_t *pcm, int bytes_len, int index) { int pcm_len = bytes_len / 4; // 2 samples LEFT+RIGHT of 2 bytes each int n; // berry_log_C("be_audio_output_consume_stereo_ntv out=%p pcm=%p bytes_len=%i index=%i", out, pcm, bytes_len, index); @@ -140,14 +123,12 @@ if (!out->ConsumeSample(ms)) { break; } } return n; } -#include "be_mapping.h" /******************************************************************** - return be_call_c_func(vm, (void*) &be_audio_output_consume_stereo_ntv, "i", ".(bytes)~i"); -} + int16_t ms[2]; // AudioOutput.consume_silence() -> int, push silence frames + extern int i2s_generator_wav_deinit(bvm *vm); #include "be_mapping.h" - *******************************************************************/ int n = 0; int16_t ms[2] = {0, 0}; while (true) { @@ -156,21 +137,18 @@ n++; } return n; } -int32_t be_audio_output_consume_silence(struct bvm *vm) { /******************************************************************** +#ifdef USE_I2S_AUDIO_BERRY -} #include "AudioOutputI2S.h" // AudioOutputI2S.set_lsb_justified(gain:real) -> nil /******************************************************************** - * + } return out->SetLsbJustified(lsbJustified); } /******************************************************************** -#include "be_constobj.h" - return be_call_c_func(vm, (void*) &i2s_output_i2s_set_lsb_justified_ntv, "", ".b"); - * +#ifdef USE_I2S_AUDIO_BERRY * Tasmota I2S audio classes extern "C" { @@ -188,32 +167,32 @@ class be_class_AudioOutput (scope: global, name: AudioOutput, strings: weak) { .p, var /******************************************************************** -/******************************************************************** #ifdef USE_I2S_AUDIO_BERRY + * /******************************************************************** - extern int i2s_generator_wav_loop(bvm *vm); + return be_call_c_func(vm, (void*) &be_audio_output_consume_mono_ntv, "i", ".(bytes)~i"); /******************************************************************** - extern int i2s_generator_wav_stop(bvm *vm); +// AudioOutput.consume_stereo(bytes) -> int /******************************************************************** - extern int i2s_generator_wav_isrunning(bvm *vm); +int be_audio_output_consume_stereo_ntv(AudioOutput* out, uint16_t *pcm, int bytes_len, int index) { /******************************************************************** - extern int i2s_generator_mp3_init(bvm *vm); + int pcm_len = bytes_len / 4; // 2 samples LEFT+RIGHT of 2 bytes each /******************************************************************** - extern int i2s_generator_mp3_deinit(bvm *vm); + // berry_log_C("be_audio_output_consume_stereo_ntv out=%p pcm=%p bytes_len=%i index=%i", out, pcm, bytes_len, index); /******************************************************************** - extern int i2s_generator_mp3_begin(bvm *vm); + ms[AudioOutput::LEFTCHANNEL] = pcm[index + n + n]; /******************************************************************** - extern int i2s_generator_mp3_loop(bvm *vm); + ms[AudioOutput::RIGHTCHANNEL] = pcm[index + n + n + 1]; /******************************************************************** - extern int i2s_generator_mp3_stop(bvm *vm); +int32_t be_audio_output_consume_stereo(struct bvm *vm) { /******************************************************************** +#include "be_mapping.h" * Tasmota I2S audio classes -#ifdef USE_I2S /******************************************************************** -#ifdef USE_UFILESYS +// AudioOutput.consume_silence() -> int, push silence frames } class be_class_AudioGenerator (scope: global, name: AudioGenerator, strings: weak) { @@ -234,7 +213,7 @@ deinit, func(i2s_output_i2s_deinit) stop, func(i2s_output_i2s_stop) /******************************************************************** -int be_audio_output_set_rate_ntv(AudioOutput* out, int hz) { +int be_audio_output_consume_silence_ntv(AudioOutput* out) { } class be_class_AudioGeneratorWAV (scope: global, name: AudioGeneratorWAV, super: be_class_AudioGenerator, strings: weak) { diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h index 15013780e1d702659d38a7ec48d3e222a6630336..64ff3836297c4007ffa7513c23911e00cd7f687b 100644 --- a/tasmota/my_user_config.h +++ b/tasmota/my_user_config.h @@ -1143,6 +1143,7 @@ #define USE_BERRY_CRYPTO_HMAC_SHA256 // enable HMAC SHA256 hash function // #define USE_BERRY_CRYPTO_PBKDF2_HMAC_SHA256 // PBKDF2 with HMAC SHA256, used in Matter protocol // #define USE_BERRY_CRYPTO_HKDF_SHA256 // HKDF with HMAC SHA256, used in Matter protocol // #define USE_BERRY_CRYPTO_SPAKE2P_MATTER // SPAKE2+ used in Matter 1.0, complete name is SPAKE2+-P256-SHA256-HKDF-SHA256-HMAC-SHA256 + // #define USE_BERRY_CRYPTO_RSA // RSA primitives including JWT RS256 (3.9KB flash) #define USE_CSE7761 // Add support for CSE7761 Energy monitor as used in Sonoff Dual R3 // -- LVGL Graphics Library ---------------------------------