void AVALON_PWM_Test(void)
{
	unsigned char duty = 0;

	AVALON_PWM_Init();
	AVALON_PWM_Enable();
	for (;duty < 255; duty++) {
		AVALON_PWM_SetDuty(AVALON_PWM_RED, duty);
		AVALON_Delay(20000);
	}
	AVALON_Delay(400000);
	for (;duty > 0; duty--) {
		AVALON_PWM_SetDuty(AVALON_PWM_RED, duty);
		AVALON_Delay(20000);
	}
	AVALON_Delay(500000);
}
void AVALON_LED_Test(void)
{
    /* Initialize GPIO */
	Chip_GPIO_Init(LPC_GPIO);
	AVALON_LED_Init();

	/* open all led */
	AVALON_LED_Rgb(AVALON_LED_RED, true);
	AVALON_LED_Rgb(AVALON_LED_GREEN, true);
	AVALON_LED_Rgb(AVALON_LED_BLUE, true);
	AVALON_Delay(4000000);

	/* close all led */
	AVALON_LED_Rgb(AVALON_LED_RED, false);
	AVALON_LED_Rgb(AVALON_LED_GREEN, false);
	AVALON_LED_Rgb(AVALON_LED_BLUE, false);
	AVALON_Delay(4000000);

	/* red led test */
	AVALON_LED_Rgb(AVALON_LED_RED, true);
	AVALON_Delay(4000000);
	AVALON_LED_Rgb(AVALON_LED_RED, false);

	/* green led test */
	AVALON_LED_Rgb(AVALON_LED_GREEN, true);
	AVALON_Delay(4000000);
	AVALON_LED_Rgb(AVALON_LED_GREEN, false);

	/* blue led test */
	AVALON_LED_Rgb(AVALON_LED_BLUE, true);
	AVALON_Delay(4000000);
	AVALON_LED_Rgb(AVALON_LED_BLUE, false);

	AVALON_Delay(4000000);
}
void AVALON_PWM_Test(void)
{
	static Bool bPwmInit = FALSE;

	if(!bPwmInit)
	{
		bPwmInit = TRUE;
		AVALON_PWM_Init();
	}
	Chip_TIMER_Enable(LPC_TIMER16_0);
	AVALON_Delay(9000000);
	Chip_TIMER_Disable(LPC_TIMER16_0);
}
/* Send data to usb,FIX ME:how to make sure the data is sent */
uint32_t UCOM_Write(uint8_t *pBuf, uint32_t len)
{
	UCOM_DATA_T *pUcom = &g_uCOM;
	uint32_t ret = 0;
	unsigned int timeout;

	if (pUcom->usbTxFlags & UCOM_TX_CONNECTED) {
		timeout = 0;
		while ((pUcom->usbTxFlags & UCOM_TX_BUSY) == 1) {
			AVALON_Delay(1000);
			timeout ++;
			if (timeout > 3)
				break;
		}

		pUcom->usbTxFlags |= UCOM_TX_BUSY;
		ret = USBD_API->hw->WriteEP(pUcom->hUsb, USB_CDC_IN_EP, pBuf, len);
	}

	return ret;
}