Procházet zdrojové kódy

update:pa控制统一到主库

Dozingfiretruck před 2 roky
rodič
revize
af13751c66

+ 1 - 14
components/multimedia/luat_audio_es8311.c

@@ -70,7 +70,7 @@
 #define ES8311_MAX_REGISTER             0xFF
 
 static uint8_t es8311_dacvol_bak=0,es8311_adcvol_bak=0;
-static luat_rtos_timer_t pa_delay_timer;
+
 typedef struct{
     uint32_t mclk;          // mclk frequency
     uint32_t rate;          // sample rate
@@ -425,11 +425,6 @@ static int es8311_codec_channels(luat_audio_codec_conf_t* conf,uint8_t channels)
     return 0;
 }
 
-static LUAT_RT_RET_TYPE pa_delay_timer_cb(LUAT_RT_CB_PARAM){
-    luat_audio_codec_conf_t* conf = (luat_audio_codec_conf_t*)param;
-    luat_gpio_set(conf->pa_pin, conf->pa_on_level);
-}
-
 static inline void es8311_reset(luat_audio_codec_conf_t* conf){
     es8311_write_reg(conf,ES8311_RESET_REG00, 0x1F);
     es8311_write_reg(conf,ES8311_RESET_REG00, 0x80);
@@ -441,11 +436,6 @@ static int es8311_codec_init(luat_audio_codec_conf_t* conf,uint8_t mode){
     if (conf->power_pin != LUAT_CODEC_PA_NONE){
         luat_gpio_mode(conf->power_pin, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, !conf->power_on_level);
         luat_gpio_set(conf->power_pin, conf->power_on_level);
-    }
-    if (conf->pa_pin != LUAT_CODEC_PA_NONE){
-        luat_gpio_mode(conf->pa_pin, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, !conf->pa_on_level);
-        luat_gpio_set(conf->pa_pin, !conf->pa_on_level);
-        luat_rtos_timer_create(&pa_delay_timer);
     }
 	if (conf->power_on_delay_ms){
 		luat_rtos_task_sleep(conf->power_on_delay_ms);
@@ -520,9 +510,6 @@ 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->after_sleep_ready_time)
-            luat_rtos_timer_start(pa_delay_timer,conf->after_sleep_ready_time,0,pa_delay_timer_cb,(void*)conf);
-        else
             luat_gpio_set(conf->pa_pin, conf->pa_on_level);
 	}else{
         luat_gpio_set(conf->pa_pin, !conf->pa_on_level);

+ 0 - 15
components/multimedia/luat_audio_tm8211.c

@@ -6,22 +6,10 @@
 #define LUAT_LOG_TAG "tm8211"
 #include "luat_log.h"
 
-static luat_rtos_timer_t pa_delay_timer;
-
-static LUAT_RT_RET_TYPE pa_delay_timer_cb(LUAT_RT_CB_PARAM){
-    luat_audio_codec_conf_t* conf = (luat_audio_codec_conf_t*)param;
-    luat_gpio_set(conf->pa_pin, conf->pa_on_level);
-}
-
 static int tm8211_codec_init(luat_audio_codec_conf_t* conf,uint8_t mode){
     if (conf->power_pin != LUAT_CODEC_PA_NONE){
         luat_gpio_mode(conf->power_pin, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, !conf->power_on_level);
         luat_gpio_set(conf->power_pin, conf->power_on_level);
-    }
-    if (conf->pa_pin != LUAT_CODEC_PA_NONE){
-        luat_gpio_mode(conf->pa_pin, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, !conf->pa_on_level);
-        luat_gpio_set(conf->pa_pin, !conf->pa_on_level);
-        luat_rtos_timer_create(&pa_delay_timer);
     }
 	if (conf->power_on_delay_ms){
 		luat_rtos_task_sleep(conf->power_on_delay_ms);
@@ -44,9 +32,6 @@ 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->after_sleep_ready_time)
-            luat_rtos_timer_start(pa_delay_timer,conf->after_sleep_ready_time,0,pa_delay_timer_cb,(void*)conf);
-        else
             luat_gpio_set(conf->pa_pin, conf->pa_on_level);
 	}else{
         luat_gpio_set(conf->pa_pin, !conf->pa_on_level);

+ 20 - 8
components/multimedia/luat_multimedia_audio.c

@@ -125,12 +125,12 @@ LUAT_WEAK void luat_audio_config_dac(uint8_t multimedia_id, int pin, int level,
     luat_audio_conf_t* audio_conf = luat_audio_get_config(multimedia_id);
     if (audio_conf){
         if (audio_conf->bus_type == LUAT_MULTIMEDIA_AUDIO_BUS_I2S){
-            if (pin != LUAT_CODEC_PA_NONE){
+            if (pin != LUAT_GPIO_NONE){
                 audio_conf->codec_conf.power_pin = pin;
                 audio_conf->codec_conf.power_on_level = level;
                 audio_conf->codec_conf.power_off_delay_time = dac_off_delay_time;
             }else{
-                audio_conf->codec_conf.power_pin = LUAT_CODEC_PA_NONE;
+                audio_conf->codec_conf.power_pin = LUAT_GPIO_NONE;
             }
         }
     }
@@ -176,11 +176,23 @@ LUAT_WEAK uint8_t luat_audio_mic_vol(uint8_t multimedia_id, uint16_t vol){
     return -1;
 }
 
+static LUAT_RT_RET_TYPE pa_delay_timer_cb(LUAT_RT_CB_PARAM){
+    uint8_t multimedia_id = (uint8_t)param;
+    luat_audio_pa(multimedia_id,1, 0);
+}
+
 LUAT_WEAK void luat_audio_pa(uint8_t multimedia_id,uint8_t on, uint32_t delay){
     luat_audio_conf_t* audio_conf = luat_audio_get_config(multimedia_id);
     if (audio_conf){
+        if (audio_conf->codec_conf.pa_pin == LUAT_GPIO_NONE) return;
         if (audio_conf->bus_type == LUAT_MULTIMEDIA_AUDIO_BUS_I2S){
-            audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_SET_PA,on);
+            if (audio_conf->pa_delay_timer!=NULL&&delay>0){
+                luat_rtos_timer_start(audio_conf->pa_delay_timer,delay,0,pa_delay_timer_cb,(void*)multimedia_id);
+            }
+            else{
+                audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_SET_PA,on);
+                audio_conf->pa_on_enable = 1;
+            }
         }
     }
 }
@@ -194,11 +206,11 @@ LUAT_WEAK int luat_audio_init(uint8_t multimedia_id, uint16_t init_vol, uint16_t
 	luat_audio_conf_t* audio_conf = luat_audio_get_config(multimedia_id);
     if (audio_conf == NULL) return -1;
 
-    // if (audio_conf->codec_conf.pa_pin != LUAT_CODEC_PA_NONE){
-    //     luat_gpio_mode(audio_conf->codec_conf.pa_pin, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, !audio_conf->codec_conf.pa_on_level);
-    //     luat_gpio_set(audio_conf->codec_conf.pa_pin, !audio_conf->codec_conf.pa_on_level);
-    //     luat_rtos_timer_create(&pa_delay_timer);
-    // }
+    if (audio_conf->codec_conf.pa_pin != LUAT_GPIO_NONE){
+        luat_gpio_mode(audio_conf->codec_conf.pa_pin, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, !audio_conf->codec_conf.pa_on_level);
+        luat_gpio_set(audio_conf->codec_conf.pa_pin, !audio_conf->codec_conf.pa_on_level);
+        luat_rtos_timer_create(&audio_conf->pa_delay_timer);
+    }
 
     audio_conf->is_sleep = 0;
     audio_conf->last_wakeup_time_ms = luat_mcu_tick64_ms();