Power Delivery Entity


Manipulating PDO’s and RDO’s

The Power Delivery specification defines a large number of Data Objects and the USBExt3c is capable of manipulating and modifying most of them in some fashion. The most common are PDO’s and RDO’s which were defined above. Direct manipulation is quite a complex process and is a feature of the Pro version only. It is highly recommended that users of these features first experiment with the Power Rule Editor within HubTool. Once you know the values you want to use manipulation can be done through:

stem.pd[x].setPowerDataObject() [cpp] [python] [NET] [LabVIEW]
stem.pd[x].getPowerDataObject() [cpp] [python] [NET] [LabVIEW]
stem.pd[x].setRequestDataObject() [cpp] [python] [NET] [LabVIEW]
stem.pd[x].getRequestDataObject() [cpp] [python] [NET] [LabVIEW]

Power Roles Preferred

Preferred Power Role

Value

Define

None

0

pdPowerRolePreferred_None

Source

1

pdPowerRolePreferred_Source

Sink

2

pdPowerRolePreferred_Sink

Connection State

Connection State

Value

Define

None

0

pdConnectionState_None

Source

1

pdConnectionState_Source

Sink

2

pdConnectionState_Sink

Powered Cable

3

pdConnectionState_PoweredCable

Powered Cable with Sink

4

pdConnectionState_PoweredCableWithSink

Requests

Given the nature of Power Delivery there are only so many things that are within the direct control of the local USBExt3c. Many of the items on the remote side of the USBExt3c are merely request. In other words items in this category not guaranteed to happen.

stem.pd[x].request() [cpp] [python] [NET] [LabVIEW]

Request

Value

Define

Hard Reset

0

pdRequestHardReset

Soft Reset

1

pdRequestSoftReset

Data Reset

2

pdRequestDataReset

Power Role Swap

3

pdRequestPowerRoleSwap

Power Fast Role Swap

4

pdRequestPowerFastRoleSwap

Data Role Swap

5

pdRequestDataRoleSwap

Vconn Swap

6

pdRequestVconnSwap

Sink Go to Min

7

pdRequestSinkGoToMinimum

Remote Source PDOs

8

pdRequestRemoteSourcePowerDataObjects

Remote Sink PDOs

9

pdRequestRemoteSinkPowerDataObjects

Remote Source Extended Capabilities

10

pdRequestRemoteSourceExtendedCapabilities

Remote Sink Extended Capabilities

11

pdRequestRemoteSinkExtendedCapabilities

Status

12

pdRequestStatus

PPS Status

13

pdRequestPPSStatus

Battery Capabilities

14

pdRequestBatteryCapabilities

Battery Status

15

pdRequestBatteryStatus

Manufacturer Info Sop

16

pdRequestManufacturerInfoSop

Manufacturer Info Sopp

17

pdRequestManufacturerInfoSopp

Manufacturer Inof Soppp

18

pdRequestManufacturerInfoSoppp

Discover Identity Sop

19

pdRequestDiscoverIdentitySop

Discover Identity Sopp

20

pdRequestDiscoverIdentitySopp

Discover Identity Soppp

21

pdRequestDiscoverIdentitySoppp

Revision

22

pdRequestRevision

Source Info

23

pdRequestSourceInfo

Country Code

24

pdRequestCountryCode

Country Info

25

pdRequestCountryInfo

Errors return from this function call only indicate the success of sending the request and do not reflect the success of the actual request. To find the status of the request you can investigate the outcome of the connection or check the most recent status of the PD stack.

stem.pd[x].requestStatus() [cpp] [python] [NET] [LabVIEW]

Cable Orientation

Although the Type C connector has no visible orientation the connector does have electrical orientation which directly correlates to the Communications Chanel (CC) strapping internal to the cable. The orientation be be obtained via:

stem.pd[x].getCableOrientation() [cpp] [python] [NET] [LabVIEW]

Orientation

Value

Define

Invalid

0

pdCableOrientation_Invalid

CC1/A Side

1

pdCableOrientation_CC1

CC2/B Side

2

pdCableOrientation_CC2

Cable Type

Cable Type

Value

Define

Invalid

0

pdCableType_Invalid

Passive

1

pdCableType_Passive

Active

2

pdCableType_Active

Override

The USB C connector by default follows rules around maximum cable current and budgetted power. In some test applications, including ones with a Universal Orientation Cable, the port should ignore those rules which is why we have exposed override bits to allow for disabling of specific behavior. Below are the get/set routines for overrides and the bit definitions.

stem.pd[x].getOverride() [cpp] [python] [NET] [LabVIEW]
stem.pd[x].setOverride() [cpp] [python] [NET] [LabVIEW]

Name

Bit

Definition

Cable Current

0

overrides the cable current limiting to 3A unless it’s an emarked cable

Port Power

1

Overrides the port power budgetting and just allows full power always

Auto Discovery

2

Overrides the auto discovery feature. With override true the hub will only establish a basic power connection and wont ask for additional vendor information.