Example #1
0
void usb_init(const usb_profile_t *profile)
{
    usb_driver_init( profile );

    usb_msc_init();
    usb_dfu_init();

    platform_usb_enable();
}
Example #2
0
/*****************************************************************************
**   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);
	}
}