Пример #1
0
/* 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;
}
Пример #2
0
void usb_init(void)
{
	static Bool bUsbInit = FALSE;
	USBD_API_INIT_PARAM_T usb_param;
	USB_CORE_DESCS_T desc;
	ErrorCode_t ret = LPC_OK;

	if(bUsbInit)
		return;

	usb_pin_clk_init();

	/* Initialize call back structures */
	memset((void *) &usb_param, 0, sizeof(USBD_API_INIT_PARAM_T));
	usb_param.usb_reg_base = LPC_USB0_BASE;
	usb_param.max_num_ep = 2;
	usb_param.mem_base = USB_STACK_MEM_BASE;
	usb_param.mem_size = USB_STACK_MEM_SIZE;

	/* Set the USB descriptors */
	desc.device_desc = (uint8_t *) &USB_DeviceDescriptor[0];
	desc.string_desc = (uint8_t *) &USB_StringDescriptor[0];
	/* Note, to pass USBCV test full-speed only devices should have both
	   descriptor arrays point to same location and device_qualifier set to 0.
	 */
	desc.high_speed_desc = (uint8_t *) &USB_FsConfigDescriptor[0];
	desc.full_speed_desc = (uint8_t *) &USB_FsConfigDescriptor[0];
	desc.device_qualifier = 0;

	/* USB Initialization */
	ret = USBD_API->hw->Init(&g_hUsb, &desc, &usb_param);
	if (ret == LPC_OK) {

		/* Init USB HID bridge interface */
		ret = UCOM_init(g_hUsb, find_IntfDesc(desc.high_speed_desc, USB_DEVICE_CLASS_HUMAN_INTERFACE), &usb_param);

		ret = dfu_init(g_hUsb, find_IntfDesc(desc.high_speed_desc, USB_DEVICE_CLASS_APP), &usb_param);
		if (ret == LPC_OK) {
			/* Make sure USB and IRQ priorities are same for this example */
			NVIC_SetPriority(USB0_IRQn, 1);
			/* Enable USB interrrupts */
			NVIC_EnableIRQ(USB0_IRQn);
			/* Now connect */
			USBD_API->hw->Connect(g_hUsb, 1);
		}
	}

	bUsbInit = TRUE;
}
Пример #3
0
/* Memory storage based MSC_Disk init routine */
ErrorCode_t mscDisk_init(USBD_HANDLE_T hUsb, USB_CORE_DESCS_T *pDesc, USBD_API_INIT_PARAM_T *pUsbParam)
{
	USBD_MSC_INIT_PARAM_T msc_param;
	ErrorCode_t ret = LPC_OK;

	memset((void *) &msc_param, 0, sizeof(USBD_MSC_INIT_PARAM_T));
	msc_param.mem_base = pUsbParam->mem_base;
	msc_param.mem_size = pUsbParam->mem_size;
	/* mass storage paramas */
	msc_param.InquiryStr = (uint8_t *) g_InquiryStr;
	msc_param.BlockCount = MSC_MEM_DISK_BLOCK_COUNT;
	msc_param.BlockSize = MSC_MEM_DISK_BLOCK_SIZE;
	msc_param.MemorySize = MSC_MEM_DISK_SIZE;
	/* Install memory storage callback routines */
	msc_param.MSC_Write = translate_wr;
	msc_param.MSC_Read = translate_rd;
	msc_param.MSC_Verify = translate_verify;
	msc_param.MSC_GetWriteBuf = translate_GetWrBuf;
	msc_param.intf_desc = (uint8_t *) find_IntfDesc(pDesc->full_speed_desc, USB_DEVICE_CLASS_STORAGE);

	ret = USBD_API->msc->init(hUsb, &msc_param);
	/* update memory variables */
	pUsbParam->mem_base = msc_param.mem_base;
	pUsbParam->mem_size = msc_param.mem_size;

	return ret;
}
Пример #4
0
/* Virtual com port init routine */
ErrorCode_t vcom_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;

    g_vCOM.hUsb = hUsb;
    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 = VCOM_SetLineCode;

    ret = USBD_API->cdc->init(hUsb, &cdc_param, &g_vCOM.hCdc);

    if (ret == LPC_OK) {
        /* allocate transfer buffers */
        g_vCOM.rx_buff = (uint8_t *) cdc_param.mem_base;
        cdc_param.mem_base += VCOM_RX_BUF_SZ;
        cdc_param.mem_size -= VCOM_RX_BUF_SZ;

        /* register endpoint interrupt handler */
        ep_indx = (((USB_CDC_IN_EP & 0x0F) << 1) + 1);
        ret = USBD_API->core->RegisterEpHandler(hUsb, ep_indx, VCOM_bulk_in_hdlr, &g_vCOM);
        if (ret == LPC_OK) {
            /* register endpoint interrupt handler */
            ep_indx = ((USB_CDC_OUT_EP & 0x0F) << 1);
            ret = USBD_API->core->RegisterEpHandler(hUsb, ep_indx, VCOM_bulk_out_hdlr, &g_vCOM);

        }
        /* 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;
}
Пример #5
0
ErrorCode_t hid_generic_init(USBD_HANDLE_T hUsb, USB_CORE_DESCS_T *pDesc, USBD_API_INIT_PARAM_T *pUsbParam) {
	USB_INTERFACE_DESCRIPTOR *pIntfDesc = find_IntfDesc(pDesc->high_speed_desc, USB_DEVICE_CLASS_HUMAN_INTERFACE);

	USBD_HID_INIT_PARAM_T hid_param;
	USB_HID_REPORT_T reports_data[1];
	ErrorCode_t ret = LPC_OK;

	memset((void *) &hid_param, 0, sizeof(USBD_HID_INIT_PARAM_T));
	/* HID paramas */
	hid_param.max_reports = 1;
	/* Init reports_data */
	reports_data[0].len = HID_ReportDescSize;
	reports_data[0].idle_time = 0;
	reports_data[0].desc = (uint8_t *) &HID_ReportDescriptor[0];

	if (pIntfDesc == 0) {
		return ERR_FAILED;
	}

	hid_param.mem_base = pUsbParam->mem_base;
	hid_param.mem_size = pUsbParam->mem_size;
	hid_param.intf_desc = (uint8_t *) pIntfDesc;
	/* user defined functions */
	hid_param.HID_GetReport = HID_GetReport;
	hid_param.HID_SetReport = HID_SetReport;
	hid_param.HID_EpIn_Hdlr  = HID_Ep_Hdlr;
	hid_param.HID_EpOut_Hdlr = HID_Ep_Hdlr;
	hid_param.report_data  = reports_data;

	ret = USBD_API->hid->init(hUsb, &hid_param);
	/* allocate USB accessable memory space for report data */
	loopback_report =  (uint8_t *) hid_param.mem_base;
	hid_param.mem_base += 4;
	hid_param.mem_size += 4;

	/* update memory variables */
	pUsbParam->mem_base = hid_param.mem_base;
	pUsbParam->mem_size = hid_param.mem_size;

	puts("hid_generic_init: Initialization Done!");
	assert(ret == 0);
	return ret;
}
Пример #6
0
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;
}