Power Delivery¶
API Documentation: [cpp] [python] [.NET] [LabVIEW]
Power Delivery or PD is a power specification which allows more charging options and device behaviors within the USB interface. This Entity will allow you to directly access the vast landscape of PD.
When the capabilities of a PD system are fully realized everything in the system is “smart”. That includes the device, the host and even the cable. All of these elements contain electronics that identify themselves and what they are capable of doing. Because of this complexity it is important to align on a few terms that will be used throughout this Entity.
Partner This refers to the side of the PD connection in question. The possible options for this parameter are.
Local Indicates the context/perspective of the Acroname device you are communicating with through a BrainStem connection.
Remote The context/perspective of anything other than the Acroname device.
Partner Type |
Value |
Define |
---|---|---|
Local |
0 |
powerdeliveryPartnerLocal |
Remote |
1 |
powerdeliveryPartnerRemote |
Power Role Indicates the direction of power. This value is typically used in the context of a “Partner”. i.e. The remote partner is sinking, which would mean the local partner is sourcing. The possible options for this context are:
Sink Indicates that the partner is taking power in/from.
Source Indicates that the partner is providing power out/to.
Power Roles are also used in the context of what a port is capable of doing.
Sink Device is capable of consuming power.
Source Device is capable of producing power.
Sink/Source Device is capable of both consuming or producing power. Dual Role Port (DRP)
Power Role |
Value |
Define |
---|---|---|
Disabled |
0 |
powerdeliveryPowerRoleDisabled |
Source |
1 |
powerdeliveryPowerRoleSource |
Sink |
2 |
powerdeliveryPowerRoleSink |
Source/Sink |
3 |
powerdeliveryPowerRoleSourceSink |
Power Data Objects (PDO)
PDO’s define what a device is capable of doing in the world of Power Delivery. PDO’s are bit packed integers defined by the PD Specification which vary in meaning based on the type of PDO.
Request Data Objects (RDO)
RDO’s are the final agreement after successful Power Delivery negotiations. This RDO is always sent by the sinking device and is the result of the sources advertised PDO’s and the needs/requirements of the sinking device. Only one RDO exists per valid connection.
Manipulating PDO’s and RDO’s¶
The Power Delivery specification defines a large number of Data Objects and the USBHub3c 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:
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 USBHub3c. Many of the items on the remote side of the USBHub3c are merely request. In other words items in this category not guaranteed to happen.
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.
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:
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.
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. |