blob: f9900dd330c14d067bc97d5cd099750582f401c9 [file] [log] [blame]
/*
* Copyright 2022 The Chromium OS Authors
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file
* @brief USBC Power Delivery API used for USBC drivers
*
* The information in this file was taken from the USB PD
* Specification Revision 3.0, Version 2.0
*/
#ifndef ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_PD_H_
#define ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_PD_H_
/**
* @brief USB Power Delivery
* @defgroup usb_power_delivery USB Power Delivery
* @ingroup io_interfaces
* @{
*/
#include <zephyr/types.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Maximum length of a non-Extended Message in bytes.
* See Table 6-75 Value Parameters
* Parameter Name: MaxExtendedMsgLegacyLen
*/
#define PD_MAX_EXTENDED_MSG_LEGACY_LEN 26
/**
* @brief Maximum length of an Extended Message in bytes.
* See Table 6-75 Value Parameters
* Parameter Name: MaxExtendedMsgLen
*/
#define PD_MAX_EXTENDED_MSG_LEN 260
/**
* @brief Maximum length of a Chunked Message in bytes.
* When one of both Port Partners do not support Extended
* Messages of Data Size greater than PD_MAX_EXTENDED_MSG_LEGACY_LEN
* then the Protocol Layer supports a Chunking mechanism to
* break larger Messages into smaller Chunks of size
* PD_MAX_EXTENDED_MSG_CHUNK_LEN.
* See Table 6-75 Value Parameters
* Parameter Name: MaxExtendedMsgChunkLen
*/
#define PD_MAX_EXTENDED_MSG_CHUNK_LEN 26
/**
* @brief Minimum time a sink shall wait for a Source_Capabilities message
* before sending a Hard Reset
* See Table 6-61 Time Values
* Parameter Name: tTypeCSinkWaitCap
*/
#define PD_T_TYPEC_SINK_WAIT_CAP_MIN_MS 310
/**
* @brief Minimum time a sink shall wait for a Source_Capabilities message
* before sending a Hard Reset
* See Table 6-61 Time Values
* Parameter Name: tTypeCSinkWaitCap
*/
#define PD_T_TYPEC_SINK_WAIT_CAP_MAX_MS 620
/**
* @brief VBUS maximum safe operating voltage at "zero volts".
* See Table 7-24 Common Source/Sink Electrical Parameters
* Parameter Name: vSafe0V
*/
#define PD_V_SAFE_0V_MAX_MV 800
/**
* @brief VBUS minimum safe operating voltage at 5V.
* See Table 7-24 Common Source/Sink Electrical Parameters
* Parameter Name: vSafe5V
*/
#define PD_V_SAFE_5V_MIN_MV 4750
/**
* @brief Time to reach PD_V_SAFE_0V_MV max in milliseconds.
* See Table 7-24 Common Source/Sink Electrical Parameters
* Parameter Name: tSafe0V
*/
#define PD_T_SAFE_0V_MAX_MS 650
/**
* @brief Time to reach PD_V_SAFE_5V_MV max in milliseconds.
* See Table 7-24 Common Source/Sink Electrical Parameters
* Parameter Name: tSafe5V
*/
#define PD_T_SAFE_5V_MAX_MS 275
/**
* @brief Convert bytes to PD Header data object count, where a
* data object is 4-bytes.
*
* @param c number of bytes to convert
*/
#define PD_CONVERT_BYTES_TO_PD_HEADER_COUNT(c) ((c) >> 2)
/**
* @brief Convert PD Header data object count to bytes
*
* @param c number of PD Header data objects
*/
#define PD_CONVERT_PD_HEADER_COUNT_TO_BYTES(c) ((c) << 2)
/**
* @brief Build a PD message header
* See Table 6-1 Message Header
*/
union pd_header {
struct {
/** Type of message */
uint16_t message_type : 5;
/** Port Data role */
uint16_t port_data_role : 1;
/** Specification Revision */
uint16_t specification_revision : 2;
/** Port Power Role */
uint16_t port_power_role : 1;
/** Message ID */
uint16_t message_id : 3;
/** Number of Data Objects */
uint16_t number_of_data_objects : 3;
/** Extended Message */
uint16_t extended : 1;
};
uint16_t raw_value;
};
/**
* @brief Build an extended message header
* See Table 6-3 Extended Message Header
*/
union pd_ext_header {
struct {
/** Number of total bytes in data block */
uint16_t data_size : 9;
/** Reserved */
uint16_t reserved0 : 1;
/** 1 for a chunked message, else 0 */
uint16_t request_chunk : 1;
/** Chunk number when chkd = 1, else 0 */
uint16_t chunk_number : 4;
/** 1 for chunked messages */
uint16_t chunked : 1;
};
/** Raw PD Ext Header value */
uint16_t raw_value;
};
/**
* PDO - Power Data Object
* RDO - Request Data Object
*/
/**
* @brief Power Data Object Source Type
* Table 6-7 Power Data Object
*/
enum pdo_src_type {
/** Fixed supply (Vmin = Vmax) */
PDO_FIXED = 0,
/** Battery */
PDO_BATTERY = 1,
/** Variable Supply (non-Battery) */
PDO_VARIABLE = 2,
/** Augmented Power Data Object (APDO) */
PDO_AUGMENTED = 3
};
/**
* @brief Convert milliamps to Fixed PDO Current in 10mA units.
*
* @param c Current in milliamps
*/
#define PD_CONVERT_MA_TO_FIXED_PDO_CURRENT(c) ((c) / 10)
/**
* @brief Convert millivolts to Fixed PDO Voltage in 50mV units
*
* @param v Voltage in millivolts
*/
#define PD_CONVERT_MV_TO_FIXED_PDO_VOLTAGE(v) ((v) / 50)
/**
* @brief Convert a Fixed PDO Current from 10mA units to milliamps.
*
* @param c Fixed PDO current in 10mA units.
*/
#define PD_CONVERT_FIXED_PDO_CURRENT_TO_MA(c) ((c) * 10)
/**
* @brief Convert a Fixed PDO Voltage from 50mV units to millivolts.
* Used for converting pd_fixed_supply_pdo_source.voltage and
* pd_fixed_supply_pdo_sink.voltage
*
* @param v Fixed PDO voltage in 50mV units.
*/
#define PD_CONVERT_FIXED_PDO_VOLTAGE_TO_MV(v) ((v) * 50)
/**
* @brief Create a Fixed Supply PDO Source value
* See Table 6-9 Fixed Supply PDO - Source
*/
union pd_fixed_supply_pdo_source {
struct {
/** Maximum Current in 10mA units */
uint32_t max_current : 10;
/** Voltage in 50mV units */
uint32_t voltage : 10;
/** Peak Current */
uint32_t peak_current : 2;
/** Reserved – Shall be set to zero. */
uint32_t reserved0 : 2;
/** Unchunked Extended Messages Supported */
uint32_t unchunked_ext_msg_supported : 1;
/** Dual-Role Data */
uint32_t dual_role_data : 1;
/** USB Communications Capable */
uint32_t usb_comms_capable : 1;
/** Unconstrained Power */
uint32_t unconstrained_power : 1;
/** USB Suspend Supported */
uint32_t usb_suspend_supported : 1;
/** Dual-Role Power */
uint32_t dual_role_power : 1;
/** Fixed supply. SET TO PDO_FIXED */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief Fast Role Swap Required for USB Type-C current
*/
enum pd_frs_type {
/** Fast Swap not supported */
FRS_NOT_SUPPORTED,
/** Default USB Power */
FRS_DEFAULT_USB_POWER,
/** 1.5A @ 5V */
FRS_1P5A_5V,
/** 3.0A @ 5V */
FRS_3P0A_5V
};
/**
* @brief Create a Fixed Supply PDO Sink value
* See Table 6-14 Fixed Supply PDO - Sink
*/
union pd_fixed_supply_pdo_sink {
struct {
/** Operational Current in 10mA units */
uint32_t operational_current : 10;
/** Voltage in 50mV units */
uint32_t voltage : 10;
/** Reserved – Shall be set to zero. */
uint32_t reserved0 : 3;
/** Fast Role Swap required USB Type-C Current */
enum pd_frs_type frs_required : 2;
/** Dual-Role Data */
uint32_t dual_role_data : 1;
/** USB Communications Capable */
uint32_t usb_comms_capable : 1;
/** Unconstrained Power */
uint32_t unconstrained_power : 1;
/** Higher Capability */
uint32_t higher_capability : 1;
/** Dual-Role Power */
uint32_t dual_role_power : 1;
/** Fixed supply. SET TO PDO_FIXED */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief Convert milliamps to Variable PDO Current in 10ma units.
*
* @param c Current in milliamps
*/
#define PD_CONVERT_MA_TO_VARIABLE_PDO_CURRENT(c) ((c) / 10)
/**
* @brief Convert millivolts to Variable PDO Voltage in 50mV units
*
* @param v Voltage in millivolts
*/
#define PD_CONVERT_MV_TO_VARIABLE_PDO_VOLTAGE(v) ((v) / 50)
/**
* @brief Convert a Variable PDO Current from 10mA units to milliamps.
*
* @param c Variable PDO current in 10mA units.
*/
#define PD_CONVERT_VARIABLE_PDO_CURRENT_TO_MA(c) ((c) * 10)
/**
* @brief Convert a Variable PDO Voltage from 50mV units to millivolts.
*
* @param v Variable PDO voltage in 50mV units.
*/
#define PD_CONVERT_VARIABLE_PDO_VOLTAGE_TO_MV(v) ((v) * 50)
/**
* @brief Create a Variable Supply PDO Source value
* See Table 6-11 Variable Supply (non-Battery) PDO - Source
*/
union pd_variable_supply_pdo_source {
struct {
/** Maximum Current in 10mA units */
uint32_t max_current : 10;
/** Minimum Voltage in 50mV units */
uint32_t min_voltage : 10;
/** Maximum Voltage in 50mV units */
uint32_t max_voltage : 10;
/** Variable supply. SET TO PDO_VARIABLE */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief Create a Variable Supply PDO Sink value
* See Table 6-15 Variable Supply (non-Battery) PDO - Sink
*/
union pd_variable_supply_pdo_sink {
struct {
/** operational Current in 10mA units */
uint32_t operational_current : 10;
/** Minimum Voltage in 50mV units */
uint32_t min_voltage : 10;
/** Maximum Voltage in 50mV units */
uint32_t max_voltage : 10;
/** Variable supply. SET TO PDO_VARIABLE */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief Convert milliwatts to Battery PDO Power in 250mW units
*
* @param c Power in milliwatts
*/
#define PD_CONVERT_MW_TO_BATTERY_PDO_POWER(c) ((c) / 250)
/**
* @brief Convert milliwatts to Battery PDO Voltage in 50mV units
*
* @param v Voltage in millivolts
*/
#define PD_CONVERT_MV_TO_BATTERY_PDO_VOLTAGE(v) ((v) / 50)
/**
* @brief Convert a Battery PDO Power from 250mW units to milliwatts
*
* @param c Power in 250mW units.
*/
#define PD_CONVERT_BATTERY_PDO_POWER_TO_MW(c) ((c) * 250)
/**
* @brief Convert a Battery PDO Voltage from 50mV units to millivolts
*
* @param v Voltage in 50mV units.
*/
#define PD_CONVERT_BATTERY_PDO_VOLTAGE_TO_MV(v) ((v) * 50)
/**
* @brief Create a Battery Supply PDO Source value
* See Table 6-12 Battery Supply PDO - Source
*/
union pd_battery_supply_pdo_source {
struct {
/** Maximum Allowable Power in 250mW units */
uint32_t max_power : 10;
/** Minimum Voltage in 50mV units */
uint32_t min_voltage : 10;
/** Maximum Voltage in 50mV units */
uint32_t max_voltage : 10;
/** Battery supply. SET TO PDO_BATTERY */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief Create a Battery Supply PDO Sink value
* See Table 6-16 Battery Supply PDO - Sink
*/
union pd_battery_supply_pdo_sink {
struct {
/** Operational Power in 250mW units */
uint32_t operational_power : 10;
/** Minimum Voltage in 50mV units */
uint32_t min_voltage : 10;
/** Maximum Voltage in 50mV units */
uint32_t max_voltage : 10;
/** Battery supply. SET TO PDO_BATTERY */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief Convert milliamps to Augmented PDO Current in 50mA units
*
* @param c Current in milliamps
*/
#define PD_CONVERT_MA_TO_AUGMENTED_PDO_CURRENT(c) ((c) / 50)
/**
* @brief Convert millivolts to Augmented PDO Voltage in 100mV units
*
* @param v Voltage in millivolts
*/
#define PD_CONVERT_MV_TO_AUGMENTED_PDO_VOLTAGE(v) ((v) / 100)
/**
* @brief Convert an Augmented PDO Current from 50mA units to milliamps
*
* @param c Augmented PDO current in 50mA units.
*/
#define PD_CONVERT_AUGMENTED_PDO_CURRENT_TO_MA(c) ((c) * 50)
/**
* @brief Convert an Augmented PDO Voltage from 100mV units to millivolts
*
* @param v Augmented PDO voltage in 100mV units.
*/
#define PD_CONVERT_AUGMENTED_PDO_VOLTAGE_TO_MV(v) ((v) * 100)
/**
* @brief Create Augmented Supply PDO Source value
* See Table 6-13 Programmable Power Supply APDO - Source
*/
union pd_augmented_supply_pdo_source {
struct {
/** Maximum Current in 50mA increments */
uint32_t max_current : 7;
/** Reserved – Shall be set to zero */
uint32_t reserved0 : 1;
/** Minimum Voltage in 100mV increments */
uint32_t min_voltage : 8;
/** Reserved – Shall be set to zero */
uint32_t reserved1 : 1;
/** Maximum Voltage in 100mV increments */
uint32_t max_voltage : 8;
/** Reserved – Shall be set to zero */
uint32_t reserved2 : 2;
/** PPS Power Limited */
uint32_t pps_power_limited : 1;
/**
* 00b – Programmable Power Supply
* 01b…11b - Reserved, Shall Not be used
* Setting as reserved because it defaults to 0 when not set.
*/
uint32_t reserved3 : 2;
/** Augmented Power Data Object (APDO). SET TO PDO_AUGMENTED */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief Create Augmented Supply PDO Sink value
* See Table 6-17 Programmable Power Supply APDO - Sink
*/
union pd_augmented_supply_pdo_sink {
struct {
/** Maximum Current in 50mA increments */
uint32_t max_current : 7;
/** Reserved – Shall be set to zero */
uint32_t reserved0 : 1;
/** Minimum Voltage in 100mV increments */
uint32_t min_voltage : 8;
/** Reserved – Shall be set to zero */
uint32_t reserved1 : 1;
/** Maximum Voltage in 100mV increments */
uint32_t max_voltage : 8;
/** Reserved – Shall be set to zero */
uint32_t reserved2 : 3;
/**
* 00b – Programmable Power Supply
* 01b…11b - Reserved, Shall Not be used
* Setting as reserved because it defaults to 0 when not set.
*/
uint32_t reserved3 : 2;
/** Augmented Power Data Object (APDO). SET TO PDO_AUGMENTED */
enum pdo_src_type type : 2;
};
/** Raw PDO value */
uint32_t raw_value;
};
/**
* @brief The Request Data Object (RDO) Shall be returned by the Sink making
* a request for power.
* See Section 6.4.2 Request Message
*/
union pd_rdo {
/**
* @brief Create a Fixed RDO value
* See Table 6-19 Fixed and Variable Request Data Object
*/
struct {
/**
* Operating Current 10mA units
* NOTE: If Give Back Flag is zero, this field is
* the Maximum Operating Current.
* If Give Back Flag is one, this field is
* the Minimum Operating Current.
*/
uint32_t min_or_max_operating_current : 10;
/** Operating current in 10mA units */
uint32_t operating_current : 10;
/** Reserved - Shall be set to zero. */
uint32_t reserved0 : 3;
/** Unchunked Extended Messages Supported */
uint32_t unchunked_ext_msg_supported : 1;
/** No USB Suspend */
uint32_t no_usb_suspend : 1;
/** USB Communications Capable */
uint32_t usb_comm_capable : 1;
/** Capability Mismatch */
uint32_t cap_mismatch : 1;
/** Give Back Flag */
uint32_t giveback : 1;
/** Object Position (000b is Reserved and Shall Not be used) */
uint32_t object_pos : 3;
/** Reserved - Shall be set to zero. */
uint32_t reserved1 : 1;
} fixed;
/**
* @brief Create a Variable RDO value
* See Table 6-19 Fixed and Variable Request Data Object
*/
struct {
/**
* Operating Current 10mA units
* NOTE: If Give Back Flag is zero, this field is
* the Maximum Operating Current.
* If Give Back Flag is one, this field is
* the Minimum Operating Current.
*/
uint32_t min_or_max_operating_current : 10;
/** Operating current in 10mA units */
uint32_t operating_current : 10;
/** Reserved - Shall be set to zero. */
uint32_t reserved0 : 3;
/** Unchunked Extended Messages Supported */
uint32_t unchunked_ext_msg_supported : 1;
/** No USB Suspend */
uint32_t no_usb_suspend : 1;
/** USB Communications Capable */
uint32_t usb_comm_capable : 1;
/** Capability Mismatch */
uint32_t cap_mismatch : 1;
/** Give Back Flag */
uint32_t giveback : 1;
/** Object Position (000b is Reserved and Shall Not be used) */
uint32_t object_pos : 3;
/** Reserved - Shall be set to zero. */
uint32_t reserved1 : 1;
} variable;
/**
* @brief Create a Battery RDO value
* See Table 6-20 Battery Request Data Object
*/
struct {
/** Minimum Operating Power in 250mW units */
uint32_t min_operating_power : 10;
/** Operating power in 250mW units */
uint32_t operating_power : 10;
/** Reserved - Shall be set to zero. */
uint32_t reserved0 : 3;
/** Unchunked Extended Messages Supported */
uint32_t unchunked_ext_msg_supported : 1;
/** No USB Suspend */
uint32_t no_usb_suspend : 1;
/** USB Communications Capable */
uint32_t usb_comm_capable : 1;
/** Capability Mismatch */
uint32_t cap_mismatch : 1;
/** Give Back Flag */
uint32_t giveback : 1;
/** Object Position (000b is Reserved and Shall Not be used) */
uint32_t object_pos : 3;
/** Reserved - Shall be set to zero. */
uint32_t reserved1 : 1;
} battery;
/**
* @brief Create an Augmented RDO value
* See Table 6-22 Programmable Request Data Object
*/
struct {
/** Operating Current 50mA units */
uint32_t operating_current : 7;
/** Reserved - Shall be set to zero. */
uint32_t reserved0 : 2;
/** Output Voltage in 20mV units */
uint32_t output_voltage : 11;
/** Reserved - Shall be set to zero. */
uint32_t reserved1 : 3;
/** Unchunked Extended Messages Supported */
uint32_t unchunked_ext_msg_supported : 1;
/** No USB Suspend */
uint32_t no_usb_suspend : 1;
/** USB Communications Capable */
uint32_t usb_comm_capable : 1;
/** Capability Mismatch */
uint32_t cap_mismatch : 1;
/** Reserved - Shall be set to zero */
uint32_t reserved2 : 1;
/** Object Position (000b is Reserved and Shall Not be used) */
uint32_t object_pos : 3;
/** Reserved - Shall be set to zero. */
uint32_t reserved3 : 1;
} augmented;
/** Raw RDO value */
uint32_t raw_value;
};
/**
* @brief Protocol revision
*/
enum pd_rev_type {
/** PD revision 1.0 */
PD_REV10 = 0,
/** PD revision 2.0 */
PD_REV20 = 1,
/** PD revision 3.0 */
PD_REV30 = 2,
};
/**
* @brief Power Delivery packet type
* See USB Type-C Port Controller Interface Specification,
* Revision 2.0, Version 1.2, Table 4-38 TRANSMIT Register Definition
*/
enum pd_packet_type {
/** Port Partner message */
PD_PACKET_SOP = 0,
/** Cable Plug message */
PD_PACKET_SOP_PRIME = 1,
/** Cable Plug message far end*/
PD_PACKET_PRIME_PRIME = 2,
/** Currently undefined in the PD specification */
PD_PACKET_DEBUG_PRIME = 3,
/** Currently undefined in the PD specification */
PD_PACKET_DEBUG_PRIME_PRIME = 4,
/** Hard Reset message to the Port Partner */
PD_PACKET_TX_HARD_RESET = 5,
/** Cable Reset message to the Cable */
PD_PACKET_CABLE_RESET = 6,
/** BIST_MODE_2 message to the Port Partner */
PD_PACKET_TX_BIST_MODE_2 = 7,
/** USED ONLY FOR RECEPTION OF UNKNOWN MSG TYPES */
PD_PACKET_MSG_INVALID = 0xf
};
/**
* @brief Control Message type
* See Table 6-5 Control Message Types
*/
enum pd_ctrl_msg_type {
/** 0 Reserved */
/** GoodCRC Message */
PD_CTRL_GOOD_CRC = 1,
/** GotoMin Message */
PD_CTRL_GOTO_MIN = 2,
/** Accept Message */
PD_CTRL_ACCEPT = 3,
/** Reject Message */
PD_CTRL_REJECT = 4,
/** Ping Message */
PD_CTRL_PING = 5,
/** PS_RDY Message */
PD_CTRL_PS_RDY = 6,
/** Get_Source_Cap Message */
PD_CTRL_GET_SOURCE_CAP = 7,
/** Get_Sink_Cap Message */
PD_CTRL_GET_SINK_CAP = 8,
/** DR_Swap Message */
PD_CTRL_DR_SWAP = 9,
/** PR_Swap Message */
PD_CTRL_PR_SWAP = 10,
/** VCONN_Swap Message */
PD_CTRL_VCONN_SWAP = 11,
/** Wait Message */
PD_CTRL_WAIT = 12,
/** Soft Reset Message */
PD_CTRL_SOFT_RESET = 13,
/** Used for REV 3.0 */
/** Data_Reset Message */
PD_CTRL_DATA_RESET = 14,
/** Data_Reset_Complete Message */
PD_CTRL_DATA_RESET_COMPLETE = 15,
/** Not_Supported Message */
PD_CTRL_NOT_SUPPORTED = 16,
/** Get_Source_Cap_Extended Message */
PD_CTRL_GET_SOURCE_CAP_EXT = 17,
/** Get_Status Message */
PD_CTRL_GET_STATUS = 18,
/** FR_Swap Message */
PD_CTRL_FR_SWAP = 19,
/** Get_PPS_Status Message */
PD_CTRL_GET_PPS_STATUS = 20,
/** Get_Country_Codes Message */
PD_CTRL_GET_COUNTRY_CODES = 21,
/** Get_Sink_Cap_Extended Message */
PD_CTRL_GET_SINK_CAP_EXT = 22
/** 23-31 Reserved */
};
/**
* @brief Data message type
* See Table 6-6 Data Message Types
*/
enum pd_data_msg_type {
/** 0 Reserved */
/** Source_Capabilities Message */
PD_DATA_SOURCE_CAP = 1,
/** Request Message */
PD_DATA_REQUEST = 2,
/** BIST Message */
PD_DATA_BIST = 3,
/** Sink Capabilities Message */
PD_DATA_SINK_CAP = 4,
/** 5-14 Reserved for REV 2.0 */
PD_DATA_BATTERY_STATUS = 5,
/** Alert Message */
PD_DATA_ALERT = 6,
/** Get Country Info Message */
PD_DATA_GET_COUNTRY_INFO = 7,
/** 8-14 Reserved for REV 3.0 */
/** Enter USB message */
PD_DATA_ENTER_USB = 8,
/** Vendor Defined Message */
PD_DATA_VENDOR_DEF = 15,
};
/**
* @brief Extended message type for REV 3.0
* See Table 6-48 Extended Message Types
*/
enum pd_ext_msg_type {
/** 0 Reserved */
/** Source_Capabilities_Extended Message */
PD_EXT_SOURCE_CAP = 1,
/** Status Message */
PD_EXT_STATUS = 2,
/** Get_Battery_Cap Message */
PD_EXT_GET_BATTERY_CAP = 3,
/** Get_Battery_Status Message */
PD_EXT_GET_BATTERY_STATUS = 4,
/** Battery_Capabilities Message */
PD_EXT_BATTERY_CAP = 5,
/** Get_Manufacturer_Info Message */
PD_EXT_GET_MANUFACTURER_INFO = 6,
/** Manufacturer_Info Message */
PD_EXT_MANUFACTURER_INFO = 7,
/** Security_Request Message */
PD_EXT_SECURITY_REQUEST = 8,
/** Security_Response Message */
PD_EXT_SECURITY_RESPONSE = 9,
/** Firmware_Update_Request Message */
PD_EXT_FIRMWARE_UPDATE_REQUEST = 10,
/** Firmware_Update_Response Message */
PD_EXT_FIRMWARE_UPDATE_RESPONSE = 11,
/** PPS_Status Message */
PD_EXT_PPS_STATUS = 12,
/** Country_Codes Message */
PD_EXT_COUNTRY_INFO = 13,
/** Country_Info Message */
PD_EXT_COUNTRY_CODES = 14,
/*8 15-31 Reserved */
};
/**
* @brief Active PD CC pin
*/
enum usbpd_cc_pin {
/** PD is active on CC1 */
USBPD_CC_PIN_1 = 0,
/** PD is active on CC2 */
USBPD_CC_PIN_2 = 1,
};
/**
* @brief Power Delivery message
*/
struct pd_msg {
/** Type of this packet */
enum pd_packet_type type;
/** Header of this message */
union pd_header header;
/** Length of bytes in data */
uint32_t len;
/** Message data */
uint8_t data[PD_MAX_EXTENDED_MSG_LEN];
};
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_PD_H_ */