usb_cdc.h revision 90f050286227cf4c4f8aa425555d04723d331d48
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/*
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * CDDL HEADER START
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * The contents of this file are subject to the terms of the
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * Common Development and Distribution License (the "License").
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * You may not use this file except in compliance with the License.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * or http://www.opensolaris.org/os/licensing.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * See the License for the specific language governing permissions
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * and limitations under the License.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * When distributing Covered Code, include this CDDL HEADER in each
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * If applicable, add the following below this CDDL HEADER, with the
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * fields enclosed by brackets "[]" replaced with your own identifying
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * information: Portions Copyright [yyyy] [name of copyright owner]
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * CDDL HEADER END
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/*
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * Use is subject to license terms.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#ifndef _SYS_USB_USB_CDC_H
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy#define _SYS_USB_USB_CDC_H
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy#pragma ident "%Z%%M% %I% %E% SMI"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy#include <sys/types.h>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#include <sys/dditypes.h>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#include <sys/usb/clients/usbser/usbser_dsdi.h>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#ifdef __cplusplus
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyextern "C" {
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#endif
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/*
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * USB Communications Device Class
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/*
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * Class-specific descriptors
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#define USB_CDC_CS_INTERFACE 0x24
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#define USB_CDC_CS_ENDPOINT 0x25
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#define USB_CDC_DESCR_TYPE_HEADER 0x00
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#define USB_CDC_DESCR_TYPE_CALL_MANAGEMENT 0x01
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy#define USB_CDC_DESCR_TYPE_ACM 0x02
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#define USB_CDC_DESCR_TYPE_UNION 0x06
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy#define USB_CDC_DESCR_TYPE_COUNTRY 0x07
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#define USB_CDC_DESCR_TYPE_NETWORK_TERMINAL 0x0a
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#define USB_CDC_DESCR_TYPE_ETHERNET 0x0f
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/* Header Functional Descriptor */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedytypedef struct usb_cdc_header_descr {
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint8_t bFunctionalLength;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint8_t bDescriptorType;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint8_t bDescriptorSubtype;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint16_t bcdCDC;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy} usb_cdc_header_descr_t;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy/* Call Management Descriptor */
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedytypedef struct usb_cdc_call_mgmt_descr {
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy uint8_t bFunctionalLength;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint8_t bDescriptorType;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint8_t bDescriptorSubtype;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint8_t bmCapabilities;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint8_t bDataInterface;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy} usb_cdc_call_mgmt_descr_t;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#define USB_CDC_CALL_MGMT_CAP_CALL_MGMT 0x01
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#define USB_CDC_CALL_MGMT_CAP_DATA_INTERFACE 0x02
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/* Abstract Control Management Descriptor */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedytypedef struct usb_cdc_acm_descr {
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint8_t bFunctionalLength;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint8_t bDescriptorType;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint8_t bDescriptorSubtype;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint8_t bmCapabilities;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy} usb_cdc_acm_descr_t;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#define USB_CDC_ACM_CAP_COMM_FEATURE 0x01
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#define USB_CDC_ACM_CAP_SERIAL_LINE 0x02
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#define USB_CDC_ACM_CAP_SEND_BREAK 0x04
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#define USB_CDC_ACM_CAP_NETWORK_CONNECTION 0x08
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/* Union Functional Descriptor */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedytypedef struct usb_cdc_union_descr {
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint8_t bFunctionalLength;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint8_t bDescriptorType;
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy uint8_t bDescriptorSubtype;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint8_t bMasterInterface0;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy uint8_t bSlaveInterface0;
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy /* more slave interafce may follow */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy} usb_cdc_union_descr_t;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy/*
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy * Class-specific requests
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy */
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#define USB_CDC_REQ_SEND_ENCAPSULATED_COMMAND 0x00
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#define USB_CDC_REQ_GET_ENCAPSULATED_RESPONSE 0x01
#define USB_CDC_REQ_SET_LINE_CODING 0x20
#define USB_CDC_REQ_GET_LINE_CODING 0x21
#define USB_CDC_REQ_SET_CONTROL_LINE_STATE 0x22
#define USB_CDC_REQ_SEND_BREAK 0x23
/* Line Coding */
typedef struct usb_cdc_line_coding {
uint32_t dwDTERate;
uint8_t bCharFormat;
uint8_t bParityType;
uint8_t bDataBits;
} usb_cdc_line_coding_t;
#define USB_CDC_LINE_CODING_LEN 7
#define USB_CDC_STOP_BITS_1 0
#define USB_CDC_STOP_BITS_1_5 1
#define USB_CDC_STOP_BITS_2 2
#define USB_CDC_PARITY_NO 0
#define USB_CDC_PARITY_ODD 1
#define USB_CDC_PARITY_EVEN 2
#define USB_CDC_PARITY_MARK 3
#define USB_CDC_PARITY_SPACE 4
#define USB_CDC_ACM_CONTROL_DTR 0x01
#define USB_CDC_ACM_CONTROL_RTS 0x02
#define USB_CDC_NOTIFICATION_REQUEST_TYPE 0xa1
/*
* Class-specific notifications
*/
#define USB_CDC_NOTIFICATION_NETWORK_CONNECTION 0x00
#define USB_CDC_NOTIFICATION_RESPONSE_AVAILABLE 0x01
#define USB_CDC_NOTIFICATION_SERIAL_STATE 0x20
#define USB_CDC_NOTIFICATION_SPEED_CHANGE 0x2a
typedef struct usb_cdc_notification {
uint8_t bmRequestType;
uint8_t bNotificationType;
uint16_t wValue;
uint16_t wIndex;
uint16_t wLength;
} usb_cdc_notification_t;
/* Serial State */
#define USB_CDC_ACM_CONTROL_DCD 0x01
#define USB_CDC_ACM_CONTROL_DSR 0x02
#define USB_CDC_ACM_CONTROL_BREAK 0x04
#define USB_CDC_ACM_CONTROL_RNG 0x08
#define USB_CDC_ACM_CONTROL_FRAMING 0x10
#define USB_CDC_ACM_CONTROL_PARITY 0x20
#define USB_CDC_ACM_CONTROL_OVERRUN 0x40
#ifdef __cplusplus
}
#endif
#endif /* _SYS_USB_USB_CDC_H */