Prechádzať zdrojové kódy

update:luat_rtos_task的创建方式变更,audio播放数据插入可以选择放在插入开头

alienwalker 3 rokov pred
rodič
commit
d94d8167c6

+ 7 - 7
application/src/luat_audio_air105.c

@@ -38,7 +38,7 @@
 #define MP3_FRAME_LEN 4 * 1152
 static Audio_StreamStruct prvAudioStream;
 
-int iot_audio_write_blank_raw(uint32_t multimedia_id, uint8_t cnt);
+int luat_audio_write_blank_raw(uint32_t multimedia_id, uint8_t cnt);
 
 static int32_t luat_audio_wav_decode(void *pData, void *pParam)
 {
@@ -50,7 +50,7 @@ static int32_t luat_audio_wav_decode(void *pData, void *pParam)
 		{
 			if (!Stream->IsStop)
 			{
-				Audio_WriteRaw(Stream, Stream->FileDataBuffer.Data, Stream->FileDataBuffer.Pos);
+				Audio_WriteRaw(Stream, Stream->FileDataBuffer.Data, Stream->FileDataBuffer.Pos, 0);
 			}
 		}
 		else
@@ -120,7 +120,7 @@ static int32_t luat_audio_mp3_decode(void *pData, void *pParam)
 		if (!Stream->IsStop)
 		{
 			STEP(8);
-			Audio_WriteRaw(Stream, Stream->AudioDataBuffer.Data, Stream->AudioDataBuffer.Pos);
+			Audio_WriteRaw(Stream, Stream->AudioDataBuffer.Data, Stream->AudioDataBuffer.Pos, 0);
 			STEP(9);
 		}
 		Stream->AudioDataBuffer.Pos = 0;
@@ -207,7 +207,7 @@ int luat_audio_start_raw(uint8_t multimedia_id, uint8_t audio_format, uint8_t nu
 	{
 		if (prvAudioStream.DummyAudioTime)
 		{
-			iot_audio_write_blank_raw(multimedia_id, prvAudioStream.DummyAudioTime);
+			luat_audio_write_blank_raw(multimedia_id, prvAudioStream.DummyAudioTime);
 		}
 		if (prvAudioStream.PADelayTimer)
 		{
@@ -217,14 +217,14 @@ int luat_audio_start_raw(uint8_t multimedia_id, uint8_t audio_format, uint8_t nu
 	return result;
 }
 
-int iot_audio_write_blank_raw(uint32_t multimedia_id, uint8_t cnt)
+int luat_audio_write_blank_raw(uint32_t multimedia_id, uint8_t cnt)
 {
 	uint32_t total = ((prvAudioStream.SampleRate / 10) * prvAudioStream.ChannelCount * (prvAudioStream.BitDepth / 8) );
 	uint8_t *dummy = malloc(total);
 	memset(dummy, 0, total);
 	for(int i = 0 ; i < cnt; i++)
 	{
-		Audio_WriteRaw(&prvAudioStream, dummy, total);
+		Audio_WriteRaw(&prvAudioStream, dummy, total, 1);
 	}
 	free(dummy);
 	return 0;
@@ -233,7 +233,7 @@ int iot_audio_write_blank_raw(uint32_t multimedia_id, uint8_t cnt)
 int luat_audio_write_raw(uint8_t multimedia_id, uint8_t *data, uint32_t len)
 {
 	if (len)
-		return Audio_WriteRaw(&prvAudioStream, data, len);
+		return Audio_WriteRaw(&prvAudioStream, data, len, 0);
 	return -1;
 }
 

+ 9 - 5
application/src/luat_rtos_air105.c

@@ -30,18 +30,22 @@
 #define LUAT_LOG_TAG "luat.rtos"
 #include "luat_log.h"
 
-int luat_thread_start(luat_thread_t* thread){
-	thread->handle = Task_Create(thread->task_fun, thread->userdata, thread->stack_size, thread->priority, thread->name);
-	return 0;
-}
 
+int luat_rtos_task_create(luat_rtos_task_handle *task_handle, uint32_t stack_size, uint8_t priority, const char *task_name, luat_rtos_task_entry task_fun, void* user_data, uint16_t event_cout)
+{
+	priority = configMAX_PRIORITIES * 100 / priority;
+	if (!priority) priority = 2;
+	if (priority >= configMAX_PRIORITIES) priority -= 1;
+	*task_handle = Task_Create(task_fun, user_data, stack_size >> 2, priority, task_name);
+	return (*task_handle)?0:-1;
+}
 int luat_send_event_to_task(void* task_handle, uint32_t id, uint32_t param1, uint32_t param2, uint32_t param3)
 {
 	Task_SendEvent(task_handle, id, param1, param2, param3);
 	return 0;
 }
 
-int luat_wait_event_from_task(void* task_handle, uint32_t wait_event_id, void *out_event, void *call_back, uint32_t ms)
+int luat_wait_event_from_task(void* task_handle, uint32_t wait_event_id, luat_event_t *out_event, void *call_back, uint32_t ms)
 {
 	return Task_GetEventByMS(task_handle, wait_event_id, out_event, call_back, ms);
 }

+ 4 - 4
bsp/air105/test/test_audio.c

@@ -21,12 +21,12 @@ static int32_t Audio_TestCB(void *pData, void *pParam)
 	//在这里通知某个线程需要获取更多数据
 	if ((TotalLen - ReadLen) > ONCE_READ_LEN)
 	{
-		Audio_WriteRaw(&prvStream, pBuf + ReadLen, ONCE_READ_LEN);
+		Audio_WriteRaw(&prvStream, pBuf + ReadLen, ONCE_READ_LEN, 0);
 		ReadLen += ONCE_READ_LEN;
 	}
 	else
 	{
-		Audio_WriteRaw(&prvStream, pBuf + ReadLen, (TotalLen - ReadLen));
+		Audio_WriteRaw(&prvStream, pBuf + ReadLen, (TotalLen - ReadLen), 0);
 		ReadLen = TotalLen;
 	}
 	return 0;
@@ -46,8 +46,8 @@ void Audio_Test(void)
 	ReadLen = 0;
 	pBuf = wavData;
 	//内存充足的情况下,可以连续写入2次,第一块发送完成后,会立刻发送第二块, 同时回调让用户输入更多数据
-	Audio_WriteRaw(&prvStream, pBuf, ONCE_READ_LEN);
-	Audio_WriteRaw(&prvStream, pBuf + ONCE_READ_LEN, ONCE_READ_LEN);
+	Audio_WriteRaw(&prvStream, pBuf, ONCE_READ_LEN, 0);
+	Audio_WriteRaw(&prvStream, pBuf + ONCE_READ_LEN, ONCE_READ_LEN, 0);
 	ReadLen += 2 * ONCE_READ_LEN;
 }
 

+ 1 - 1
bsp/audio/include/audio_ll_drv.h

@@ -61,7 +61,7 @@ void Audio_GlobalInit(void);
  */
 int32_t Audio_StartRaw(Audio_StreamStruct *pStream);
 
-int32_t Audio_WriteRaw(Audio_StreamStruct *pStream, uint8_t *pByteData, uint32_t ByteLen);
+int32_t Audio_WriteRaw(Audio_StreamStruct *pStream, uint8_t *pByteData, uint32_t ByteLen, uint8_t AddHead);
 
 void Audio_Stop(Audio_StreamStruct *pStream);
 

+ 12 - 4
bsp/audio/src/audio_ll_drv.c

@@ -111,7 +111,7 @@ static int32_t prvAudio_RunDAC(Audio_StreamStruct *pStream)
 	return ERROR_NONE;
 }
 
-static int32_t prvAudio_WriteDACRaw(Audio_StreamStruct *pStream, uint8_t *pByteData, uint32_t ByteLen)
+static int32_t prvAudio_WriteDACRaw(Audio_StreamStruct *pStream, uint8_t *pByteData, uint32_t ByteLen, uint8_t AddHead)
 {
 	uint32_t i, VaildLen;
 	uint32_t DiffBit;
@@ -197,7 +197,15 @@ static int32_t prvAudio_WriteDACRaw(Audio_StreamStruct *pStream, uint8_t *pByteD
 	}
 	uint32_t Critical;
 	Critical = OS_EnterCritical();
-	llist_add_tail(&Block->Node, &pStream->DataHead);
+	if (AddHead)
+	{
+		llist_add(&Block->Node, &pStream->DataHead);
+	}
+	else
+	{
+		llist_add_tail(&Block->Node, &pStream->DataHead);
+	}
+
 	OS_ExitCritical(Critical);
 	if (!pStream->IsHardwareRun && !pStream->IsPause)
 	{
@@ -206,13 +214,13 @@ static int32_t prvAudio_WriteDACRaw(Audio_StreamStruct *pStream, uint8_t *pByteD
 	return ERROR_NONE;
 }
 
-int32_t Audio_WriteRaw(Audio_StreamStruct *pStream, uint8_t *pByteData, uint32_t ByteLen)
+int32_t Audio_WriteRaw(Audio_StreamStruct *pStream, uint8_t *pByteData, uint32_t ByteLen, uint8_t AddHead)
 {
 	if (!ByteLen) {return -ERROR_PARAM_INVALID;}
 	switch(pStream->BusType)
 	{
 	case AUSTREAM_BUS_DAC:
-		return prvAudio_WriteDACRaw(pStream, pByteData, ByteLen);
+		return prvAudio_WriteDACRaw(pStream, pByteData, ByteLen, AddHead);
 	default:
 		return -ERROR_PARAM_INVALID;
 	}