Explorar o código

update:完善audio

alienwalker %!s(int64=2) %!d(string=hai) anos
pai
achega
394c509c81

+ 10 - 10
components/multimedia/luat_audio_es8311.c

@@ -507,16 +507,16 @@ static int es8311_codec_deinit(luat_audio_codec_conf_t* conf){
 }
 
 static void es8311_codec_pa(luat_audio_codec_conf_t* conf,uint8_t on){
-    if (conf->pa_pin == LUAT_CODEC_PA_NONE) return;
-	if (on){
-        if (conf->dummy_time_len)
-            luat_rtos_task_sleep(conf->dummy_time_len);
-        luat_gpio_set(conf->pa_pin, conf->pa_on_level);
-        if (conf->pa_delay_time)
-            luat_rtos_task_sleep(conf->pa_delay_time);
-	}else{	
-        luat_gpio_set(conf->pa_pin, !conf->pa_on_level);
-	}
+//    if (conf->pa_pin == LUAT_CODEC_PA_NONE) return;
+//	if (on){
+//        if (conf->dummy_time_len)
+//            luat_rtos_task_sleep(conf->dummy_time_len);
+//        luat_gpio_set(conf->pa_pin, conf->pa_on_level);
+//        if (conf->pa_delay_time)
+//            luat_rtos_task_sleep(conf->pa_delay_time);
+//	}else{
+//        luat_gpio_set(conf->pa_pin, !conf->pa_on_level);
+//	}
 }
 
 static int es8311_codec_control(luat_audio_codec_conf_t* conf,luat_audio_codec_ctl_t cmd,uint32_t data){

+ 11 - 10
components/multimedia/luat_audio_tm8211.c

@@ -19,16 +19,16 @@ static int tm8211_codec_deinit(luat_audio_codec_conf_t* conf){
 }
 
 static void tm8211_codec_pa(luat_audio_codec_conf_t* conf,uint8_t on){
-    if (conf->pa_pin == LUAT_CODEC_PA_NONE) return;
-	if (on){
-        if (conf->dummy_time_len)
-            luat_rtos_task_sleep(conf->dummy_time_len);
-        luat_gpio_set(conf->pa_pin, conf->pa_on_level);
-        if (conf->pa_delay_time)
-            luat_rtos_task_sleep(conf->pa_delay_time);
-	}else{	
-        luat_gpio_set(conf->pa_pin, !conf->pa_on_level);
-	}
+//    if (conf->pa_pin == LUAT_CODEC_PA_NONE) return;
+//	if (on){
+//        if (conf->dummy_time_len)
+//            luat_rtos_task_sleep(conf->dummy_time_len);
+//        luat_gpio_set(conf->pa_pin, conf->pa_on_level);
+//        if (conf->pa_delay_time)
+//            luat_rtos_task_sleep(conf->pa_delay_time);
+//	}else{
+//        luat_gpio_set(conf->pa_pin, !conf->pa_on_level);
+//	}
 }
 
 static int tm8211_codec_control(luat_audio_codec_conf_t* conf,luat_audio_codec_ctl_t cmd,uint32_t data){
@@ -57,6 +57,7 @@ luat_audio_codec_opts_t codec_opts_tm8211 = {
     .control = tm8211_codec_control,
     .start = tm8211_codec_start,
     .stop = tm8211_codec_stop,
+	.no_control = 1,
 };
 
 

+ 1 - 1
components/multimedia/luat_multimedia_audio.c

@@ -117,7 +117,7 @@ LUAT_WEAK void luat_audio_config_pa(uint8_t multimedia_id, uint32_t pin, int lev
             }else{
                 audio_conf->codec_conf.pa_pin = LUAT_CODEC_PA_NONE;
             }
-            audio_conf->codec_conf.dummy_time_len = dummy_time_len;
+            audio_conf->codec_conf.after_sleep_ready_time = dummy_time_len;
             audio_conf->codec_conf.pa_delay_time = pa_delay_time;
         }
     }

+ 2 - 2
demo/socket/EC618/main.lua

@@ -34,9 +34,9 @@ sys.subscribe("NTP_ERROR", function()
 end)
 
 -- require "async_socket_demo"
--- require "socket_demo"
+require "socket_demo"
 -- require "server_demo"
--- dtuDemo(1, "xxx", xxx)	--按照实际情况写入自己服务器的IP和PORT,uart id
+dtuDemo(1, "112.125.89.8", 43488)	--按照实际情况写入自己服务器的IP和PORT,uart id
 -- SerDemo(15000)
 -- 用户代码已结束---------------------------------------------
 -- 结尾总是这一句

+ 44 - 10
luat/include/luat_audio.h

@@ -25,18 +25,47 @@
 #ifndef __BSP_COMMON_H__
 #include "c_common.h"
 #endif
-
+#include "luat_rtos.h"
 #include"luat_audio_codec.h"
 typedef struct luat_audio_conf {
-    uint8_t multimedia_id;
+	uint64_t last_wakeup_time_ms;
+	luat_audio_codec_conf_t codec_conf;
+	void *hardware_data;
+	luat_rtos_timer_t pa_delay_timer;
+	uint16_t soft_vol;
+	uint16_t hardware_vol;
     uint8_t bus_type;
-    int samplerate;         //16k
-    int bits;               //16
-    int channels;           //1ch/2ch
-	uint8_t vol;
-    luat_audio_codec_conf_t codec_conf;
+    uint8_t raw_mode;
+    uint8_t debug_on_off;
+    uint8_t is_sleep;
+    uint8_t wakeup_ready;
 } luat_audio_conf_t;
 
+/**
+ * @brief audio和codec绑定
+ *
+ * @param multimedia_id 多媒体通道,目前只有0,在绑定前,需要先设置好codec的相关信息
+ * @param codec_conf codec信息
+ * @return int =0成功,其他失败
+ */
+int luat_audio_setup_codec(uint8_t multimedia_id, const luat_audio_codec_conf_t *codec_conf);
+
+/**
+ * @brief 初始化codec
+ *
+ * @param multimedia_id 多媒体通道,目前只有0
+ * @return int =0成功,其他失败
+ */
+int luat_audio_init_codec(uint8_t multimedia_id);
+/**
+ * @brief audio休眠控制,进入休眠状态时,芯片才允许进入休眠
+ *
+ * @param multimedia_id 多媒体通道,目前只有0
+ * @param on_off 0退出休眠,其他进入休眠
+ * @return int =0成功,其他失败
+ */
+int luat_audio_sleep(uint8_t multimedia_id, uint8_t on_off);
+#ifdef __LUATOS__
 /**
  * @brief 播放指定数量的文件或者ROM数组(文件数据直接写成数组形式)
  *
@@ -46,7 +75,7 @@ typedef struct luat_audio_conf {
  * @return int =0成功,其他失败
  */
 int luat_audio_play_multi_files(uint8_t multimedia_id, uData_t *info, uint32_t files_num, uint8_t error_stop);
-
+#endif
 /**
  * @brief 播放指定的文件或
  *
@@ -125,7 +154,7 @@ int luat_audio_pause_raw(uint8_t multimedia_id, uint8_t is_pause);
  * @param text_bytes 文字数据长度
  * @return int =0成功,其他失败
  */
-int luat_audio_play_tts_text(uint32_t multimedia_id, void *text, uint32_t text_bytes);
+int luat_audio_play_tts_text(uint8_t multimedia_id, void *text, uint32_t text_bytes);
 /**
  * @brief 在收到MULTIMEDIA_CB_TTS_INIT回调时,可以设置TTS参数,等同于ivTTS_SetParam
  *
@@ -134,7 +163,7 @@ int luat_audio_play_tts_text(uint32_t multimedia_id, void *text, uint32_t text_b
  * @param param_value param_id对应的value
  * @return int =0成功,其他失败
  */
-int luat_audio_play_tts_set_param(uint32_t multimedia_id, uint32_t param_id, uint32_t param_value);
+int luat_audio_play_tts_set_param(uint8_t multimedia_id, uint32_t param_id, uint32_t param_value);
 
 
 
@@ -152,4 +181,9 @@ int luat_audio_set_bus_type(uint8_t multimedia_id,uint8_t bus_type);
 
 luat_audio_conf_t *luat_audio_get_config(uint8_t multimedia_id);
 
+void luat_audio_play_debug_onoff(uint8_t multimedia_id, uint8_t onoff);
+
+int luat_audio_play_blank(uint8_t multimedia_id);
+
+int luat_audio_check_wakeup(uint8_t multimedia_id);
 #endif

+ 25 - 16
luat/include/luat_audio_codec.h

@@ -3,18 +3,6 @@
 #define __LUAT_AUDIO_CODEC_H__
 
 typedef enum {
-    LUAT_CODEC_MODE_MASTER = 0,
-    LUAT_CODEC_MODE_SLAVE,
-
-    LUAT_CODEC_MODE_ALL = 0,
-    LUAT_CODEC_MODE_DAC,
-    LUAT_CODEC_MODE_ADC,
-    
-    LUAT_CODEC_FORMAT_I2S = 0,
-    LUAT_CODEC_FORMAT_LSB,
-    LUAT_CODEC_FORMAT_MSB,
-    LUAT_CODEC_FORMAT_PCMS,
-    LUAT_CODEC_FORMAT_PCML,
 
     LUAT_CODEC_SET_MUTE = 0,        // 静音设置
     LUAT_CODEC_GET_MUTE,            // 
@@ -35,16 +23,36 @@ typedef enum {
     LUAT_CODEC_PA_NONE  = 255,
 } luat_audio_codec_ctl_t;
 
+typedef enum {
+    LUAT_CODEC_MODE_MASTER = 0,
+    LUAT_CODEC_MODE_SLAVE,
+
+    LUAT_CODEC_MODE_ALL = 0,
+    LUAT_CODEC_MODE_DAC,
+    LUAT_CODEC_MODE_ADC,
+
+    LUAT_CODEC_FORMAT_I2S = 0,
+    LUAT_CODEC_FORMAT_LSB,
+    LUAT_CODEC_FORMAT_MSB,
+    LUAT_CODEC_FORMAT_PCMS,
+    LUAT_CODEC_FORMAT_PCML,
+
+}luat_audio_codec_ctl_param_t;
+
 struct luat_audio_codec_opts;
 
 typedef struct luat_audio_codec_conf {
     int i2c_id;                                                         // i2c id
     int i2s_id;                                                         // i2s id
-    uint8_t pa_pin;                                                     // pa pin
-	uint8_t pa_on_level;                                                // pa 使能电平
-    uint32_t dummy_time_len;                                            // pa使能前延迟时间
+    uint32_t after_sleep_ready_time;                                    // pa使能前延迟时间
     uint32_t pa_delay_time;                                             // pa使能后延迟时间
     struct luat_audio_codec_opts* codec_opts;
+    uint8_t pa_pin;                                                     // pa pin
+	uint8_t pa_on_level;                                                // pa 使能电平
+	uint8_t power_pin;													// 电源控制
+	uint8_t power_on_level;
+	uint8_t power_on_delay_ms;
+	uint8_t codec_delay_off_time;
 } luat_audio_codec_conf_t;
 
 typedef struct luat_audio_codec_opts{
@@ -54,8 +62,9 @@ typedef struct luat_audio_codec_opts{
     int (*control)(luat_audio_codec_conf_t* conf,luat_audio_codec_ctl_t cmd,uint32_t data); //控制函数
     int (*start)(luat_audio_codec_conf_t* conf);                        //停止
     int (*stop)(luat_audio_codec_conf_t* conf);                         //开始
+	uint8_t no_control;
 } luat_audio_codec_opts_t;
 
 extern luat_audio_codec_opts_t codec_opts_es8311;
-
+extern luat_audio_codec_opts_t codec_opts_tm8211;
 #endif

+ 1 - 1
luat/include/luat_i2s.h

@@ -57,7 +57,7 @@ typedef struct luat_i2s_conf{
 }luat_i2s_conf_t;
 
 // 配置
-int luat_i2s_setup(luat_i2s_conf_t *conf);                  // 初始化i2s
+int luat_i2s_setup(const luat_i2s_conf_t *conf);                  // 初始化i2s
 int luat_i2s_modify(uint8_t id,uint8_t channel_format,uint8_t data_bits,uint32_t sample_rate);      // 修改i2s配置(不会进行初始化操作,动态修改配置)
 // 传输(异步接口)
 int luat_i2s_send(uint8_t id, uint8_t* buff, size_t len);                                   //  i2s发送数据