void usb_init(const usb_profile_t *profile) { usb_driver_init( profile ); usb_msc_init(); usb_dfu_init(); platform_usb_enable(); }
/***************************************************************************** ** Main Function main() *****************************************************************************/ int main (void) { USBD_API_INIT_PARAM_T usb_param; USB_CORE_DESCS_T desc; ErrorCode_t ret; USB_INTERFACE_DESCRIPTOR* pIntfDesc; USB_COMMON_DESCRIPTOR *pD; uint32_t next_desc_adr, total_len = 0; SystemCoreClockUpdate(); /* Setup UART for 115.2K, 8 data bits, no parity, 1 stop bit */ UARTInit(115200); UARTSend((uint8_t *)"\r\nLPC11Uxx USB ROMAPI example>", 31); /* get USB API table pointer */ pUsbApi = (USBD_API_T*)((*(ROM **)(0x1FFF1FF8))->pUSBD); /* enable clocks and pinmux for usb0 */ USB_pin_clk_init(); /* initilize call back structures */ memset((void*)&usb_param, 0, sizeof(USBD_API_INIT_PARAM_T)); usb_param.usb_reg_base = LPC_USB_BASE; usb_param.mem_base = 0x10000800; usb_param.mem_size = 0x0800; usb_param.max_num_ep = 4; usb_param.USB_Configure_Event = USB_Configure_Event; /* Initialize Descriptor pointers */ memset((void*)&desc, 0, sizeof(USB_CORE_DESCS_T)); desc.device_desc = (uint8_t *)&USB_DeviceDescriptor[0]; desc.string_desc = (uint8_t *)&USB_StringDescriptor[0]; desc.full_speed_desc = (uint8_t *)&USB_FsConfigDescriptor[0]; desc.high_speed_desc = (uint8_t *)&USB_FsConfigDescriptor[0]; /* USB Initialization */ ret = pUsbApi->hw->Init(&hUsb, &desc, &usb_param); if (ret == LPC_OK) { pD = (USB_COMMON_DESCRIPTOR *)desc.high_speed_desc; next_desc_adr = (uint32_t)desc.high_speed_desc; while (pD->bLength) { if (pD->bDescriptorType == USB_INTERFACE_DESCRIPTOR_TYPE) { pIntfDesc = (USB_INTERFACE_DESCRIPTOR*)pD; switch(pIntfDesc->bInterfaceClass) { case USB_DEVICE_CLASS_STORAGE: ret = usb_msc_mem_init(hUsb, pIntfDesc, &usb_param.mem_base, &usb_param.mem_size); if (ret != LPC_OK) UARTSend((uint8_t *)"\r\n usb_msc_mem_init error!!!", 31); break; case USB_DEVICE_CLASS_APP: ret = usb_dfu_init(hUsb, pIntfDesc, &usb_param.mem_base, &usb_param.mem_size); if (ret != LPC_OK) UARTSend((uint8_t *)"\r\n usb_dfu_init error!!!", 27); break; case USB_DEVICE_CLASS_HUMAN_INTERFACE: ret = usb_hid_init(hUsb, pIntfDesc, &usb_param.mem_base, &usb_param.mem_size); if (ret != LPC_OK) UARTSend((uint8_t *)"\r\n usb_hid_init error!!!", 27); break; } if (ret != LPC_OK) break; /* break while loop no point proceeding further */ } pIntfDesc = 0; total_len += pD->bLength; next_desc_adr = (uint32_t)pD + pD->bLength; pD = (USB_COMMON_DESCRIPTOR*)next_desc_adr; } if (total_len != ((USB_CONFIGURATION_DESCRIPTOR *)desc.high_speed_desc)->wTotalLength) UARTSend((uint8_t *)"\r\nBadly formed config descriptor!!!", 38); if (ret == LPC_OK) { NVIC_EnableIRQ(USB_IRQn); // enable USB interrrupts /* now connect */ pUsbApi->hw->Connect(hUsb, 1); } } else { UARTSend("\r\nhwUSB_Init error!!!", 21); } while (1) { u32Milliseconds = 100; if (dfu_detach_sig) { /* disconnect */ pUsbApi->hw->Connect(hUsb, 0); /* for current test wrap-around condition is overlooked */ while (u32Milliseconds < 98); /* connect the device back */ pUsbApi->hw->Connect(hUsb, 1); dfu_detach_sig = 0; } /* Wait... */ while(u32Milliseconds); } }