Liu Song’s Projects


~/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 ---------------------------------