usbAcmLib.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:12k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* usbAcmLib.h - USB Communications / ACM Class Class Driver definitions */
  2. /* Copyright 2000-2001 Wind River Systems, Inc. */
  3. /*
  4. Modification history
  5. --------------------
  6. 01d,07may01,wef  changed module number to be (module num << 8) | M_usbHostLib
  7. 01c,02may01,wef  changed module number to be M_<module> + M_usbHostLib
  8. 01b,05dec00,wef  moved Module number defs to vwModNum.h - add vwModNum.h 
  9.                  to #includes
  10. 01a,19sep00,bri  Created
  11. */
  12. #ifndef __INCusbAcmLibh
  13. #define __INCusbAcmLibh
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif  /* __cplusplus */
  17. /* includes */
  18. #include "vxWorks.h"
  19. #include "string.h"
  20. #include "sioLib.h"
  21. #include "errno.h"
  22. #include "ctype.h"
  23. #include "logLib.h"
  24. #include "usb/usbPlatform.h"     
  25. #include "usb/ossLib.h"     /* operations system srvcs */
  26. #include "usb/usb.h"     /* general USB definitions */
  27. #include "usb/usbListLib.h"     /* linked list functions */
  28. #include "usb/usbdLib.h"     /* USBD interface */
  29. #include "usb/usbLib.h"     /* USB utility functions */
  30. #include "usb/usbCommdevices.h"
  31. #include "vwModNum.h"           /* USB Module Number Def's */
  32. /* defines */
  33. /* communication feature selection codes */
  34. #define USB_ACM_COMM_FEATURE_RESERVED           0x00
  35. #define USB_ACM_COMM_FEATURE_ABSTRACT_STATE     0x01
  36. #define USB_ACM_COMM_FEATURE_COUNTRY_SETTING    0x02
  37. #define USB_ACM_IDLE_END_POINTS                 0x0001
  38. #define USB_ACM_ENABLE_MULTIPLEX_CALLMGMT       0x0002
  39. /* Line coding */
  40. #define USB_ACM_STOPBITS_1                      0
  41. #define USB_ACM_STOPBITS_1_5                    1
  42. #define USB_ACM_STOPBITS_2                      2
  43. #define USB_ACM_PARITY_NONE                     0
  44. #define USB_ACM_PARITY_ODD                      1
  45. #define USB_ACM_PARITY_EVEN                     2
  46. #define USB_ACM_PARITY_MARK                     3
  47. #define USB_ACM_PARITY_SPACE                    4
  48. /* Control Line State Setting */
  49. #define USB_ACM_HALFDPLX_ENABLE_CARRIER         0x2
  50. #define USB_ACM_DTE_PRESENT                     0x1
  51. /* UART (Serial) State masks */
  52. #define USB_ACM_SSTATE_RX_CARRIER               0x0001
  53. #define USB_ACM_SSTATE_TX_CARRIER               0x0002
  54. #define USB_ACM_SSTATE_BREAK                    0x0004
  55. #define USB_ACM_SSTATE_RING_SIGNAL              0x0008
  56. #define USB_ACM_SSTATE_FRAMING                  0x0010
  57. #define USB_ACM_SSTATE_PARITY                   0x0020
  58. #define USB_ACM_SSTATE_OVERRUN                  0x0040
  59. /* baudrate range supported */
  60. #define USB_ACM_BAUD_MIN                4800
  61. #define USB_ACM_BAUD_MAX                56000
  62. /*
  63.  *  Abstract Control Model Requests and Notifications
  64.  */
  65. #define USB_ACM_REQ_SEND_ENCAP          0x0000
  66. #define USB_ACM_REQ_GET_ENCAP           0x0001
  67. #define USB_ACM_REQ_FEATURE_SET         0x0002
  68. #define USB_ACM_REQ_FEATURE_GET         0x0003
  69. #define USB_ACM_REQ_FEATURE_CLEAR       0x0004
  70. #define USB_ACM_REQ_LINE_CODING_SET 0x0020
  71. #define USB_ACM_REQ_LINE_CODING_GET 0x0021
  72. #define USB_ACM_REQ_CTRL_LINE_STATE_SET 0x0022
  73. #define USB_ACM_REQ_SEND_BREAK         0x0023
  74. #define USB_ACM_NOTIFY_NET_CONN         0x0000
  75. #define USB_ACM_NOTIFY_RESP_AVAIL       0x0001
  76. #define USB_ACM_NOTIFY_SERIAL_STATE     0x0020
  77. /* Error codes as set by usbAcmLib  */
  78. /* usbEnetLib error values */
  79. /* 
  80.  * USB errnos are defined as being part of the USB host Module, as are all
  81.  * vxWorks module numbers, but the USB Module number is further divided into 
  82.  * sub-modules.  Each sub-module has upto 255 values for its own error codes 
  83.  */
  84. #define USB_ACM_SUB_MODULE  10
  85. #define M_usbAcmLib  ( (USB_ACM_SUB_MODULE  << 8) | M_usbHostLib )
  86. #define usbAcmErr(x) (M_usbAcmLib | (x))
  87. #define S_usbAcmLib_NOT_INITIALIZED usbAcmErr (1)
  88. #define S_usbAcmLib_BAD_PARAM      usbAcmErr (2)
  89. #define S_usbAcmLib_OUT_OF_MEMORY usbAcmErr (3)
  90. #define S_usbAcmLib_OUT_OF_RESOURCES usbAcmErr (4)
  91. #define S_usbAcmLib_GENERAL_FAULT usbAcmErr (5)
  92. #define S_usbAcmLib_QUEUE_FULL      usbAcmErr (6)
  93. #define S_usbAcmLib_QUEUE_EMPTY usbAcmErr (7)
  94. #define S_usbAcmLib_NOT_IMPLEMENTED usbAcmErr (8)
  95. #define S_usbAcmLib_USBD_FAULT      usbAcmErr (9)
  96. #define S_usbAcmLib_NOT_REGISTERED usbAcmErr (10)
  97. #define S_usbAcmLib_NOT_LOCKED      usbAcmErr (11)
  98. /* Callback Codes */
  99. #define USB_ACM_CALLBACK_ATTACH         (0x1<<8)
  100. #define USB_ACM_CALLBACK_DETACH         (0x1<<9)
  101. #define USB_ACM_CALLBACK_SIO_TX         (0x1<<10)
  102. #define USB_ACM_CALLBACK_SIO_RX         (0x1<<11)
  103. #define USB_ACM_CALLBACK_BLK_RX         (0x1<<12)
  104. #define USB_ACM_CALLBACK_MODEM_CMD      (0x1<<13)
  105. /* We use this Bit to see if the callback is for a Block send */
  106.     
  107. #define USB_ACM_CALLBACK_BLK_TX         0x0100      
  108. /* IOCTL codes */
  109. /* VxWorks SIO Model Ioctl codes */
  110. #define USB_ACM_SIO_BAUD_SET            SIO_BAUD_SET
  111. #define USB_ACM_SIO_BAUD_GET            SIO_BAUD_GET
  112. #define USB_ACM_SIO_MODE_SET            SIO_MODE_SET
  113. #define USB_ACM_SIO_MODE_GET            SIO_MODE_GET
  114. #define USB_ACM_SIO_AVAIL_MODES_GET     SIO_AVAIL_MODES_GET
  115. #define USB_ACM_SIO_HW_OPTIONS_SET      SIO_HW_OPTS_SET
  116. #define USB_ACM_SIO_HW_OPTIONS_GET      SIO_HW_OPTS_GET
  117. #define USB_ACM_SIO_HUP                 SIO_HUP
  118. #define USB_ACM_SIO_OPEN                SIO_OPEN
  119. /* Ioctl codes to support the usb ACM specification.*/
  120. #define acmIoctl(x)                     (0x8000 | x)
  121. #define USB_ACM_SIO_SEND_ENCAP          acmIoctl(USB_ACM_REQ_SEND_ENCAP)
  122. #define USB_ACM_SIO_GET_ENCAP           acmIOctl(USB_ACM_REQ_GET_ENCAP)
  123. #define USB_ACM_SIO_FEATURE_SET         acmIoctl(USB_ACM_REQ_FEATURE_SET)
  124. #define USB_ACM_SIO_FEATURE_GET         acmIoctl(USB_ACM_REQ_FEATURE_GET)
  125. #define USB_ACM_SIO_FEATURE_CLEAR       acmIoctl(USB_ACM_REQ_FEATURE_CLEAR)
  126. #define USB_ACM_SIO_LINE_CODING_SET acmIoctl(USB_ACM_REQ_LINE_CODING_SET)
  127. #define USB_ACM_SIO_LINE_CODING_GET acmIoctl(USB_ACM_REQ_LINE_CODING_GET)
  128. #define USB_ACM_SIO_SEND_BREAK         acmIoctl(USB_ACM_REQ_SEND_BREAK)
  129. #define USB_ACM_SIO_CTRL_LINE_STATE_SET
  130.                                 acmIoctl(USB_ACM_REQ_CTRL_LINE_STATE_SET)
  131. #define USB_ACM_SIO_MAX_BUF_SIZE_GET    acmIoctl(0x00aa)
  132. /* Buffer Sizes */
  133. #define ACM_OUT_BFR_SIZE       512       /* size of output bfr */
  134. #define ACM_IN_BFR_SIZE        512  /* size of input bfr */
  135. #define ACM_INTR_BFR_SIZE      512   /* size of input bfr */
  136. /* typedefs */
  137. /*
  138.  * usbAcmLib allows client to obtain notification of certain types of events
  139.  * by registering a callback routine for each of the events that are of interest
  140.  * to the client. The attach codes are described in usbAcmLib.h.
  141.  * 
  142.  * The USB_ACM_CALLBACK defines a callback routine which will be invoked
  143.  * by usbAcmLib.c when any of these events happen, provided that the user
  144.  * registered a callback for such an event. 
  145.  * Note that all these fields are not required for all of the events.
  146.  * They will be filled NULL or ZERO (0) when the callback is executed.
  147.  *
  148.  */
  149. typedef STATUS (*USB_ACM_CALLBACK)
  150.     (
  151.     pVOID       arg,             /* caller-defined argument */
  152.     SIO_CHAN * pChan,     /* pointer to affected SIO_CHAN */
  153.     UINT16 callbackType,     /* defined as USB_ACM_CALLBACK_xxxx */
  154.     UINT8 * pBuf,                   /* pointer to data buffer, if any data */
  155.                                     /* transfer is involved. Otherwise NULL */
  156.     UINT16 count                    /* No of bytes of data transferred */
  157.                                     /* if a data transfer is involved. */
  158.                                     /* 0 otherwise. */
  159.     );
  160. typedef struct acmLineCode {
  161.     UINT32  baudRate;               /* Data terminal rate in Bits per sec*/
  162.     UINT8   noOfStopBits;           /* 1, 1.5 or 2 */
  163.     UINT8   parityType;             /* None, Even, Odd, Mark or Space */
  164.     UINT8   noOfDataBits;           /* 5,6,7,8 or 16 */
  165.     }LINE_CODE;
  166. /*
  167.  * The structure we associate each Modem with.
  168.  */
  169. typedef struct acmStruct {
  170.     SIO_CHAN sioChan;     /* must be first field */
  171.     int unitNo;     /* modem device */
  172.     LINK sioLink;     /* linked list of acmStructs */
  173.     UINT16 lockCount;     /* Count of times structure locked */
  174.     USBD_NODE_ID nodeId;     /* modem node Id */
  175.     UINT16 vendorId;                /* The information which */
  176.     UINT16 productId;               /* allows to identify an SIO_CHAN */
  177.     UINT16 serialNo;                /* uniquely */
  178.     UINT16 configuration;     /* configuration reported as a modem */
  179.     UINT16 ifaceCommClass;          /* Communication Interface Class */
  180.     UINT16 ifaceCommAltSetting;     /* Alternate Setting */
  181.     UINT16 ifaceDataClass;          /* Data Interface Class */
  182.     UINT16 ifaceDataAltSetting;     /* Alternate Setting */
  183.     UINT16 protocol;     /* protocol reported by device */
  184.     BOOL connected;     /* TRUE if modem currently connected */
  185.     USBD_PIPE_HANDLE outPipeHandle; /* USBD pipe handle for bulk OUT pipe */
  186.     USB_IRP outIrp;     /* IRP to transmit output data */
  187.     BOOL outIrpInUse;     /* TRUE while IRP is outstanding */
  188.     UINT8 * outBfr;     /* pointer to output buffer */
  189.     UINT16 outBfrLen;     /* maximum size of output buffer */
  190.     UINT32 outErrors;     /* count of IRP failures */
  191.     USBD_PIPE_HANDLE inPipeHandle;  /* USBD pipe handle for bulk IN pipe */
  192.     USB_IRP inIrp;     /* IRP to monitor input from printer */
  193.     BOOL inIrpInUse;     /* TRUE while IRP is outstanding */
  194.     UINT8 * inBfr;     /* pointer to input buffer */
  195.     UINT16 inBfrLen;     /* size of input buffer */
  196.     UINT32 inErrors;     /* count of IRP failures */
  197.     USBD_PIPE_HANDLE intrPipeHandle; /* USBD pipe handle for bulk OUT pipe */
  198.     USB_IRP intrIrp;     /* IRP to transmit output data */
  199.     BOOL intrIrpInUse;     /* TRUE while IRP is outstanding */
  200.     UINT8 * intrBfr;     /* pointer to output buffer */
  201.     UINT16 intrBfrLen;     /* size of output buffer */
  202.     UINT32 intrErrors;     /* count of IRP failures */
  203.     struct acmLineCode lineCode;    /* Communication Settings */
  204.     int     options;                /* SIO style options */
  205.     int mode;     /* always SIO_MODE_INT */
  206.     UINT16 maxPktSize;              /* Maximum size for Block Transfers */
  207.     UINT16 callbackStatus;          /* Tells whether a callback is */
  208.                                     /* installed or Not */
  209.     STATUS (*getTxCharCallback) (); /* tx callback */
  210.     void * getTxCharArg;            /* tx callback argument */
  211.     STATUS (*putRxCharCallback) (); /* rx callback */
  212.     void * putRxCharArg;     /* rx callback argument */
  213.     USB_ACM_CALLBACK putRxBlockCallback;/* Block Rx callback */
  214.     void * putRxBlockArg;           /* Block Rx Callback Argument */
  215.     USB_ACM_CALLBACK putModemResponseCallback;  /* Modem Response callback */
  216.     void * putModemResponseArg;             /* Modem Response Callback Arg */
  217.     } USB_ACM_SIO_CHAN, *pUSB_ACM_SIO_CHAN;
  218. /* function prototypes */
  219. STATUS usbAcmLibInit  (void);
  220. STATUS usbAcmLibShutdown  (void);
  221. STATUS usbAcmSioChanLock
  222.     (
  223.     SIO_CHAN *pChan     /* SIO_CHAN to be marked as in use */
  224.     );
  225. STATUS usbAcmSioChanUnlock
  226.     (
  227.     SIO_CHAN *pChan     /* SIO_CHAN to be marked as unused */
  228.     );
  229. int usbAcmCallbackRegister
  230.     (
  231.     SIO_CHAN * pChan,                   /* SIO_CHAN */
  232.     int  callbackType,                  /* Callback Type */
  233.     FUNCPTR callback,          /* callback to be registered */
  234.     pVOID arg /* user-defined arg to callback */
  235.     );
  236. STATUS usbAcmCallbackRemove
  237.     (
  238.     SIO_CHAN * pChan,                   /* Channel */
  239.     UINT callbackType,                  /* Callback type for which callback */
  240.     USB_ACM_CALLBACK callback           /* is to be de-installed */
  241.     );
  242. STATUS usbAcmBlockSend
  243.     (
  244.     SIO_CHAN * pChan,                   /* Channel for Block Transmission */
  245.     UINT8 * pBuf,                       /* data to be transmitted */
  246.     UINT16 count                        /* no of bytes to be transmitted */
  247.     );
  248. STATUS usbAcmModemCommandSend
  249.     (
  250.     SIO_CHAN * pChan,                   /* Channel */
  251.     UINT8 * pBuf,                       /* Pointer to command buffer */
  252.     UINT16 count                        /* no of command bytes */
  253.     );
  254. int usbAcmIoctl
  255.     (
  256.     SIO_CHAN * pChan,                   /* Channel */
  257.     int  request,                       /* IOCTL request */
  258.     void * pBuf                         /* buffer */
  259.     );
  260. #ifdef __cplusplus
  261. }
  262. #endif /* __cplusplus */
  263. #endif /* __INCusbAcmLibh */