Dozingfiretruck 2 лет назад
Родитель
Сommit
c7799eeb28
2 измененных файлов с 40 добавлено и 13 удалено
  1. 27 1
      components/multimedia/luat_lib_multimedia_audio.c
  2. 13 12
      luat/include/luat_audio.h

+ 27 - 1
components/multimedia/luat_lib_multimedia_audio.c

@@ -341,6 +341,8 @@ static int l_audio_vol(lua_State *L) {
     return 1;
 }
 
+LUAT_WEAK luat_audio_conf_t *luat_audio_get_config(uint8_t multimedia_id){return NULL;}
+
 /*
 配置一个音频通道的硬件输出总线,只有对应soc软硬件平台支持才设置对应类型
 @api audio.setBus(id, bus_type)
@@ -353,10 +355,34 @@ audio.setBus(0, audio.BUS_SOFT_DAC)	--通道0的硬件输出通道设置为软
 audio.setBus(0, audio.BUS_I2S)	--通道0的硬件输出通道设置为I2S
 */
 static int l_audio_set_output_bus(lua_State *L) {
+    size_t len;
+    int id = luaL_checkinteger(L, 1);
+    luat_audio_conf_t* audio_conf = luat_audio_get_config(id);
     int tp = luaL_checkinteger(L, 2);
-	luat_audio_set_bus_type(tp);
+    if (audio_conf!=NULL && lua_istable(L,3) && tp==MULTIMEDIA_AUDIO_BUS_I2S){
+		lua_pushstring(L, "chip");
+		if (LUA_TSTRING == lua_gettable(L, 3)) {
+            const char *chip = luaL_checklstring(L, -1,&len);
+            if(strcmp(chip,"es8311") == 0){
+                audio_conf->codec_conf.codec_opts = &codec_opts_es8311;
+            }
+		}
+		lua_pop(L, 1);
+		lua_pushstring(L, "i2cid");
+		if (LUA_TNUMBER == lua_gettable(L, 3)) {
+			audio_conf->codec_conf.i2c_id = luaL_checknumber(L, -1);
+		}
+		lua_pop(L, 1);
+		lua_pushstring(L, "i2sid");
+		if (LUA_TNUMBER == lua_gettable(L, 3)) {
+			audio_conf->codec_conf.i2s_id = luaL_checknumber(L, -1);
+		}
+		lua_pop(L, 1);
+    }
+    luat_audio_set_bus_type(tp);
     return 0;
 }
+
 LUAT_WEAK void luat_audio_set_debug(uint8_t on_off)
 {
 	(void)on_off;

+ 13 - 12
luat/include/luat_audio.h

@@ -42,20 +42,18 @@ typedef enum {
     LUAT_CODEC_CTL_PA,          // pa控制
 } luat_audio_codec_ctl_t;
 
+struct luat_audio_conf;
 struct luat_audio_codec_opts;
 
 typedef struct luat_audio_codec_conf {
-    int i2c_id;
-    int i2s_id;
-    int samplerate;         //16k
-    int bits;               //16
-    int channels;           //1ch/2ch
-	uint8_t vol;
-    uint8_t pa_pin;
-	uint8_t pa_on_level;
-    uint32_t dummy_time_len;
-    uint32_t pa_delay_time;
-    const struct luat_audio_codec_opts* codec_opts;
+    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 pa_delay_time;                                             // pa使能后延迟时间
+    struct luat_audio_codec_opts* codec_opts;
+    struct luat_audio_conf* audio_conf;
 } luat_audio_codec_conf_t;
 
 typedef struct luat_audio_codec_opts{
@@ -70,6 +68,10 @@ typedef struct luat_audio_codec_opts{
 typedef struct luat_audio_conf {
     uint8_t multimedia_id;
     uint8_t bus_type;
+    int samplerate;         //16k
+    int bits;               //16
+    int channels;           //1ch/2ch
+	uint8_t vol;
     luat_audio_codec_conf_t codec_conf;
 } luat_audio_conf_t;
 
@@ -188,6 +190,5 @@ uint16_t luat_audio_vol(uint8_t multimedia_id, uint16_t vol);
 void luat_audio_set_bus_type(uint8_t bus_type);
 
 luat_audio_conf_t *luat_audio_get_config(uint8_t multimedia_id);
-int luat_audio_set_config(uint8_t multimedia_id,luat_audio_conf_t * config);
 
 #endif