コード例 #1
0
ファイル: target_uart.c プロジェクト: TWilmer/targetboard
ErrorCode_t  specialCase(USBD_HANDLE_T hUsb, USB_CORE_DESCS_T *pDesc,USBD_API_INIT_PARAM_T *pUsbParam, UCOM_DATA_T *com, int o)
{
	ErrorCode_t ret = LPC_OK;
	com->hUsb = hUsb;
	com->port=o;
	UCOM_UartInit(o);
	USBD_CDC_INIT_PARAM_T cdc_param2;
	cdc_param2.mem_base = pUsbParam->mem_base;
	cdc_param2.mem_size = pUsbParam->mem_size;
	com->txBuf = (uint8_t *) cdc_param2.mem_base;
	cdc_param2.mem_base += UCOM_BUF_SZ;
	cdc_param2.mem_size -= UCOM_BUF_SZ;
	com->rxBuf = (uint8_t *) cdc_param2.mem_base;
	cdc_param2.mem_base += UCOM_BUF_SZ;
	cdc_param2.mem_size -= UCOM_BUF_SZ;

	ret = USBD_API->core->RegisterClassHandler(hUsb,customClassHandler, com);

	uint32_t	ep_indx = (((	com->inEndpoint & 0x0F) << 1) +1);
	if (ret == LPC_OK) {
		ret = USBD_API->core->RegisterEpHandler(hUsb, ep_indx, UCOM_bulk_hdlrInGeneric, com);
	}
	ep_indx = ((	com->outEndpoint & 0x0F) << 1);
	if (ret == LPC_OK) {
		ret = USBD_API->core->RegisterEpHandler(hUsb, ep_indx,  UCOM_bulk_hdlrOutGeneric, com);
	}
	USBD_API->hw->EnableEvent(hUsb,com->inEndpoint,USB_EVT_IN,1 );
	USBD_API->hw->EnableEvent(hUsb,com->inEndpoint,USB_EVT_IN_NAK,1 );
	USBD_API->hw->EnableEvent(hUsb,com->outEndpoint,USB_EVT_OUT,1 );
	USBD_API->hw->EnableEvent(hUsb,com->outEndpoint,USB_EVT_OUT_NAK,1 );
	USBD_API->hw->ResetEP(hUsb,com->inEndpoint);
	USBD_API->hw->ResetEP(hUsb,com->outEndpoint);
	USB_ENDPOINT_DESCRIPTOR d;
	d.bLength=USB_ENDPOINT_DESC_SIZE;
	d.bDescriptorType=USB_ENDPOINT_DESCRIPTOR_TYPE;
	d.bEndpointAddress=com->inEndpoint;

	d.bmAttributes=USB_ENDPOINT_TYPE_BULK;
	d.bInterval=0;
	d.wMaxPacketSize=64;
	USBD_API->hw->ConfigEP(hUsb,&d);

	d.bLength=USB_ENDPOINT_DESC_SIZE;
	d.bDescriptorType=USB_ENDPOINT_DESCRIPTOR_TYPE;
	d.bEndpointAddress=com->outEndpoint;

	d.bmAttributes=USB_ENDPOINT_TYPE_BULK;
	d.bInterval=0;
	d.wMaxPacketSize=64;
	USBD_API->hw->ConfigEP(hUsb,&d);


	pUsbParam->mem_base = cdc_param2.mem_base;
	pUsbParam->mem_size = cdc_param2.mem_size;

	UCOM_UartInit(o);
	return ret;
}
コード例 #2
0
ファイル: cdc_uart.c プロジェクト: jack77er/ledstriper
/* UART to USB com port init routine */
ErrorCode_t UCOM_init(USBD_HANDLE_T hUsb, USB_CORE_DESCS_T *pDesc, USBD_API_INIT_PARAM_T *pUsbParam)
{
	USBD_CDC_INIT_PARAM_T cdc_param;
	ErrorCode_t ret = LPC_OK;
	uint32_t ep_indx;
	USB_CDC_CTRL_T *pCDC;

	/* Store USB stack handle for future use. */
	g_uCOM.hUsb = hUsb;
	/* Initi CDC params */
	memset((void *) &cdc_param, 0, sizeof(USBD_CDC_INIT_PARAM_T));
	cdc_param.mem_base = pUsbParam->mem_base;
	cdc_param.mem_size = pUsbParam->mem_size;
	cdc_param.cif_intf_desc = (uint8_t *) find_IntfDesc(pDesc->high_speed_desc, CDC_COMMUNICATION_INTERFACE_CLASS);
	cdc_param.dif_intf_desc = (uint8_t *) find_IntfDesc(pDesc->high_speed_desc, CDC_DATA_INTERFACE_CLASS);
	cdc_param.SetLineCode = UCOM_SetLineCode;

	/* Init CDC interface */
	ret = USBD_API->cdc->init(hUsb, &cdc_param, &g_uCOM.hCdc);

	if (ret == LPC_OK) {
		/* allocate transfer buffers */
		g_uCOM.txBuf = (uint8_t *) cdc_param.mem_base;
		cdc_param.mem_base += UCOM_BUF_SZ;
		cdc_param.mem_size -= UCOM_BUF_SZ;
		g_uCOM.rxBuf = (uint8_t *) cdc_param.mem_base;
		cdc_param.mem_base += UCOM_BUF_SZ;
		cdc_param.mem_size -= UCOM_BUF_SZ;

		/* register endpoint interrupt handler */
		ep_indx = (((USB_CDC_IN_EP & 0x0F) << 1) + 1);
		ret = USBD_API->core->RegisterEpHandler(hUsb, ep_indx, UCOM_bulk_hdlr, &g_uCOM);

		if (ret == LPC_OK) {
			/* register endpoint interrupt handler */
			ep_indx = ((USB_CDC_OUT_EP & 0x0F) << 1);
			ret = USBD_API->core->RegisterEpHandler(hUsb, ep_indx, UCOM_bulk_hdlr, &g_uCOM);
			/* Init UART port for bridging */
			UCOM_UartInit();
			/* Set the line coding values as per UART Settings */
			pCDC = (USB_CDC_CTRL_T *) g_uCOM.hCdc;
			pCDC->line_coding.dwDTERate = 115200;
			pCDC->line_coding.bDataBits = 8;
		}

		/* update mem_base and size variables for cascading calls. */
		pUsbParam->mem_base = cdc_param.mem_base;
		pUsbParam->mem_size = cdc_param.mem_size;
	}

	return ret;
}
コード例 #3
0
ファイル: target_uart.c プロジェクト: TWilmer/targetboard
ErrorCode_t  initCom(USBD_HANDLE_T hUsb, USB_CORE_DESCS_T *pDesc,USBD_API_INIT_PARAM_T *pUsbParam, UCOM_DATA_T *com, int o)
{

	if(o>=3)
	{
		return specialCase(hUsb,pDesc , pUsbParam, com, o);
	}
	ErrorCode_t ret = LPC_OK;
	USBD_CDC_INIT_PARAM_T cdc_param2;

	com->hUsb = hUsb;
	com->port=o;
	/* Initi CDC params */
	memset((void *) &cdc_param2, 0, sizeof(USBD_CDC_INIT_PARAM_T));
	cdc_param2.mem_base = pUsbParam->mem_base;
	cdc_param2.mem_size = pUsbParam->mem_size;
	cdc_param2.cif_intf_desc = (uint8_t *) find_IntfDesc(pDesc->high_speed_desc, CDC_COMMUNICATION_INTERFACE_CLASS,o);
	cdc_param2.dif_intf_desc = (uint8_t *) find_IntfDesc(pDesc->high_speed_desc, CDC_DATA_INTERFACE_CLASS,o);
	UCOM_UartInit(o);
	switch(o)
	{
	case 0:
		cdc_param2.SetLineCode = UCOM_SetLineCode0;
	case 1:
		cdc_param2.SetLineCode = UCOM_SetLineCode1;
	case 2:
		cdc_param2.SetLineCode = UCOM_SetLineCode2;
		break;
	default:
		break;
	}
	cdc_param2.CDC_BulkIN_Hdlr= com->pInHdlr;
	cdc_param2.CDC_BulkOUT_Hdlr= com->pOutHdlr;


	ret = USBD_API->cdc->init(hUsb, &cdc_param2, &com->hCdc);
	if (ret == LPC_OK) {
		/* allocate transfer buffers */
		com->txBuf = (uint8_t *) cdc_param2.mem_base;
		cdc_param2.mem_base += UCOM_BUF_SZ;
		cdc_param2.mem_size -= UCOM_BUF_SZ;
		com->rxBuf = (uint8_t *) cdc_param2.mem_base;
		cdc_param2.mem_base += UCOM_BUF_SZ;
		cdc_param2.mem_size -= UCOM_BUF_SZ;





		/* Init UART port for bridging */

		/* Set the line coding values as per UART Settings */
		USB_CDC_CTRL_T * pCDC = (USB_CDC_CTRL_T *) com->hCdc;
		pCDC->line_coding.dwDTERate = 115200;
		pCDC->line_coding.bDataBits = 8;


		uint32_t	ep_indx = (((	com->inEndpoint & 0x0F) << 1) +1);
		if (ret == LPC_OK) {
			ret = USBD_API->core->RegisterEpHandler(hUsb, ep_indx,  com->pInHdlr, com);
		}
		ep_indx = ((	com->outEndpoint & 0x0F) << 1);
		if (ret == LPC_OK) {
			ret = USBD_API->core->RegisterEpHandler(hUsb, ep_indx,  com->pOutHdlr, com);
		}
		USBD_API->hw->EnableEvent(hUsb,com->inEndpoint,USB_EVT_IN,1 );
		USBD_API->hw->EnableEvent(hUsb,com->inEndpoint,USB_EVT_IN_NAK,1 );
		USBD_API->hw->EnableEvent(hUsb,com->outEndpoint,USB_EVT_OUT,1 );
		USBD_API->hw->EnableEvent(hUsb,com->outEndpoint,USB_EVT_OUT_NAK,1 );
		USBD_API->hw->ResetEP(hUsb,com->inEndpoint);
		USBD_API->hw->ResetEP(hUsb,com->outEndpoint);
		USB_ENDPOINT_DESCRIPTOR d;
		d.bLength=USB_ENDPOINT_DESC_SIZE;
		d.bDescriptorType=USB_ENDPOINT_DESCRIPTOR_TYPE;
		d.bEndpointAddress=com->inEndpoint;

		d.bmAttributes=USB_ENDPOINT_TYPE_BULK;
		d.bInterval=0;
		d.wMaxPacketSize=64;
		USBD_API->hw->ConfigEP(hUsb,&d);

		d.bLength=USB_ENDPOINT_DESC_SIZE;
		d.bDescriptorType=USB_ENDPOINT_DESCRIPTOR_TYPE;
		d.bEndpointAddress=com->outEndpoint;

		d.bmAttributes=USB_ENDPOINT_TYPE_BULK;
		d.bInterval=0;
		d.wMaxPacketSize=64;
		USBD_API->hw->ConfigEP(hUsb,&d);




		/* update mem_base and size variables for cascading calls. */
		pUsbParam->mem_base = cdc_param2.mem_base;
		pUsbParam->mem_size = cdc_param2.mem_size;
	}
	return ret;
}