USB Device ROM Stack API example program

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers usb.h Source File

usb.h

00001 #ifndef _USB_H_
00002 #define _USB_H_
00003 
00004 typedef enum {
00005     LPC_OK=0,
00006 } ErrorCode_t;
00007 
00008 typedef uint32_t USBD_HANDLE_T;
00009 typedef void* USB_CB_T;
00010 typedef void* USB_PARAM_CB_T;
00011 
00012 typedef struct _USB_CORE_DESCS_T {
00013     const uint8_t *device_desc;
00014     const uint8_t *string_desc;
00015     const uint8_t *full_speed_desc;
00016     const uint8_t *high_speed_desc;
00017     const uint8_t *device_qualifier;
00018 } USB_CORE_DESCS_T;
00019 
00020 typedef struct USBD_API_INIT_PARAM {
00021     uint32_t usb_reg_base; 
00022     uint8_t* mem_base;
00023     uint32_t mem_size;
00024     uint8_t max_num_ep;
00025     uint8_t pad0[3];
00026     USB_CB_T USB_Reset_Event;
00027     USB_CB_T USB_Suspend_Event;
00028     USB_CB_T USB_Resume_Event;
00029     USB_CB_T reserved_sbz;
00030     USB_CB_T USB_SOF_Event;
00031     USB_PARAM_CB_T USB_WakeUpCfg;
00032     USB_PARAM_CB_T USB_Power_Event;
00033     USB_PARAM_CB_T USB_Error_Event;
00034     USB_CB_T USB_Configure_Event;
00035     USB_CB_T USB_Interface_Event;
00036     USB_CB_T USB_Feature_Event;
00037     uint32_t (* virt_to_phys)(void* vaddr);
00038     void (* cache_flush)(uint32_t* start_adr, uint32_t* end_adr);
00039 } USBD_API_INIT_PARAM_T;
00040 
00041 typedef struct USBD_HW_API {
00042     uint32_t (*GetMemSize)(USBD_API_INIT_PARAM_T* param);
00043     ErrorCode_t (*Init)(USBD_HANDLE_T* phUsb, USB_CORE_DESCS_T* pDesc, USBD_API_INIT_PARAM_T* param);
00044     void (*Connect)(USBD_HANDLE_T hUsb, uint32_t con);
00045     void (*ISR)(USBD_HANDLE_T hUsb);
00046 } USBD_HW_API_T;
00047 
00048 typedef struct USBD_CORE_API {
00049     void* dummy;
00050     //TODO
00051 } USBD_CORE_API_T;
00052 
00053 typedef struct USBD_MSC_INIT_PARAM {
00054     uint8_t* mem_base;
00055     uint32_t mem_size;
00056     const uint8_t* InquiryStr;
00057     uint32_t BlockCount;
00058     uint32_t BlockSize;
00059     uint32_t MemorySize;
00060     const uint8_t* intf_desc;
00061     void (*MSC_Write)(uint32_t offset, uint8_t** src, uint32_t length, uint32_t high_offset);
00062     void (*MSC_Read)(uint32_t offset, uint8_t** dst, uint32_t length, uint32_t high_offset);
00063     ErrorCode_t (*MSC_Verify)(uint32_t offset, uint8_t buf[], uint32_t length, uint32_t high_offset);
00064     void (*MSC_GetWriteBuf)(uint32_t offset, uint8_t** buff_adr, uint32_t length, uint32_t high_offset);
00065     ErrorCode_t (*MSC_Ep0_Hdlr)(USBD_HANDLE_T hUsb, void* data, uint32_t event);
00066     uint64_t  MemorySize64;
00067 } USBD_MSC_INIT_PARAM_T;
00068 
00069 typedef struct USBD_MSC_API {
00070     uint32_t (*GetMemSize)(USBD_MSC_INIT_PARAM_T* param);
00071     ErrorCode_t (*init)(USBD_HANDLE_T hUsb, USBD_MSC_INIT_PARAM_T* param);
00072 } USBD_MSC_API_T;
00073 
00074 typedef struct USBD_HID_API {
00075     void* dummy;
00076     // TODO
00077 } USBD_HID_API_T;
00078 typedef struct USBD_CDC_API {
00079     void* dummy;
00080     // TODO
00081 } USBD_CDC_API_T;
00082 
00083 typedef struct USBD_API {
00084   const USBD_HW_API_T* hw;
00085   const USBD_CORE_API_T* core;
00086   const USBD_MSC_API_T* msc;
00087   const void* dfu;
00088   const USBD_HID_API_T* hid;
00089   const USBD_CDC_API_T* cdc;
00090   const uint32_t* reserved6;
00091   uint32_t version;
00092 } USBD_API_T;
00093 
00094 typedef struct _ROM {
00095    const USBD_API_T * pUSBD;
00096 } ROM;
00097 
00098 extern USBD_API_T* pUsbApi;
00099 extern USBD_HANDLE_T hUsb;
00100 
00101 extern uint32_t USBD_MSC_MemorySize;
00102 extern uint32_t USBD_MSC_BlockSize;
00103 extern uint32_t USBD_MSC_BlockGroup;
00104 extern uint32_t USBD_MSC_BlockCount;
00105 extern uint8_t* USBD_MSC_BlockBuf;
00106 extern uint8_t USBD_MSC_MediaReady;
00107 
00108 #endif // _USB_H_