c5509_usb.h
上传用户:dahaojd
上传日期:2008-01-29
资源大小:14357k
文件大小:11k
源码类别:

DSP编程

开发平台:

C/C++

  1. /*
  2.  *  Copyright 2003 by Texas Instruments Incorporated.
  3.  *  All rights reserved. Property of Texas Instruments Incorporated.
  4.  *  Restricted rights to use, duplicate or disclose this code are
  5.  *  granted through contract.
  6.  *  
  7.  */
  8. /* "@(#) DDK 1.10.00.23 07-02-03 (ddk-b12)" */
  9. /*
  10.  *  ======== c5509_usb.h ========
  11.  *  This file defines the external interface of C5509_USB to user.
  12.  */
  13. #ifndef C5509_USB_
  14. #define C5509_USB_
  15. #include <std.h>
  16. #include <csl.h>
  17. #include <csl_std.h>
  18. #include <csl_usb.h>
  19. #include <iom.h>
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23. /*
  24.  * BIOS driver version number defns.
  25.  */
  26. #define C5509_USB_VERSION_1  0xAB01  /* 0xAB01 is version 1,0xAB02 is 2, etc */
  27. /* 
  28.  *  This control code is used to connect the device 
  29.  *    to the host before USB transactions can be performed.
  30.  *  Applications typically use SIO_ctrl() or GIO_control() API with
  31.  *   the 'cmd' param = C5509_USB_DEVICECONNECT. 
  32.  */
  33. #define C5509_USB_DEVICECONNECT  IOM_CNTL_USER
  34. /* 
  35.  *  This control code is used to retrieve USB state information from
  36.  *   the USB device driver. The user passes the address of a 
  37.  *   C5509_USB_StateInfo data structure to be filled in by the driver.
  38.  *  Refer to USB 1.x Spec chapter 9.  
  39.  */
  40. #define C5509_USB_GETSTATEINFO   IOM_CNTL_USER + 1
  41. /*
  42.  * C5509_USB_DevParams defaults.
  43.  */
  44. #define C5509_USB_IER0MASKDEFAULT   1   /* ier0mask = 1 to mask self(USB) */
  45. #define C5509_USB_IER1MASKDEFAULT   1   /* ier1mask = 1.  "               */
  46. #define C5509_USB_INCLK12MHZ        12  /* USB inclk, input clock is 12 Mhz */
  47. #define C5509_USB_PLLDIVDEFAULT     0   /* plldiv, PLL divide value = 0 */
  48. #define C5509_USB_PSOFTMRCNTDEFAULT 128 /* pSofTmrCnt, PSOF value */ 
  49. /*
  50.  *  C5509_USB_EndptDesc:
  51.  *
  52.  *  This is the USB endpoint descriptor used by the USB CSL.
  53.  *
  54.  *  reserved is used by transfer API, not an integral desc part.
  55.  *
  56.  *  ltmask is the length & desc type mask.
  57.  *
  58.  *  addrsmask is the ep address and transfer attributes.
  59.  *
  60.  *  maxPktLen is the max transfer pkt size in bytes.
  61.  *
  62.  *  interval;  host uses for scheduling USB requests (8 lsb bits used)
  63.  */
  64. typedef struct C5509_USB_EndptDesc {
  65.     Uint16 reserved;  /* Used by transfer API, not an integral desc part */
  66.     Uint16 ltmask;    /* length & desc type mask */
  67.     Uint16 addrsmask; /* ep address and transfer attributes */
  68.     Uint16 maxPktLen; /* max transfer pkt size in bytes */
  69.     Uint16 interval;  /* one lsb used; host uses for scheduling */
  70. } C5509_USB_EndptDesc;
  71. /*
  72.  *  This is the application-level callback function for
  73.  *   USB bus connection notification.. 
  74.  */
  75. typedef Void (*C5509_USB_TappCallback)(Ptr arg);
  76. /*
  77.  *  The application code can pass a pointer to this structure
  78.  *   for the function 'fxn' to be called with arguments as defined
  79.  *   by the C5509_USB_TappCallback typedef above. This structure is used
  80.  *   by the C5509_USB_DEVICECONNECT control command code to allow application
  81.  *   code to register a callback function to be invoked when the USB bus
  82.  *   is connected.
  83.  */
  84. typedef struct C5509_USB_AppCallback {
  85.     C5509_USB_TappCallback      fxn;
  86.     Ptr                 arg;
  87. } C5509_USB_AppCallback;
  88. /*  
  89.  *  IOM channel object. 
  90.  *  The channel object is used internally to the IOM driver,
  91.  *   but users declare channel object memory to alleviate the need
  92.  *   for dynamic memory allocation in the driver.
  93.  *  One IOM channel object is associated with one CSL USB endpoint.
  94.  */  
  95. typedef struct C5509_USB_ChanObj {
  96.     Uns mode;                           /* data flow direction */
  97.     USB_EpObj epObj;                    /* USB CSL endpoint object */ 
  98.     IOM_Packet *flushPacket;           /* IOM_FLUSH/ABORT packet */
  99.     IOM_Packet *dataPacket;            /* current active I/O packet */
  100.     QUE_Obj pendList;                   /* list of packets for I/O */
  101.     IOM_TiomCallback cbFxn;             /* IOM callback */
  102.     Ptr  cbArg;                         /* IOM callback argument */
  103.     C5509_USB_TappCallback fxnConnect;  /* Fxn called when bus is connected */
  104.     Ptr argConnect;                     /* argument to fxnConnect() */
  105. } C5509_USB_ChanObj, *C5509_USB_ChanHandle;
  106. /*
  107.  *  C5509_USB_EpConfig:
  108.  *   
  109.  *  This is the endpoint configuration array used in devParams to configure
  110.  *    a USB interface.
  111.  *   
  112.  *  chanp is the pointer to an IOM channel object.
  113.  *
  114.  *  epNum is the number (e.g. USB_OUT_EP2). 
  115.  *
  116.  *  epType is the EndPt transfer type (e.g. USB_BULK).
  117.  *
  118.  *  epEvtMask is the USB endpoint events mask.(e.g. USB_EVENT_EOT).
  119.  */
  120. typedef struct C5509_USB_EpConfig {
  121.     C5509_USB_ChanHandle chanp; /* IOM channel handle */
  122.     USB_EpNum    epNum;         /* Endpoint number (e.g. USB_OUT_EP2) */
  123.     USB_XferType epType;        /* Endpoint transfer type (e.g. USB_BULK) */
  124.     Uint16       epMaxPktLen;   /* Maximum USB packet size(bytes) allowed */
  125.     Uint16       epEvtMask;     /* USB endpoint event msk(e.g USB_EVENT_EOT) */
  126. } C5509_USB_EpConfig;
  127. /*
  128.  *  C5509_USB_IfcConfig:
  129.  *  
  130.  *  The USB interface configuration of endpoints.
  131.  *
  132.  *  numEps is the total number of configured endpoints
  133.  *
  134.  *  usbConfig is a pointer to the USB config and alt i/f(s).
  135.  *
  136.  *  epConfig is the array of endpoint configurations.
  137.  *
  138.  */
  139. typedef struct C5509_USB_IfcConfig {
  140.     Uint16                 numEps;     /* total number of endpoints */
  141.     USB_DataStruct        *usbConfig;  /* USB config and alt i/f(s) */    
  142.     C5509_USB_EpConfig    *epConfig;   /* USB driver endpoint configuration */ 
  143. } C5509_USB_IfcConfig;
  144. /*
  145.  *  ======== usb default event handler type ========
  146.  *  This is the function pointer type is used to override the mini-driver's 
  147.  *  event handler. If non-NULL this event handler is for usb non-setup events. 
  148.  *  When host requests RESET or SUSPEND for example, this event handler gets
  149.  *  called by the mini-driver for the application to process.
  150.  */
  151. typedef Void (*C5509_USB_UsbEventHandler)() ;
  152.                           
  153. /* 
  154.  *  ======== USB control events callbacks ========
  155.  *  When the event occurs, the mini-driver passes the default handler
  156.  *  and calls back to the application.
  157.  */
  158. /*  
  159.  *  Event(non-setup) callback
  160.  */
  161. typedef Void (*C5509_USB_EventCb) (  
  162.         Uint16 event,    /* event */ 
  163.         C5509_USB_UsbEventHandler handler); 
  164. /*
  165.  *  return values for USB request handlers
  166.  */
  167. typedef enum {
  168.     C5509_USB_REQUEST_DONE = 0,  /* Request done. Can call again after setup */
  169.     C5509_USB_REQUEST_STALL,     /* STALL the control endpoint */
  170.     C5509_USB_REQUEST_SEND_ACK,  /* Send a 0 length IN packet */
  171.     C5509_USB_REQUEST_GET_ACK,   /* Prepare to receive 0 length OUT packet */
  172.     C5509_USB_REQUEST_DATA_IN,   /* Notify handler when IN data transmitted */
  173.     C5509_USB_REQUEST_DATA_OUT   /* Notify handler when OUT data received */
  174. } C5509_USB_UsbReqRet;
  175. /*
  176.  *  usb request handler type 
  177.  */                                
  178. typedef C5509_USB_UsbReqRet(*C5509_USB_UsbReqHandler)();
  179. /*
  180.  *  Setup event callback 
  181.  */
  182. typedef C5509_USB_UsbReqRet(*C5509_USB_SetupEventCb) (
  183.         Uint16 requestId,
  184.         C5509_USB_UsbReqHandler handler,
  185.             USB_SetupStruct *setupPacket );
  186. /*
  187.  *  C5509_USB_DeviceConfig:
  188.  *
  189.  *  Device configuration info.
  190.  *
  191.  *  deviceDesc is the device descriptor.
  192.  *
  193.  *  stringDesc is the string descriptor.
  194.  *
  195.  *  stringDescLangId is the language identifier.
  196.  *
  197.  *  eventHandler is the non-setup event handler. If NULL, then use default.
  198.  *
  199.  *  setupEventHandler is the setup event handler for usb setup events. Set
  200.  *    to NULL to use default handler.
  201.  *
  202.  */
  203. typedef struct C5509_USB_DeviceConfig {
  204.     Uint16  *deviceDesc;          /* device descriptor */   
  205.     Uint16  *stringDescLangId;    /* string desc language id */  
  206.     String  *stringDesc;          /* string descriptor */
  207.     C5509_USB_EventCb eventHandler;           /* non-setup event handler */ 
  208.     C5509_USB_SetupEventCb setupEventHandler; /* setup event handler */ 
  209. } C5509_USB_DeviceConfig;
  210. /*
  211.  *  C5509_USB_DevParams struct:
  212.  *   
  213.  *  This is the device parameter struct which should be statically filled
  214.  *  by user and passed to mdBindDev.
  215.  *   
  216.  *  versionId is the mini-driver revision number. If the revision is not 
  217.  *   supported by the driver the mdBindDev mini-driver fxn will return error.
  218.  *
  219.  *  ier0mask is the IER0 mask used by HWI_dispatchPlug in mdBindDev.
  220.  *
  221.  *  ier1mask     "  IER1      "                    "
  222.  *
  223.  *  inclk is the input clock freq(Mhz at CLKIN pin) used to init the USB CSL.
  224.  *   deviceConfig is the USB device, string & lang id descriptors ptrs.
  225.  *
  226.  *  plldiv is the input clock divide down value (CLKIN pin). 
  227.  *
  228.  *  pSofTmrCnt is the 8-bit counter value for the Pre USB Start-of-Frame timer.
  229.  *  ifcConfig is the usb endpoint configuration pointer.
  230.  *
  231.  *  deviceConfig is the USB device, language, and string descriptor.
  232.  * 
  233.  *  ifcConfig is the USB interface descriptor(s).
  234.  * 
  235.  */
  236. typedef struct C5509_USB_DevParams {    /* C5509_USB_DevParams */
  237.     Int versionId;  /* version of mini-driver(e.g C5509_USB_VERSION0)  */
  238.     Uns ier0mask;   /* IERx masks used by HWI_dispatchPlug in mdBindDev, */
  239.     Uns ier1mask;   /* set ier0mask=1 & ier1mask=1 to mask USB intr only */
  240.     Uns inclk;      /* input clock freq(Mhz at CLKIN pin). See USB_initPLL */
  241.     Uns plldiv;     /* input clock divide down value (CLKIN pin). */
  242.     SmUns pSofTmrCnt; /* 8-bit counter value for pre-SOF timer. See USB_init */
  243.     C5509_USB_DeviceConfig  *deviceConfig;  /* device, string & lang id desc */
  244.     C5509_USB_IfcConfig  *ifcConfig; /* usb endpoint interface configuration */
  245. } C5509_USB_DevParams;
  246. /*
  247.  *  C5509_USB_StateInfo struct.
  248.  *  This structure contains internal USB state information returned
  249.  *    to the application by using the C5509_USB_GETSTATEINFO cmd code.
  250.  *  See USB spec. 1.x chapter 9 standard request implementation. 
  251.  */
  252. typedef struct C5509_USB_StateInfo {
  253.     Uint16 usbCurConfig;      /* current USB configuration number */
  254.     Uint16 usbCurIntrfc;      /* current USB interface number */ 
  255.     Uint16 usbCurAltSet;      /* current USB alternate set number */
  256.     Uint16 usbCurDev;         /* current USB device state. 1 = self powered */ 
  257. } C5509_USB_StateInfo;
  258. /*
  259.  * The following are USB descriptor definitions types. Refer to USB 1.x spec.
  260.  */
  261. #define C5509_USB_DESCRIPTOR_DEVICE               0x01   
  262. #define C5509_USB_DESCRIPTOR_CONFIG               0x02
  263. #define C5509_USB_DESCRIPTOR_STRING               0x03
  264. #define C5509_USB_DESCRIPTOR_INTRFC               0x04
  265. #define C5509_USB_DESCRIPTOR_ENDPT                0x05
  266. #define C5509_USB_DESCRIPTOR_POWER                0x06
  267. #define C5509_USB_DESCRIPTOR_HID                  0x21
  268. #ifdef __cplusplus
  269. }
  270. #endif
  271. #endif        /* C5509_USB_ */