Loading...
Searching...
No Matches
cdc.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2018 Dylan Laduranty <dylan.laduranty@mesotic.com>
3 *
4 * This file is subject to the terms and conditions of the GNU Lesser General
5 * Public License v2.1. See the file LICENSE in the top level directory for
6 * more details.
7 */
8
9#pragma once
10
24
25#include <stdint.h>
26
27#include "usb.h"
28#include "usb/descriptor.h"
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34#define USB_TYPE_DESCRIPTOR_CDC 0x24
35#define USB_CDC_VERSION_BCD 0x0120
36
42#define USB_CDC_SUBCLASS_NONE 0x00
43#define USB_CDC_SUBCLASS_DLCM 0x01
44#define USB_CDC_SUBCLASS_ACM 0x02
45#define USB_CDC_SUBCLASS_TCM 0x03
46#define USB_CDC_SUBCLASS_MCCM 0x04
47#define USB_CDC_SUBCLASS_CCM 0x05
48#define USB_CDC_SUBCLASS_ENCM 0x06
49#define USB_CDC_SUBCLASS_ANCM 0x07
50#define USB_CDC_SUBCLASS_WHCM 0x08
51#define USB_CDC_SUBCLASS_DM 0x09
52#define USB_CDC_SUBCLASS_MDLM 0x0A
53#define USB_CDC_SUBCLASS_OBEX 0x0B
54#define USB_CDC_SUBCLASS_EEM 0x0C
55#define USB_CDC_SUBCLASS_NCM 0x0D
57
62#define USB_CDC_PROTOCOL_NONE 0x00
63#define USB_CDC_PROTOCOL_ITU 0x01
64#define USB_CDC_PROTOCOL_PCCA 0x02
65#define USB_CDC_PROTOCOL_PCCA_A 0x03
66#define USB_CDC_PROTOCOL_GSM 0x04
67#define USB_CDC_PROTOCOL_3GPP 0x05
68#define USB_CDC_PROTOCOL_CS 0x06
69#define USB_CDC_PROTOCOL_EEM 0x07
70#define USB_CDC_PROTOCOL_EXT 0xFE
71#define USB_CDC_PROTOCOL_VENDOR 0xFF
73
78#define USB_CDC_DESCR_SUBTYPE_FUNCTIONAL 0x00
80#define USB_CDC_DESCR_SUBTYPE_CALL_MGMT 0x01
82#define USB_CDC_DESCR_SUBTYPE_ACM 0x02
84#define USB_CDC_DESCR_SUBTYPE_UNION 0x06
85#define USB_CDC_DESCR_SUBTYPE_ETH_NET 0x0f
87
92
96#define USB_CDC_MGNT_REQUEST_SET_LINE_CODING (0x20)
97
101#define USB_CDC_MGNT_REQUEST_GET_LINE_CODING (0x21)
102
106#define USB_CDC_MGNT_REQUEST_SET_CONTROL_LINE_STATE (0x22)
107
111#define USB_CDC_MGNT_REQUEST_SET_ETH_MULTICAST_FILTER 0x40
112
116#define USB_CDC_MGNT_REQUEST_SET_ETH_PM_PATTERN_FILTER 0x41
117
121#define USB_CDC_MGNT_REQUEST_GET_ETH_PM_PATTERN_FILTER 0x42
122
126#define USB_CDC_MGNT_REQUEST_SET_ETH_PACKET_FILTER 0x43
127
131#define USB_CDC_MGNT_REQUEST_GET_ETH_STATISTICS 0x44
133
138
142#define USB_CDC_ACM_CONTROL_LINE_DTE (0x01)
143
147#define USB_CDC_ACM_CONTROL_LINE_CARRIER (0x02)
149
154
158#define USB_CDC_MGNT_NOTIF_NETWORK_CONNECTION 0x00
159
163#define USB_CDC_MGNT_NOTIF_RESPONSE_AVAILABLE 0x01
164
168#define USB_CDC_MGNT_NOTIF_AUX_JACK_HOOK_STATE 0x08
169
173#define USB_CDC_MGNT_NOTIF_RING_DETECT 0x09
174
178#define USB_CDC_MGNT_NOTIF_SERIAL_STATE 0x20
179
183#define USB_CDC_MGNT_NOTIF_CALL_STATE_CHANGE 0x28
184
188#define USB_CDC_MGNT_NOTIF_LINE_STATE_CHANGE 0x29
189
193#define USB_CDC_MGNT_NOTIF_CONN_SPEED_CHANGE 0x2A
194
196
202typedef struct __attribute__((packed)) {
203 uint8_t length;
204 uint8_t type;
205 uint8_t subtype;
206 uint8_t macaddress;
208 uint16_t maxsegmentsize;
212
218typedef struct __attribute__((packed)) {
219 uint8_t length;
220 uint8_t type;
221 uint8_t subtype;
222 uint8_t capabilities;
224
230typedef struct __attribute__((packed)) {
231 uint8_t length;
232 uint8_t type;
233 uint8_t subtype;
234 uint16_t bcd_cdc;
236
240typedef struct __attribute__((packed)) {
241 uint8_t length;
242 uint8_t type;
243 uint8_t subtype;
244 uint8_t master_if;
245 uint8_t slave_if;
247
253typedef struct __attribute__((packed)) {
254 uint8_t length;
255 uint8_t type;
256 uint8_t subtype;
257 uint8_t capabilities;
258 uint8_t data_if;
260
266typedef struct __attribute__((packed)) {
268 uint32_t down;
269 uint32_t up;
271
276
281typedef struct __attribute__((packed)) {
282 uint32_t baud;
283 uint8_t format;
284 uint8_t parity;
285 uint8_t databits;
287
288#define USB_CDC_ACM_CODING_STOP_BITS_1 0
289#define USB_CDC_ACM_CODING_STOP_BITS_1_5 1
290#define USB_CDC_ACM_CODING_STOP_BITS_2 2
291
292#define USB_CDC_ACM_CODING_PARITY_NONE 0
293#define USB_CDC_ACM_CODING_PARITY_ODD 1
294#define USB_CDC_ACM_CODING_PARITY_EVEN 2
295#define USB_CDC_ACM_CODING_PARITY_MARK 3
296#define USB_CDC_ACM_CODING_PARITY_SPACE 4
298
299#ifdef __cplusplus
300}
301#endif
302
Definitions for USB protocol messages.
USB CDC ACM descriptor.
Definition cdc.h:218
uint8_t subtype
Descriptor subtype (USB_CDC_DESCR_SUBTYPE_ACM)
Definition cdc.h:221
uint8_t type
Descriptor type (USB_TYPE_DESCRIPTOR_CDC)
Definition cdc.h:220
uint8_t length
Size of this descriptor.
Definition cdc.h:219
uint8_t capabilities
Bitmap indicating the capabilities.
Definition cdc.h:222
USB CDC call management functional descriptor.
Definition cdc.h:253
uint8_t length
Size of this descriptor.
Definition cdc.h:254
uint8_t capabilities
Supported capabilities.
Definition cdc.h:257
uint8_t type
Descriptor type (USB_TYPE_DESCRIPTOR_CDC)
Definition cdc.h:255
uint8_t data_if
Interface number used for the call management.
Definition cdc.h:258
uint8_t subtype
Descriptor subtype (USB_CDC_DESCR_SUBTYPE_CALL_MGMT)
Definition cdc.h:256
Generic USB CDC descriptor.
Definition cdc.h:230
uint8_t subtype
Descriptor subtype (usb_cdc_subtype)
Definition cdc.h:233
uint8_t length
Size of this descriptor.
Definition cdc.h:231
uint8_t type
Descriptor type (USB_TYPE_DESCRIPTOR_CDC)
Definition cdc.h:232
uint16_t bcd_cdc
CDC release number in bcd (USB_CDC_VERSION_BCD)
Definition cdc.h:234
USB CDC ECM connection speed change notification.
Definition cdc.h:266
uint32_t down
Downlink bit rate.
Definition cdc.h:268
uint32_t up
Uplink bit rate.
Definition cdc.h:269
usb_setup_t setup
Setup request header for the notification.
Definition cdc.h:267
USB CDC ECM descriptor.
Definition cdc.h:202
uint16_t maxsegmentsize
Maximum segment size of the interface.
Definition cdc.h:208
uint8_t macaddress
Index of the string containing the ethernet MAC address.
Definition cdc.h:206
uint8_t length
Size of this descriptor.
Definition cdc.h:203
uint8_t subtype
Descriptor subtype (USB_CDC_DESCR_SUBTYPE_ETH_NET)
Definition cdc.h:205
uint16_t numbermcfilters
Number of configurable multicast filters.
Definition cdc.h:209
uint8_t numberpowerfilters
Number of pattern filters for host wake-up.
Definition cdc.h:210
uint8_t type
Descriptor type (USB_TYPE_DESCRIPTOR_CDC)
Definition cdc.h:204
uint32_t ethernetstatistics
Bitmap indicating the statistics caps.
Definition cdc.h:207
USB union descriptor.
Definition cdc.h:240
uint8_t master_if
Master/controlling interface number.
Definition cdc.h:244
uint8_t length
Size of this descriptor.
Definition cdc.h:241
uint8_t slave_if
Slave/subordinate interface number.
Definition cdc.h:245
uint8_t subtype
Descriptor subtype (USB_CDC_DESCR_SUBTYPE_UNION)
Definition cdc.h:243
uint8_t type
Descriptor type (USB_TYPE_DESCRIPTOR_CDC)
Definition cdc.h:242
USB CDC ACM line coding setup content.
Definition cdc.h:281
uint8_t parity
Parity settings.
Definition cdc.h:284
uint8_t format
Stop bits settings.
Definition cdc.h:283
uint8_t databits
Number of data bits (5, 6, 7, 8 or 16)
Definition cdc.h:285
uint32_t baud
Requested baud rate.
Definition cdc.h:282
USB setup packet (USB 2.0 spec table 9-2)
Definition descriptor.h:208
Definition of global compile time configuration options.