v10.50 v10.55 Alpha v10.54 Alpha v10.53 Alpha v10.52 Alpha v10.51 Alpha
v10.50 v10.55 Alpha v10.54 Alpha v10.53 Alpha v10.52 Alpha v10.51 Alpha

PD Packet Templates

The following Packet Templates can be used in Basic or High Level commands as data containers. All of these messages are inherited from the PD_Packet packet template except those that are used as containers for Data Objects.

PD_MessageHeader

Revision 2.0

Packet PD_MessageHeader: PD_Packet
{
  MessageType: 4 = 0
  Reserved1: 1 = 0
  PortDataRole_Reserved2: 1 = 0
  SpecificationRevision: 2 = 1
  PortPowerRole_CablePlug: 1 = 0
  MessageId: 3 = 0
  NumberOfDataObjects: 3 = 0
  Reserved2: 1 = 0
}

Revision 3.0

Packet PD_MessageHeader: PD_Packet
{
  MessageType: 5 = 0
  PortDataRole_Reserved2: 1 = 0
  SpecificationRevision: 2 = 2
  PortPowerRole_CablePlug: 1 = 0
  MessageId: 3 = 0
  NumberOfDataObjects: 3 = 0
  Extended: 1 = 0
}

PD_ControlMessage

Packet PD_ControlMessage: PD_Packet
{
  : PD_MessageHeader
}

PD_GoodCrcMessage

Packet PD_GoodCrcMessage: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_GOODCRC
}

PD_GotoMinMessage

Packet PD_GotoMinMessage: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_GOTO_MIN
} 

PD_AcceptMessage

Packet PD_AcceptMessage: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_ACCEPT
}

PD_RejectMessage

Packet PD_RejectMessage: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_REJECT
}

PD_PingMessage

Packet PD_PingMessage: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_PING
}

PD_PsRdyMessage

Packet PD_PsRdyMessage: PD_ContrlMessage
{
  MessageType = PD_MESSAGE_TYPE_PS_RDY
}

PD_GetSourceCapMessage

Packet PD_GetSourceCapMessage: PD_ControlMessage
{
 MessageType = PD_MESSAGE_TYPE_GET_SOURCE_CAP
}

PD_GetSinkCapMessage

Packet PD_GetSinkCapMessage: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_GET_SINK_CAP
}

PD_DataRoleSwapMessage

Packet PD_DataRoleSwapMessage: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_DR_SWAP
}

PD_PowerRoleSwapMessage

Packet PD_PowerRoleSwapMessage: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_PR_SWAP
}

PD_VConnSwapMessage

Packet PD_VconnSwapMessage: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_VCONN_SWAP
}

PD_WaitMessage

Packet PD_WaitMessage: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_WAIT
}

PD_SoftResetMessage

Packet PD_SoftResetMessage: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_SOFT_RESET
}

PD_DataResetMessage

Packet PD_DataResetMessage: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_DATA_RESET
}

PD_DataResetCompleteMessage

Packet PD_DataResetCompleteMessage: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_DATA_RESET_COMPLETE
}

PD_NotSupportedMsg

Packet PD_NotSupportedMsg: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_NOT_SUPPORTED
}

PD_GetSourceCapExtendedMsg

Packet PD_GetSourceCapExtendedMsg: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_GET_SRC_CAP_EXT
}

PD_GetStatusMsg

Packet PD_GetStatusMsg: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_GET_STATUS
}

PD_FRSwapMsg

Packet PD_FRSwapMsg: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_FR_SWAP
}

PD_GetPPSStatusMsg

Packet PD_GetPPSStatusMsg: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_GET_PPS_STATUS
}

PD_GetCountryCodesMsg

Packet PD_GetCountryCodesMsg: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_GET_COUNTRY_CODES
}

PD_GetSinkCapExtendedMsg

Packet PD_GetSinkCapExtendedMsg: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_GET_SNK_CAP_EXT
}

PD_SourceCapabilitiesMessage

Packet PD_SourceCapabilitiesMessage: PD_ControlMessage
{
  MessageType = 1
  PortPowerRole_CablePlug = 1
  NumberOfDataObjects = 0
  SourceCapabilitiesData  : *

    * This field can contain one or more (up-to 7 according to the PD Spec) PDOs. 
    Available PDO templates are: 
    PD_PowerDataObjectFixedSupply_Source
    PD_PDOFixedSupplyNotVSafe5V_Source
    PD_PowerDataObjectVariableSupply_Source
    PD_PowerDataObjectBatterySupply_Source
    PD_PowerDataObjectPPS_Source
    PD_SPRPowerDataObjectAVS
}

PD_PowerDataObjectFixedSupply_Source

Packet PD_PowerDataObjectFixedSupply_Source: PD_PowerDataObject
{
  MaxCurrent_10mAUnits : 10 = 100
  Voltage_50mVUnits : 10 = 100
  PeakCurrent : 2  = 0
  Reserved : 1  = 0
  EPRModeCapable : 1  = 0
  UnchunkedExtMsgSupported : 1  = 1
  DualRoleData : 1  = 0
  UsbCommunicationsCapable : 1  = 0
  UnconstrainedPower : 1  = 1
  UsbSuspendSupported : 1  = 0
  DualRolePower : 1  = 0
  PowerDataType : 2  = 0
}

PD_PDOFixedSupplyNotVSafe5V_Source

Packet PD_PDOFixedSupplyNotVSafe5V_Source: PD_PowerDataObject
{
  MaxCurrent_10mAUnits : 10 = 0
  Voltage_50mVUnits : 10 = 0
  PeakCurrent : 2  = 0
  Reserved : 8  = 0
  PowerDataType : 2  = 0
}

PD_PowerDataObjectVariableSupply_Source

Packet PD_PowerDataObjectVariableSupply_Source: PD_PowerDataObject
{
  MaxCurrent_10mAUnits : 10 = 0
  MinVoltage_50mVUnits : 10 = 0
  MaxVoltage_50mVUnits : 10 = 0
  PowerDataType : 2  = 2
}

PD_PowerDataObjectBatterySupply_Source

Packet PD_PowerDataObjectBatterySupply_Source: PD_PowerDataObject
{
  MaxAllowablePower_250mWUnits : 10 = 0
  MinVoltage_50mVUnits : 10 = 0
  MaxVoltage_50mVUnits : 10 = 0
  PowerDataType : 2  = 1
}

PD_PowerDataObjectPPS_Source

Packet PD_PowerDataObjectPPS_Source: PD_PowerDataObject
{
  MaxCurrent_50mAUnits : 7 = 0
  PPS_Rsvd_1 : 1 = 0
  MinVoltage_100mVUnits : 8 = 0
  PPS_Rsvd_2 : 1 = 0
  MaxVoltage_100mVUnits : 8 = 0
  PPS_Rsvd_3 : 2 = 0
  PPSPowerLimited : 1 = 0
  APDOType : 2 = 0
  PowerDataType : 2 = 3
}

PD_SPRPowerDataObjectAVS

Packet PD_SPRPowerDataObjectAVS: PD_PowerDataObject
{
  MaxCurrent9To15VRange_10mAUnits : 10 = 0
  MaxCurrent15To20VRange_10mAUnits : 10 = 0
  SPRAVS_Rsvd_1 : 6 = 0
  PeakCurrent : 2 = 0
  APDOType : 2 = 2
  PowerDataType : 2 = 3
}

PD_SinkCapabilitiesMessage

Packet PD_SinkCapabilitiesMessage: PD_ControlMessage
{
  MessageType = 4
  PortPowerRole_CablePlug = 0
  NumberOfDataObjects = 1
  SinkCapabilitiesData : *

  * This field can contain one or more (up to 7, according to the PD Spec) PDOs. 
  Available PDO templates are: 
  PD_PowerDataObjectFixedSupply_Sink
  PD_PowerDataObjectVariableSupply_Sink
  PD_PowerDataObjectBatterySupply_Sink
  PD_PowerDataObjectPPS_Sink
  PD_SPRPowerDataObjectAVS
}

PD_PowerDataObjectFixedSupply_Sink

Packet PD_PowerDataObjectFixedSupply_Sink: PD_PowerDataObject
{
  OperationalCurrent_10mAUnits : 10 = 100
  Voltage_50mVUnits : 10 = 100
  Reserved : 3  = 0
  FRSwapTypeCCurrent : 2  = 0
  DualRoleData : 1  = 0
  UsbCommunicationsCapable : 1  = 0
  UnconstrainedPower : 1  = 1
  HigherCapability : 1  = 0
  DualRolePower : 1  = 0
  PowerDataType : 2  = 0
}

PD_PDOFixedSupplyNotVSafe5V_Sink

Packet PD_ PDOFixedSupplyNotVSafe5V_Sink: PD_PowerDataObject
{
  OperationalCurrent_10mAUnits : 10 = 100
  Voltage_50mVUnits : 10 = 100
  Reserved : 10  = 0
  PowerDataType : 2  = 0
}

PD_PowerDataObjectVariableSupply_Sink

Packet PD_PowerDataObjectVariableSupply_Sink: PD_PowerDataObject
{
  OperationalCurrent_10mAUnits : 10 = 0
  MinVoltage_50mVUnits : 10 = 0
  MaxVoltage_50mVUnits : 10 = 0
  PowerDataType : 2  = 2
}

PD_PowerDataObjectBatterySupply_Sink

Packet PD_PowerDataObjectBatterySupply_Sink: PD_PowerDataObject
{
  OperationalPower_250mWUnits : 10 = 0
  MinVoltage_50mVUnits : 10 = 0
  MaxVoltage_50mVUnits : 10 = 0
  PowerDataType : 2  = 1
}

PD_PowerDataObjectPPS_Sink

Packet PD_PowerDataObjectPPS_Sink: PD_PowerDataObject
{
  MaxCurrent_50mAUnits : 7 = 0
  PPS_Rsvd_1 : 1 = 0
  MinVoltage_100mVUnits : 8 = 0
  PPS_Rsvd_2 : 1 = 0
  MaxVoltage_100mVUnits : 8 = 0
  PPS_Rsvd_3 : 3 = 0
  APDOType : 2 = 0
  PowerDataType : 2 = 3
}

PD_SPRPowerDataObjectAVS

Refer to PD_SPRPowerDataObjectAVS.

PD_RequestPacket

Packet PD_RequestPacket: PD_MessageHeader
{
  MessageType = 2
  NumberOfDataObjects = 1
  Data : 32 = 0x00
  This field can contain only one RDO packet variables. 
  Available RDO templates are: 
  PD_RequestDataObject_Fixed_Variable_NoGiveBack
  PD_RequestDataObject_Fixed_Variable_GiveBack
  PD_RequestDataObject_Battery_NoGiveBack
  PD_RequestDataObject_Battery_GiveBack
  PD_ProgrammableRDO
}

PD_RequestDataObjectCommon

Packet PD_RequestDataObjectCommon
{
  Rsvd1 : 2 = 0
  EPRModeCapable : 1 = 0
  UnchunkedExtMsgSupported : 1 = 1
  NoUsbSuspend : 1 = 0
  UsbCommunicationsCapable : 1 = 0
  CapabilityMismatch : 1 = 0
  GiveBackFlag : 1 = 0
  ObjectPosition : 4 = 1
}

PD_RequestDataObject_Fixed_Variable_NoGiveBack

Packet PD_RequestDataObject_Fixed_Variable_NoGiveBack: PD_RequestData
{
  MaxOperatingCurrent_10mAUnits : 10 = 0
  OperatingCurrent_10mAUnits : 10 = 0
  
  : PD_RequestDataObjectCommon
}

PD_RequestDataObject_Fixed_Variable_GiveBack

Packet PD_RequestDataObject_Fixed_Variable_GiveBack: PD_RequestData
{
  MinOperatingCurrent_10mAUnits : 10 = 0
  OperatingCurrent_10mAUnits : 10 = 0
  
  : PD_RequestDataObjectCommon
  GiveBackFlag = 1
}

PD_RequestDataObject_Battery_NoGiveBack

Packet PD_RequestDataObject_Battery_NoGiveBack: PD_RequestData
{
  MaxOperatingPower_250mWUnits : 10 = 0
  OperatingPower_250mWUnits : 10 = 0
  
  : PD_RequestDataObjectCommon
}

PD_RequestDataObject_Battery_GiveBack

Packet PD_RequestDataObject_Battery_GiveBack: PD_RequestData
{
  MinOperatingPower_250mWUnits : 10 = 0
  OperatingPower_250mWUnits : 10 = 0
  
  : PD_RequestDataObjectCommon
  GiveBackFlag = 1
}

PD_ProgrammableRDO

Packet PD_ProgrammableRDO: PD_RequestData
{
  OperatingCurrent_50mAUnits : 7  = 0
  PRDO_Rsvd_1 : 2  = 0
  OutputVoltage_20mVUnits : 11 = 0

  : PD_RequestDataObjectCommon
}

PD_BISTMessage

Packet PD_BISTMessage: PD_ControlMessage
{
  MessageType = 3
  NumberOfDataObjects = 1
  
  : PD_BISTDataObject
  TestData *
}

PD_BISTDataObject

Packet PD_BISTDataObject
{
  Reserved : 28 = 0x00
  BISTRequestType : 4  = BIST_REQUEST_CARRIER_MODE
}

PD_BISTCarrierModeMessage

Packet PD_BISTCarrierModeMessage: PD_BISTMessage
{
}

PD_BISTTestDataMessage

Packet PD_BISTTestDataMessage: PD_BISTMessage
{
  NumberOfDataObjects = 7
  BISTRequestType = BIST_REQUEST_TEST_DATA
  TestData = 
  { AA AA AA AA
  AA AA AA AA
  AA AA AA AA                  
  AA AA AA AA                       
  AA AA AA AA                     
  AA AA AA AA }
  Maximum 192 bytes
  Should be a multiple of 32b
}

PD_BISTSharedCapacityTestModeEntry

Packet PD_BISTSharedTestModeEntry: PD_BISTMessage
{
  BISTRequestType = BIST_REQUEST_SHARED_TEST_MODE_ENTRY
}

PD_BISTSharedCapacityTestModeExit

Packet PD_BISTSharedTestModeExit: PD_BISTMessage
{
  BISTRequestType = BIST_REQUEST_SHARED_TEST_MODE_EXIT
}

PD_BatteryStatusMsg

Packet PD_BatteryStatusMsg: PD_ControlMessage
{
  MessageType = 5
  NumberOfDataObjects = 1
  
  : PD_BatteryStatusDataObject
}

PD_BatteryStatusDataObject

Packet PD_BatteryStatusDataObject
{
  Reserved_1 : 8  = 0x00
  InvalidBatteryReference : 1  = 0x00
  BatteryIsPresent : 1  = 0x00
  BatteryChargingStatus : 2  = 0x00
  Reserved_2 : 4  = 0x00
  BatteryPC_100mWHUnits : 16 = 0xFFFF
}

PD_AlertMsg

Packet PD_AlertMsg: PD_ControlMessage
{
  MessageType = 6
  NumberOfDataObjects = 1
  
  : PD_AlertDataObject
}

PD_AlertDataObject

Packet PD_AlertDataObject
{
  ExtendedAlertEventType : 4  = 0x00
  Reserved_1 : 12 = 0x00
  HotSwappableBatteries : 4  = 0x00
  FixedBatteries : 4  = 0x00
  Reserved_2 : 1  = 0x00
  BatteryStatusChange : 1  = 0x00
  OverCurProtection : 1  = 0x00
  OverTempProtection : 1  = 0x00
  OperatingConditionChange : 1  = 0x00
  SourceInputChange : 1  = 0x00
  OverVoltageProtection : 1  = 0x00
  ExtendedAlertEvent : 1  = 0x00
}

PD_GetCountryInfoMsg

Packet PD_GetCountryInfoMsg: PD_ControlMessage
{
  MessageType = 7
  NumberOfDataObjects = 1
  
  : PD_GetCountryInfoDO
}

PD_GetCountryInfoDO

Packet PD_GetCountryInfoDO
{
  GetCountryInfoDO_Rsvd_1 : 16 = 0x00
  Alpha2CountryCode2ndChar : 8 = 0x00
  Alpha2CountryCode1stChar : 8 = 0x00
}

PD_EnterUSB_Message

Packet PD_EnterUSB_Message: PD_ControlMessage
{
  MessageType = 8
  NumberOfDataObjects = 1
  
  : PD_EnterUSBDataObject
}

PD_EnterUSBDataObject

Packet PD_EnterUSBDataObject
{
  Reserved_1 : 13 = 0x00
  HostPresent : 1  = PD_FALSE
  TBTSupport : 1  = PD_FALSE 
  DPSupport : 1  = PD_FALSE
  PCIeSupport : 1  = PD_FALSE  
  CableCurrent : 2  = PD_CABLECURRENT_VBUS_NOT_SUPP
  CableType : 2  = PD_CABLETYPE_PASSIVE
  CableSpeed : 3  = PD_CABLESPEED_USB2_NO_SSP
  Reserved_2 : 1  = 0x00
  USB3DRD : 1  = PD_FALSE
  USB4DRD : 1  = PD_FALSE
  Reserved_3 : 1  = 0x00
  USBMode : 3  = PD_USBMODE_USB2
  Reserved_4 : 1  = 0x00
}

PD_VDM_Unstructured_Header

Packet PD_VDM_Unstructured_Header: PD_ControlMessage
{
  MessageType = 15
  NumberOfDataObjects = 0x01
  VDMCustom : 15 = 0x00
  VDMType : 1  = PD_VDM_TYPE_UNSTRUCTURED_VDM
  VDMSVID : 16 = 0x00
}

The following example demonstrates how to send an Unstructured VDM containing two VDOs:

# Define VDO1 fields
packet VDO1Type
{
  Field1: 2  = 0x03
  Field2: 10 = 0xfff
  Field3: 20 = 0xffffff
} 
local $vdo1_var = VDO1Type

# Create an unstructured VDM packet with two VDOs
local $unstructured_vdm = PD_VDM_Unstructured_Header
{
  # Number of VDOs + 1
  NumberOfDataObjects = 0x03   

  # Vendor SVID
  VDMSVID = 0xABCD                

  # Optional Packet variable
  VDO1: 32 = $vdo1_var  

  # Optional value
  VDO2: 32 = 0x11111111 
}

# Send VDM packet with default settings
local $SendSettings = PD_SendPacketSettings
call PD_SendPacket($unstructured_vdm, $SendSettings)

# To receive probable response packet 
local $ReceiveSettings = PD_ReceivePacketSettings
call PD_ReceivePacket($ReceiveSettings)

PD_VDM_Structured_Header

Packet PD_VDM_Structured_Header: PD_ControlMessage
{
  MessageType = 15
  NumberOfDataObjects = 0x01
  VDMCommand : 5  = PD_VDM_COMMAND_RESERVED_0
  VDMReserved1 : 1  = 0x00
  VDMCommandType : 2  = PD_VDM_COMMAND_TYPE_REQ
  VDMObjectPosition : 3  = 0x00
  VDMReserved2 : 2  = 0x00
  VDMStructuredVdmVersion : 2  = PD_VDM_STRUCTURED_VERSION_2
  VDMType : 1  = PD_VDM_TYPE_STRUCTURED_VDM
  VDMSVID : 16 = 0x00
}

PD_VDM_Discover_Identity_Message

Packet PD_VDM_Discover_Identity_Message: PD_VDM_Structured_Header
{
  VDMCommand = PD_VDM_COMMAND_DISCOVER_IDENTITY
  VDMSVID = PD_VDM_SID
}

PD_VDM_Discover_Identity_Response

Packet PD_VDM_Discover_Identity_Response: PD_VDM_Discover_Identity_Message
{
  VDMCommandType = PD_VDM_COMMAND_TYPE_RESPONDER_ACK
  VDOs : *

  #This field can contain up-to 6 VDOs, but should contain at least 3 VDOs (according to PD Spec). Available VDO themplates are:
    PD_VDM_Discover_Identity_ID_Header_VDO,
    PD_VDM_Discover_Identity_Cert_Stat_VDO,    
    PD_VDM_Discover_Identity_Product_VDO,    
    PD_VDM_Discover_Identity_Cable_VDO (Rev 2.0 only),    
    PD_DiscoverId_DFP_VDO (Rev 3.0 only),    
    PD_DiscoverId_UFP_1_VDO (Rev 3.0 only),    
    PD_DiscoverId_UFP_2_VDO (Rev 3.0 only),    
    PD_DiscoverIdPassiveCableVdo (Rev 3.0 only),    
    PD_DiscoverIdActiveCableVdo_1 (Rev 3.0 only),    
    PD_DiscoverIdActiveCableVdo_2 (Rev 3.0 only),    
    PD_VDM_Discover_Identity_Alternate_Mode_Adapter_VDO,    
    PD_DiscoverIdVConnPoweredDeviceVdo (Rev 3.0 only)
}

PD_VDM_Discover_Identity_ID_Header_VDO

Revision 2.0

Packet PD_VDM_Discover_Identity_ID_Header_VDO: PD_DiscoverIdentity_VDO
{
  IDHeaderVDO_USBVendorID : 16 = 0x05FF #LeCroy ID
  IDHeaderVDO_Reserved : 10 = 0x00
  IDHeaderVDO_ModalOperationSupported : 1  = 0x00
  IDHeaderVDO_ProductType : 3  = PD_VDM_ID_HEADER_VDO_PRODUCT_TYPE_UNDEFINED
  IDHeaderVDO_DataCapableAsUSBDevice : 1  = 0x00
  IDHeaderVDO_DataCapableAsUSBHost : 1  = 0x00
}

Revision 3.0

Packet PD_VDM_Discover_Identity_ID_Header_VDO: PD_DiscoverIdentity_VDO
{
  USBVendorID : 16 = 0x05FF #LeCroy ID
  Reserved : 5  = 0x00
  ConnectorType : 2  = PD_CABLE_CONNECTOR_TYPE_TYPEC_RECEPTACLES
  ProductType_DFP : 3  = PD_PRODUCT_TYPE_UNDEFINED
  ModalOperationSupported : 1  = 0x00
  ProductType_UFP_Cable : 3  = PD_PRODUCT_TYPE_UNDEFINED
  DataCapableAsUSBDevice : 1  = 0x00
  DataCapableAsUSBHost : 1  = 0x00
}

PD_VDM_Discover_Identity_Cert_Stat_VDO

Packet PD_VDM_Discover_Identity_Cert_Stat_VDO: PD_DiscoverIdentity_VDO
{
  CertStatVDO_XID : 32 = 0x00
}

PD_VDM_Discover_Identity_Product_VDO

Packet PD_VDM_Discover_Identity_Product_VDO: PD_DiscoverIdentity_VDO
{
  ProductVDO_BCDDevice : 16 = 0x00
  ProductVDO_USBProductId : 16 = 0x00
}

PD_VDM_Discover_Identity_Cable_VDO

Only applicable to Power Delivery Rev 2.

Packet PD_VDM_Discover_Identity_Cable_VDO: PD_DiscoverIdentity_VDO
{
  CableVDO_USBSuperSpeedSignalingSupport : 3 = PD_CABLE_USB31_GEN1_SIGNALING
  CableVDO_SOPDPrimeControllerPresent : 1 = 0x00       
  CableVDO_VBusThroughCable : 1 = 0x00
  CableVDO_VBusCurrentHandlingCapability : 2 = PD_CABLE_CUR_HANDLING_CAP_3A
  CableVDO_SSRX2DirectionalitySupport : 1 = 0x00
  CableVDO_SSRX1DirectionalitySupport : 1 = 0x00
  CableVDO_SSTX2DirectionalitySupport : 1 = 0x00
  CableVDO_SSTX1DirectionalitySupport : 1 = 0x00
  CableVDO_CableTerminationType : 2 = 0x00
  CableVDO_CableLatency : 4 = PD_CABLE_LATENCY_MAX_10ns
  CableVDO_Rsvd_2 : 1 = 0x00
  CableVDO_TypeCPlugToTypeA_B_C_Captive : 2 = PD_CABLE_TYPEC_TO_TYPEC
  CableVDO_Reserved : 4 = 0x00
  CableVDO_FirmwareVersion : 4 = 0x00
  CableVDO_HardwareVersion : 4 = 0x00
}

PD_VDM_DiscoverIdentity_UFP1_VDO

Packet PD_VDM_DiscoverIdentity_UFP1_VDO: PD_DiscoverIdentity_VDO
{
  USBHighestSpeed : 3  = PD_USB_HIGHEST_SPEED_USB20_ONLY
  AlternateModes : 3  = PD_SUPP_ALTERNATE_MODE
  Reserved_1 : 18 = 0x00
  DeviceCapability : 4  = PD_DEV_CAP_USB20    
  Reserved_2 : 1  = 0x00
  UFPVDOVersion : 3  = PD_UFP_VDO_VERSION_1_0
}

PD_VDM_DiscoverIdentity_UFP2_VDO

Packet PD_VDM_DiscoverIdentity_UFP2_VDO: PD_DiscoverIdentity_VDO
{
  USB3MaxPower : 7 = 0x00
  USB3MinPower : 7 = 0x00
  Reserved_1 : 2 = 0x00
  USB4MaxPower : 7 = 0x00
  USB4MinPower : 7 = 0x00
  Reserved_2 : 2 = 0x00
}

PD_VDM_DiscoverIdentity_DFP_VDO

Packet PD_VDM_DiscoverIdentity_DFP_VDO: PD_DiscoverIdentity_VDO
{
  PortNumber : 5  = 0x00
  Reserved_1 : 19 = 0x00
  HostCapability : 3  = PD_HOST_CAP_USB20
  Reserved_2 : 2 = 0x00
  DFPVDOVersion : 3  = PD_DFP_VDO_VERSION_1_0
}

PD_DiscoverIdPassiveCableVdo

Packet PD_DiscoverIdPassiveCableVdo: PD_VDM_Discover_Identity_Cable_VDO
{
  USBHighestSpeed : 3 = PD_USB_HIGHEST_SPEED_USB32_GEN1
  Reserved_1 : 2 = 0x00
  VBusCurHandlingCap : 2 = PD_CABLE_CUR_HANDLING_CAP_3A
  Reserved_2 : 2 = 0x00
  MaxVBusVoltage : 2 = PD_CABLE_MAX_VBUS_20V
  CableTerminationType : 2 = PD_CABLE_VCONN_NOT_REQUIRED
  CableLatency : 4 = PD_CABLE_LATENCY_MAX_10ns
  EPRModeCapable : 1 = 0x00
  TypeCtoTypeC_Captive : 2 = PD_CABLE_TYPEC_TO_TYPEC
  Reserved_3 : 1 = 0x00
  Version : 3 = PD_CABLE_PASSIVE_VDO_VERSION_1
  FirmwareVersion : 4 = 0x00
  HardwareVersion : 4 = 0x00
}

PD_DiscoverIdActiveCableVdo_1

Pcket PD_DiscoverIdActiveCableVdo_1: PD_VDM_Discover_Identity_Cable_VDO
{
  USBHighestSpeed : 3 = PD_USB_HIGHEST_SPEED_USB32_GEN1
  SOPDoublePrimeController : 1 = 0x00
  VBusThrough : 1 = 0x01
  VBusCurHandlingCap : 2 = PD_CABLE_CUR_HANDLING_CAP_3A
  SBUType : 1  = PD_CABLE_PASSIVE_SBU
  SBUSupported : 1  = PD_FALSE
  MaxVBusVoltage : 2  = PD_CABLE_MAX_VBUS_20V
  CableTerminationType : 2  = PD_CABLE_TERM_ACTIVE_ACTIVE
  CableLatency : 4  = PD_CABLE_LATENCY_MAX_10ns
  EPRModeCapable : 1 = 0x00
  ConnectorType : 2  = PD_CABLE_TYPEC_TO_TYPEC
  Reserved_1 : 1 = 0x00
  Version : 3  = PD_CABLE_ACTIVE_VDO_VERSION_1_3
  FirmwareVersion : 4 = 0x00
  HardwareVersion : 4 = 0x00
}

PD_DiscoverIdActiveCableVdo_2

Packet PD_DiscoverIdActiveCableVdo_2: PD_VDM_Discover_Identity_Cable_VDO
{
  USBGen : 1 = PD_CABLE_ACTIVE_USB_GEN1
  USB4AsymModeSupported : 1 = PD_FALSE
  OpticallyIsolatedActCbl : 1 = PD_FALSE
  USBLanesSupported : 1 = PD_CABLE_ACTIVE_SS_ONE_LANE
  USB32Supported : 1 = PD_FALSE
  USB2Supported : 1 = PD_FALSE
  USB2HubHopsConsumed : 2 = 0x00
  USB4Supported : 1 = PD_FALSE
  ActiveElement : 1 = PD_CABLE_ACTIVE_REDRIVER
  PhysicalConnection : 1 = PD_CABLE_ACTIVE_PHYSICAL_CONN_COPPER
  U3ToU0TransMode : 1 = PD_CABLE_ACTIVE_U3_TO_U0_DIRECT
  U3CLdPower : 3 = PD_CABLE_ACTIVE_U3POWER_GR_THAN_10mW
  Reserved_3 : 1 = 0x00
  ShutdownTemperature : 8 = 0x00
  MaxOperatingTemperature : 8 = 0x00
}

PD_VDM_Discover_Identity_Alternate_Mode_Adapter_VDO

Revision 2.0

Packet PD_VDM_Discover_Identity_Alternate_Mode_Adapter_VDO: PD_DiscoverIdentity_VDO
{
  AMDVDO_USBSuperSpeedSignalingSupport : 3  = 0x01
  AMDVDO_VBusRequired : 1  = 0x00
  AMDVDO_VConnRequired : 1  = 0x00
  AMDVDO_VConnPower : 3  = 0x00
  AMDVDO_SSRX2DirectionalitySupport : 1  = 0x00
  AMDVDO_SSRX1DirectionalitySupport : 1  = 0x00
  AMDVDO_SSTX2DirectionalitySupport : 1  = 0x00
  AMDVDO_SSTX1DirectionalitySupport : 1  = 0x00
  AMDVDO_Reserved : 12 = 0x00
  AMDVDO_FirmwareVersion : 4  = 0x00
  AMDVDO_HardwareVersion : 4  = 0x00
}

Revision 3.0

Packet PD_VDM_Discover_Identity_Alternate_Mode_Adapter_VDO: PD_DiscoverIdentity_VDO
{
  USBHighestSpeed : 3  = PD_AMA_USB_HIGHEST_SPEED_USB20_ONLY
  VBusRequired : 1  = 0x00
  VConnRequired : 1  = 0x00
  VConnPower : 3  = PD_AMA_VCONN_POWER_1
  Reserved : 13 = 0x00
  Version : 3  = PD_AMA_VDO_VERSION_1
  FirmwareVersion : 4 = 0x00
  HardwareVersion : 4 = 0x00
}

PD_DiscoverIdVConnPoweredDeviceVdo

Packet PD_DiscoverIdVConnPoweredDeviceVdo: PD_DiscoverIdentity_VDO
{
  ChargeThroughSupport : 1 = 0x00
  GroundImpedance_1mOUnits : 6 = 0x00
  VBUSImpedance_2mOUnits : 6 = 0x00
  VPD_Rsvd_1 : 1 = 0x00
  ChargeThroughCurrentSupport : 1 = PD_VPD_CHARGE_THROUGH_CURRENT_SUPP_3A
  MaxVbusVoltage : 2 = PD_VPD_MAX_VBUS_20V
  VPD_Rsvd_2 : 4 = 0x00
  VDOVersion : 3 = PD_VPD_VDO_VERSION_1
  FirmwareVersion : 4 = 0x00
  HWVersion : 4 = 0x00
}

PD_VDM_Discover_Svids_Message

Packet PD_VDM_Discover_Svids_Message: PD_VDM_Structured_Header
{
  VDMCommand = PD_VDM_COMMAND_DISCOVER_SVIDS
  VDMSVID = PD_VDM_SID
}

PD_VDM_Discover_Svids_Response

Discover_SVIDs_Responder_VDO

Packet Discover_SVIDs_Responder_VDO: PD_Generic_VDO
{
  SVID1 : 16 = 0x00
  SVID2 : 16 = 0x00
}

PD_VDM_Discover_Modes_Message

Packet PD_VDM_Discover_Modes_Message: PD_VDM_Structured_Header
{
  VDMCommand = PD_VDM_COMMAND_DISCOVER_MODES
  VDMSVID = PD_VDM_SID
}

PD_VDM_Discover_Modes_Response

Packet PD_VDM_Discover_Modes_Response: PD_VDM_Discover_Modes_Message
{
  VDMCommandType = PD_VDM_COMMAND_TYPE_RESPONDER_ACK
  DiscoverModes : * 
    *This field should contain one or more VDOs(modes). 
    Each Mode can be a PD_VDO packet variable that has 32bits data length
}

PD_VDO

Packet PD_VDO: PD_Generic_VDO
{
  Data : 32
}

PD_VDM_DisplayPort_DiscoverMode_Vdo

Packet PD_VDM_DisplayPort_DiscoverMode_Vdo: PD_Generic_VDO
{
  PortCapability : 2  = PD_DISPLAYPORT_UFPD_CAPABLE
  Signaling : 4 = 0x01
  ReceptacleIndication : 1 = 0x00
  Usb2SignalingNotUsed : 1 = 0x01
  DFPDPinAssignmentSupported : 8 = 0x00
  UFPDPinAssignmentSupported : 8 = 0x00
  Reserved_DMV : 6 = 0x00
  DPAMVersion : 2 = 0x00
}

PD_VDM_Enter_Mode_Message

Packet PD_VDM_Enter_Mode_Message: PD_VDM_Structured_Header
{
  VDMCommand = PD_VDM_COMMAND_ENTER_MODE
  VDMSVID = PD_VDM_SID
  VDO : *
    * This field may contain one VDO. 
    * The VDO can be a PD_VDO packet variable with 32bits data length
}

PD_VDM_Enter_Mode_Response

Packet PD_VDM_Enter_Mode_Response: PD_VDM_Structured_Header
{
  VDMCommand = PD_VDM_COMMAND_ENTER_MODE
  VDMSVID = PD_VDM_SID
  VDMCommandType = PD_VDM_COMMAND_TYPE_RESPONDER_ACK
}

PD_VDM_Exit_Mode_Message

Packet PD_VDM_Exit_Mode_Message: PD_VDM_Structured_Header
{
  VDMCommand = PD_VDM_COMMAND_EXIT_MODE
  VDMSVID = PD_VDM_SID
}

PD_VDM_Exit_Mode_Response

Packet PD_VDM_Exit_Mode_Response: PD_VDM_Exit_Mode_Message
{
  VDMCommandType = PD_VDM_COMMAND_TYPE_RESPONDER_ACK
}

PD_VDM_Attention_Message

Packet PD_VDM_Attention_Message: PD_VDM_Structured_Header
{
  VDMCommand = PD_VDM_COMMAND_ATTENTION
  VDMSVID = PD_VDM_SID
  VDO : *
    * This field may contain one VDO. 
    *The VDO can be a PD_VDO packet variable with 32bits data length
}

PD_VDM_DisplayPort_UpdateStatus_Message

Packet PD_VDM_DisplayPort_UpdateStatus_Message: PD_VDM_Structured_Header
{
  NumberOfDataObjects = 0x02
  VDMCommand = PD_VDM_COMMAND_DISPLAYPORT_STATUS_UPDATE
  VDMSVID = PD_DISPLAY_PORT_SVID
  StatusVdo : 32 = 0x00 *
  * Contains only one VDO of PD_VDM_DisplayPort_Status_VDO type
}

PD_VDM_DisplayPort_Status_VDO

Packet PD_VDM_DisplayPort_Status_VDO: PD_Generic_VDO
{
  DFPD_UFPD_Connected : 2  = PD_DISPLAYPORT_DISCONNECTED
  PowerLow : 1  = 0x00
  AdaptorEnabled : 1  = 0x00
  MultiFunctionPreferred : 1  = 0x00
  UsbConfigurationRequest : 1  = 0x00
  ExitDisplayModeRequest : 1  = 0x00
  HPD_State : 1  = 0x00
  IRQ_HPD : 1  = 0x00
  NO_DPAM_SUSPEND : 1   = 0x00
  Reserved_DPS_1 : 22 = 0x00
}

PD_VDM_DisplayPort_UpdateStatus_Response

Packet PD_VDM_DisplayPort_UpdateStatus_Response: PD_VDM_Structured_Header
{
  NumberOfDataObjects = 0x02
  VDMCommand = PD_VDM_COMMAND_DISPLAYPORT_STATUS_UPDATE
  VDMCommandType = PD_VDM_COMMAND_TYPE_RESPONDER_ACK
  VDMSVID = PD_DISPLAY_PORT_SVID
  StatusVdo : 32 = 0x00 *
  * Contains only one VDO of PD_VDM_DisplayPort_Configure_VDO type
}

PD_VDM_DisplayPort_Configure_Message

Packet PD_VDM_DisplayPort_Configure_Message: PD_VDM_Structured_Header
{
  NumberOfDataObjects = 0x02
  VDMCommand = PD_VDM_COMMAND_DISPLAYPORT_CONFIGURE
  VDMSVID = PD_DISPLAY_PORT_SVID
  ConfigureVdo : 32 = 0x00 *
  * Contains only one VDO of PD_VDM_DisplayPort_Configure_VDO type
}

PD_VDM_DisplayPort_Configure_VDO

Packet PD_VDM_DisplayPort_Configure_VDO: PD_Generic_VDO
{
  SelectConfiguration : 2  = PD_DISPLAYPORT_CONFIGURATION_USB
  Signaling : 4  = 0x00
  Reserved_DPC_1 : 2  = 0x00
  UFPU_PinAssignment : 8  = 0x00
  Reserved_DPC_2 : 10 = 0x00
  CableUHBR13p5Support : 1  = 0x00
  Reserved_DPC_3 : 1  = 0x00
  CableType : 2  = 0x00
  DPAMVersion : 2  = 0x00
}

PD_VDM_DisplayPort_Configure_Response

Packet PD_VDM_DisplayPort_Configure_Response: PD_VDM_Structured_Header
{
  VDMCommand = PD_VDM_COMMAND_DISPLAYPORT_CONFIGURE
  VDMCommandType = PD_VDM_COMMAND_TYPE_RESPONDER_ACK
  VDMSVID = PD_DISPLAY_PORT_SVID
}

PD_ExtendedMsgHeader

Packet PD_ExtendedMsgHeader: PD_Packet
{
  DataSize : 9 = 0x00
  Reserved : 1 = 0x00
  RequestChunk : 1 = 0x00
  ChunkNumber : 4 = 0x00
  Chunked : 1 = 0x00
}

PD_ExtMsgHeaders

Packet PD_ExtMsgHeaders: PD_Packet
{
 : PD_MessageHeader
 : PD_ExtendedMsgHeader
  Extended = 1
}

PD_SourceCapExtendedMsg

Packet PD_SourceCapExtendedMsg: PD_ExtMsgHeaders
{
  MessageType = 1
  DataSize = PD_SCEDB_DATA_SIZE
  
  : PD_SourceCapExtDataBlock
}

PD_SourceCapExtDataBlock

Packet PD_SourceCapExtDataBlock
{
  VendorId : 16 = 0x00
  ProductId : 16 = 0x00
  XId : 32 = 0x00
  FirmwareVersion : 8  = 0x00
  HardwareVersion : 8  = 0x00
  LoadStep : 2  = 0x00
  IOC : 1  = 0x00
  Reserved_1 : 5  = 0x00
  HoldupTime : 8  = 0x00
  LPSCompliant : 1  = 0x00
  PS1Compliant : 1  = 0x00
  PS2Compliant : 1  = 0x00
  Reserved_2 : 5  = 0x00
  LowTouchCurEPS : 1  = 0x00
  GroundPinSupport : 1  = 0x00
  GrndPinForProtectiveEarth : 1  = 0x00
  Reserved_3 : 5  = 0x00
  PeakCur1_PercentOverload : 5  = 0x00
  PeakCur1_OverloadPeriod : 6  = 0x00
  PeakCur1_DutyCycle : 4  = 0x00
  PeakCur1_VbusVoltageDroop : 1  = 0x00
  PeakCur2_PercentOverload : 5  = 0x00
  PeakCur2_OverloadPeriod : 6  = 0x00
  PeakCur2_DutyCycle : 4  = 0x00
  PeakCur2_VbusVoltageDroop : 1  = 0x00
  PeakCur3_PercentOverload : 5  = 0x00
  PeakCur3_OverloadPeriod : 6  = 0x00
  PeakCur3_DutyCycle : 4  = 0x00
  PeakCur3_VbusVoltageDroop : 1  = 0x00
  TouchTemp : 8  = 0x00
  ExternalSupplyIsPresent : 1  = 0x00
  ExternalSupplyCondition : 1  = 0x00
  InternalBatteryIsPresent : 1  = 0x00
  Reserved_4 : 5  = 0x00
  NumberOfFixedBatteries : 4  = 0x00
  NumberOfHotSwappableBatterySlots : 4  = 0x00
  SourcePDP : 7  = 0x00
  Reserved_5 : 1  = 0x00
  EPRSourcePDP : 8  = 0x00
}

PD_StatusMsg

Packet PD_StatusMsg: PD_ExtMsgHeaders
{
  MessageType = 2
  DataSize  = PD_SOP_SDB_DATA_SIZE
  
  : PD_StatusDataBlock
}

PD_StatusDataBlock

Packet PD_StatusDataBlock
{
  InternalTemp : 8 = 0x00
  PresentInput_Rsvd_1 : 1 = 0x00
  ExternalPowerIsPresent : 1 = 0x00
  ExternalPower_AC_DC : 1 = 0x00
  InternalPowerBattery : 1 = 0x00
  InternalPowerNonBattery : 1 = 0x00
  PresentInput_Rsvd_1_2 : 3 = 0x00
  FixedBattery : 4 = 0x00
  HotSwappableBattery : 4 = 0x00
  EventFlags_Rsvd_1 : 1 = 0x00
  OverCurProtectionEvent : 1 = 0x00
  OverTempProtectionEvent : 1 = 0x00
  OverVoltProtection : 1 = 0x00
  OperatingModeFlag : 1 = 0x00
  EventFlags_Rsvd_2 : 3 = 0x00
  TempStatus_Rsvd_1 : 1 = 0x00
  TemperatureStatus : 2 = PD_TEMP_STATUS_NORMAL
  TempStatus_Rsvd_2 : 5 = 0x00
  PowerStatus_Rsvd_1 : 1 = 0x00
  PowLimited_CableCurrent : 1 = PD_FALSE
  PowLimited_InsuffPower : 1 = PD_FALSE
  PowLimited_InsuffExtPower : 1 = PD_FALSE
  PowLimited_EventFlagsSet : 1 = PD_FALSE
  PowLimited_Temperature : 1 = PD_FALSE
  PowerStatus_Rsvd_2 : 2 = 0x00
  PowerStateChange_NewState : 3 = 0x00
  PowerStateChange_NewStateIndicator : 3 = 0x00
  PowerStateChange_Rsvd_1 : 2 = 0x00
}

PD_StatusMsg_Cable

Packet PD_StatusMsg_Cable: PD_ExtMsgHeaders
{
  MessageType = 2
  DataSize = PD_SOPP_SDB_DATA_SIZE
  
  : PD_StatusDataBlock_Cable
}

PD_StatusDataBlock_Cable

Packet PD_StatusDataBlock_Cable
{
  InternalTemp : 8 = 0x00
  ThermalShutdown : 1 = PD_FALSE
  Rsvd : 7 = 0x00
}

PD_GetBatteryCapMsg

Packet PD_GetBatteryCapMsg: PD_ExtMsgHeaders
{
  MessageType = 3
  DataSize = PD_GBCDB_DATA_SIZE
  
  : PD_GetBatteryCapDataBlock
}

PD_GetBatteryCapDataBlock

Packet PD_GetBatteryCapDataBlock
{
  BatteryCapRef : 8 = 0x00
}

PD_GetBatteryStatusMsg

Packet PD_GetBatteryStatusMsg: PD_ExtMsgHeaders
{
  MessageType = 4
  DataSize = PD_GBSDB_DATA_SIZE
  
  : PD_GetBatteryStatusDataBlock
}

PD_GetBatteryStatusDataBlock

Packet PD_GetBatteryStatusDataBlock
{
  BatteryStatusRef : 8 = 0x00
}

PD_BatteryCapabilitiesMsg

Packet PD_BatteryCapabilitiesMsg: PD_ExtMsgHeaders
{
  MessageType = 5
  DataSize = PD_BCDB_DATA_SIZE
  
  : PD_BatteryCapDataBlock
}

PD_BatteryCapDataBlock

Packet PD_BatteryCapDataBlock
{
  VendorId : 16 = 0x00
  ProductId : 16 = 0x00
  DesignCap_100mWHUnits : 16 = 0x00
  LastFullChargeCap_100mWHUnits : 16 = 0x00
  InvalidBatteryRef : 1  = 0x00
  BCDB_Rsvd_1 : 7  = 0x00
}

PD_GetManufacturerInfoMsg

Packet PD_GetManufacturerInfoMsg: PD_ExtMsgHeaders
{
  MessageType = 6
  DataSize = PD_GMIDB_DATA_SIZE
  
  : PD_GetManufacturerInfoDataBlock
}

PD_GetManufacturerInfoDataBlock

Packet PD_GetManufacturerInfoDataBlock
{
  Target : 8 = PD_MANINFO_TARGET_PORT_CABLE
  ManufacturerInfoRef : 8 = 0x00
}

PD_ManufacturerInfoMsg

Packet PD_ManufacturerInfoMsg: PD_ExtMsgHeaders
{
  MessageType = 7
  DataSize = PD_MIDB_DATA_SIZE
  
  : PD_ManufacturerInfoDataBlock
}

PD_ManufacturerInfoDataBlock

Packet PD_ManufacturerInfoDataBlock
{
  VendorId : 16 = 0x00
  ProductId : 16 = 0x00
  ManufacturerString : *
  * Can be initialized using a byte stream (max is 176b)
}

PD_SecurityRequestMsg

Packet PD_SecurityRequestMsg: PD_ExtMsgHeaders
{
  MessageType = 8
  DataSize = PD_SRQDB_DATA_SIZE
  SecurityRequestDB : *
    * Can contain only one Security Request Data Block. 
      Available SRDB templates are:
      PD_SRQDB_GetDigests
      PD_SRQDB_GetCertificate
      PD_SRQDB_Challenge
}

PD_SecurityDBHeader

Packet PD_SecurityDBHeader
{
    AuthProtocolVersion : 8 = PD_AUTH_PROT_VER_1
    AuthMessageType : 8 = 0x00
    AuthParam1 : 8 = 0x00
    AuthParam2 : 8 = 0x00
}

PD_SecurityRequestDB

Packet PD_SecurityRequestDB: PD_SecurityDBHeader
{
}

PD_SRQDB_GetDigests

Packet PD_SRQDB_GetDigests: PD_SecurityRequestDB
{
  AuthMessageType = PD_AUTH_TYPE_GET_DIGESTS
}

PD_SRQDB_GetCertificate

Packet PD_SRQDB_GetCertificate: PD_SecurityRequestDB
{
  AuthMessageType = PD_AUTH_TYPE_GET_CERTIFICATE
  Offset : 16 = 0x00
  Length : 16 = 0x00
}

PD_SRQDB_Challenge

Packet PD_SRQDB_Challenge: PD_SecurityRequestDB
{
  AuthMessageType = PD_AUTH_TYPE_GET_CHALLENGE
  Nonce : 256 = { 00 00 00 00 }
}

PD_SecurityResponseMsg

Packet PD_SecurityResponseMsg: PD_ExtMsgHeaders
{
  MessageType = 9
  DataSize    = PD_SRPDB_DATA_SIZE
  SecurityResponseDB : *
    * Can contain only one Security Response Data Block. 
    Available SRPDB types are:
      PD_SRPDB_Digests
      PD_SRPDB_Certificate
      PD_SRPDB_ChallengeAuth
      PD_SRPDB_Error
}

PD_SecurityResponseDB

Packet PD_SecurityResponseDB: PD_SecurityDBHeader
{
}

PD_SRPDB_Digests

Packet PD_SRPDB_Digests: PD_SecurityResponseDB
{
  AuthMessageType = PD_AUTH_TYPE_DIGESTS
  AuthParam1 = 0x01
  DigestArray : *
    * Max len is 256 bytes, each digest is 32 bytes. 
    Packet variables of PD_Security_Digest type can be assigned to this field.
}

PD_Security_Digest

Packet PD_Security_Digest
{
  Digest : 256 = 0x00
}

PD_SRPDB_Certificate

Packet PD_SRPDB_Certificate: PD_SecurityResponseDB
{
  AuthMessageType = PD_AUTH_TYPE_CERTIFICATE
  Certificate : *
    * Can be initialized using a byte stream.
}

PD_SRPDB_ChallengeAuth

Packet PD_SRPDB_ChallengeAuth: PD_SecurityResponseDB
{
  AuthMessageType = PD_AUTH_TYPE_CHALLENGE_AUTH
  MinProtVer : 8 = 0x00
  MaxProtVer : 8 = 0x00
  Capabilities : 8 = 0x01
  Rsvd : 8 = 0x00
  CertChainHash : 256 = { 00 00 00 00 }
  Salt : 256 = { 00 00 00 00 }
  ContextHash : 256 = { 00 00 00 00 }
  Signature : 512 = { 00 00 00 00 }
}

PD_SRPDB_Error

Packet PD_SRPDB_Error: PD_SecurityResponseDB
{
  AuthMessageType = PD_AUTH_TYPE_ERROR
}

PD_PPSStatusMsg

Packet PD_PPSStatusMsg: PD_ExtMsgHeaders
{
  MessageType = 12
  DataSize = PD_PPSSDB_DATA_SIZE
  
  : PD_PPSStatusDataBlock
}

PD_PPSStatusDataBlock

Packet PD_PPSStatusDataBlock
{
  OutputVoltage_20mVUnits : 16 = 0xFFFF
  OutputCurrent_50mAUnits : 8  = 0xFF
  PPSSDB_Rsvd_1 : 1  = 0x00
  PresentTemperatureFlag : 2  = 0x01
  OperatingModeFlag : 1  = 0x00
  PPSSDB_Rsvd_2 : 4  = 0x00
}

PD_CountryInfoMsg

Packet PD_CountryInfoMsg: PD_ExtMsgHeaders
{
  MessageType = 13
  DataSize = PD_CIDB_DATA_SIZE
  
  : PD_CountryInfoDataBlock
}

PD_CountryInfoDataBlock

Packet PD_CountryInfoDataBlock
{
  : CountryCode
  CIDB_Rsvd_1 : 16 = 0x00
  CountrySpecificData : *
    * Byte stream data. Max length is 256 bytes
}

PD_CountryCodesMsg

Packet PD_CountryCodesMsg: PD_ExtMsgHeaders
{
  MessageType = 14
  DataSize = PD_CCDB_DATA_SIZE
  
  : PD_CountryCodesDataBlock
}

PD_CountryCodesDataBlock

Packet PD_CountryCodesDataBlock
{
  NumberOfCountryCodes : 16 = 0x01
  : CountryCode
  CountryCodes : *
    * Should be multiple of 16bits.
    Max len is 256 bytes.
    Each CountryCode is 2 bytes.
    Each CountryCode can be assigned using the CountryCode packet variable.
}

CountryCode

Packet CountryCode
{
  Alpha2CountryCode1stChar : 8 = 0x00
  Alpha2CountryCode2ndChar : 8 = 0x00
}

PD_SinkCapExtendedMsg

Packet PD_SinkCapExtendedMsg: PD_ExtMsgHeaders
{
  MessageType = 15
  DataSize = PD_SKEDB_DATA_SIZE
  
  : PD_SinkCapExtDataBlock
}

PD_SinkCapExtDataBlock

Packet PD_SinkCapExtDataBlock
{
  VendorId : 16 = 0x00
  ProductId : 16 = 0x00
  XId : 32 = 0x00
  FirmwareVersion : 8  = 0x00
  HardwareVersion : 8  = 0x00
  SKEDBVersion : 8  = PD_SKEDB_VERSION_1
  LoadStep : 2  = PD_SKEDB_LOADSTEP_150mA_PER_uS
  LoadStep_Rsvd : 6  = 0x00
  OverLoad_10PercentUnits : 5  = 0x00
  OverloadPeriod_20mSUnits : 6  = 0x00
  DutyCycle_5PercentUnits : 4  = 0x00
  TolerateVBusDroop : 1  = 0x00
  RequiresLPSSource : 1  = 0x00
  RequiresPS1Source : 1  = 0x00
  RequiresPS2Source : 1  = 0x00
  Compliance_Rsvd : 5  = 0x00
  TouchTemp : 8  = PD_SKEDB_TOUCHTEMP_DEFAULT
  NumberOfFixedBatteries : 4  = 0x00
  NumberOfHotSwappableSlots : 4  = 0x00
  PPSChargingSupported : 1  = 0x00
  VBusPowered : 1  = 0x01
  MainsPowered : 1  = 0x00
  BatteryPowered : 1  = 0x00
  BatteryEssentiallyUnlimited : 1  = 0x00
  AVSSupport : 1  = 0x00
  SinkModes_Rsvd : 2  = 0x00
  SinkMinPDP : 7  = 0x00
  SinkMinPDP_Rsvd : 1  = 0x00
  SinkOperationalPDP : 7  = 0x00
  SinkOperationalPDP_Rsvd : 1  = 0x00
  SinkMaxPDP : 7  = 0x00
  SinkMaxPDP_Rsvd : 1  = 0x00
  EPRSinkMinPDP : 8  = 0x00
  EPRSinkOperationalPDP : 8  = 0x00
  EPRSinkMaxPDP : 8  = 0x00
}

PD_GetSourceInfoMsg

Packet PD_GetSourceInfoMsg: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_GET_SOURCE_INFO
}

PD_GetRevisionMsg

Packet PD_GetRevisionMsg: PD_ControlMessage
{
  MessageType = PD_MESSAGE_TYPE_GET_REVISION
}

PD_EPRModePacket

Packet PD_EPRModePacket: PD_MessageHeader
{
  MessageType = 10
  NumberOfDataObjects = 1
  
  : PD_EPRModeData
}

PD_EPRModeData

Packet PD_EPRModeData
{
  Rsvd : 16 = 0
  Data : 8  = 0
  Action : 8  = 0
}

PD_ExtendedCtrlMsg

Packet PD_ExtendedCtrlMsg: PD_ExtMsgHeaders
{
  MessageType = 16
  DataSize = 2
  
  : PD_ExtControlDataBlock
}

PD_ExtControlDataBlock

Packet PD_ExtControlDataBlock
{
  type : 8 = 0x00
  data : 8 = 0x00
}

PD_GetEPRSourceCapMsg

Packet PD_GetEPRSourceCapMsg: PD_ExtendedCtrlMsg
{
  type = 1
  data = 0
}

PD_GetEPRSinkCapMsg

Packet PD_GetEPRSinkCapMsg: PD_ExtendedCtrlMsg
{
  type = 2
  data = 0
}

PD_EPRKeepAliveMsg

Packet PD_GetEPRKeepAliveMsg: PD_ExtendedCtrlMsg
{
  type = 3
  data = 0
}

PD_EPRKeepAliveAckMsg

Packet PD_GetEPRKeepAliveAckMsg: PD_ExtendedCtrlMsg
{
  type = 4
  data = 0
}

PD_EPRSourceCapabilitiesMessage

Packet PD_EPRSourceCapabilitiesMessage: PD_ExtendedCtrlMsg
{
  MessageType = 17
  DataSize = 0
  EPRSourceCapabilitiesData : *
    * This field holds SPR and EPR PDOs.
    SPR PDO types that can assign to this field are: 
      PD_PowerDataObjectFixedSupply_Source
      PD_PDOFixedSupplyNotVSafe5V_Source
      PD_PowerDataObjectVariableSupply_Source     
      PD_PowerDataObjectBatterySupply_Source        
      PD_PowerDataObjectPPS_Source        
      PD_SPRPowerDataObjectAVS
    EPR PDO types that can assign to this field are: 
      PD_PowerDataObjectFixedSupply_Source        
      PD_EPRPowerDataObjectAVS
}

PD_EPRPowerDataObjectAVS

Packet PD_EPRPowerDataObjectAVS: PD_PowerDataObject
{
  PDP_1WUnits : 8 = 0
  MinVoltage_100mVUnits : 8 = 0
  AVS_Rsvd_1 : 1 = 0
  MaxVoltage_100mVUnits : 9 = 0
  PeakCurrent : 2 = 0
  APDOType : 2 = 1
  PowerDataType : 2 = 3
}

PD_EPRSinkCapabilitiesMessage

Packet PD_EPRSinkCapabilitiesMessage: PD_ExtendedCtrlMsg
{
  MessageType = 18
  DataSize = 0
  EPRSinkCapabilitiesData : *
    * This field holds SPR and EPR PDOs.
    SPR PDO types that can assign to this field are: 
      PD_PowerDataObjectFixedSupply_Sink 
      PD_PowerDataObjectVariableSupply_Sink 
      PD_PowerDataObjectBatterySupply_Sink
      PD_PowerDataObjectPPS_Sink
      PD_SPRPowerDataObjectAVS
    EPR PDO types that can assign to this field are: 
      PD_PowerDataObjectFixedSupply_Sink
      PD_EPRPowerDataObjectAVS
}

PD_EPRRequestPacket

Packet PD_EPRRequestPacket: PD_MessageHeader
{
  MessageType = 9
  NumberOfDataObjects = 2
  RDO : 32 = 0x00
    This field can contain only one RDO packet variable. 
    Available RDO templates are: 
      PD_RequestDataObject_Fixed_Variable_NoGiveBack
      PD_RequestDataObject_Fixed_Variable_GiveBack
      PD_RequestDataObject_Battery_NoGiveBack
      PD_RequestDataObject_Battery_GiveBack
      PD_ProgrammableRDO
  PDO : 32 = 0x00
    This field is the selected PDO in the SourceCapabilities packet
}