From f5b093d03497e0bbbf10aa6b82cc9854efd00912 Mon Sep 17 00:00:00 2001 From: xysun Date: Wed, 13 Sep 2023 17:21:10 +0800 Subject: [PATCH 1/3] feat(wn): Add get_vol_gain for wakenet5 --- lib/esp32/libesp_audio_front_end.a | Bin 286048 -> 286048 bytes lib/esp32/libesp_audio_processor.a | Bin 2350530 -> 2350530 bytes lib/esp32/libmultinet.a | Bin 759084 -> 759084 bytes lib/esp32/libwakenet.a | Bin 124208 -> 125540 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/esp32/libesp_audio_front_end.a b/lib/esp32/libesp_audio_front_end.a index ea34fdfd70a871daa678d9045cce56dc0401eb13..6624c133f30774be43db89aaca7f2c1b7b2648fa 100644 GIT binary patch delta 68 zcmaE`OYp%i!40m;g639+7FNcF3_uW^TA*NP+#IId9;VE=JxrNtvJ<9s`>#}{?Y~l) H)4l@$s1_7E delta 68 zcmaE`OYp%i!40m;f@W66CRRq43_uW^TA*NP)EuVV9;VE=JxrNtvJ<9s`>#}{?Y~l) H)4l@$sP7a( diff --git a/lib/esp32/libesp_audio_processor.a b/lib/esp32/libesp_audio_processor.a index 363df1891f64fc091f8179108772ed66e311db44..3fed6b793a6b349dc2218ec15a0b15273eb6ffc1 100644 GIT binary patch delta 170 zcmWN=ISztA7=Tenal;i^6j$H|Kq7=|a0YvNN(!1uyow!#-CV_6{FUEJp839&;ina+ zsM4~^iV^Bp6Qy~lrPrc3=7bifoN>+tm$bR!nj3DpF7M2#)7Pc1l7LF~PQ`-g2tqd)!j13upAUL%^!O*yUSvw~X Mb8TPN&fUff06?!2*Z=?k delta 59 zcmZ3pN^i|7y@nRX7N!>F7M2#)7Pc1l7LF~PQ`-g2tc*>pj4T*{AUL%^!O*CESvw~X Mb8TPN&fUff06^dp+5i9m diff --git a/lib/esp32/libwakenet.a b/lib/esp32/libwakenet.a index 7da3d76ecbbfb86c91640bdc7aad9642b72cb4ec..5d4bc933fec429ae20acd64603cc1df66d61b557 100644 GIT binary patch delta 37049 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 RgZo~=e`Kj?eAr|Z{U4cfL4p7P delta 35708 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ༀQ2b zSFnl7;9o{1*|##?zSkLX9pIfxUJ!dDWmz_W!}#e89Dg|>%1R+*i7y~IWeaSZRyk$7 z@VtZGm5oS5xZ{LVb}hsl)O&eijx#t6IPN$OL4UOkjtlyy0G#scv7r@fVFyJ{qmjJ- zGLO|X8&^G;bw8tcjqUT7$2xFEG9HD$3cj&zipR#_sfDu=;U$!z0I)EN11s+dUxUxR zg=QYl| z(D)s^Q#J~l6qK$D;!$Is@>ltiM!Um3BSuO@M?{!5PT2zVf1Bdkiz3d6{Es4U?sD41L9$h8YmX5HXi{9??Gc1sJMlxA2(A>=*aUqv#vhy6L# z?O`XEwD2OEL~&%+WN?gr04;bQyd8OQKEN`%%E=|5imS27Wc&XcY1l*7+M{_8WjFv|ISWyowK%OYBCydbIjnJ_ zQ@PZGl^(FK+o-i3Z17;SKsnEP>Y!)XR&DeF=l|v=`w$Cp4)ZbV9z;_%wlkZXI?RUtq66oSJgMKpQ)1FBrh5k!E<~mpEE47{x<38L?Nxm-Dc4Otga> z7_Lzf&L}gZrc4tcGwZf{c|^?&TgiKo{0{iW_KETgTgks8{1#<4s~Mx2)z1ij4`0cw z>{YrU;1o{E@_vAeGv_F8hT8|4h;>@Pn{|F@w`E@)-fk1ezqV+nX7Fx4!@Dw{g$VN} z_y1>=-bCw}K{ZuEL%?cF&+4GoY~?4A_%V2=(L+gyzN|(YA!v^m?Wnn|4b@+V>M^T+ z3d4-)U87E!S$CUfymxzQe-A0|2%JWPsokwc+cnO1u@&srirRcEoy(YZ6QNDtt`0)< z?fP*>L*ITNTJ=e2XE^QlLWSNj8KyyMR@k3fkUBCi!=&S=`Enh9YR7P=@Fn5PFf9Aa zop87-H1_sNF%3)v;>tRm>lj28#&1nE1<`szH$jjIe0h6&!bnjYJidYvEh~nMhFuwI zQ1Tmro3Q>Z%MA)e^QEhn<6(UM9X+91=89WpF{0cHV6YCGdL#2FtOz4nW&*Ji@lJ+m z32Yc2lxFIfMzJAT1+y{O*Var5+C&O!Yb&y*p_;;HV4!U##ndXz-6EjFx!K}jtt*N3 z%x4i=#&%}b8PW$ zq7RRoGmN{T@B!yvX4r!y9%V#ucS}tKX}cT2-GQ12(m^+ZyF;=1IdvlGRxq5qL$U6U z=M

fSJhM(e{b4*b$26K>(BJT6yk&3&z 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⋙f2xrB7DGS2vVV>>&7uh}m3w^BZ z>o2m+H4;_U_H`H8-UHjVgTOB9>)F2dA`2s6VS=@A*F_eR7U20UQnKc(rDx&5MHcqJ zLJMnQ??o2gh6S$-ZIlJOBphL{g-*l5hE;~CEmLNAEW82>`8LxV zE{Zu>6LY`BAenXi2Zw87r%q)>??DXyYO0$5dmKyDhq?BEXB^MAZ5LTsnSy8V974pg zM0A@kvUmDM)DJh5wATyXv-h-XkB{_RH@^apGwna;&N+5bUJv0}ZKv3&p;=vCzQ}rE z48t_)LhF6uJ?kefvTy=Z!nOPl+g<*Ck%a>f;EY7!X@L_A&%(KjEG$6(*+&b}e_mvv z-v-AyDHi%G3tT$qwF<;e)7H32z`V?JUfeGi*=x8FuLT#oB^m%_uS9l9J${+DCn=5m zaS(p$;;|7&gYb8rT0S_B_-m2mdGFHzi$;mi#wdT{kCc;dQu=u0N6{C@$a(7<{C From 2b52031029f24fa0e4e26d5864d46200dbdaee15 Mon Sep 17 00:00:00 2001 From: xysun Date: Wed, 13 Sep 2023 17:43:35 +0800 Subject: [PATCH 2/3] feat(esp32s3): Support C++ --- include/esp32s3/dl_lib.h | 7 +++++++ include/esp32s3/dl_lib_coefgetter_if.h | 10 +++++++++- include/esp32s3/dl_lib_conv_queue.h | 11 +++++++++-- include/esp32s3/dl_lib_convq8_queue.h | 11 ++++++++++- include/esp32s3/dl_lib_convq_queue.h | 9 ++++++++- include/esp32s3/dl_lib_matrix.h | 8 ++++++++ include/esp32s3/dl_lib_matrixq.h | 9 +++++++++ include/esp32s3/dl_lib_matrixq8.h | 11 ++++++++++- include/esp32s3/esp_afe_config.h | 9 ++++++++- include/esp32s3/esp_afe_sr_iface.h | 8 ++++++++ include/esp32s3/esp_afe_sr_models.h | 8 ++++++++ include/esp32s3/esp_agc.h | 9 +++++++++ include/esp32s3/esp_mase.h | 14 +++++++++++++- include/esp32s3/esp_mn_iface.h | 7 +++++++ include/esp32s3/esp_mn_models.h | 7 ++++++- include/esp32s3/esp_wn_iface.h | 8 ++++++++ include/esp32s3/esp_wn_models.h | 7 +++++++ 17 files changed, 144 insertions(+), 9 deletions(-) diff --git a/include/esp32s3/dl_lib.h b/include/esp32s3/dl_lib.h index d7b6d8f..63ba6da 100644 --- a/include/esp32s3/dl_lib.h +++ b/include/esp32s3/dl_lib.h @@ -32,6 +32,10 @@ #include "esp32s3/rom/cache.h" #endif +#ifdef __cplusplus +extern "C" { +#endif + typedef int padding_state; // /** @@ -407,5 +411,8 @@ dl_matrix2d_t *dl_basic_conv_layer(const dl_matrix2d_t *in, const dl_matrix2d_t dl_matrix2d_t *dl_basic_conv_layer_quantised_weight(const dl_matrix2d_t *in, const dl_matrix2dq_t *weight, const dl_matrix2d_t *bias, int filter_width, int filter_height, const int out_channels, const int stride_x, const int stride_y, padding_state pad, const dl_matrix2d_t* out); +#ifdef __cplusplus +} #endif +#endif \ No newline at end of file diff --git a/include/esp32s3/dl_lib_coefgetter_if.h b/include/esp32s3/dl_lib_coefgetter_if.h index f1a9373..a21de8d 100644 --- a/include/esp32s3/dl_lib_coefgetter_if.h +++ b/include/esp32s3/dl_lib_coefgetter_if.h @@ -19,6 +19,10 @@ #include "dl_lib_matrixq8.h" #include "cJSON.h" +#ifdef __cplusplus +extern "C" { +#endif + //Set this if the coefficient requested is a batch-normalization popvar matrix which needs to be preprocessed by //dl_batch_normalize_get_sqrtvar first. #define COEF_GETTER_HINT_BNVAR (1<<0) @@ -69,4 +73,8 @@ typedef struct { const cJSON* (*getter_config)(void *arg); } model_coeff_getter_t; -#endif \ No newline at end of file +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/esp32s3/dl_lib_conv_queue.h b/include/esp32s3/dl_lib_conv_queue.h index 280d21d..7cb9bf9 100644 --- a/include/esp32s3/dl_lib_conv_queue.h +++ b/include/esp32s3/dl_lib_conv_queue.h @@ -16,8 +16,11 @@ #include "dl_lib_matrix.h" -typedef float fptp_t; +#ifdef __cplusplus +extern "C" { +#endif +typedef float fptp_t; //Flags for matrices // #define DL_MF_FOREIGNDATA (0) /*< Matrix *item data actually points to another matrix and should not be freed */ @@ -170,4 +173,8 @@ fptp_t *dl_dilation_layer(dl_conv_queue_t *in, dl_conv_queue_t *out, int rate, i void test_atrous_conv(int size, int rate, int in_channel, int out_channel); -#endif \ No newline at end of file +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/esp32s3/dl_lib_convq8_queue.h b/include/esp32s3/dl_lib_convq8_queue.h index c37803c..0e53902 100644 --- a/include/esp32s3/dl_lib_convq8_queue.h +++ b/include/esp32s3/dl_lib_convq8_queue.h @@ -20,6 +20,10 @@ #include "dl_lib_conv_queue.h" #include "dl_lib_convq_queue.h" +#ifdef __cplusplus +extern "C" { +#endif + //[nch, n, c] typedef struct { int n; /*< the length of queue */ @@ -290,4 +294,9 @@ void print_convq8(dl_convq8_queue_t *cq, int offset); void print_convq(dl_convq_queue_t *cq, int offset); void lstmq8_free(void); -#endif \ No newline at end of file + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/esp32s3/dl_lib_convq_queue.h b/include/esp32s3/dl_lib_convq_queue.h index 0e8ab47..c71d5ca 100644 --- a/include/esp32s3/dl_lib_convq_queue.h +++ b/include/esp32s3/dl_lib_convq_queue.h @@ -18,6 +18,9 @@ #include "dl_lib_conv_queue.h" #include "dl_lib.h" +#ifdef __cplusplus +extern "C" { +#endif //fixed-point convolution FIFO queue. //[nch, n, c] @@ -372,4 +375,8 @@ void test_lstm_convq(int size, int in_dim, int lstm_cell); void dl_nn_tanh_i162(dl_convq_queue_t **cqm, int offset, int nch); void dl_copy_queue_item_by_qmf(dl_convq_queue_t *cq, fptp_t* item, int m_bit, int f_bit, int offset, int ch); void dl_convq_queue_mc_bzero(dl_convq_queue_t **cqm, int nch); -#endif \ No newline at end of file +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/esp32s3/dl_lib_matrix.h b/include/esp32s3/dl_lib_matrix.h index 1a5e2ee..b5fae74 100644 --- a/include/esp32s3/dl_lib_matrix.h +++ b/include/esp32s3/dl_lib_matrix.h @@ -21,6 +21,10 @@ #include "esp_system.h" #endif +#ifdef __cplusplus +extern "C" { +#endif + // #ifdef CONFIG_IDF_TARGET_ESP32S3 // #include "dl_tie728_bzero.h" // #endif @@ -249,5 +253,9 @@ inline static void dl_matrix_set(dl_matrix2d_t *m, const int x, const int y, fpt void matrix_get_range(const dl_matrix2d_t *m, fptp_t *rmin, fptp_t *rmax); +#ifdef __cplusplus +} +#endif + #endif diff --git a/include/esp32s3/dl_lib_matrixq.h b/include/esp32s3/dl_lib_matrixq.h index 5f0474a..8ad397b 100644 --- a/include/esp32s3/dl_lib_matrixq.h +++ b/include/esp32s3/dl_lib_matrixq.h @@ -17,6 +17,10 @@ #include #include "dl_lib_matrix.h" +#ifdef __cplusplus +extern "C" { +#endif + typedef int16_t qtp_t; //Quantized matrix. Uses fixed numbers and has the storage for the rows/columns inverted @@ -375,4 +379,9 @@ fptp_t dl_matrixq_get(const dl_matrix2dq_t *m, const int x, const int y); */ void dl_matrixq_set(dl_matrix2dq_t *m, const int x, const int y, fptp_t val); + +#ifdef __cplusplus +} +#endif + #endif diff --git a/include/esp32s3/dl_lib_matrixq8.h b/include/esp32s3/dl_lib_matrixq8.h index 579b1c0..377df7c 100644 --- a/include/esp32s3/dl_lib_matrixq8.h +++ b/include/esp32s3/dl_lib_matrixq8.h @@ -19,6 +19,10 @@ #include "dl_lib.h" #include "dl_lib_matrixq.h" +#ifdef __cplusplus +extern "C" { +#endif + typedef int8_t q8tp_t; typedef struct { @@ -68,4 +72,9 @@ dl_matrix2dq8_t *dl_matrixq8_copy_to_psram(const dl_matrix2dq8_t *m); */ dl_matrix2dq8_t *dl_matrixq8_from_matrix2d(const dl_matrix2d_t *m, dl_matrix2dq8_t *out); -#endif \ No newline at end of file +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/include/esp32s3/esp_afe_config.h b/include/esp32s3/esp_afe_config.h index 1291b5c..ee43c0c 100644 --- a/include/esp32s3/esp_afe_config.h +++ b/include/esp32s3/esp_afe_config.h @@ -4,6 +4,10 @@ #include "esp_wn_models.h" #include "esp_vad.h" +#ifdef __cplusplus +extern "C" { +#endif + //AFE: Audio Front-End //SR: Speech Recognition //afe_sr/AFE_SR: the audio front-end for speech recognition @@ -135,4 +139,7 @@ typedef struct { .debug_init = false, \ .debug_hook = {{AFE_DEBUG_HOOK_MASE_TASK_IN, NULL}, {AFE_DEBUG_HOOK_FETCH_TASK_IN, NULL}}, \ } -#endif \ No newline at end of file + +#ifdef __cplusplus +} +#endif diff --git a/include/esp32s3/esp_afe_sr_iface.h b/include/esp32s3/esp_afe_sr_iface.h index d45c118..daf5b92 100644 --- a/include/esp32s3/esp_afe_sr_iface.h +++ b/include/esp32s3/esp_afe_sr_iface.h @@ -2,6 +2,10 @@ #include "stdint.h" #include "esp_afe_config.h" +#ifdef __cplusplus +extern "C" { +#endif + //AFE: Audio Front-End //SR: Speech Recognition //afe_sr/AFE_SR: the audio front-end for speech recognition @@ -200,3 +204,7 @@ typedef struct { esp_afe_sr_iface_op_enable_se_t enable_se; esp_afe_sr_iface_op_destroy_t destroy; } esp_afe_sr_iface_t; + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/include/esp32s3/esp_afe_sr_models.h b/include/esp32s3/esp_afe_sr_models.h index 43a0d08..feaad43 100644 --- a/include/esp32s3/esp_afe_sr_models.h +++ b/include/esp32s3/esp_afe_sr_models.h @@ -1,5 +1,9 @@ #pragma once +#ifdef __cplusplus +extern "C" { +#endif + #if defined CONFIG_USE_AFE #include "esp_afe_sr_iface.h" @@ -24,4 +28,8 @@ extern const esp_afe_sr_iface_t esp_afe_vc_v1; #define ESP_AFE_SR_HANDLE esp_afe_sr_v1 #define ESP_AFE_VC_HANDLE esp_afe_vc_v1 +#endif + +#ifdef __cplusplus +} #endif \ No newline at end of file diff --git a/include/esp32s3/esp_agc.h b/include/esp32s3/esp_agc.h index 37116eb..76d3015 100644 --- a/include/esp32s3/esp_agc.h +++ b/include/esp32s3/esp_agc.h @@ -14,6 +14,10 @@ #ifndef _ESP_AGC_H_ #define _ESP_AGC_H_ +#ifdef __cplusplus +extern "C" { +#endif + ////all positive value is valid, negective is error typedef enum { ESP_AGC_SUCCESS = 0, ////success @@ -28,4 +32,9 @@ void set_agc_config(void *agc_handle, int gain_dB, int limiter_enable, int targe int esp_agc_process(void *agc_handle, short *in_pcm, short *out_pcm, int frame_size, int sample_rate); void esp_agc_close(void *agc_handle); + +#ifdef __cplusplus +} +#endif + #endif // _ESP_AGC_H_ diff --git a/include/esp32s3/esp_mase.h b/include/esp32s3/esp_mase.h index 0b12e82..0999762 100644 --- a/include/esp32s3/esp_mase.h +++ b/include/esp32s3/esp_mase.h @@ -11,6 +11,12 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License +#ifndef _ESP_MASE_H_ +#define _ESP_MASE_H_ + +#ifdef __cplusplus +extern "C" { +#endif #define MASE_SAMPLE_RATE 16000 // Supports 16kHz only #define MASE_FRAME_SIZE 16 // Supports 16ms only @@ -78,4 +84,10 @@ void mase_process(mase_handle_t st, int16_t *in, int16_t *dsp_out); * @return None * */ -void mase_destory(mase_handle_t st); \ No newline at end of file +void mase_destory(mase_handle_t st); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/esp32s3/esp_mn_iface.h b/include/esp32s3/esp_mn_iface.h index faccea1..9297e5a 100644 --- a/include/esp32s3/esp_mn_iface.h +++ b/include/esp32s3/esp_mn_iface.h @@ -1,6 +1,9 @@ #pragma once #include "stdint.h" #include "esp_wn_iface.h" +#ifdef __cplusplus +extern "C" { +#endif #define ESP_MN_RESULT_MAX_NUM 5 #define ESP_MN_MAX_PHRASE_NUM 400 @@ -213,3 +216,7 @@ typedef struct { esp_mn_iface_op_print_active_speech_commands print_active_speech_commands; esp_mn_iface_op_check_speech_command check_speech_command; } esp_mn_iface_t; + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/include/esp32s3/esp_mn_models.h b/include/esp32s3/esp_mn_models.h index 15d7ddd..8571648 100644 --- a/include/esp32s3/esp_mn_models.h +++ b/include/esp32s3/esp_mn_models.h @@ -4,7 +4,9 @@ //Contains declarations of all available speech recognion models. Pair this up with the right coefficients and you have a model that can recognize //a specific phrase or word. - +#ifdef __cplusplus +extern "C" { +#endif /** * @brief Get the multinet handle from model name * @@ -59,3 +61,6 @@ if (r>0) { model->destroy(model_data) */ +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/include/esp32s3/esp_wn_iface.h b/include/esp32s3/esp_wn_iface.h index 9cc9e5c..bbcdcb9 100644 --- a/include/esp32s3/esp_wn_iface.h +++ b/include/esp32s3/esp_wn_iface.h @@ -1,6 +1,10 @@ #pragma once #include "stdint.h" +#ifdef __cplusplus +extern "C" { +#endif + //Opaque model data container typedef struct model_iface_data_t model_iface_data_t; @@ -183,3 +187,7 @@ typedef struct { esp_wn_iface_op_clean_t clean; esp_wn_iface_op_destroy_t destroy; } esp_wn_iface_t; + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/include/esp32s3/esp_wn_models.h b/include/esp32s3/esp_wn_models.h index 31ac0ab..38972e7 100644 --- a/include/esp32s3/esp_wn_models.h +++ b/include/esp32s3/esp_wn_models.h @@ -1,6 +1,9 @@ #pragma once #include "esp_wn_iface.h" +#ifdef __cplusplus +extern "C" { +#endif // The prefix of wakenet model name is used to filter all wakenet from availabel models. #define ESP_WN_PREFIX "wn" @@ -98,6 +101,10 @@ char* esp_wn_wakeword_from_name(const char *model_name); #define WAKENET_COEFF "COEFF_NULL" #endif +#ifdef __cplusplus +} +#endif + /* static const sr_model_iface_t *model = esp_wn_handle_from_name(model_name); From 35ff685da456f607aadfd22b094eefa50d33da4a Mon Sep 17 00:00:00 2001 From: xysun Date: Wed, 13 Sep 2023 18:01:59 +0800 Subject: [PATCH 3/3] feat: Support C++ --- include/esp32/dl_lib.h | 7 +++++++ include/esp32/dl_lib_coefgetter_if.h | 10 +++++++++- include/esp32/dl_lib_conv_queue.h | 11 +++++++++-- include/esp32/dl_lib_convq8_queue.h | 11 ++++++++++- include/esp32/dl_lib_convq_queue.h | 9 ++++++++- include/esp32/dl_lib_matrix.h | 8 ++++++++ include/esp32/dl_lib_matrixq.h | 9 +++++++++ include/esp32/dl_lib_matrixq8.h | 11 ++++++++++- include/esp32/esp_afe_config.h | 8 ++++++++ include/esp32/esp_afe_sr_iface.h | 8 ++++++++ include/esp32/esp_afe_sr_models.h | 8 ++++++++ include/esp32/esp_agc.h | 9 +++++++++ include/esp32/esp_mase.h | 14 +++++++++++++- include/esp32/esp_mn_iface.h | 7 +++++++ include/esp32/esp_mn_models.h | 7 ++++++- include/esp32/esp_wn_iface.h | 8 ++++++++ include/esp32/esp_wn_models.h | 7 +++++++ include/esp32s3/esp_afe_config.h | 3 ++- lib/esp32s3/libc_speech_features.a | Bin 592744 -> 592744 bytes lib/esp32s3/libdl_lib.a | Bin 3527376 -> 3527376 bytes lib/esp32s3/libesp_audio_front_end.a | Bin 287472 -> 287472 bytes lib/esp32s3/libesp_audio_processor.a | Bin 3468740 -> 3468740 bytes lib/esp32s3/libhufzip.a | Bin 184960 -> 184960 bytes lib/esp32s3/libmultinet.a | Bin 1835054 -> 1835054 bytes lib/esp32s3/libwakenet.a | Bin 650436 -> 651672 bytes src/include/esp_mn_speech_commands.h | 10 +++++++++- src/include/esp_process_sdkconfig.h | 8 ++++++++ src/include/model_path.h | 9 ++++++++- 28 files changed, 171 insertions(+), 11 deletions(-) diff --git a/include/esp32/dl_lib.h b/include/esp32/dl_lib.h index d7b6d8f..63ba6da 100644 --- a/include/esp32/dl_lib.h +++ b/include/esp32/dl_lib.h @@ -32,6 +32,10 @@ #include "esp32s3/rom/cache.h" #endif +#ifdef __cplusplus +extern "C" { +#endif + typedef int padding_state; // /** @@ -407,5 +411,8 @@ dl_matrix2d_t *dl_basic_conv_layer(const dl_matrix2d_t *in, const dl_matrix2d_t dl_matrix2d_t *dl_basic_conv_layer_quantised_weight(const dl_matrix2d_t *in, const dl_matrix2dq_t *weight, const dl_matrix2d_t *bias, int filter_width, int filter_height, const int out_channels, const int stride_x, const int stride_y, padding_state pad, const dl_matrix2d_t* out); +#ifdef __cplusplus +} #endif +#endif \ No newline at end of file diff --git a/include/esp32/dl_lib_coefgetter_if.h b/include/esp32/dl_lib_coefgetter_if.h index f1a9373..a21de8d 100644 --- a/include/esp32/dl_lib_coefgetter_if.h +++ b/include/esp32/dl_lib_coefgetter_if.h @@ -19,6 +19,10 @@ #include "dl_lib_matrixq8.h" #include "cJSON.h" +#ifdef __cplusplus +extern "C" { +#endif + //Set this if the coefficient requested is a batch-normalization popvar matrix which needs to be preprocessed by //dl_batch_normalize_get_sqrtvar first. #define COEF_GETTER_HINT_BNVAR (1<<0) @@ -69,4 +73,8 @@ typedef struct { const cJSON* (*getter_config)(void *arg); } model_coeff_getter_t; -#endif \ No newline at end of file +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/esp32/dl_lib_conv_queue.h b/include/esp32/dl_lib_conv_queue.h index 280d21d..7cb9bf9 100644 --- a/include/esp32/dl_lib_conv_queue.h +++ b/include/esp32/dl_lib_conv_queue.h @@ -16,8 +16,11 @@ #include "dl_lib_matrix.h" -typedef float fptp_t; +#ifdef __cplusplus +extern "C" { +#endif +typedef float fptp_t; //Flags for matrices // #define DL_MF_FOREIGNDATA (0) /*< Matrix *item data actually points to another matrix and should not be freed */ @@ -170,4 +173,8 @@ fptp_t *dl_dilation_layer(dl_conv_queue_t *in, dl_conv_queue_t *out, int rate, i void test_atrous_conv(int size, int rate, int in_channel, int out_channel); -#endif \ No newline at end of file +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/esp32/dl_lib_convq8_queue.h b/include/esp32/dl_lib_convq8_queue.h index c37803c..0e53902 100644 --- a/include/esp32/dl_lib_convq8_queue.h +++ b/include/esp32/dl_lib_convq8_queue.h @@ -20,6 +20,10 @@ #include "dl_lib_conv_queue.h" #include "dl_lib_convq_queue.h" +#ifdef __cplusplus +extern "C" { +#endif + //[nch, n, c] typedef struct { int n; /*< the length of queue */ @@ -290,4 +294,9 @@ void print_convq8(dl_convq8_queue_t *cq, int offset); void print_convq(dl_convq_queue_t *cq, int offset); void lstmq8_free(void); -#endif \ No newline at end of file + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/esp32/dl_lib_convq_queue.h b/include/esp32/dl_lib_convq_queue.h index 0e8ab47..c71d5ca 100644 --- a/include/esp32/dl_lib_convq_queue.h +++ b/include/esp32/dl_lib_convq_queue.h @@ -18,6 +18,9 @@ #include "dl_lib_conv_queue.h" #include "dl_lib.h" +#ifdef __cplusplus +extern "C" { +#endif //fixed-point convolution FIFO queue. //[nch, n, c] @@ -372,4 +375,8 @@ void test_lstm_convq(int size, int in_dim, int lstm_cell); void dl_nn_tanh_i162(dl_convq_queue_t **cqm, int offset, int nch); void dl_copy_queue_item_by_qmf(dl_convq_queue_t *cq, fptp_t* item, int m_bit, int f_bit, int offset, int ch); void dl_convq_queue_mc_bzero(dl_convq_queue_t **cqm, int nch); -#endif \ No newline at end of file +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/esp32/dl_lib_matrix.h b/include/esp32/dl_lib_matrix.h index 1a5e2ee..b5fae74 100644 --- a/include/esp32/dl_lib_matrix.h +++ b/include/esp32/dl_lib_matrix.h @@ -21,6 +21,10 @@ #include "esp_system.h" #endif +#ifdef __cplusplus +extern "C" { +#endif + // #ifdef CONFIG_IDF_TARGET_ESP32S3 // #include "dl_tie728_bzero.h" // #endif @@ -249,5 +253,9 @@ inline static void dl_matrix_set(dl_matrix2d_t *m, const int x, const int y, fpt void matrix_get_range(const dl_matrix2d_t *m, fptp_t *rmin, fptp_t *rmax); +#ifdef __cplusplus +} +#endif + #endif diff --git a/include/esp32/dl_lib_matrixq.h b/include/esp32/dl_lib_matrixq.h index 5f0474a..8ad397b 100644 --- a/include/esp32/dl_lib_matrixq.h +++ b/include/esp32/dl_lib_matrixq.h @@ -17,6 +17,10 @@ #include #include "dl_lib_matrix.h" +#ifdef __cplusplus +extern "C" { +#endif + typedef int16_t qtp_t; //Quantized matrix. Uses fixed numbers and has the storage for the rows/columns inverted @@ -375,4 +379,9 @@ fptp_t dl_matrixq_get(const dl_matrix2dq_t *m, const int x, const int y); */ void dl_matrixq_set(dl_matrix2dq_t *m, const int x, const int y, fptp_t val); + +#ifdef __cplusplus +} +#endif + #endif diff --git a/include/esp32/dl_lib_matrixq8.h b/include/esp32/dl_lib_matrixq8.h index 579b1c0..377df7c 100644 --- a/include/esp32/dl_lib_matrixq8.h +++ b/include/esp32/dl_lib_matrixq8.h @@ -19,6 +19,10 @@ #include "dl_lib.h" #include "dl_lib_matrixq.h" +#ifdef __cplusplus +extern "C" { +#endif + typedef int8_t q8tp_t; typedef struct { @@ -68,4 +72,9 @@ dl_matrix2dq8_t *dl_matrixq8_copy_to_psram(const dl_matrix2dq8_t *m); */ dl_matrix2dq8_t *dl_matrixq8_from_matrix2d(const dl_matrix2d_t *m, dl_matrix2dq8_t *out); -#endif \ No newline at end of file +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/include/esp32/esp_afe_config.h b/include/esp32/esp_afe_config.h index 1291b5c..de44589 100644 --- a/include/esp32/esp_afe_config.h +++ b/include/esp32/esp_afe_config.h @@ -4,6 +4,10 @@ #include "esp_wn_models.h" #include "esp_vad.h" +#ifdef __cplusplus +extern "C" { +#endif + //AFE: Audio Front-End //SR: Speech Recognition //afe_sr/AFE_SR: the audio front-end for speech recognition @@ -135,4 +139,8 @@ typedef struct { .debug_init = false, \ .debug_hook = {{AFE_DEBUG_HOOK_MASE_TASK_IN, NULL}, {AFE_DEBUG_HOOK_FETCH_TASK_IN, NULL}}, \ } +#endif + +#ifdef __cplusplus +} #endif \ No newline at end of file diff --git a/include/esp32/esp_afe_sr_iface.h b/include/esp32/esp_afe_sr_iface.h index d45c118..daf5b92 100644 --- a/include/esp32/esp_afe_sr_iface.h +++ b/include/esp32/esp_afe_sr_iface.h @@ -2,6 +2,10 @@ #include "stdint.h" #include "esp_afe_config.h" +#ifdef __cplusplus +extern "C" { +#endif + //AFE: Audio Front-End //SR: Speech Recognition //afe_sr/AFE_SR: the audio front-end for speech recognition @@ -200,3 +204,7 @@ typedef struct { esp_afe_sr_iface_op_enable_se_t enable_se; esp_afe_sr_iface_op_destroy_t destroy; } esp_afe_sr_iface_t; + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/include/esp32/esp_afe_sr_models.h b/include/esp32/esp_afe_sr_models.h index 43a0d08..feaad43 100644 --- a/include/esp32/esp_afe_sr_models.h +++ b/include/esp32/esp_afe_sr_models.h @@ -1,5 +1,9 @@ #pragma once +#ifdef __cplusplus +extern "C" { +#endif + #if defined CONFIG_USE_AFE #include "esp_afe_sr_iface.h" @@ -24,4 +28,8 @@ extern const esp_afe_sr_iface_t esp_afe_vc_v1; #define ESP_AFE_SR_HANDLE esp_afe_sr_v1 #define ESP_AFE_VC_HANDLE esp_afe_vc_v1 +#endif + +#ifdef __cplusplus +} #endif \ No newline at end of file diff --git a/include/esp32/esp_agc.h b/include/esp32/esp_agc.h index 37116eb..76d3015 100644 --- a/include/esp32/esp_agc.h +++ b/include/esp32/esp_agc.h @@ -14,6 +14,10 @@ #ifndef _ESP_AGC_H_ #define _ESP_AGC_H_ +#ifdef __cplusplus +extern "C" { +#endif + ////all positive value is valid, negective is error typedef enum { ESP_AGC_SUCCESS = 0, ////success @@ -28,4 +32,9 @@ void set_agc_config(void *agc_handle, int gain_dB, int limiter_enable, int targe int esp_agc_process(void *agc_handle, short *in_pcm, short *out_pcm, int frame_size, int sample_rate); void esp_agc_close(void *agc_handle); + +#ifdef __cplusplus +} +#endif + #endif // _ESP_AGC_H_ diff --git a/include/esp32/esp_mase.h b/include/esp32/esp_mase.h index 0b12e82..0999762 100644 --- a/include/esp32/esp_mase.h +++ b/include/esp32/esp_mase.h @@ -11,6 +11,12 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License +#ifndef _ESP_MASE_H_ +#define _ESP_MASE_H_ + +#ifdef __cplusplus +extern "C" { +#endif #define MASE_SAMPLE_RATE 16000 // Supports 16kHz only #define MASE_FRAME_SIZE 16 // Supports 16ms only @@ -78,4 +84,10 @@ void mase_process(mase_handle_t st, int16_t *in, int16_t *dsp_out); * @return None * */ -void mase_destory(mase_handle_t st); \ No newline at end of file +void mase_destory(mase_handle_t st); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/esp32/esp_mn_iface.h b/include/esp32/esp_mn_iface.h index faccea1..9297e5a 100644 --- a/include/esp32/esp_mn_iface.h +++ b/include/esp32/esp_mn_iface.h @@ -1,6 +1,9 @@ #pragma once #include "stdint.h" #include "esp_wn_iface.h" +#ifdef __cplusplus +extern "C" { +#endif #define ESP_MN_RESULT_MAX_NUM 5 #define ESP_MN_MAX_PHRASE_NUM 400 @@ -213,3 +216,7 @@ typedef struct { esp_mn_iface_op_print_active_speech_commands print_active_speech_commands; esp_mn_iface_op_check_speech_command check_speech_command; } esp_mn_iface_t; + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/include/esp32/esp_mn_models.h b/include/esp32/esp_mn_models.h index 15d7ddd..8571648 100644 --- a/include/esp32/esp_mn_models.h +++ b/include/esp32/esp_mn_models.h @@ -4,7 +4,9 @@ //Contains declarations of all available speech recognion models. Pair this up with the right coefficients and you have a model that can recognize //a specific phrase or word. - +#ifdef __cplusplus +extern "C" { +#endif /** * @brief Get the multinet handle from model name * @@ -59,3 +61,6 @@ if (r>0) { model->destroy(model_data) */ +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/include/esp32/esp_wn_iface.h b/include/esp32/esp_wn_iface.h index 9cc9e5c..bbcdcb9 100644 --- a/include/esp32/esp_wn_iface.h +++ b/include/esp32/esp_wn_iface.h @@ -1,6 +1,10 @@ #pragma once #include "stdint.h" +#ifdef __cplusplus +extern "C" { +#endif + //Opaque model data container typedef struct model_iface_data_t model_iface_data_t; @@ -183,3 +187,7 @@ typedef struct { esp_wn_iface_op_clean_t clean; esp_wn_iface_op_destroy_t destroy; } esp_wn_iface_t; + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/include/esp32/esp_wn_models.h b/include/esp32/esp_wn_models.h index 31ac0ab..38972e7 100644 --- a/include/esp32/esp_wn_models.h +++ b/include/esp32/esp_wn_models.h @@ -1,6 +1,9 @@ #pragma once #include "esp_wn_iface.h" +#ifdef __cplusplus +extern "C" { +#endif // The prefix of wakenet model name is used to filter all wakenet from availabel models. #define ESP_WN_PREFIX "wn" @@ -98,6 +101,10 @@ char* esp_wn_wakeword_from_name(const char *model_name); #define WAKENET_COEFF "COEFF_NULL" #endif +#ifdef __cplusplus +} +#endif + /* static const sr_model_iface_t *model = esp_wn_handle_from_name(model_name); diff --git a/include/esp32s3/esp_afe_config.h b/include/esp32s3/esp_afe_config.h index ee43c0c..de44589 100644 --- a/include/esp32s3/esp_afe_config.h +++ b/include/esp32s3/esp_afe_config.h @@ -139,7 +139,8 @@ typedef struct { .debug_init = false, \ .debug_hook = {{AFE_DEBUG_HOOK_MASE_TASK_IN, NULL}, {AFE_DEBUG_HOOK_FETCH_TASK_IN, NULL}}, \ } +#endif #ifdef __cplusplus } -#endif +#endif \ No newline at end of file diff --git a/lib/esp32s3/libc_speech_features.a b/lib/esp32s3/libc_speech_features.a index 110668bbacf3c99838be51ad6030ef419e4eb4bd..e7f4d453a9c04da40c456b41c3a074da05ca1ce1 100644 GIT binary patch delta 58 zcmaDcP36Tjm4+6^7N!>F7M2#)7Pc1lEgXBzgoD{q85tM^S{Z;q@C`Eq1H04o3uYYh Nj6T~xm~m8G0RR?f5gq^l delta 58 zcmaDcP36Tjm4+6^7N!>F7M2#)7Pc1lEgXBzg#Fo485tM^S{Z;q@C`Eq1H0Yy3uYYh Nj2_!Rm~m8G0RR<~5fT6Z diff --git a/lib/esp32s3/libdl_lib.a b/lib/esp32s3/libdl_lib.a index 5a8eb89f6072934a39f0ca153ce6a6da049c5109..c87a135e0e94af59d87651e070f72903f3c352cb 100644 GIT binary patch delta 10673 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 delta 10673 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 HZrbtxjs0KR diff --git a/lib/esp32s3/libesp_audio_front_end.a b/lib/esp32s3/libesp_audio_front_end.a index faa177e05d572ef4673275b0029affcedb419726..2451d3ad9800c8d4db632bc6529f7cbb7114f499 100644 GIT binary patch delta 3181 zcmZWrYitzP6`q&l9nYP;vzN8mz+$iQu6Nfgj@Mpnkc1;6ek&&RS216?B@;bF7txT+}D?NUWC zi;N7cCEVSfE$2h@GccINMhod8?x}2@U7_EG&d6xcjCTK%9i=w9$@*Bfoj(PYv8x#R zE?+JSL7wN!RR-imzWjC>Kq37A zASSjG_^|d_1dodc1dhh10Hnld25_uA29Obt(BT{(u@az8JQW5wQ9%ji6l0$SbW+~~ zRP==5Hs)5SA-6vl;bHwtgdMB_D|0{3mGfbGQPKZu#iFi0CO)rHuZJ$=uqyLi2x28N zWO0+KsfZpMAR&PvUPNG4EkQuc1Ams3fZ>o3ily`=aA531JFu*~c1&7raQnuT=f~<_ zP=o**XQq&%SWH{T5C1ominxZ;Wla_Rv{NxWGBxW4mW39wN6nc?Ty&ALrG#WfEF==G z5~$)i3Oi8(P5c>V)+T{2en16Ty99Yd+~GizBq|cGQi78Q(|FeenBw%3Bk>hTu&LHz zIC8{JG$HGdAT0LLvd5elm_)?0L}A*H@3AK;R*>uI(pyY4kY$DhaZwDutkcZQfV-5K zj(W1L5!DEh5mawB(@MZnC%z5>JRY47OHNeN;msaNpwrv9b!%iz--qU8@K1^ zIUJBN4bkl2z{Ii3bT#bm8z0FJ)&GiBk(t<+v7=5edP8i$!!8fLhpZKG37qT-Nzf42 zp|WF=ML;O1gFUkJA9Oe(2!3{zT;_;pu+jD#A}m(Gznv)kj>3o)=nmU&h^S~Ds*F`^ zzawH|Gi^!@o*_ar4)nM*)_TbUd9*Xq268Hlu;+Rdz)g3$^0hiU&Yzloxa?T zv#{s*@^(sQvHP#4gu2`n&DHjczFxr@+Ie?!b0WXV*8~MLTYb5o$asS?%4+xe@*1Xn_n>=WkKfMOU7_Q~4!Nh^*L;Zv~@ED!b~ zLJm$>wqr#=>_LavXHv@mnAlI?quLwT`5|P)8eRfn4_C)11 zW1mZh0AgY_TF^e9S^*Fjf26c8jM@c|66eu6_QjbseLxwJgdh7-@(@6s_zLZ7U#>m_ zkP}PkJg-z=1!xqv0svPNHvpRD&0=4xx(U##7(WuBPX`JU3YyyHKG#~I&TzN3E>+pU z{nmF>+%j*ry`*-(5^CQRYF7)Pc5PeD{|}17!R6XF4kkq@cv}`IVp7mlFu7M)tI?4mI4mg?DFO9sGK>^m&;HFbCEBf zqhQOt-FXe;!aJMSFfY72gnGQvb@3eupwVc^Ajx3B8fUJ7z?abG@xwbIE4&!jhSgL-!@y9q zx5?D3&!_bZtw+t@BW?Z@Qnr+ktne*Fqg4WxKS_ZnN}%z-!ECijp!1cepVclw-r#L` zA+1Rg74e;v;^e_ZUcpOaO>yqQ5#zU!fHhTKVGggsyNHzsfLDrVP))0A#7o$e;qy^BYo_%}Fsb7U@P1p5 zNB6^$<8<9yv&yIzjeHUL?v}JWcnfZ0Yqpo&sL^cb!3k+EBOD7Bp4_O>aPY2e(r7x= zp&uSTN?pUE&OHFW01s9kq}nR{CTOt=$(uvr4)_W zu^N3ITxd(lL%sLg*ENg>@8atk&4+O~Eo~hYrPG(`^M%dvu)+(gshlum3*stV>;7M|Dy7DcU0{k8pvoopF0F0{? z=A&Br0Ce~)s=~(-gn2ui%_rF|SR(SWVP{7z0Eo)VhMh}44G`lmQKlL*zlj!N7!f}JWq63#T}qlDUdOMYjoIbuQh*$vOGkR8x)Pv~-@u4qR}-TFn&th% zu2qc#XjQatiO{Eo8*ga$Rkh9g?AIEGgm;(zDm-Vi7E{X$+09x?RhhS7i`J{g3JgYUQSmZCasYo8EW*zeaxc^Z)<= delta 3181 zcmZWrYitzP6`q&l9nT%#*~{A5;I+NRyY{ZV7%yIf!3G=5!$539NTCo~nlyk&6NOeS z;*qdCOGpZZj>072l?WsVHjmhl#gG7b@N7_1DkVs*QdQwcDvBTx3Jq11e&>$WKiwa* z=R4=#bG~!WnS18$h2Y%_!QpCh7hsU8`o?>XFfOD}Nd)V|PCE z(|x%(2zjrHcRj|j| zs4Ggo@iLyyt9bCo5J@pkLM%8SjlrgZ!{(C+AwDBzPZ`lu#AOGdw|Wy16P*xo%q`TVR4ai=u7?yAR?AM1kj&+ z01y>B2%M;U7QtiU0fCdTDF6vEoB_OB76nL&5p+1Y(iH&p;^`2;sd7pvqZqvw(189H zP~MY<+muBCP6^V1%Fm40mC676pQJL;K1lbJFwyIn#QC$!adYjmTk~K zrw9SoXeN-N_&IGIRq}5r6>$xx%SM+Uqn(Q3k*P^Huq?QMjWxTGxacBfa{qA+F1ci0mV%gOar=`AW6$kHJ}Oyq+vn`WjSg}a29 zfqJs(rBw)#5>#(C!-~UFFTN@S=#0#RB_pcn@Vbhr5>0|p65Wz^hxkzez)aT}9kXZY z861!?9ntK9{t2U>(N)Lo9UIOL(f^87;co0p*zdkBtb)5 zhsusf76GB44t815Kj?5oA^6$la+xERVx#RhL`W=$f4idSTM8qVqdRQBAtIvXVP&*p z`yCM#TWM2l@FcS2J8m6?E}My3*CP;$JM2-XsNP)>FX7op}pFj+!D`j@HK@3npb@J7?E)YWt7$4<;x36 z-tWu1iB*p;FQQZGbMB&K`Np?+Ix2YbPY_%QPO?v#Ujd4tFxUfiJ){)_MEG>Hlx4wQ zgvr5~igv6Bh_}!o_IrtE0GK#R;QhKA*yM;Gh~rraLShb``MLCWu!Q9`W1p|h!=8w| zX6z4=L4c@Og%-3wOe_b8i6fNuN42{F65=9S$Nspx<`7UyRKt&bq51?sz4#LCYhSE7 z50DW{=sYh~eFD%VZUq1?$8P|%$eYE!Qh5`gO)-8TLRb59<8qoh-hIBUTzC<1TG0!2&;nhK`n<<@94 zDu%*>Ybs63kau&9Mzdlnlv*8Gl3qnt!?5r=vl>l{vt-HPfX(T?yaSapXZvz7%3wa> z%NHovVsCF&!?^H1&T5z!-W@`lyrQ-E+vYXn&)(@T{|P$Z+~YmBR*Pg0IA0+7!Y1>u zc?KT&At1A-?6(N5@DRo8t^PZJ!Bh0sbPnI9mM|0LDu&0nB6ZTL2C}jHh`# zb{~Hso+QgVaUD*>{1P$lOC|v#{114o&HiN9<3Lf~Pv}J5MSvJLDdUr|Hvtly`oes- zY!yI?caSAldL5vi?OXkimhkScLlKJg z`K0tKV}-rgdW{CdW+)3CtK6iknr}sRR@9{8Df|(<0ak?s20w_P)-VYId>(SNDkWfw zmWTALn0^`#w5zzUtl{3i^%^FFcV)dsqalSP3j4dECd|VsW=yDnc zhN8VrrY3zJtzTe`H4h+dK9iKq1tcqc8_{TyK;=(S;BgXY{BJN@<0a7f3e?YPl^|>I ziFhHcHi`218YjAH^lOzc7y|iqyL+@pn?$ama22wg(a zh#jla=fZ`yggn%FyI#^T9=yvhX*3_k;Iy>0RFrAHOrI}omM<@*bQXH{7QEg|y@o9s zO$fPTJNa7eErtanLaNrFjO-O(K23~VUv4G+E?>TbW?}n%`4-Nc_4x8n>8Sdg$?%$Q z%)oQV96Uq?$SH-B*eP=yO2@w;Is7}X)fF^zeBZ6Iy4+m(G z_Y1pHIR>Cj(Y_%2@aAvR_NkHF bgKgTws@m;|?OLN+y18S!mh0HAAG-cu(+cv> diff --git a/lib/esp32s3/libesp_audio_processor.a b/lib/esp32s3/libesp_audio_processor.a index 4a3fa6a760952d178dd1a74a7cdd72a23fb56343..fc26a620ec3c0a1945d867aed052ebdbee5ff70c 100644 GIT binary patch delta 403 zcmYMwKTE?v7zXgWL=#QY`mb6OwKdhKZEa(%lXMC$g(`vWog5uHi$kU0eFKA_F5+gz zLAb%ip^MbTWD+|F2^9PkK5=pQ9rr%m``&T=uYmU9DfDTf8~H5qDF`6K7>t7iGEDHu zpFF;y4y(5nUT>?TH`?TteeG1Bj`vX0vb4e9Yue}<@$;vqiilr_fARNFv+n2ulR61V z!W2xy49vnDq+lN6b7@%QQb)fPG48&rAH?H+F7)^oh3Od&aXw>QiKZi85<<=-LK0PM z{uh$Wp_UsgG!0mSWmtg>WMLId$iW({^U$=8%6d~O352MR=qE~%##7|DIP^YTE9JFZ w>jWP$a4pz?P1u4w6rc#(P=Ycaxc19A-phR3qUh@dHtawJcA?69!Cu<<1q8m4o&W#< delta 403 zcmYMwKTpCy7zXgWR$FZg{zI`aNWnZTKpGag)X{H6jJxmZ2l2R{3q9VVFg@cTE@X@=(RAcXLdcm!NTQ0% z|3Q*D)N-ALrU6T^3@eaJtl*M2$2dzo)r6n(wGh8?KDE>w9h*h?F~x@D0} diff --git a/lib/esp32s3/libhufzip.a b/lib/esp32s3/libhufzip.a index c57e403869bde94c30b6735c443cbea00c35115d..0ca0474ef8ff7729f99c37e61982a0cea1e30da1 100644 GIT binary patch delta 500 zcmYk2y-EW?6oqGYHnNkrdl6AAAR1mM+KnJK$bZXpc#Mpo>@GCLh3mWUbz%AkMHO@` z8(9z0$=n}B7gH2HpQ7l}g!1N67QC=@g$P|%E-4S>$YI`b=!*Do{XK>?v-Z;?O)R@( zr1>YBqD)%GMB!J){YASZGdV1OhdJ!BpO;Y{ z^Vq6#Mo0-xyOOm9)QBEJs8uxsp(sG0t#z_}zSyjb7v!qQZps!+ik-JL3A}-2x5t54 d9b~&RJnHlPfFE`q2fWT(*P{U+jt0R~^%tJ3KnMT; delta 500 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 delta 12471 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

L&!NiM#EK}%1EP|QL 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 diff --git a/src/include/esp_mn_speech_commands.h b/src/include/esp_mn_speech_commands.h index 41cefbc..335c88f 100644 --- a/src/include/esp_mn_speech_commands.h +++ b/src/include/esp_mn_speech_commands.h @@ -15,6 +15,10 @@ #include "esp_err.h" #include "esp_mn_iface.h" +#ifdef __cplusplus +extern "C" { +#endif + /* esp_mn_node_t is a singly linked list which is used to manage speech commands. It is easy to add one speech command into linked list and remove one speech command from linked list. @@ -170,4 +174,8 @@ void esp_mn_commands_print(void); /** * @brief Print all active commands. */ -void esp_mn_active_commands_print(void); \ No newline at end of file +void esp_mn_active_commands_print(void); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/src/include/esp_process_sdkconfig.h b/src/include/esp_process_sdkconfig.h index 9743dca..0fa6e10 100644 --- a/src/include/esp_process_sdkconfig.h +++ b/src/include/esp_process_sdkconfig.h @@ -2,6 +2,10 @@ #include "esp_err.h" #include "esp_mn_iface.h" +#ifdef __cplusplus +extern "C" { +#endif + /** * @brief Check chip config to ensure optimum performance */ @@ -21,3 +25,7 @@ void check_chip_config(void); * - ESP_ERR_INVALID_STATE Fail */ esp_mn_error_t* esp_mn_commands_update_from_sdkconfig(const esp_mn_iface_t *multinet, model_iface_data_t *model_data); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/src/include/model_path.h b/src/include/model_path.h index 944d76a..e5fe476 100644 --- a/src/include/model_path.h +++ b/src/include/model_path.h @@ -5,7 +5,9 @@ #include "esp_partition.h" #endif -#define ESP_SR_IDF_V5 +#ifdef __cplusplus +extern "C" { +#endif typedef struct { int num; // the number of files @@ -119,4 +121,9 @@ srmodel_list_t *get_static_srmodels(void); * @return model_coeff_getter_t pointer or NULL */ model_coeff_getter_t *srmodel_get_model_coeff(char *model_name); +#endif + + +#ifdef __cplusplus +} #endif \ No newline at end of file