Explorar el Código

add:添加静音函数
update:音量控制支持8211

Dozingfiretruck hace 2 años
padre
commit
30da2155f7

+ 1 - 2
components/multimedia/luat_audio_es8311.c

@@ -274,8 +274,7 @@ static int es8311_mode_pwrdown(luat_audio_codec_conf_t* conf){
 
 // mute
 static uint8_t es8311_set_mute(luat_audio_codec_conf_t* conf,uint8_t enable){
-    if (enable)  es8311_write_reg(conf,ES8311_DAC_REG31, 0x20);
-    else es8311_write_reg(conf,ES8311_DAC_REG31, 0x00);
+    es8311_write_reg(conf,ES8311_DAC_REG31, enable?0x20:0x00);
 	return 0;
 }
 

+ 23 - 10
components/multimedia/luat_multimedia_audio.c

@@ -171,14 +171,14 @@ LUAT_WEAK uint16_t luat_audio_vol(uint8_t multimedia_id, uint16_t vol){
     audio_conf->soft_vol = vol<=100?100:vol;
     if (audio_conf->bus_type == LUAT_MULTIMEDIA_AUDIO_BUS_I2S){
         uint8_t sleep_mode = audio_conf->sleep_mode;
-        if (sleep_mode) luat_audio_pm_request(multimedia_id,LUAT_AUDIO_PM_RESUME);
+        if (sleep_mode && audio_conf->codec_conf.codec_opts->no_control!=1) luat_audio_pm_request(multimedia_id,LUAT_AUDIO_PM_RESUME);
         if (vol <= 100){
             audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_SET_VOICE_VOL,vol);
             vol = audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_GET_VOICE_VOL,0);
         }else{
             audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_SET_VOICE_VOL,100);
         }
-        if (sleep_mode) luat_audio_pm_request(multimedia_id,sleep_mode);
+        if (sleep_mode && audio_conf->codec_conf.codec_opts->no_control!=1) luat_audio_pm_request(multimedia_id,sleep_mode);
         return vol;
     }
     return -1;
@@ -201,6 +201,27 @@ LUAT_WEAK uint8_t luat_audio_mic_vol(uint8_t multimedia_id, uint16_t vol){
     return -1;
 }
 
+//TODO
+LUAT_WEAK int luat_audio_play_blank(uint8_t multimedia_id){
+    return -1;
+}
+
+LUAT_WEAK uint8_t luat_audio_mute(uint8_t multimedia_id, uint8_t on){
+    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){
+            uint8_t sleep_mode = audio_conf->sleep_mode;
+            if (sleep_mode && audio_conf->codec_conf.codec_opts->no_control!=1) luat_audio_pm_request(multimedia_id,LUAT_AUDIO_PM_RESUME);
+            if (audio_conf->codec_conf.codec_opts->no_control) luat_audio_play_blank(multimedia_id);
+            audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_SET_MUTE,on);
+            uint8_t mute = audio_conf->codec_conf.codec_opts->control(&audio_conf->codec_conf,LUAT_CODEC_GET_MUTE,0);
+            if (sleep_mode && audio_conf->codec_conf.codec_opts->no_control!=1) luat_audio_pm_request(multimedia_id,sleep_mode);
+            return mute;
+        }
+    }
+    return -1;
+}
+
 LUAT_WEAK int luat_audio_setup_codec(uint8_t multimedia_id, const luat_audio_codec_conf_t *codec_conf){
 	luat_audio_conf_t* audio_conf = luat_audio_get_config(multimedia_id);
     if (audio_conf){
@@ -212,11 +233,6 @@ LUAT_WEAK int luat_audio_setup_codec(uint8_t multimedia_id, const luat_audio_cod
     return -1;
 }
 
-//TODO
-LUAT_WEAK int luat_audio_play_blank(uint8_t multimedia_id){
-    return -1;
-}
-
 LUAT_WEAK int luat_audio_init(uint8_t multimedia_id, uint16_t init_vol, uint16_t init_mic_vol){
 	luat_audio_conf_t* audio_conf = luat_audio_get_config(multimedia_id);
     if (audio_conf == NULL) return -1;
@@ -295,9 +311,6 @@ LUAT_WEAK int luat_audio_pm_request(uint8_t multimedia_id,luat_audio_pm_mode_t m
 			audio_conf->pa_on_enable = 0;
             audio_conf->sleep_mode = LUAT_AUDIO_PM_SHUTDOWN;
             break;
-        case LUAT_AUDIO_PM_MUTE:
-        	luat_audio_play_blank(multimedia_id);
-        	break;
         default:
             return -1;
         }

+ 9 - 1
luat/include/luat_audio.h

@@ -59,7 +59,6 @@ typedef enum{
     LUAT_AUDIO_PM_RESUME = 0,       /* 工作模式 */
     LUAT_AUDIO_PM_STANDBY,          /* 待机模式 */
     LUAT_AUDIO_PM_SHUTDOWN,         /* 关断模式 */
-	LUAT_AUDIO_PM_MUTE,       		/* 静音模式 */
 }luat_audio_pm_mode_t;
 
 
@@ -248,6 +247,15 @@ uint16_t luat_audio_vol(uint8_t multimedia_id, uint16_t vol);
  */
 uint8_t luat_audio_mic_vol(uint8_t multimedia_id, uint16_t vol);
 
+/**
+ * @brief 静音
+ * 
+ * @param multimedia_id 多媒体通道
+ * @param on 1 静音,0 取消静音
+ * @return uint8_t 1 静音,0 取消静音
+ */
+uint8_t luat_audio_mute(uint8_t multimedia_id, uint8_t on);
+
 /**
  * @brief 调试开关
  *