示例#1
0
/*************************************************************************
* FUNCTION
*  INT_InitBootupTrace
*
* DESCRIPTION
*  This function is used to init bootup trace driver.
*
* PARAMETERS
*  none
*
* RETURNS
*  0
*
*************************************************************************/
void INT_InitBootupTrace(void)
{
#if defined(__USB_BOOTUP_TRACE__)
    INT_setInitLogFlag();
    if (is_init_log_enable == KAL_TRUE)
    {
        USB_Boot_Trace_Init();
        custom_usb_comport_setup_delay();
    }
#else /* __USB_BOOTUP_TRACE__ */
    /* init uart baudrate (HW related) */
    UART_Bootup_Init();
    INT_setInitLogFlag();
#endif /* __USB_BOOTUP_TRACE__ */
}
DCL_STATUS UART_Handler(DCL_DEV dev,DCL_CTRL_CMD cmd, DCL_CTRL_DATA_T *data)
{
	kal_bool return_flag = KAL_FALSE;
	DCL_STATUS return_status = STATUS_OK;
	if(dev >= MAX_UART_PORT_NUM)
      return STATUS_INVALID_DEVICE;
	switch (cmd)
		{
		case SIO_CMD_INIT:
				{
					UART_CTRL_INIT_T*    prCtrlInit;
					prCtrlInit = &(data->rUARTCtrlInit);
					UART_DriverInit(dev,prCtrlInit->u4Flag);
					//UART_DriverInit(dev);			
				}
			break;
			
		case SIO_CMD_OPEN:
				{
					UART_CTRL_OPEN_T* prCtrlOpen;
					prCtrlOpen = &(data->rUARTCtrlOPEN);
					return_flag = pUart_CMD_FUNC[dev]->Open(dev,(module_type)(prCtrlOpen->u4OwenrId) );
					if(return_flag == KAL_FALSE)
						return_status = STATUS_FAIL;
				}
			break;
			
		case SIO_CMD_CLOSE:
				{
					UART_CTRL_CLOSE_T* prCtrlClose;
					prCtrlClose = &(data->rUARTCtrlCLOSE);
					pUart_CMD_FUNC[dev]->Close(dev,(module_type)(prCtrlClose->u4OwenrId) );
				}
			break;
			
		case SIO_CMD_GET_BYTES:
				{
					UART_CTRL_GET_BYTES_T* prCtrlGetBytes;
					prCtrlGetBytes = &(data->rUARTCtrlGETBYTES);
				prCtrlGetBytes->u2RetSize=pUart_CMD_FUNC[dev]->GetBytes(dev, prCtrlGetBytes->puBuffaddr, prCtrlGetBytes->u2Length, prCtrlGetBytes->pustatus, (module_type)(prCtrlGetBytes->u4OwenrId) );
				}
			break;
			
		case SIO_CMD_PUT_BYTES:
				{
					UART_CTRL_PUT_BYTES_T* prCtrlPutBytes;
					prCtrlPutBytes = &(data->rUARTCtrlPUTBYTES);
				prCtrlPutBytes->u2RetSize=	pUart_CMD_FUNC[dev]->PutBytes(dev, prCtrlPutBytes->puBuffaddr, prCtrlPutBytes->u2Length,(module_type)(prCtrlPutBytes->u4OwenrId) );
				}
			break;
			
		case SIO_CMD_GET_RX_AVAIL:
				{
					UART_CTRL_RX_AVAIL_T* prCtrlRXAvail;
					prCtrlRXAvail = &(data->rUARTCtrlRXAVAIL);
					prCtrlRXAvail->u2RetSize =pUart_CMD_FUNC[dev]->GetRxAvail(dev);
				}
			break;
			
		case SIO_CMD_GET_TX_AVAIL:
				{
					UART_CTRL_TX_AVAIL_T* prCtrlTXAvail;
					prCtrlTXAvail = &(data->rUARTCtrlTXAVAIL);
					prCtrlTXAvail->u2RetSize = pUart_CMD_FUNC[dev]->GetTxAvail(dev);
				}
			break;
			
		case SIO_CMD_PUT_ISR_BYTES:
				{
					UART_CTRL_PUT_BYTES_T* prCtrlPutBytes;
					prCtrlPutBytes = &(data->rUARTCtrlPUTBYTES);
					prCtrlPutBytes->u2RetSize = pUart_CMD_FUNC[dev]->PutISRBytes(dev,prCtrlPutBytes->puBuffaddr,prCtrlPutBytes->u2Length,
																(module_type)(prCtrlPutBytes->u4OwenrId) );
				}
			break;

		case SIO_CMD_GET_ISR_TX_AVAIL:
				{
					UART_CTRL_TX_AVAIL_T* prCtrlTXAail;
					prCtrlTXAail = &(data->rUARTCtrlTXAVAIL);
					prCtrlTXAail->u2RetSize =pUart_CMD_FUNC[dev]->GetISRTxAvail(dev);	
				}
			break;
			
		case SIO_CMD_PURGE:
				{
					UART_CTRL_PURGE_T* prCtrlPurge;
					prCtrlPurge = &(data->rUARTCtrlPURGE);
					pUart_CMD_FUNC[dev]->Purge(dev,(UART_buffer)(prCtrlPurge->dir),(module_type)(prCtrlPurge->u4OwenrId) );
				}
			break;
			
		case SIO_CMD_SET_OWNER:
				{
					 UART_CTRL_OWNER_T* prCtrlOwner;
					 prCtrlOwner = &(data->rUARTCtrlOWNER);
					 pUart_CMD_FUNC[dev]->SetOwner(dev,(module_type)(prCtrlOwner->u4OwenrId));					 
				}
			break;
			
		case SIO_CMD_SET_FLOW_CTRL:
				{
					UART_CTRL_FLOW_CTRL_T* prCtrlFlowCtrl;
					prCtrlFlowCtrl = &(data->rUARTCtrlFLOWCTRL);
					pUart_CMD_FUNC[dev]->SetFlowCtrl(dev,(kal_bool)(prCtrlFlowCtrl->bXON),(module_type)(prCtrlFlowCtrl->u4OwenrId));
				}
			break;
			
		case SIO_CMD_CONFIG_ESCAPE:
				{
					UART_CTRL_CONFIG_ESP_T* prCtrlConfigEsp;
					prCtrlConfigEsp = &(data->rUARTCtrlCONFIGESP);
					pUart_CMD_FUNC[dev]->ConfigEscape(dev,prCtrlConfigEsp->uEscChar,prCtrlConfigEsp->u2ESCGuardtime,(module_type)(prCtrlConfigEsp->u4OwenrId) );					
				}
			break;
			
		case SIO_CMD_GET_ESCAPE_INFO:
				{
					UART_CTRL_CONFIG_ESP_T* prCtrlConfigEsp;
					prCtrlConfigEsp = &(data->rUARTCtrlCONFIGESP);
					prCtrlConfigEsp->u2ESCGuardtime = UARTPort[dev].ESCDet.GuardTime;
					prCtrlConfigEsp->uEscChar = UARTPort[dev].ESCDet.EscChar;
						
				}
			break;
			
		case SIO_CMD_SET_DCB_CONFIG:
				{
					UARTDCBStruct *prDCB;
					UART_CTRL_DCB_T* prCtrlDCB;
					prCtrlDCB = &(data->rUARTCtrlDCB);
					prDCB = (UARTDCBStruct*)(&(prCtrlDCB->rUARTConfig));
					pUart_CMD_FUNC[dev]->SetDCBConfig(dev,prDCB,(module_type)(prCtrlDCB->u4OwenrId) );
				}
			break;
			
		case SIO_CMD_CTRL_DCD:
				{
					 UART_CTRL_DCD_T* prCtrlDCD;
					 prCtrlDCD = &(data->rUARTCtrlDCD);
					 pUart_CMD_FUNC[dev]->CtrlDCD(dev,(IO_level)(prCtrlDCD->rIOLevelDCD),(module_type)(prCtrlDCD->u4OwenrId) );
				}
			break;
			
		case SIO_CMD_CTRL_BREAK:
				{
					UART_CTRL_BREAK_T* prCtrlBreak;
					prCtrlBreak = &(data->rUARTCtrlBREAK);
					pUart_CMD_FUNC[dev]->CtrlBreak(dev,(IO_level)(prCtrlBreak->rIOLevelBRK),(module_type)(prCtrlBreak->u4OwenrId) );
				}
			break;
			
		case SIO_CMD_CLR_RX_BUF:
				{
					UART_CTRL_CLR_BUFFER_T* prCtrlClrBuffer;
					prCtrlClrBuffer = &(data->rUARTCtrlCLRBUFFER);
					pUart_CMD_FUNC[dev]->ClrRxBuffer(dev,(module_type)(prCtrlClrBuffer->u4OwenrId) );
				}
			break;
			
		case SIO_CMD_CLR_TX_BUF:
				{
					UART_CTRL_CLR_BUFFER_T* prCtrlClrBuffer;
					prCtrlClrBuffer = &(data->rUARTCtrlCLRBUFFER);
					pUart_CMD_FUNC[dev]->ClrTxBuffer(dev,(module_type)(prCtrlClrBuffer->u4OwenrId) );
				}
			break;
			
		case SIO_CMD_SET_BAUDRATE:
				{
					UART_CTRL_BAUDRATE_T* prCtrlBaudrate;
					prCtrlBaudrate = &(data->rUARTCtrlBAUDRATE);
					pUart_CMD_FUNC[dev]->SetBaudRate(dev,prCtrlBaudrate->baudrate,(module_type)(prCtrlBaudrate->u4OwenrId) );
				}
			break;

		case SIO_CMD_SEND_ISR_DATA:
				{
					UART_CTRL_SEND_DATA_T* prCtrlSendData;
					prCtrlSendData = &(data->rUARTCtrlSENDDATA);
					prCtrlSendData->u2RetSize = pUart_CMD_FUNC[dev]->SendISRData(dev,prCtrlSendData->puBuffaddr,prCtrlSendData->u2Length,
										prCtrlSendData->umode,prCtrlSendData->uescape_char,(module_type)(prCtrlSendData->u4OwenrId) );
				}	
			break;
			
		case SIO_CMD_SEND_DATA:
				{
					UART_CTRL_SEND_DATA_T* prCtrlSendData;
					prCtrlSendData = &(data->rUARTCtrlSENDDATA);
					prCtrlSendData->u2RetSize = pUart_CMD_FUNC[dev]->SendData(dev,prCtrlSendData->puBuffaddr,prCtrlSendData->u2Length,
										prCtrlSendData->umode,prCtrlSendData->uescape_char,(module_type)(prCtrlSendData->u4OwenrId) );
				}
			break;
			
		case SIO_CMD_GET_OWNER_ID:
				{
					 UART_CTRL_OWNER_T* prCtrlOwner;
					 prCtrlOwner = &(data->rUARTCtrlOWNER);
					 
					 prCtrlOwner->u4OwenrId =  pUart_CMD_FUNC[dev]->GetOwnerID(dev);
				}
			break;
			
		case SIO_CMD_SET_AUTOBAUD_DIV:
				{
					 UART_CTRL_AUTO_BAUDDIV_T* prCtrlAutoBaudDiv;
					 prCtrlAutoBaudDiv = &(data->rUARTCtrlAUTOBAUDDIV);
					 pUart_CMD_FUNC[dev]->SetAutoBaud_Div(dev,(module_type)(prCtrlAutoBaudDiv->u4OwenrId) );
				}
			break;
			
		case SIO_CMD_REG_TX_CB:
				{
					UART_CTRL_REG_TX_CB_T* prCtrlTxCB;
					prCtrlTxCB = &(data->rUARTCtrlREGTXCB);
					pUart_CMD_FUNC[dev]->UART_Register_TX_cb(dev,(module_type)(prCtrlTxCB->u4OwenrId),(UART_TX_FUNC)prCtrlTxCB->func); 
				}
			break;
			
		case SIO_CMD_REG_RX_CB:
				{
					 UART_CTRL_REG_RX_CB_T * prCtrlRxCb;
					 prCtrlRxCb = &(data->rUARTCtrlREGRXCB);
					 pUart_CMD_FUNC[dev]->UART_Register_RX_cb(dev,(module_type)(prCtrlRxCb->u4OwenrId),(UART_RX_FUNC)prCtrlRxCb->func); 
				}
			break;


		case SIO_CMD_GET_UART_BYTE:
				{
					 UART_CTRL_GET_UART_BYTE_T* prCtrlGetUartByte;
					 prCtrlGetUartByte = &(data->rUARTCtrlGETUARTBYTE);
					 prCtrlGetUartByte->uByte = pUart_CMD_FUNC[dev]->GetUARTByte(dev); 
				}
			break;
			
		case SIO_CMD_GET_UART_BYTE_WITH_TIMEOUT:
				{
					 UART_CTRL_GET_UART_BYTE_WITH_TIMEOUT_T* prCtrlGetUartByte;
					 prCtrlGetUartByte = &(data->rUARTCtrlGETUARTBYTEWithTimeOut);
					 prCtrlGetUartByte->u1retByte = pUart_CMD_FUNC[dev]->GetUARTByte_WithTimeOut(dev, &(prCtrlGetUartByte->uByte), prCtrlGetUartByte->u4timeout_value); 
				}
			break;			
			
		case SIO_CMD_PUT_UART_BYTE:
				{
					UART_CTRL_PUT_UART_BYTE_T* prCtrlPutUartByte;
					prCtrlPutUartByte = &(data->rUARTCtrlPUTUARTBYTE);
					 pUart_CMD_FUNC[dev]->PutUARTByte(dev,prCtrlPutUartByte->uData); 
				}
			break;
			
		case SIO_CMD_PUT_UART_BYTES:
				{
					
					 UART_CTRL_PUT_UART_BYTES_T* prCtrlPutUartBytes;
					 prCtrlPutUartBytes = &(data->rUARTCtrlPUTUARTBYTES);
					 pUart_CMD_FUNC[dev]->PutUARTBytes(dev,prCtrlPutUartBytes->puBuffaddr,prCtrlPutUartBytes->u2Length); 
				}
			break;
			
		case SIO_CMD_READ_DCB_CONFIG:
				{
					UARTDCBStruct *prDCB;
					UART_CTRL_DCB_T* prCtrlDCB;
					prCtrlDCB = &(data->rUARTCtrlDCB);
					prDCB = (UARTDCBStruct*)(&(prCtrlDCB->rUARTConfig));
					pUart_CMD_FUNC[dev]->ReadDCBConfig(dev,prDCB); 
				}
			break;
			
		case SIO_CMD_CTRL_RI:
				{
					 UART_CTRL_RI_T* prCtrlRI;
					 prCtrlRI= &(data->rUARTCtrlRI);
					 pUart_CMD_FUNC[dev]->CtrlRI(dev,(IO_level)(prCtrlRI->rIOLevelSRI),(module_type)(prCtrlRI->u4OwenrId) ); 
				}
			break;
			
		case SIO_CMD_CTRL_DTR:
				{
					UART_CTRL_DTR_T* prCtrlDTR;
					prCtrlDTR = &(data->rUARTCtrlDTR);
					 pUart_CMD_FUNC[dev]->CtrlDTR(dev,(IO_level)(prCtrlDTR->rIOLevelDTR),(module_type)(prCtrlDTR->u4OwenrId) ); 
				}
			break;
			
		case SIO_CMD_READ_HW_STATUS:
				{
					IO_level* pSDSR;
					IO_level* pSCTS;
					 UART_CTRL_RHS_T* prCtrlRHS;
					 prCtrlRHS = &(data->rUARTCtrlRHS);
					 pSDSR = (IO_level*)(&(prCtrlRHS->rIOLevelDSR));
					 pSCTS = (IO_level*)(&(prCtrlRHS->rIOLevelCTS));
					 pUart_CMD_FUNC[dev]->ReadHWStatus(dev,pSDSR,pSCTS);  
				}
			break;
			
			case UART_CMD_SET_FIFO_TRIGGER:
					{
						 UART_CTRL_SFT_T* prCtrlSFT;
						 prCtrlSFT = &(data->rUARTCtrlSFT); 
						 UART_set_FIFO_trigger(dev,  prCtrlSFT->tx_level, prCtrlSFT->rx_level);
						 
					}
			break;
			
			case UART_CMD_POWER_ON:
					{
						UART_CTRL_POWERON_T* prCtrlPoweron;
						prCtrlPoweron = &(data->rUARTCtrlPoweron);
						//UART_TurnOnPower(dev, (kal_bool)(prCtrlPoweron->bFlag_Poweron) );
						UART_TurnOnPower(dev, KAL_TRUE );
					}

				break;
			case UART_CMD_CHECK_TX_BUF_EMPTY:
					{
						UART_CTRL_CHECK_TBE_T* prCtrlTBE;
						prCtrlTBE = &(data->rUARTCtrlCheckBUFEMP);
						prCtrlTBE->bFlag = UART_CheckTxBufferEmpty(dev);
					}
				break;
				
	 case UART_CMD_CHECK_TX_SEND_OUT:
	 		{
				UART_CTRL_CHECK_TSO_T* prCtrlTSO;
				prCtrlTSO = &(data->rUARTCtrlCheckTXSendOut);
				prCtrlTSO->bFlag = UART_CheckTxAllSentOut(dev);
			}
	 	break;
		
	case UART_CMD_GET_TX_BUF_SIZE:
			{
				UART_CTRL_GET_TBS_T* prCtrlGetTBS;
				prCtrlGetTBS = &(data->rUARTCtrlGetTxBufSize);
//dear yali help confirm if this type is right or not, i remove & for solve build error
				UART_GetTxBufferSize(dev, (kal_uint32 *)(prCtrlGetTBS->ptotal_size), (kal_uint32 *)(prCtrlGetTBS->preturn_size));
			}
		break;
		
	case UART_CMD_SLEEP_TX_ENABLE:
			{
				UART_CTRL_SLEEP_ON_TX_ENABLE_T* prCtrlSleepTx;
				prCtrlSleepTx = &(data->rUARTCtrlSleepOnTxEnable);
				UART_SleepOnTx_Enable(dev, (UART_SLEEP_ON_TX)(prCtrlSleepTx->bFlag) );
			}
		break;
		
	case UART_CMD_CTRL_SLEEP_MODE:
			{
				UART_CTRL_SLEEP_ENABLE_T* prCtrlSleepEnable;
				prCtrlSleepEnable = &(data->rUARTCtrlSleepEnable);
				UART_SetSleepEnable( (kal_bool)(prCtrlSleepEnable->bFlag) );
			}
		break;
		
		
	case UART_CMD_BOOTUP_INIT:
			{
				UART_Bootup_Init();
			}
		break;
		
	case UART_CMD_BOOT_PUTBYTES:
			{
				UART_CTRL_BOOT_PUTBYTES_T* prCtrlPutBytes;
				prCtrlPutBytes = &(data->rUARTCtrlBootPutBytes);
				UART_Boot_PutUARTBytes(dev,prCtrlPutBytes->puBuffaddr, prCtrlPutBytes->u2Length);
			}
		break;
		
	case UART_CMD_LOOPBACK:
			{
				UART_loopback(dev);
			}
		break;
		
	case UART_CMD_ASSERT_WAIT_SEND_OUT:
			{
				UART_AssertWaitPrevDataSentOut(dev);
			}
		break;
	case UART_CMD_CTRL_USE_VFIFO:
			{
			//	UART_CTRL_USE_VFIFO_T* prCtrlUseVfifo;
			//	prCtrlUseVfifo = &(data->rUARTCtrlUseVFifo);
		//		UART_UseVFIFO(dev,prCtrlUseVfifo->bUseVFifo);
			}
		break;
	case UART_CMD_CTRL_TX_DMA:
			{
				UART_CTRL_USE_VFIFO_T* prCtrlTxDMA;
				prCtrlTxDMA = &(data->rUARTCtrlUseVFifo);
				UART_VFIFO_TX_DMA_Enable(dev,(kal_bool)(prCtrlTxDMA->bUseVFifo));
			}
		break;
				
	case UART_CMD_GET_FLOW_CONTROL:
			{
				UART_CTRL_GET_FC_T* prCtrlFlowControl;
				prCtrlFlowControl = &(data->rUARTCtrlGetFC);
				prCtrlFlowControl->FlowCtrlMode =(UART_FLOW_CTRL_MODE_T) UART_GetFlowCtrl(dev);
			}
			break;
 	case UART_CMD_REG_DEF_CB:
			{
				UART_CTRL_REG_DEF_CB_T* prCtrlDef;
				prCtrlDef = &(data->rUARTCtrlRegDefCB);
				if(prCtrlDef->dir== UART_TX)
				    UART_dafault_tx_cb(dev);
				else if(prCtrlDef->dir== UART_RX)
					UART_dafault_rx_cb(dev);
				else if(prCtrlDef->dir== DSP_RX)
					UART_dsp_dafault_rx_cb(dev);
				else if(prCtrlDef->dir== DSP_TX)
					UART_dsp_dafault_tx_cb(dev);
			}
		break;
			
	case UART_CMD_BMT_PUT_BYTES:
			{
				#ifdef DRV_DEBUG
				UART_CTRL_PUT_BYTES_T* prCtrlBMTPutBytes;
				prCtrlBMTPutBytes = &(data->rUARTCtrlPUTBYTES);
			 	BMT_PutBytes(dev, prCtrlBMTPutBytes->puBuffaddr, prCtrlBMTPutBytes->u2Length);
			 	#endif
			}
		break;
	case UART_CMD_GET_MAX_BAUDRATE:
			{
				UART_CTRL_GET_MAXBAUDRATE_T* prCtrlGetMaxBaudrate;
				prCtrlGetMaxBaudrate = &(data->rUARTCtrlGetMaxBaudrate);
				prCtrlGetMaxBaudrate->max_baudrate = UART_Get_Maxbaudrate(dev);
			}
		break;
	#ifdef __DMA_UART_VIRTUAL_FIFO__
	case UART_CMD_RECHANDLER_VFIFO:
			{
				UART_RecHandler_VFIFO(dev);
			}
		break;
	case UART_CMD_TRXHANDLER_VFIFO:
			{
				UART_TrxHandler_VFIFO(dev);
			}
		break;	
	case UART_CMD_RECTIMEOUTHANDLE:
			{
				UART_RecTimeOutHandler(dev);
			}
		break;
	#endif
	/*added this cmd for TTY cmd compatiable */
	case UART_CMD_SWITCH_PORT:
	case TTY_CMD_GET_CHUNK_SIZE:
	case TTY_CMD_ASSIGN_RX_IOR:
	case TTY_CMD_NEED_TX_DONE_CB:
	case TTY_CMD_GET_DRV_STATE:
	case TTY_CMD_PUT_BYTES_IOR:
	case TTY_CMD_PUT_BYTES_IOR_LIGHT:
		// TTY commands for exception
	case TTY_CMD_EXCEPTION_RESET:
	case TTY_CMD_EXCEPTION_HIF_INIT:
	case TTY_CMD_EXCEPTION_CLEAR_CHANNEL:
	case TTY_CMD_EXCEPTION_TX_GPD:
	case TTY_CMD_EXCEPTION_TX_DONE_INFO:
	case TTY_CMD_EXCEPTION_HIF_STATE:
	case TTY_CMD_EXCEPTION_ASSIGN_RX_GPD:
	case TTY_CMD_EXCEPTION_GET_RX_GPD:
	case TTY_CMD_EXCEPTION_HIF_POLL:
		  break ;
			
			default:
				return STATUS_INVALID_CMD;
		}

	return return_status;
}