// Copyright 2017 The Fuchsia Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #pragma once // clang-format off #include <zircon/compiler.h> /* CDC Subclasses for the Communications Interface Class */ #define USB_CDC_SUBCLASS_DIRECT_LINE 0x01 #define USB_CDC_SUBCLASS_ABSTRACT 0x02 #define USB_CDC_SUBCLASS_TELEPHONE 0x03 #define USB_CDC_SUBCLASS_MULTI_CHANNEL 0x04 #define USB_CDC_SUBCLASS_CAPI 0x05 #define USB_CDC_SUBCLASS_ETHERNET 0x06 #define USB_CDC_SUBCLASS_ATM 0x07 #define USB_CDC_SUBCLASS_WIRELESS_HANDSET 0x08 #define USB_CDC_SUBCLASS_DEVICE_MGMT 0x09 #define USB_CDC_SUBCLASS_MOBILE_DIRECT 0x0A #define USB_CDC_SUBCLASS_OBEX 0x0B #define USB_CDC_SUBCLASS_ETHERNET_EMU 0x0C #define USB_CDC_SUBCLASS_NETWORK_CTRL 0x0D /* CDC Descriptor SubTypes */ #define USB_CDC_DST_HEADER 0x00 #define USB_CDC_DST_CALL_MGMT 0x01 #define USB_CDC_DST_ABSTRACT_CTRL_MGMT 0x02 #define USB_CDC_DST_DIRECT_LINE_MGMT 0x03 #define USB_CDC_DST_TELEPHONE_RINGER 0x04 #define USB_CDC_DST_TELEPHONE_CALL_REPORTING 0x05 #define USB_CDC_DST_UNION 0x06 #define USB_CDC_DST_COUNTRY_SELECTION 0x07 #define USB_CDC_DST_TELEPHONE_OP_MODES 0x08 #define USB_CDC_DST_USB_TERMINAL 0x09 #define USB_CDC_DST_NETWORK_CHANNEL 0x0A #define USB_CDC_DST_PROTOCOL_UNIT 0x0B #define USB_CDC_DST_EXTENSION_UNIT 0x0C #define USB_CDC_DST_MULTI_CHANNEL_MGMT 0x0D #define USB_CDC_DST_CAPI_CTRL_MGMT 0x0E #define USB_CDC_DST_ETHERNET 0x0F #define USB_CDC_DST_ATM_NETWORKING 0x10 #define USB_CDC_DST_WIRELESS_HANDSET_CTRL 0x11 #define USB_CDC_DST_MOBILE_DIRECT_LINE 0x12 #define USB_CDC_DST_MDLM_DETAIL 0x13 #define USB_CDC_DST_DEVICE_MGMT 0x14 #define USB_CDC_DST_OBEX 0x15 #define USB_CDC_DST_COMMAND_SET 0x16 #define USB_CDC_DST_COMMAND_SET_DETAIL 0x17 #define USB_CDC_DST_TELEPHONE_CTRL 0x18 #define USB_CDC_DST_OBEX_SERVICE_ID 0x19 #define USB_CDC_DST_NCM 0x1A /* CDC Class-Specific Notification Codes */ #define USB_CDC_NC_NETWORK_CONNECTION 0x00 #define USB_CDC_NC_RESPONSE_AVAILABLE 0x01 #define USB_CDC_NC_SERIAL_STATE 0x20 #define USB_CDC_NC_CONNECTION_SPEED_CHANGE 0x2A /* CDC Ethernet Class-Specific Request Codes */ #define USB_CDC_SET_ETHERNET_MULTICAST_FILTERS 0x40 #define USB_CDC_SET_ETHERNET_PM_PATTERN_FILTER 0x41 #define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER 0x42 #define USB_CDC_SET_ETHERNET_PACKET_FILTER 0x43 #define USB_CDC_GET_ETHERNET_STATISTIC 0x44 /* CDC Class-Specific Requests */ #define USB_CDC_SEND_ENCAPSULATED_COMMAND 0x00 #define USB_CDC_GET_ENCAPSULATED_RESPONSE 0x01 __BEGIN_CDECLS; typedef struct { uint8_t bLength; uint8_t bDescriptorType; // USB_DT_CS_INTERFACE uint8_t bDescriptorSubType; // USB_CDC_DST_HEADER uint16_t bcdCDC; } __attribute__ ((packed)) usb_cs_header_interface_descriptor_t; typedef struct { uint8_t bLength; uint8_t bDescriptorType; // USB_DT_CS_INTERFACE uint8_t bDescriptorSubType; // USB_CDC_DST_CALL_MGMT uint8_t bmCapabilities; uint8_t bDataInterface; } __attribute__ ((packed)) usb_cs_call_mgmt_interface_descriptor_t; typedef struct { uint8_t bLength; uint8_t bDescriptorType; // USB_DT_CS_INTERFACE uint8_t bDescriptorSubType; // USB_CDC_DST_ABSTRACT_CTRL_MGMT uint8_t bmCapabilities; } __attribute__ ((packed)) usb_cs_abstract_ctrl_mgmt_interface_descriptor_t; typedef struct { uint8_t bLength; uint8_t bDescriptorType; // USB_DT_CS_INTERFACE uint8_t bDescriptorSubType; // USB_CDC_DST_UNION uint8_t bControlInterface; uint8_t bSubordinateInterface[]; } __attribute__ ((packed)) usb_cs_union_interface_descriptor_t; // fixed size version of usb_cs_union_interface_descriptor_t typedef struct { uint8_t bLength; uint8_t bDescriptorType; // USB_DT_CS_INTERFACE uint8_t bDescriptorSubType; // USB_CDC_DST_UNION uint8_t bControlInterface; uint8_t bSubordinateInterface; } __attribute__ ((packed)) usb_cs_union_interface_descriptor_1_t; typedef struct { uint8_t bLength; uint8_t bDescriptorType; // USB_DT_CS_INTERFACE uint8_t bDescriptorSubType; // USB_CDC_DST_ETHERNET uint8_t iMACAddress; uint32_t bmEthernetStatistics; uint16_t wMaxSegmentSize; uint16_t wNumberMCFilters; uint8_t bNumberPowerFilters; } __attribute__ ((packed)) usb_cs_ethernet_interface_descriptor_t; typedef struct { uint8_t bmRequestType; uint8_t bNotification; uint16_t wValue; uint16_t wIndex; uint16_t wLength; } __attribute__ ((packed)) usb_cdc_notification_t; typedef struct { usb_cdc_notification_t notification; uint32_t downlink_br; uint32_t uplink_br; } __attribute__ ((packed)) usb_cdc_speed_change_notification_t; __END_CDECLS;