Open FFBoard
Open source force feedback firmware
pd_types.h
Go to the documentation of this file.
1/*
2 * The MIT License (MIT)
3 *
4 * Copyright (c) 2023 Ha Thach (tinyusb.org)
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 *
24 * This file is part of the TinyUSB stack.
25 */
26
27#ifndef _TUSB_PD_TYPES_H_
28#define _TUSB_PD_TYPES_H_
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34#include <stdbool.h>
35#include <stdint.h>
37
38// Start of all packed definitions for compiler without per-type packed
39TU_ATTR_PACKED_BEGIN
40TU_ATTR_BIT_FIELD_ORDER_BEGIN
41
42//--------------------------------------------------------------------+
43// TYPE-C
44//--------------------------------------------------------------------+
45
46typedef enum {
51
52enum {
53 PD_CTRL_RESERVED = 0, // 0b00000: 0
54 PD_CTRL_GOOD_CRC, // 0b00001: 1
55 PD_CTRL_GO_TO_MIN, // 0b00010: 2
56 PD_CTRL_ACCEPT, // 0b00011: 3
57 PD_CTRL_REJECT, // 0b00100: 4
58 PD_CTRL_PING, // 0b00101: 5
59 PD_CTRL_PS_READY, // 0b00110: 6
61 PD_CTRL_GET_SINK_CAP, // 0b01000: 8
62 PD_CTRL_DR_SWAP, // 0b01001: 9
63 PD_CTRL_PR_SWAP, // 0b01010: 10
64 PD_CTRL_VCONN_SWAP, // 0b01011: 11
65 PD_CTRL_WAIT, // 0b01100: 12
66 PD_CTRL_SOFT_RESET, // 0b01101: 13
67 PD_CTRL_DATA_RESET, // 0b01110: 14
69 PD_CTRL_NOT_SUPPORTED, // 0b10000: 16
71 PD_CTRL_GET_STATUS, // 0b10010: 18
72 PD_CTRL_FR_SWAP, // 0b10011: 19
73 PD_CTRL_GET_PPS_STATUS, // 0b10100: 20
77 PD_CTRL_REVISION, // 0b11000: 24
78};
79
80enum {
81 PD_DATA_RESERVED = 0, // 0b00000: 0
82 PD_DATA_SOURCE_CAP, // 0b00001: 1
83 PD_DATA_REQUEST, // 0b00010: 2
84 PD_DATA_BIST, // 0b00011: 3
85 PD_DATA_SINK_CAP, // 0b00100: 4
87 PD_DATA_ALERT, // 0b00110: 6
89 PD_DATA_ENTER_USB, // 0b01000: 8
90 PD_DATA_EPR_REQUEST, // 0b01001: 9
91 PD_DATA_EPR_MODE, // 0b01010: 10
92 PD_DATA_SRC_INFO, // 0b01011: 11
93 PD_DATA_REVISION, // 0b01100: 12
94 PD_DATA_RESERVED_13, // 0b01101: 13
95 PD_DATA_RESERVED_14, // 0b01110: 14
96 PD_DATA_VENDOR_DEFINED, // 0b01111: 15
97};
98
99enum {
103};
104
105enum {
108};
109
110enum {
113};
114
115typedef struct TU_ATTR_PACKED {
116 uint16_t msg_type : 5; // [0:4]
117 uint16_t data_role : 1; // [5] SOP only: 0 UFP, 1 DFP
118 uint16_t specs_rev : 2; // [6:7]
119 uint16_t power_role : 1; // [8] SOP only: 0 Sink, 1 Source
120 uint16_t msg_id : 3; // [9:11]
121 uint16_t n_data_obj : 3; // [12:14]
122 uint16_t extended : 1; // [15]
124TU_VERIFY_STATIC(sizeof(pd_header_t) == 2, "size is not correct");
125
126typedef struct TU_ATTR_PACKED {
127 uint16_t data_size : 9; // [0:8]
128 uint16_t reserved : 1; // [9]
130 uint16_t chunk_number : 4; // [11:14]
131 uint16_t chunked : 1; // [15]
133TU_VERIFY_STATIC(sizeof(pd_header_extended_t) == 2, "size is not correct");
134
135//--------------------------------------------------------------------+
136// Source Capability
137//--------------------------------------------------------------------+
138
139// All table references are from USBPD Specification rev3.1 version 1.8
140enum {
141 PD_PDO_TYPE_FIXED = 0, // Vmin = Vmax
143 PD_PDO_TYPE_VARIABLE, // non-battery
144 PD_PDO_TYPE_APDO, // Augmented Power Data Object
145};
146
147// Fixed Power Data Object (PDO) table 6-9
148typedef struct TU_ATTR_PACKED {
149 uint32_t current_max_10ma : 10; // [9..0] Max current in 10mA unit
150 uint32_t voltage_50mv : 10; // [19..10] Voltage in 50mV unit
151 uint32_t current_peak : 2; // [21..20] Peak current
152 uint32_t reserved : 1; // [22] Reserved
153 uint32_t epr_mode_capable : 1; // [23] epr_mode_capable
154 uint32_t unchunked_ext_msg_support : 1; // [24] UnChunked Extended Message Supported
155 uint32_t dual_role_data : 1; // [25] Dual Role Data
156 uint32_t usb_comm_capable : 1; // [26] USB Communications Capable
157 uint32_t unconstrained_power : 1; // [27] Unconstrained Power
158 uint32_t usb_suspend_supported : 1; // [28] USB Suspend Supported
159 uint32_t dual_role_power : 1; // [29] Dual Role Power
160 uint32_t type : 2; // [30] Fixed Supply type = PD_PDO_TYPE_FIXED
162TU_VERIFY_STATIC(sizeof(pd_pdo_fixed_t) == 4, "Invalid size");
163
164// Battery Power Data Object (PDO) table 6-12
165typedef struct TU_ATTR_PACKED {
166 uint32_t power_max_250mw : 10; // [9..0] Max allowable power in 250mW unit
167 uint32_t voltage_min_50mv : 10; // [19..10] Minimum voltage in 50mV unit
168 uint32_t voltage_max_50mv : 10; // [29..20] Maximum voltage in 50mV unit
169 uint32_t type : 2; // [31..30] Battery type = PD_PDO_TYPE_BATTERY
171TU_VERIFY_STATIC(sizeof(pd_pdo_battery_t) == 4, "Invalid size");
172
173// Variable Power Data Object (PDO) table 6-11
174typedef struct TU_ATTR_PACKED {
175 uint32_t current_max_10ma : 10; // [9..0] Max current in 10mA unit
176 uint32_t voltage_min_50mv : 10; // [19..10] Minimum voltage in 50mV unit
177 uint32_t voltage_max_50mv : 10; // [29..20] Maximum voltage in 50mV unit
178 uint32_t type : 2; // [31..30] Variable Supply type = PD_PDO_TYPE_VARIABLE
180TU_VERIFY_STATIC(sizeof(pd_pdo_variable_t) == 4, "Invalid size");
181
182// Augmented Power Data Object (PDO) table 6-13
183typedef struct TU_ATTR_PACKED {
184 uint32_t current_max_50ma : 7; // [6..0] Max current in 50mA unit
185 uint32_t reserved1 : 1; // [7] Reserved
186 uint32_t voltage_min_100mv : 8; // [15..8] Minimum Voltage in 100mV unit
187 uint32_t reserved2 : 1; // [16] Reserved
188 uint32_t voltage_max_100mv : 8; // [24..17] Maximum Voltage in 100mV unit
189 uint32_t reserved3 : 2; // [26..25] Reserved
190 uint32_t pps_power_limited : 1; // [27] PPS Power Limited
191 uint32_t spr_programmable : 2; // [29..28] SPR Programmable Power Supply
192 uint32_t type : 2; // [31..30] Augmented Power Data Object = PD_PDO_TYPE_APDO
194TU_VERIFY_STATIC(sizeof(pd_pdo_apdo_t) == 4, "Invalid size");
195
196//--------------------------------------------------------------------+
197// Request
198//--------------------------------------------------------------------+
199
200typedef struct TU_ATTR_PACKED {
201 uint32_t current_extremum_10ma : 10; // [9..0] Max (give back = 0) or Min (give back = 1) current in 10mA unit
202 uint32_t current_operate_10ma : 10; // [19..10] Operating current in 10mA unit
203 uint32_t reserved : 2; // [21..20] Reserved
204 uint32_t epr_mode_capable : 1; // [22] EPR mode capable
205 uint32_t unchunked_ext_msg_support : 1; // [23] UnChunked Extended Message Supported
206 uint32_t no_usb_suspend : 1; // [24] No USB Suspend
207 uint32_t usb_comm_capable : 1; // [25] USB Communications Capable
208 uint32_t capability_mismatch : 1; // [26] Capability Mismatch
209 uint32_t give_back_flag : 1; // [27] GiveBack Flag: 0 = Max, 1 = Min
210 uint32_t object_position : 4; // [31..28] Object Position
212TU_VERIFY_STATIC(sizeof(pd_rdo_fixed_variable_t) == 4, "Invalid size");
213
214typedef struct TU_ATTR_PACKED {
215 uint32_t power_extremum_250mw : 10; // [9..0] Max (give back = 0) or Min (give back = 1) operating power in 250mW unit
216 uint32_t power_operate_250mw : 10; // [19..10] Operating power in 250mW unit
217 uint32_t reserved : 2; // [21..20] Reserved
218 uint32_t epr_mode_capable : 1; // [22] EPR mode capable
219 uint32_t unchunked_ext_msg_support : 1; // [23] UnChunked Extended Message Supported
220 uint32_t no_usb_suspend : 1; // [24] No USB Suspend
221 uint32_t usb_comm_capable : 1; // [25] USB Communications Capable
222 uint32_t capability_mismatch : 1; // [26] Capability Mismatch
223 uint32_t give_back_flag : 1; // [27] GiveBack Flag: 0 = Max, 1 = Min
224 uint32_t object_position : 4; // [31..28] Object Position
226TU_VERIFY_STATIC(sizeof(pd_rdo_battery_t) == 4, "Invalid size");
227
228
229TU_ATTR_PACKED_END // End of all packed definitions
230TU_ATTR_BIT_FIELD_ORDER_END
231
232
233#ifdef __cplusplus
234}
235#endif
236
237#endif
@ PD_CTRL_REVISION
Definition: pd_types.h:77
@ PD_CTRL_DATA_RESET
Definition: pd_types.h:67
@ PD_CTRL_FR_SWAP
Definition: pd_types.h:72
@ PD_CTRL_RESERVED
Definition: pd_types.h:53
@ PD_CTRL_GET_STATUS
Definition: pd_types.h:71
@ PD_CTRL_DATA_RESET_COMPLETE
Definition: pd_types.h:68
@ PD_CTRL_GET_SOURCE_INFO
Definition: pd_types.h:76
@ PD_CTRL_WAIT
Definition: pd_types.h:65
@ PD_CTRL_DR_SWAP
Definition: pd_types.h:62
@ PD_CTRL_ACCEPT
Definition: pd_types.h:56
@ PD_CTRL_GET_COUNTRY_CODES
Definition: pd_types.h:74
@ PD_CTRL_VCONN_SWAP
Definition: pd_types.h:64
@ PD_CTRL_PING
Definition: pd_types.h:58
@ PD_CTRL_PS_READY
Definition: pd_types.h:59
@ PD_CTRL_GET_SOURCE_CAP
Definition: pd_types.h:60
@ PD_CTRL_REJECT
Definition: pd_types.h:57
@ PD_CTRL_GO_TO_MIN
Definition: pd_types.h:55
@ PD_CTRL_GET_SINK_CAP
Definition: pd_types.h:61
@ PD_CTRL_GET_PPS_STATUS
Definition: pd_types.h:73
@ PD_CTRL_NOT_SUPPORTED
Definition: pd_types.h:69
@ PD_CTRL_GET_SINK_CAP_EXTENDED
Definition: pd_types.h:75
@ PD_CTRL_GET_SOURCE_CAP_EXTENDED
Definition: pd_types.h:70
@ PD_CTRL_PR_SWAP
Definition: pd_types.h:63
@ PD_CTRL_SOFT_RESET
Definition: pd_types.h:66
@ PD_CTRL_GOOD_CRC
Definition: pd_types.h:54
@ PD_DATA_ENTER_USB
Definition: pd_types.h:89
@ PD_DATA_SRC_INFO
Definition: pd_types.h:92
@ PD_DATA_RESERVED_14
Definition: pd_types.h:95
@ PD_DATA_RESERVED
Definition: pd_types.h:81
@ PD_DATA_SINK_CAP
Definition: pd_types.h:85
@ PD_DATA_EPR_REQUEST
Definition: pd_types.h:90
@ PD_DATA_RESERVED_13
Definition: pd_types.h:94
@ PD_DATA_BIST
Definition: pd_types.h:84
@ PD_DATA_ALERT
Definition: pd_types.h:87
@ PD_DATA_GET_COUNTRY_INFO
Definition: pd_types.h:88
@ PD_DATA_REVISION
Definition: pd_types.h:93
@ PD_DATA_BATTERY_STATUS
Definition: pd_types.h:86
@ PD_DATA_EPR_MODE
Definition: pd_types.h:91
@ PD_DATA_SOURCE_CAP
Definition: pd_types.h:82
@ PD_DATA_REQUEST
Definition: pd_types.h:83
@ PD_DATA_VENDOR_DEFINED
Definition: pd_types.h:96
struct TU_ATTR_PACKED pd_pdo_battery_t
struct TU_ATTR_PACKED pd_header_extended_t
struct TU_ATTR_PACKED pd_pdo_variable_t
@ PD_PDO_TYPE_VARIABLE
Definition: pd_types.h:143
@ PD_PDO_TYPE_FIXED
Definition: pd_types.h:141
@ PD_PDO_TYPE_BATTERY
Definition: pd_types.h:142
@ PD_PDO_TYPE_APDO
Definition: pd_types.h:144
struct TU_ATTR_PACKED pd_pdo_apdo_t
@ PD_POWER_ROLE_SINK
Definition: pd_types.h:111
@ PD_POWER_ROLE_SOURCE
Definition: pd_types.h:112
@ PD_REV_30
Definition: pd_types.h:102
@ PD_REV_10
Definition: pd_types.h:100
@ PD_REV_20
Definition: pd_types.h:101
struct TU_ATTR_PACKED pd_rdo_battery_t
@ PD_DATA_ROLE_DFP
Definition: pd_types.h:107
@ PD_DATA_ROLE_UFP
Definition: pd_types.h:106
struct TU_ATTR_PACKED pd_pdo_fixed_t
struct TU_ATTR_PACKED pd_rdo_fixed_variable_t
tusb_typec_port_type_t
Definition: pd_types.h:46
@ TUSB_TYPEC_PORT_SRC
Definition: pd_types.h:47
@ TUSB_TYPEC_PORT_DRP
Definition: pd_types.h:49
@ TUSB_TYPEC_PORT_SNK
Definition: pd_types.h:48
struct TU_ATTR_PACKED pd_header_t
TU_VERIFY_STATIC(sizeof(pd_header_t)==2, "size is not correct")
AUDIO Channel Cluster Descriptor (4.1)
Definition: audio.h:647
uint32_t epr_mode_capable
Definition: pd_types.h:153
uint32_t reserved3
Definition: pd_types.h:189
uint32_t reserved1
Definition: pd_types.h:185
uint16_t reserved
Definition: pd_types.h:128
uint32_t dual_role_power
Definition: pd_types.h:159
uint32_t usb_comm_capable
Definition: pd_types.h:156
uint32_t object_position
Definition: pd_types.h:210
uint16_t data_role
Definition: pd_types.h:117
uint32_t no_usb_suspend
Definition: pd_types.h:206
uint8_t type
Request type tusb_request_type_t.
Definition: audio.h:824
uint32_t usb_suspend_supported
Definition: pd_types.h:158
uint32_t voltage_max_100mv
Definition: pd_types.h:188
uint32_t current_operate_10ma
Definition: pd_types.h:202
uint16_t power_role
Definition: pd_types.h:119
uint32_t voltage_max_50mv
Definition: pd_types.h:168
uint16_t request_chunk
Definition: pd_types.h:129
uint32_t voltage_min_100mv
Definition: pd_types.h:186
uint32_t capability_mismatch
Definition: pd_types.h:208
uint32_t dual_role_data
Definition: pd_types.h:155
uint32_t power_extremum_250mw
Definition: pd_types.h:215
uint32_t unchunked_ext_msg_support
Definition: pd_types.h:154
uint16_t msg_type
Definition: pd_types.h:116
uint32_t current_peak
Definition: pd_types.h:151
volatile uint16_t
Definition: hcd_rusb2.c:58
uint32_t pps_power_limited
Definition: pd_types.h:190
uint32_t voltage_50mv
Definition: pd_types.h:150
uint16_t msg_id
Definition: pd_types.h:120
uint32_t current_extremum_10ma
Definition: pd_types.h:201
uint32_t power_operate_250mw
Definition: pd_types.h:216
uint32_t current_max_10ma
Definition: pd_types.h:149
uint16_t chunked
Definition: pd_types.h:131
uint16_t n_data_obj
Definition: pd_types.h:121
uint32_t voltage_min_50mv
Definition: pd_types.h:167
uint32_t give_back_flag
Definition: pd_types.h:209
uint16_t data_size
Definition: pd_types.h:127
uint32_t power_max_250mw
Definition: pd_types.h:166
uint32_t unconstrained_power
Definition: pd_types.h:157
uint32_t spr_programmable
Definition: pd_types.h:191
uint32_t current_max_50ma
Definition: pd_types.h:184
uint32_t reserved2
Definition: pd_types.h:187
uint32_t reserved
Definition: pd_types.h:152
uint16_t chunk_number
Definition: pd_types.h:130
uint16_t extended
Definition: pd_types.h:122
uint16_t specs_rev
Definition: pd_types.h:118