📄 usbacmlib.h
字号:
/* usbAcmLib.h - USB Communications / ACM Class Class Driver definitions *//* Copyright 2000-2001 Wind River Systems, Inc. *//*Modification history--------------------01d,07may01,wef changed module number to be (module num << 8) | M_usbHostLib01c,02may01,wef changed module number to be M_<module> + M_usbHostLib01b,05dec00,wef moved Module number defs to vwModNum.h - add vwModNum.h to #includes01a,19sep00,bri Created*/#ifndef __INCusbAcmLibh#define __INCusbAcmLibh#ifdef __cplusplusextern "C" {#endif /* __cplusplus *//* includes */#include "vxWorks.h"#include "string.h"#include "sioLib.h"#include "errno.h"#include "ctype.h"#include "logLib.h"#include "usb/usbPlatform.h" #include "usb/ossLib.h" /* operations system srvcs */#include "usb/usb.h" /* general USB definitions */#include "usb/usbListLib.h" /* linked list functions */#include "usb/usbdLib.h" /* USBD interface */#include "usb/usbLib.h" /* USB utility functions */#include "usb/usbCommdevices.h"#include "vwModNum.h" /* USB Module Number Def's *//* defines *//* communication feature selection codes */#define USB_ACM_COMM_FEATURE_RESERVED 0x00#define USB_ACM_COMM_FEATURE_ABSTRACT_STATE 0x01#define USB_ACM_COMM_FEATURE_COUNTRY_SETTING 0x02#define USB_ACM_IDLE_END_POINTS 0x0001#define USB_ACM_ENABLE_MULTIPLEX_CALLMGMT 0x0002/* Line coding */#define USB_ACM_STOPBITS_1 0#define USB_ACM_STOPBITS_1_5 1#define USB_ACM_STOPBITS_2 2#define USB_ACM_PARITY_NONE 0#define USB_ACM_PARITY_ODD 1#define USB_ACM_PARITY_EVEN 2#define USB_ACM_PARITY_MARK 3#define USB_ACM_PARITY_SPACE 4/* Control Line State Setting */#define USB_ACM_HALFDPLX_ENABLE_CARRIER 0x2#define USB_ACM_DTE_PRESENT 0x1/* UART (Serial) State masks */#define USB_ACM_SSTATE_RX_CARRIER 0x0001#define USB_ACM_SSTATE_TX_CARRIER 0x0002#define USB_ACM_SSTATE_BREAK 0x0004#define USB_ACM_SSTATE_RING_SIGNAL 0x0008#define USB_ACM_SSTATE_FRAMING 0x0010#define USB_ACM_SSTATE_PARITY 0x0020#define USB_ACM_SSTATE_OVERRUN 0x0040/* baudrate range supported */#define USB_ACM_BAUD_MIN 4800#define USB_ACM_BAUD_MAX 56000/* * Abstract Control Model Requests and Notifications */#define USB_ACM_REQ_SEND_ENCAP 0x0000#define USB_ACM_REQ_GET_ENCAP 0x0001#define USB_ACM_REQ_FEATURE_SET 0x0002#define USB_ACM_REQ_FEATURE_GET 0x0003#define USB_ACM_REQ_FEATURE_CLEAR 0x0004#define USB_ACM_REQ_LINE_CODING_SET 0x0020#define USB_ACM_REQ_LINE_CODING_GET 0x0021#define USB_ACM_REQ_CTRL_LINE_STATE_SET 0x0022#define USB_ACM_REQ_SEND_BREAK 0x0023#define USB_ACM_NOTIFY_NET_CONN 0x0000#define USB_ACM_NOTIFY_RESP_AVAIL 0x0001#define USB_ACM_NOTIFY_SERIAL_STATE 0x0020/* Error codes as set by usbAcmLib *//* usbEnetLib error values *//* * USB errnos are defined as being part of the USB host Module, as are all * vxWorks module numbers, but the USB Module number is further divided into * sub-modules. Each sub-module has upto 255 values for its own error codes */#define USB_ACM_SUB_MODULE 10#define M_usbAcmLib ( (USB_ACM_SUB_MODULE << 8) | M_usbHostLib )#define usbAcmErr(x) (M_usbAcmLib | (x))#define S_usbAcmLib_NOT_INITIALIZED usbAcmErr (1)#define S_usbAcmLib_BAD_PARAM usbAcmErr (2)#define S_usbAcmLib_OUT_OF_MEMORY usbAcmErr (3)#define S_usbAcmLib_OUT_OF_RESOURCES usbAcmErr (4)#define S_usbAcmLib_GENERAL_FAULT usbAcmErr (5)#define S_usbAcmLib_QUEUE_FULL usbAcmErr (6)#define S_usbAcmLib_QUEUE_EMPTY usbAcmErr (7)#define S_usbAcmLib_NOT_IMPLEMENTED usbAcmErr (8)#define S_usbAcmLib_USBD_FAULT usbAcmErr (9)#define S_usbAcmLib_NOT_REGISTERED usbAcmErr (10)#define S_usbAcmLib_NOT_LOCKED usbAcmErr (11)/* Callback Codes */#define USB_ACM_CALLBACK_ATTACH (0x1<<8)#define USB_ACM_CALLBACK_DETACH (0x1<<9)#define USB_ACM_CALLBACK_SIO_TX (0x1<<10)#define USB_ACM_CALLBACK_SIO_RX (0x1<<11)#define USB_ACM_CALLBACK_BLK_RX (0x1<<12)#define USB_ACM_CALLBACK_MODEM_CMD (0x1<<13)/* We use this Bit to see if the callback is for a Block send */ #define USB_ACM_CALLBACK_BLK_TX 0x0100 /* IOCTL codes *//* VxWorks SIO Model Ioctl codes */#define USB_ACM_SIO_BAUD_SET SIO_BAUD_SET#define USB_ACM_SIO_BAUD_GET SIO_BAUD_GET#define USB_ACM_SIO_MODE_SET SIO_MODE_SET#define USB_ACM_SIO_MODE_GET SIO_MODE_GET#define USB_ACM_SIO_AVAIL_MODES_GET SIO_AVAIL_MODES_GET#define USB_ACM_SIO_HW_OPTIONS_SET SIO_HW_OPTS_SET#define USB_ACM_SIO_HW_OPTIONS_GET SIO_HW_OPTS_GET#define USB_ACM_SIO_HUP SIO_HUP#define USB_ACM_SIO_OPEN SIO_OPEN/* Ioctl codes to support the usb ACM specification.*/#define acmIoctl(x) (0x8000 | x)#define USB_ACM_SIO_SEND_ENCAP acmIoctl(USB_ACM_REQ_SEND_ENCAP)#define USB_ACM_SIO_GET_ENCAP acmIOctl(USB_ACM_REQ_GET_ENCAP)#define USB_ACM_SIO_FEATURE_SET acmIoctl(USB_ACM_REQ_FEATURE_SET)#define USB_ACM_SIO_FEATURE_GET acmIoctl(USB_ACM_REQ_FEATURE_GET)#define USB_ACM_SIO_FEATURE_CLEAR acmIoctl(USB_ACM_REQ_FEATURE_CLEAR)#define USB_ACM_SIO_LINE_CODING_SET acmIoctl(USB_ACM_REQ_LINE_CODING_SET)#define USB_ACM_SIO_LINE_CODING_GET acmIoctl(USB_ACM_REQ_LINE_CODING_GET)#define USB_ACM_SIO_SEND_BREAK acmIoctl(USB_ACM_REQ_SEND_BREAK)#define USB_ACM_SIO_CTRL_LINE_STATE_SET \ acmIoctl(USB_ACM_REQ_CTRL_LINE_STATE_SET)#define USB_ACM_SIO_MAX_BUF_SIZE_GET acmIoctl(0x00aa)/* Buffer Sizes */#define ACM_OUT_BFR_SIZE 512 /* size of output bfr */#define ACM_IN_BFR_SIZE 512 /* size of input bfr */#define ACM_INTR_BFR_SIZE 512 /* size of input bfr *//* typedefs *//* * usbAcmLib allows client to obtain notification of certain types of events * by registering a callback routine for each of the events that are of interest * to the client. The attach codes are described in usbAcmLib.h. * * The USB_ACM_CALLBACK defines a callback routine which will be invoked * by usbAcmLib.c when any of these events happen, provided that the user * registered a callback for such an event. * Note that all these fields are not required for all of the events. * They will be filled NULL or ZERO (0) when the callback is executed. * */typedef STATUS (*USB_ACM_CALLBACK) ( pVOID arg, /* caller-defined argument */ SIO_CHAN * pChan, /* pointer to affected SIO_CHAN */ UINT16 callbackType, /* defined as USB_ACM_CALLBACK_xxxx */ UINT8 * pBuf, /* pointer to data buffer, if any data */ /* transfer is involved. Otherwise NULL */ UINT16 count /* No of bytes of data transferred */ /* if a data transfer is involved. */ /* 0 otherwise. */ );typedef struct acmLineCode { UINT32 baudRate; /* Data terminal rate in Bits per sec*/ UINT8 noOfStopBits; /* 1, 1.5 or 2 */ UINT8 parityType; /* None, Even, Odd, Mark or Space */ UINT8 noOfDataBits; /* 5,6,7,8 or 16 */ }LINE_CODE;/* * The structure we associate each Modem with. */typedef struct acmStruct { SIO_CHAN sioChan; /* must be first field */ int unitNo; /* modem device */ LINK sioLink; /* linked list of acmStructs */ UINT16 lockCount; /* Count of times structure locked */ USBD_NODE_ID nodeId; /* modem node Id */ UINT16 vendorId; /* The information which */ UINT16 productId; /* allows to identify an SIO_CHAN */ UINT16 serialNo; /* uniquely */ UINT16 configuration; /* configuration reported as a modem */ UINT16 ifaceCommClass; /* Communication Interface Class */ UINT16 ifaceCommAltSetting; /* Alternate Setting */ UINT16 ifaceDataClass; /* Data Interface Class */ UINT16 ifaceDataAltSetting; /* Alternate Setting */ UINT16 protocol; /* protocol reported by device */ BOOL connected; /* TRUE if modem currently connected */ USBD_PIPE_HANDLE outPipeHandle; /* USBD pipe handle for bulk OUT pipe */ USB_IRP outIrp; /* IRP to transmit output data */ BOOL outIrpInUse; /* TRUE while IRP is outstanding */ UINT8 * outBfr; /* pointer to output buffer */ UINT16 outBfrLen; /* maximum size of output buffer */ UINT32 outErrors; /* count of IRP failures */ USBD_PIPE_HANDLE inPipeHandle; /* USBD pipe handle for bulk IN pipe */ USB_IRP inIrp; /* IRP to monitor input from printer */ BOOL inIrpInUse; /* TRUE while IRP is outstanding */ UINT8 * inBfr; /* pointer to input buffer */ UINT16 inBfrLen; /* size of input buffer */ UINT32 inErrors; /* count of IRP failures */ USBD_PIPE_HANDLE intrPipeHandle; /* USBD pipe handle for bulk OUT pipe */ USB_IRP intrIrp; /* IRP to transmit output data */ BOOL intrIrpInUse; /* TRUE while IRP is outstanding */ UINT8 * intrBfr; /* pointer to output buffer */ UINT16 intrBfrLen; /* size of output buffer */ UINT32 intrErrors; /* count of IRP failures */ struct acmLineCode lineCode; /* Communication Settings */ int options; /* SIO style options */ int mode; /* always SIO_MODE_INT */ UINT16 maxPktSize; /* Maximum size for Block Transfers */ UINT16 callbackStatus; /* Tells whether a callback is */ /* installed or Not */ STATUS (*getTxCharCallback) (); /* tx callback */ void * getTxCharArg; /* tx callback argument */ STATUS (*putRxCharCallback) (); /* rx callback */ void * putRxCharArg; /* rx callback argument */ USB_ACM_CALLBACK putRxBlockCallback;/* Block Rx callback */ void * putRxBlockArg; /* Block Rx Callback Argument */ USB_ACM_CALLBACK putModemResponseCallback; /* Modem Response callback */ void * putModemResponseArg; /* Modem Response Callback Arg */ } USB_ACM_SIO_CHAN, *pUSB_ACM_SIO_CHAN;/* function prototypes */STATUS usbAcmLibInit (void);STATUS usbAcmLibShutdown (void);STATUS usbAcmSioChanLock ( SIO_CHAN *pChan /* SIO_CHAN to be marked as in use */ );STATUS usbAcmSioChanUnlock ( SIO_CHAN *pChan /* SIO_CHAN to be marked as unused */ );int usbAcmCallbackRegister ( SIO_CHAN * pChan, /* SIO_CHAN */ int callbackType, /* Callback Type */ FUNCPTR callback, /* callback to be registered */ pVOID arg /* user-defined arg to callback */ );STATUS usbAcmCallbackRemove ( SIO_CHAN * pChan, /* Channel */ UINT callbackType, /* Callback type for which callback */ USB_ACM_CALLBACK callback /* is to be de-installed */ );STATUS usbAcmBlockSend ( SIO_CHAN * pChan, /* Channel for Block Transmission */ UINT8 * pBuf, /* data to be transmitted */ UINT16 count /* no of bytes to be transmitted */ );STATUS usbAcmModemCommandSend ( SIO_CHAN * pChan, /* Channel */ UINT8 * pBuf, /* Pointer to command buffer */ UINT16 count /* no of command bytes */ );int usbAcmIoctl ( SIO_CHAN * pChan, /* Channel */ int request, /* IOCTL request */ void * pBuf /* buffer */ );#ifdef __cplusplus}#endif /* __cplusplus */#endif /* __INCusbAcmLibh */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -