⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbacmlib.h

📁 VxWorks源码
💻 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 + -