Răsfoiți Sursa

update:audio pa power控制和codec剥离

Dozingfiretruck 2 ani în urmă
părinte
comite
06998bb6d7

+ 6 - 28
components/multimedia/luat_audio_es8311.c

@@ -433,13 +433,6 @@ static inline void es8311_reset(luat_audio_codec_conf_t* conf){
 }
 
 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->power_on_delay_ms){
-		luat_rtos_task_sleep(conf->power_on_delay_ms);
-	}
     luat_rtos_task_sleep(50);
     uint8_t temp1 = es8311_read_reg(conf,ES8311_CHD1_REGFD);
     uint8_t temp2 = es8311_read_reg(conf,ES8311_CHD2_REGFE);
@@ -497,25 +490,13 @@ static int es8311_codec_init(luat_audio_codec_conf_t* conf,uint8_t mode){
 }
 
 static int es8311_codec_deinit(luat_audio_codec_conf_t* conf){
-    if (conf->pa_pin != LUAT_CODEC_PA_NONE){
-        luat_gpio_close(conf->pa_pin);
-    }
-    if (conf->power_pin != LUAT_CODEC_PA_NONE){
-        luat_gpio_set(conf->power_pin, !conf->power_on_level);
-        luat_gpio_close(conf->power_pin);
-    }
+    //也提出去做一个audio的close
+    // if (conf->pa_pin != LUAT_CODEC_PA_NONE){
+    //     luat_gpio_close(conf->pa_pin);
+    // }
     return 0;
 }
 
-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){
-            luat_gpio_set(conf->pa_pin, conf->pa_on_level);
-	}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){
     switch (cmd){
         case LUAT_CODEC_MODE_RESUME:
@@ -557,9 +538,6 @@ static int es8311_codec_control(luat_audio_codec_conf_t* conf,luat_audio_codec_c
         case LUAT_CODEC_SET_CHANNEL:
             es8311_codec_channels(conf,(uint8_t)data);
             break;
-        case LUAT_CODEC_SET_PA:
-            es8311_codec_pa(conf,(uint8_t)data);
-            break;
         default:
             break;
     }
@@ -568,13 +546,13 @@ static int es8311_codec_control(luat_audio_codec_conf_t* conf,luat_audio_codec_c
 
 static int es8311_codec_start(luat_audio_codec_conf_t* conf){
     es8311_mode_resume(conf,LUAT_CODEC_MODE_ALL);
-    es8311_codec_pa(conf,1);
+    luat_audio_pa(conf->multimedia_id,1, 0);
     return 0;
 }
 
 static int es8311_codec_stop(luat_audio_codec_conf_t* conf){
+    luat_audio_pa(conf->multimedia_id,0, 0);
     es8311_mode_standby(conf,LUAT_CODEC_MODE_ALL);
-    es8311_codec_pa(conf,0);
     return 0;
 }
 

+ 15 - 38
components/multimedia/luat_audio_tm8211.c

@@ -7,48 +7,25 @@
 #include "luat_log.h"
 
 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->power_on_delay_ms){
-		luat_rtos_task_sleep(conf->power_on_delay_ms);
-	}
     return 0;
 }
 
 static int tm8211_codec_deinit(luat_audio_codec_conf_t* conf){
-    if (conf->pa_pin != LUAT_CODEC_PA_NONE){
-        luat_gpio_set(conf->pa_pin, !conf->pa_on_level);
-        luat_gpio_close(conf->pa_pin);
-    }
-    if (conf->power_pin != LUAT_CODEC_PA_NONE){
-        luat_gpio_set(conf->power_pin, !conf->power_on_level);
-        luat_gpio_close(conf->power_pin);
-    }
+    // if (conf->pa_pin != LUAT_CODEC_PA_NONE){
+    //     luat_gpio_set(conf->pa_pin, !conf->pa_on_level);
+    //     luat_gpio_close(conf->pa_pin);
+    // }
     return 0;
 }
 
-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){
-            luat_gpio_set(conf->pa_pin, conf->pa_on_level);
-	}else{
-        luat_gpio_set(conf->pa_pin, !conf->pa_on_level);
-	}
-}
-
 static int tm8211_mode_pwrdown(luat_audio_codec_conf_t* conf){
-    if (conf->power_pin != LUAT_CODEC_PA_NONE){
-        luat_gpio_set(conf->power_pin, !conf->power_on_level);
-    }
+    // if (conf->power_pin != LUAT_CODEC_PA_NONE){
+    //     luat_gpio_set(conf->power_pin, !conf->power_on_level);
+    // }
 }
 
 static int tm8211_codec_control(luat_audio_codec_conf_t* conf,luat_audio_codec_ctl_t cmd,uint32_t data){
     switch (cmd){
-        case LUAT_CODEC_SET_PA:
-            tm8211_codec_pa(conf,(uint8_t)data);
-            break;
         case LUAT_CODEC_MODE_PWRDOWN:
             tm8211_mode_pwrdown(conf);
             break;
@@ -59,18 +36,18 @@ static int tm8211_codec_control(luat_audio_codec_conf_t* conf,luat_audio_codec_c
 }
 
 static int tm8211_codec_start(luat_audio_codec_conf_t* conf){
-	tm8211_codec_pa(conf,1);
-    if (conf->power_pin != LUAT_CODEC_PA_NONE){
-        luat_gpio_set(conf->power_pin, conf->power_on_level);
-    }
+	luat_audio_pa(conf->multimedia_id,1, 0);
+    // if (conf->power_pin != LUAT_CODEC_PA_NONE){
+    //     luat_gpio_set(conf->power_pin, conf->power_on_level);
+    // }
     return 0;
 }
 
 static int tm8211_codec_stop(luat_audio_codec_conf_t* conf){
-	tm8211_codec_pa(conf,0);
-    if (conf->power_pin != LUAT_CODEC_PA_NONE){
-        luat_gpio_set(conf->power_pin, !conf->power_on_level);
-    }
+	luat_audio_pa(conf->multimedia_id,0, 0);
+    // if (conf->power_pin != LUAT_CODEC_PA_NONE){
+    //     luat_gpio_set(conf->power_pin, !conf->power_on_level);
+    // }
     return 0;
 }
 

+ 19 - 23
components/multimedia/luat_multimedia_audio.c

@@ -53,7 +53,7 @@ LUAT_WEAK int luat_audio_start_raw(uint8_t multimedia_id, uint8_t audio_format,
             i2s_conf->sample_rate = sample_rate,
             luat_i2s_modify(audio_conf->codec_conf.i2s_id,i2s_conf->channel_format,i2s_conf->data_bits, i2s_conf->sample_rate);
             audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_SET_RATE,sample_rate);
-            audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_SET_PA,audio_conf->codec_conf.pa_on_level);
+            luat_audio_pa(multimedia_id,1,0);
         }
     }
     return 0;
@@ -91,10 +91,10 @@ LUAT_WEAK int luat_audio_pause_raw(uint8_t multimedia_id, uint8_t is_pause){
     if (audio_conf){
         if (audio_conf->bus_type == LUAT_MULTIMEDIA_AUDIO_BUS_I2S){
             if (is_pause){
-                audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_SET_PA,!audio_conf->codec_conf.pa_on_level);
+                luat_audio_pa(multimedia_id,0,0);
                 luat_i2s_pause(audio_conf->codec_conf.i2s_id);
             }else{
-                audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_SET_PA,audio_conf->codec_conf.pa_on_level);
+                luat_audio_pa(multimedia_id,1,0);
                 luat_i2s_resume(audio_conf->codec_conf.i2s_id);
             }
             return 0;
@@ -108,15 +108,15 @@ LUAT_WEAK void luat_audio_config_pa(uint8_t multimedia_id, uint32_t pin, int lev
     if (audio_conf){
         if (audio_conf->bus_type == LUAT_MULTIMEDIA_AUDIO_BUS_I2S){
             if (pin != LUAT_GPIO_NONE && pin<LUAT_GPIO_PIN_MAX && pin>0){
-                audio_conf->codec_conf.pa_pin = pin;
-                audio_conf->codec_conf.pa_on_level = level;
+                audio_conf->pa_pin = pin;
+                audio_conf->pa_on_level = level;
                 luat_gpio_mode(pin, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, !level);
                 luat_gpio_set(pin, !level);
             }else{
-                audio_conf->codec_conf.pa_pin = LUAT_GPIO_NONE;
+                audio_conf->pa_pin = LUAT_GPIO_NONE;
             }
-            audio_conf->codec_conf.after_sleep_ready_time = dummy_time_len;
-            audio_conf->codec_conf.pa_delay_time = pa_delay_time;
+            audio_conf->after_sleep_ready_time = dummy_time_len;
+            audio_conf->pa_delay_time = pa_delay_time;
         }
     }
 }
@@ -126,11 +126,11 @@ LUAT_WEAK void luat_audio_config_dac(uint8_t multimedia_id, int pin, int level,
     if (audio_conf){
         if (audio_conf->bus_type == LUAT_MULTIMEDIA_AUDIO_BUS_I2S){
             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;
+                audio_conf->power_pin = pin;
+                audio_conf->power_on_level = level;
+                audio_conf->power_off_delay_time = dac_off_delay_time;
             }else{
-                audio_conf->codec_conf.power_pin = LUAT_GPIO_NONE;
+                audio_conf->power_pin = LUAT_GPIO_NONE;
             }
         }
     }
@@ -184,13 +184,13 @@ static LUAT_RT_RET_TYPE pa_delay_timer_cb(LUAT_RT_CB_PARAM){
 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->pa_pin == LUAT_GPIO_NONE) return;
         if (audio_conf->bus_type == LUAT_MULTIMEDIA_AUDIO_BUS_I2S){
             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);
+                luat_gpio_set(audio_conf->pa_pin, on?audio_conf->pa_on_level:!audio_conf->pa_on_level);
                 audio_conf->pa_on_enable = 1;
             }
         }
@@ -206,9 +206,7 @@ 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_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);
+    if (audio_conf->pa_pin != LUAT_GPIO_NONE){
         luat_rtos_timer_create(&audio_conf->pa_delay_timer);
     }
 
@@ -229,9 +227,7 @@ LUAT_WEAK int luat_audio_init(uint8_t multimedia_id, uint16_t init_vol, uint16_t
         result = audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_SET_MIC_VOL, init_mic_vol);
         if (result) return result;
 
-        luat_audio_pm_request(multimedia_id,LUAT_AUDIO_PM_STANDBY);
-        // result = audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_MODE_STANDBY,LUAT_CODEC_MODE_ALL);
-        // if (result) return result;
+        luat_audio_pm_request(multimedia_id,LUAT_AUDIO_PM_STANDBY); //默认进入standby模式
 
         //不应该默认进normal模式,会增加功耗,无pa控制应该根据pa是否传入有效引脚去播放白音或者用户自己控制
         // result = audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_MODE_RESUME,LUAT_CODEC_MODE_ALL);
@@ -274,9 +270,9 @@ LUAT_WEAK int luat_audio_pm_request(uint8_t multimedia_id,luat_audio_pm_mode_t m
             audio_conf->is_sleep = 1;
             break;
         case LUAT_AUDIO_PM_SHUTDOWN:
-            audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_SET_PA,0);
-			if (audio_conf->codec_conf.power_off_delay_time)
-				luat_rtos_task_sleep(audio_conf->codec_conf.power_off_delay_time);
+            luat_audio_pa(multimedia_id,0,0);
+			if (audio_conf->power_off_delay_time)
+				luat_rtos_task_sleep(audio_conf->power_off_delay_time);
             audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_MODE_PWRDOWN,0);
             //非控制的关闭i2s输出?
             // luat_i2s_close(audio_conf->codec_conf.i2s_id);

+ 7 - 0
luat/include/luat_audio.h

@@ -46,6 +46,13 @@ typedef struct luat_audio_conf {
     uint8_t wakeup_ready;
     uint8_t pa_on_enable;
     uint8_t record_mode;
+    uint8_t pa_pin;                                                     // pa pin
+	uint8_t pa_on_level;                                                // pa 使能电平
+    uint32_t after_sleep_ready_time;                                    // 
+    uint32_t pa_delay_time;                                             // 
+	uint8_t power_pin;													// 电源控制
+	uint8_t power_on_level;                                             // 电源使能电平
+	uint32_t power_off_delay_time;                                      // 电源关闭后延时时间 
 } luat_audio_conf_t;
 
 typedef enum{

+ 0 - 10
luat/include/luat_audio_codec.h

@@ -3,7 +3,6 @@
 #define __LUAT_AUDIO_CODEC_H__
 
 typedef enum {
-
     LUAT_CODEC_SET_MUTE = 0,        // 静音设置
     LUAT_CODEC_GET_MUTE,            // 获取静音状态
     LUAT_CODEC_SET_VOICE_VOL,       // 音量设置
@@ -15,7 +14,6 @@ typedef enum {
     LUAT_CODEC_SET_RATE,            // 采样率设置
     LUAT_CODEC_SET_BITS,            // 采样位设置
     LUAT_CODEC_SET_CHANNEL,         // 通道设置
-    LUAT_CODEC_SET_PA,              // pa控制
     
     LUAT_CODEC_MODE_RESUME,
     LUAT_CODEC_MODE_STANDBY,
@@ -46,14 +44,6 @@ typedef struct luat_audio_codec_conf {
     int i2s_id;                                                         // i2s id
     const struct luat_audio_codec_opts* codec_opts;                     // codec 驱动函数
     uint8_t multimedia_id;                                              // 多媒体id
-    uint8_t pa_pin;                                                     // pa pin
-	uint8_t pa_on_level;                                                // pa 使能电平
-    uint32_t after_sleep_ready_time;                                    // 
-    uint32_t pa_delay_time;                                             // 
-	uint8_t power_pin;													// 电源控制
-	uint8_t power_on_level;                                             // 电源使能电平
-    uint32_t power_on_delay_ms;                                         // 电源使能后延时时间
-	uint32_t power_off_delay_time;                                      // 电源关闭后延时时间 
 } luat_audio_codec_conf_t;
 
 typedef struct luat_audio_codec_opts{