⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sys_debug.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 C
📖 第 1 页 / 共 5 页
字号:
	switch(u8data)
	{
		case 0x08 :     //Backspace
	        if((u8CmdCount) > 0)
			{
			    (u8CmdCount)--;
				CT_UART_PutString("\b \b");
			}
		    break;
		case 0x0d :     //Enter
			if ( memcmp(au8CmdBuf, "ho01", 4)==0 )
			{
				CT_UART_PutString("=====> ho01\n");
				CT_OS_TaskInfo();
//				_dump_stack_info();
				u8CmdCount=0;
				memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
				CT_UART_PutString("\n\rCDAT >>");
				break;
			}
			if ( memcmp(au8CmdBuf, "ho02", 4)==0 )
			{
			    bGetHISRInfo = TRUE;
				CT_OS_HISRInfo();
				u8CmdCount=0;
				memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
				CT_UART_PutString("\n\rCDAT >>");
				break;
			}
			if ( memcmp(au8CmdBuf, "ho03", 4)==0 )
			{
				CT_UART_PutString("=====> ho03\n");
				CT_OS_SemaphoreInfo();
				u8CmdCount=0;
				memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
				CT_UART_PutString("\n\rCDAT >>");
				break;
			}
#ifdef CTOS_ECOS			
			if ( memcmp(au8CmdBuf, "ho04", 4)==0 )
			{
				u8 *pTest;
				u32 j = 0, k = 0;
				
				CT_UART_PutString("=====> ho04\n");
				pTest = (u8 *)au8Argv;
				u8Argc = 0;
				if (Usrdebug_ParseCommand(&au8CmdBuf[0], &u8Argc, pTest) == DRV_OK)
				{
					CT_OS_DumpPCStackByTaskId(DHConvert(&(pTest[1 * DEBUG_MAX_ARGV_LENGTH])), DHConvert(&(pTest[2 * DEBUG_MAX_ARGV_LENGTH])));
				}
				/*
				* Clean argv and argc.
				*/
				for (j = 0; j < u8Argc; j++)
				{
					for (k = 0; k < DEBUG_MAX_ARGV_LENGTH; k++)
					{
						au8Argv[j][k] = 0;
					}
				}
				u8Argc = 0;
				u8CmdCount=0;
				memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
				CT_UART_PutString("\n\rCDAT >>");
				break;
			}
			if ( memcmp(au8CmdBuf, "ho05", 4)==0 )
			{
				CT_UART_PutString("=====> ho05\n");
				CT_OS_MonitorTimerCreate();
				u8CmdCount=0;
				memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
				CT_UART_PutString("\n\rCDAT >>");
				break;
			}
			if ( memcmp(au8CmdBuf, "ho06", 4)==0 )
			{
				CT_UART_PutString("=====> ho06\n");
				CT_OS_MonitorTimerDelete();
				u8CmdCount=0;
				memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
				CT_UART_PutString("\n\rCDAT >>");
				break;
			}

			if ( memcmp(au8CmdBuf, "ho07", 4)==0 )
			{
				u8 *pTest;
				u32 j = 0, k = 0;
				
				CT_UART_PutString("=====> ho07\n");
				pTest = (u8 *)au8Argv;
				u8Argc = 0;
				if (Usrdebug_ParseCommand(&au8CmdBuf[0], &u8Argc, pTest) == DRV_OK)
				{
					CT_OS_SetPriority (DHConvert(&(pTest[1 * DEBUG_MAX_ARGV_LENGTH])), DHConvert(&(pTest[2 * DEBUG_MAX_ARGV_LENGTH])));
				}
				/*
				* Clean argv and argc.
				*/
				for (j = 0; j < u8Argc; j++)
				{
					for (k = 0; k < DEBUG_MAX_ARGV_LENGTH; k++)
					{
						au8Argv[j][k] = 0;
					}
				}
				u8Argc = 0;
				u8CmdCount=0;
				memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
				CT_UART_PutString("\n\rCDAT >>");
				break;
			}

			if ( memcmp(au8CmdBuf, "ho08", 4)==0 )
			{
				u8 *pTest;
				u32 j = 0, k = 0;
				
				CT_UART_PutString("=====> ho08\n");
				pTest = (u8 *)au8Argv;
				u8Argc = 0;
				if (Usrdebug_ParseCommand(&au8CmdBuf[0], &u8Argc, pTest) == DRV_OK)
				{
					CT_OS_TrackingTask(TRUE, DHConvert(&(pTest[1 * DEBUG_MAX_ARGV_LENGTH])) );
				}
				/*
				* Clean argv and argc.
				*/
				for (j = 0; j < u8Argc; j++)
				{
					for (k = 0; k < DEBUG_MAX_ARGV_LENGTH; k++)
					{
						au8Argv[j][k] = 0;
					}
				}
				u8Argc = 0;
				u8CmdCount=0;
				memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
				CT_UART_PutString("\n\rCDAT >>");
				break;
			}
			if ( memcmp(au8CmdBuf, "ho09", 4)==0 )
			{
				CT_UART_PutString("=====> ho09\n");
				sprintf(au8String, "\nfd_point= %d", fd_point);
				CT_UART_PutString(au8String);
				u8CmdCount=0;
				memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
				CT_UART_PutString("\n\rCDAT >>");
				break;
			}

#endif /* end #ifdef CTOS_ECOS */


		#ifdef TFT_ENABLE
			// for TFT debug tools
			if(au8CmdBuf[0] == 't'/*DVB_DEBUG_TOOLS_START_BINARY_MODE_CMD*/)
			{
				// Enable
				DVB_DebugTools(TRUE);
				u8CmdCount=0;
				memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
				// blocking inside, recive cmd to exit
				Sys_DebugToolsCMD();
				break;
			}
		#endif

		    if((u8CmdCount) < USRDEBUG_MAX_COMMAND_LENGTH)
		    {
		        au8CmdBuf[(u8CmdCount)++] = 0;
		    }
		
		    if(u8CmdCount>1)
			{
				if(EN_CTOS_SUCCESS!=CT_OS_FreeSemaphore(&AuUsrDebugSemore))
				{
					CT_UART_PutString("\r\n>>Error,CT_OS_FreeSemaphore");
				}
			}else
			{
				u8CmdCount=0;
				memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
				while(CT_UART_Data_Ready()==DRV_OK)
				{
					CT_UART_ReadChar_NoCheck();
				}
			}
			CT_UART_PutString("\n\rCDAT >>");
		    break;
		case 0x1B:
				CT_UART_PutString("\n\rCDAT >>");
				u8CmdCount=0;
				memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
				while(CT_UART_Data_Ready()==DRV_OK)
				{
					CT_UART_ReadChar_NoCheck();
				}
				break;
		default :
		    if((u8CmdCount) < USRDEBUG_MAX_COMMAND_LENGTH)
		    {
		        au8CmdBuf[(u8CmdCount)++] = u8data;
				CT_UART_PutChar(u8data);
		    }else
			{
				CT_UART_PutString("command buffer overflow\n");
			}
		    break;
	}
}

void DVB_DramDump(u32 u32address, u32 u32length)
{
	u32 u32PageCount;
	u32 u32ByteCount;
	u32 u32PageStartAddr;
	u32 u32PageEndAddr;
	u32 u32CharStartAddr;
	u32 u32CharEndAddr;
	u32 u32CurrentAddr;
	
	u32CharStartAddr = u32address ;
	u32PageStartAddr = u32CharStartAddr & 0xFFFFFFF0L ;
	u32CharEndAddr   = u32CharStartAddr + u32length ;
	u32PageEndAddr   = (u32CharEndAddr + 15)&0xFFFFFFF0L ;
	u32CurrentAddr   = u32PageStartAddr;
	CMD_OUT(("\n"));
	for(u32PageCount=u32PageStartAddr; u32PageCount<u32PageEndAddr; u32PageCount=u32PageCount+16)
	{
		CMD_OUT(("%08lX : ",u32PageCount ));
		for(u32ByteCount=0;u32ByteCount<16;u32ByteCount++)
		{
			if( (u32CurrentAddr < u32CharStartAddr) || (u32CharEndAddr <=u32CurrentAddr) )
			{
				CMD_OUT(("   "));
			}	
			else
			{
				CMD_OUT(("%02X ", *((u8 *)u32CurrentAddr) ));
			}	
			u32CurrentAddr++ ;
		}

		CMD_OUT(("| "));

		u32CurrentAddr -= 16 ;
		for(u32ByteCount=0;u32ByteCount<16;u32ByteCount++)
		{
			if( (u32CurrentAddr < u32CharStartAddr) || (u32CharEndAddr <=u32CurrentAddr) )
			{
				CMD_OUT((" "));
			}
			else
			{
				if( (32 <= *((u8 *)u32CurrentAddr)) && ((*((u8 *)u32CurrentAddr)) <= 126) )
				{
					CMD_OUT(("%c",*((u8 *)u32CurrentAddr) ));
				}
				else
				{
					CMD_OUT(("."));
				}
			}
			u32CurrentAddr++ ;
		}
		CMD_OUT(("\n"));
	}
	CMD_OUT(("\n"));
}

#ifdef TFT_ENABLE
void Sys_DebugToolsTimeout(void)
{
	// Clear CMD buffer
	u8CmdCount = 0;
	memset(au8CmdBuf, 0, USRDEBUG_MAX_COMMAND_LENGTH);
}
u32 Sys_DebugToolsValueConverter(u8 *pu8Value)
{
	if(pu8Value == NULL)
	{
		return 0;
	}

	return (u32)((pu8Value[0] << 24) + (pu8Value[1] << 16) + (pu8Value[2] << 8) + pu8Value[3]);
}

void Sys_DebugToolsCMD(void)
{
	u8 u8Data;
	u32 u32TimeOutTick = 0;
	bool8 b8CMDReady = FALSE;

	CT_OS_Local_Control_Interrupts(CTOS_DISABLE_INTERRUPTS);
	CT_IRQ_Enable(INTR_UART_1);

	while(TRUE)
	{
		// Get CMD byte by byte
		while(CT_UART_Data_Ready() == DRV_OK)
		{
			// Recive first byte to start timeout
			if(u8CmdCount == 0)
			{
				u32TimeOutTick = DVB_TimerGet();
			}

			u8Data = CT_UART_GetChar();
			if((u8CmdCount) < USRDEBUG_MAX_COMMAND_LENGTH)
			{
				au8CmdBuf[(u8CmdCount)++] = u8Data;
			}

			// Get CMD
			if( (u8Data == 0x0d) || // Get Other CMD
				((au8CmdBuf[0] == 'e'/*DVB_DEBUG_TOOLS_END_BINARY_MODE_CMD*/) && (u8CmdCount == 1)) || // End Binary Mode CMD
				((au8CmdBuf[0] == DVB_DEBUG_TOOLS_READ_DRAM_CMD) && (u8CmdCount == 5)) || // Read CMD
				((au8CmdBuf[0] == DVB_DEBUG_TOOLS_WRITE_DRAM_CMD) && (u8CmdCount == 9))) // Write CMD
			{
				b8CMDReady = TRUE;
				break;
			}
		}

		// Porcess CMD
		if(b8CMDReady == TRUE)
		{
			// Read CMD
			if(au8CmdBuf[0] == DVB_DEBUG_TOOLS_READ_DRAM_CMD)
			{
				DVB_DebugToolsMem(TRUE, Sys_DebugToolsValueConverter(&au8CmdBuf[1]), 0);
			}
			// Write CMD
			else if(au8CmdBuf[0] == DVB_DEBUG_TOOLS_WRITE_DRAM_CMD)
			{
				DVB_DebugToolsMem(FALSE, Sys_DebugToolsValueConverter(&au8CmdBuf[1]), Sys_DebugToolsValueConverter(&au8CmdBuf[5]));
			}
			// End Binary Mode and turn to ASCII Mode
			else if(au8CmdBuf[0] == 'e'/*DVB_DEBUG_TOOLS_END_BINARY_MODE_CMD*/)
			{
				DVB_DebugTools(FALSE);
				CT_IRQ_Clear(INTR_UART_1);
				break;	// exit this api
			}

			// Clear Info and Data
			b8CMDReady = FALSE;
			u32TimeOutTick = 0;
			Sys_DebugToolsTimeout();
		}

		// Uncomplete CMD and wait time out
		if((u32TimeOutTick != 0) && ((DVB_TimerGet() - u32TimeOutTick) >= DVB_DEBUG_TOOLS_TIMEOUT))
		{
			u32TimeOutTick = 0;
			Sys_DebugToolsTimeout();
		}
	}

	CT_OS_Local_Control_Interrupts(CTOS_ENABLE_INTERRUPTS);
}

void DVB_DebugTools(bool8 b8Flag)
{
	bool8 b8Result = FALSE;
	u8 au8Ack[4];
	u32 u32Count = 0;

	// TRUE: enable, FALSE: disable
	b8Result = CT_UART_DebugTools(b8Flag);

	if(b8Flag == TRUE)
	{
		au8Ack[u32Count++] = DVB_DEBUG_TOOLS_START_BINARY_MODE_CMD;
	}
	else
	{
		au8Ack[u32Count++] = DVB_DEBUG_TOOLS_END_BINARY_MODE_CMD;
	}

	if(b8Result == TRUE)
	{
		if(b8Flag == TRUE)
		{
			au8Ack[u32Count++] = DVB_DEBUG_TOOLS_START_BINARY_MODE_ACK;
		}
		else
		{
			au8Ack[u32Count++] = DVB_DEBUG_TOOLS_END_BINARY_MODE_ACK;
		}
		CT_UART_DebugToolsPutBuffer(au8Ack, u32Count);
		// if setting uart normally, then enable/disable debug tools mode
		_b8DebugTools = b8Flag;
	}
	else
	{
		if(b8Flag == TRUE)
		{
			au8Ack[u32Count++] = DVB_DEBUG_TOOLS_START_BINARY_MODE_ERROR;
		}
		else
		{
			au8Ack[u32Count++] = DVB_DEBUG_TOOLS_END_BINARY_MODE_ERROR;
		}
		CT_UART_DebugToolsPutBuffer(au8Ack, u32Count);
		// if setting uart fail, then disable debug tools mode
		_b8DebugTools = FALSE;
	}
}
void DVB_DebugToolsMem(bool8 b8Read, u32 u32Address, u32 u32Value)
{
	u8 au8Ack[8];
	u32 u32Count = 0;
	u32 u32MemValue = 0;

	// write value to memory
	if(b8Read == FALSE)
	{
		// 4 bytes alignment
		if((u32Address & 0x03) != 0)
		{
			au8Ack[u32Count++] = DVB_DEBUG_TOOLS_WRITE_DRAM_CMD;
			au8Ack[u32Count++] = DVB_DEBUG_TOOLS_WRITE_DRAM_CMD_ERROR;
			CT_UART_DebugToolsPutBuffer(au8Ack, u32Count);
		}
		else
		{
			*(u32 *)u32Address = u32Value;
			au8Ack[u32Count++] = DVB_DEBUG_TOOLS_WRITE_DRAM_CMD;
			au8Ack[u32Count++] = DVB_DEBUG_TOOLS_WRITE_DRAM_COMPLETE_ACK;
			CT_UART_DebugToolsPutBuffer(au8Ack, u32Count);
		}
	}
	// read value from memory
	else
	{
		// 4 bytes alignment
		if((u32Address & 0x03) != 0)
		{
			au8Ack[u32Count++] = DVB_DEBUG_TOOLS_READ_DRAM_CMD;
			au8Ack[u32Count++] = DVB_HIGH_BYTE(DVB_HIGH_WORD(u32Address));
			au8Ack[u32Count++] = DVB_LOW_BYTE(DVB_HIGH_WORD(u32Address));
			au8Ack[u32Count++] = DVB_HIGH_BYTE(DVB_LOW_WORD(u32Address));
			au8Ack[u32Count++] = DVB_LOW_BYTE(DVB_LOW_WORD(u32Address));
			au8Ack[u32Count++] = DVB_DEBUG_TOOLS_READ_DRAM_CMD_ERROR;
			CT_UART_DebugToolsPutBuffer(au8Ack, u32Count);
		}
		else
		{
			u32MemValue = *((u32 *)u32Address);
			au8Ack[u32Count++] = DVB_DEBUG_TOOLS_READ_DRAM_CMD;
			au8Ack[u32Count++] = DVB_HIGH_BYTE(DVB_HIGH_WORD(u32MemValue));
			au8Ack[u32Count++] = DVB_LOW_BYTE(DVB_HIGH_WORD(u32MemValue));
			au8Ack[u32Count++] = DVB_HIGH_BYTE(DVB_LOW_WORD(u32MemValue));
			au8Ack[u32Count++] = DVB_LOW_BYTE(DVB_LOW_WORD(u32MemValue));
			au8Ack[u32Count++] = DVB_DEBUG_TOOLS_READ_DRAM_CMD_ACK;
			CT_UART_DebugToolsPutBuffer(au8Ack, u32Count);
		}
	} 
}
#endif

#ifdef PVR_ENABLE
#include "ap_ch_sw.h"
#define TEST_BUFFER_SIZE	512
void sys_debug_test(void)
{
	u32 u32FileHandle = 0;
	u32 u32FileSize = 0;
	u32 u32ReadSize = 0;
	u32 u32StartTicks = 0;
	u32 u32EndTicks = 0;
	u16 u16GB = 0;
	u16 u16MB = 0;
	u16 u16KB = 0;
	u16 u16B = 0;
	u8 au8Buf[TEST_BUFFER_SIZE];

	u32FileHandle = DVB_FILECTRL_FileOpen(EN_USB_DEVICE, "00000068.TS", 'r');
	if(u32FileHandle == 0)
	{
		printf(">> fopen fail\n");
		return;
	}

	u32FileSize = DVB_FILECTRL_GetFileSize(EN_USB_DEVICE, u32FileHandle);
	u16GB = u32FileSize / (1024 * 1024 * 1024);
	u16MB = (u32FileSize - u16GB * (1024 * 1024 * 1024)) / (1024 * 1024);
	u16KB = (u32FileSize - u16GB * (1024 * 1024 * 1024) - u16MB * (1024 * 1024)) / (1024);
	u16B = (u32FileSize - u16GB * (1024 * 1024 * 1024) - u16MB * (1024 * 1024) - u16KB * 1024);
	printf(">> fsize = %ld [%dGB, %dMB, %dKB, %dB]\n", u32FileSize, u16GB, u16MB, u16KB, u16B);

	if(FALSE == DVB_FILECTRL_FileSeek(EN_USB_DEVICE, u32FileHandle, u32FileSize - TEST_BUFFER_SIZE, EN_FILE_CURRENT_FORWARD))
	{
		printf(">> fseek fail\n");
		DVB_FILECTRL_FileClose(EN_USB_DEVICE, u32FileHandle);
		return;
	}
	
	u32StartTicks = DVB_TimerGet();
	printf(">> start fread [%ld]\n", u32StartTicks);
	u32ReadSize = DVB_FILECTRL_FileRead(EN_USB_DEVICE, u32FileHandle, TEST_BUFFER_SIZE, au8Buf);
	if(u32ReadSize == 0)
	{
		printf(">> fread fail\n");
	}
	u32EndTicks = DVB_TimerGet();
	printf(">> end fread [%ld]\n", u32EndTicks);
	printf(">> fread time [%ld]s\n", (u32EndTicks - u32StartTicks)/1000);
	
	DVB_FILECTRL_FileClose(EN_USB_DEVICE, u32FileHandle);
}

// pvr
void sys_test_pvr_initial(void)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -