Răsfoiți Sursa

add:外部audio pa控制
update:注释更详细一点

alienwalker 3 ani în urmă
părinte
comite
652493ac57

+ 17 - 0
components/multimedia/luat_lib_multimedia.c

@@ -212,6 +212,22 @@ static int l_audio_play_wait_end(lua_State *L) {
     return 1;
 }
 
+
+/*
+配置一个音频通道的特性,比如实现自动控制PA开关。注意这个不是必须的,一般在调用play的时候才需要自动控制,其他情况比如你手动控制播放时,就可以自己控制PA开关
+@api audio.config(id, paPin, onLevel)
+@int 音频通道
+@int PA控制IO
+@int PA打开时的电平
+@return 无
+@usage
+audio.config(0, pin.PC0, 1)	--PA控制脚是PC0,高电平打开
+*/
+static int l_audio_config(lua_State *L) {
+    luat_audio_config_pa(luaL_checkinteger(L, 1), luaL_optinteger(L, 2, 255), luaL_optinteger(L, 3, 1));
+    return 0;
+}
+
 /**
 创建编解码用的codec
 @api codec.create(codec.MP3)
@@ -535,6 +551,7 @@ static const rotable_Reg_t reg_audio[] =
     { "on",            ROREG_FUNC(l_audio_raw_on)},
 	{ "play",		   ROREG_FUNC(l_audio_play)},
 	{ "isEnd",		   ROREG_FUNC(l_audio_play_wait_end)},
+	{ "config",			ROREG_FUNC(l_audio_config)},
     { "PCM",           ROREG_INT(MULTIMEDIA_DATA_TYPE_PCM)},
 	{ "MORE_DATA",     ROREG_INT(MULTIMEDIA_CB_AUDIO_NEED_DATA)},
 	{ "DONE",          ROREG_INT(MULTIMEDIA_CB_AUDIO_DONE)},

+ 3 - 3
luat/include/luat_zbuff.h

@@ -16,10 +16,10 @@
 
 typedef struct luat_zbuff {
     uint8_t* addr;      //数据存储的地址
-    size_t len;       //数据的长度
+    size_t len;       //实际分配空间的长度
     union {
-    	size_t cursor;    //目前的指针位置
-    	size_t used;	//已经保存的数据量
+    	size_t cursor;    //目前的指针位置,表明了处理了多少数据
+    	size_t used;	//已经保存的数据量,表明了存了多少数据
     };
 
     uint32_t width; //宽度

+ 16 - 15
luat/modules/luat_lib_zbuff.c

@@ -1010,7 +1010,7 @@ int __zbuff_resize(luat_zbuff_t *buff, uint32_t new_size)
 }
 
 /**
-调整zbuff的大小(与当前指针位置无关;执行后如果指针超过zbuff大小,会被更改为指向最后一个字节
+调整zbuff实际分配空间的大小,类似于realloc的效果,new = realloc(old, n),可以扩大或者缩小(如果缩小后len小于了used,那么used=新len
 @api buff:resize(n)
 @int 新空间大小
 @usage
@@ -1028,17 +1028,17 @@ static int l_zbuff_resize(lua_State *L)
 }
 
 /**
-zbuff动态写数据,类似于memcpy效果,当原有空间不足时动态扩大空间(从当前指针位置开始;执行后指针会向后移动)
+zbuff动态写数据,类似于memcpy效果,当原有空间不足时动态扩大空间
 @api buff:copy(start, para,...)
 @int 写入buff的起始位置,如果不为数字,则为buff的used,如果小于0,则从used往前数,-1 = used - 1
 @any 写入buff的数据,string或zbuff者时为一个参数,number时可为多个参数
 @return number 数据成功写入的长度
 @usage
-local len = buff:copy(nil, "123") -- 从buff当前指针位置开始写入数据, 指针相应地往后移动,返回写入的数据长度
-local len = buff:copy(0, "123") -- 从位置0写入数据, 返回写入的数据长度
-local len = buff:copy(2, 0x1a,0x30,0x31,0x32,0x00,0x01)  -- 从位置2开始,按数值写入多个字节数据
-local len = buff:copy(9, buff2)  -- 从位置9开始,合并入buff2里内容
-local len = buff:copy(5, buff2, 10, 1024)  -- 类似于memcpy(&buff[5], &buff2[10], 1024)
+local len = buff:copy(nil, "123") -- 类似于memcpy(&buff[used], "123", 3) used+= 3 从buff开始写入数据,指针相应地往后移动
+local len = buff:copy(0, "123") -- 类似于memcpy(&buff[0], "123", 3) if (used < 3) used = 3 从位置0写入数据,指针有可能会移动
+local len = buff:copy(2, 0x1a,0x30,0x31,0x32,0x00,0x01)  -- 类似于memcpy(&buff[2], [0x1a,0x30,0x31,0x32,0x00,0x01], 6) if (used < (2+6)) used = (2+6)从位置2开始,按数值写入多个字节数据
+local len = buff:copy(9, buff2)  -- 类似于memcpy(&buff[9], &buff2[0], buff2的used) if (used < (9+buff2的used)) used = (9+buff2的used) 从位置9开始,合并入buff2里0~used的内容
+local len = buff:copy(5, buff2, 10, 1024)  -- 类似于memcpy(&buff[5], &buff2[10], 1024) if (used < (5+1024)) used = (5+1024)
  */
 static int l_zbuff_copy(lua_State *L)
 {
@@ -1118,7 +1118,7 @@ static int l_zbuff_copy(lua_State *L)
 }
 
 /**
-获取zbuff的实际数据量大小(与当前指针位置有关;执行后指针位置不变)
+获取zbuff的实际数据量大小,注意这个不同于分配的空间大小
 @api buff:used()
 @return int zbuff的实际数据量大小
 @usage
@@ -1132,12 +1132,13 @@ static int l_zbuff_used(lua_State *L)
 }
 
 /**
-删除zbuff 0~used范围内的一段数据(可能会与当前指针位置有关;执行后如果指针超过zbuff大小,会被更改为指向最后一个字节)
+删除zbuff 0~used范围内的一段数据,注意只是改变了used的值,并不是真的在ram里去清除掉数据
 @api buff:del(offset,length)
-@int 起始位置, 默认0,如果<0则从used往前数,-1 = used - 1
-@int 长度,默认为cursor指针位置
+@int 起始位置start, 默认0,如果<0则从used往前数,比如 -1 那么start= used - 1
+@int 长度del_len,默认为used,如果start + del_len数值大于used,会强制调整del_len = used - start
 @usage
 buff:del(1,4)	--从位置1开始删除4个字节数据
+buff:del(-1,4)	--从位置used-1开始删除4个字节数据,但是这肯定会超过used,所以del_len会调整为1,实际上就是删掉了最后一个字节
 */
 static int l_zbuff_del(lua_State *L)
 {
@@ -1187,7 +1188,7 @@ static uint32_t BytesGetLe32(const void *ptr)
 }
 
 /**
-按起始位置和长度0~used范围内取出数据,如果是1,2,4,8字节,根据后续参数转换成浮点或者整形(与当前指针位置有关;执行后指针位置不变)
+按起始位置和长度0~used范围内取出数据,如果是1,2,4,8字节,根据后续参数转换成浮点或者整形
 @api buff:query(offset,length,isbigend,issigned,isfloat)
 @int 数据的起始位置(起始位置为0)
 @int 数据的长度
@@ -1325,7 +1326,7 @@ static int l_zbuff_query(lua_State *L)
 }
 
 /**
-zbuff的类似于memset操作(与当前指针位置无关;执行后指针位置不变)
+zbuff的类似于memset操作,类似于memset(&buff[start], num, len),当然有ram越界保护,会对len有一定的限制
 @api buff:set(start, num, len)
 @int 可选,开始位置,默认为0,
 @int 可选,默认为0。要设置为的值
@@ -1333,7 +1334,7 @@ zbuff的类似于memset操作(与当前指针位置无关;执行后指针位
 @usage
 -- 全部初始化为0
 buff:set() --等同于 memset(buff, 0, sizeof(buff))
-buff:set(8) --等同于 memset(buff, 0, sizeof(buff) - 8)
+buff:set(8) --等同于 memset(&buff[8], 0, sizeof(buff) - 8)
 buff:set(0, 0x55) --等同于 memset(buff, 0x55, sizeof(buff))
 buff:set(4, 0xaa, 12) --等用于 memset(&buff[4], 0xaa, 12)
  */
@@ -1387,7 +1388,7 @@ static const luaL_Reg lib_zbuff[] = {
     //{"__len", l_zbuff_len},
     //{"__newindex", l_zbuff_newindex},
     //{"__gc", l_zbuff_gc},
-	//以下为扩展用法,数据的增减操作尽量不要和上面的read,write一起使用
+	//以下为扩展用法,数据的增减操作尽量不要和上面的read,write一起使用,对数值指针的用法不一致
 	{"copy", l_zbuff_copy},
 	{"set", l_zbuff_set},
 	{"query",l_zbuff_query},