if (port->PpsEnabled && PPSAPDO) { /* Req current (50mA units) and voltage (20mV units) */ port->SinkRequest.PPSRDO.ObjectPosition = PPSAPDO; if (port->SrcCapsReceived[PPSAPDO - 1].PPSAPDO.MaxCurrent >= DPM_GetSinkCap(port->dpm, port)[PPSRDO].PPSAPDO.MaxCurrent) port->SinkRequest.PPSRDO.OpCurrent = DPM_GetSinkCap(port->dpm, port)[PPSRDO].PPSAPDO.MaxCurrent; else port->SinkRequest.PPSRDO.OpCurrent = port->SrcCapsReceived[PPSAPDO - 1].PPSAPDO.MaxCurrent; port->SinkRequest.PPSRDO.Voltage = DPM_GetSinkCap(port->dpm, port)[PPSRDO]. PPSAPDO.MinVoltage * 5; }代码分析
时间: 2024-04-04 22:29:13 浏览: 136
后端开发-详细教程&案例
这段代码实现的是如果一个端口的 PPS(Programmable Power Supply) 功能已经启用,并且 PPSAPDO(PPS Alternate Mode Object)不为 NULL,那么会向 Sink 发送请求获取当前的电压和电流。具体的实现如下:
- 首先,设置端口的 SinkRequest.PPSRDO.ObjectPosition 为 PPSAPDO。
- 然后,判断 PPSAPDO 对应的 SrcCapsReceived 中的最大电流是否大于等于当前 Sink 的最大电流,如果是,则将 SinkRequest.PPSRDO.OpCurrent 设置为当前 Sink 的最大电流,否则设置为 PPSAPDO 对应的 SrcCapsReceived 中的最大电流。
- 最后,将 SinkRequest.PPSRDO.Voltage 设置为当前 Sink 的最小电压乘以 5。
这段代码主要是用于实现 USB-PD 协议中的 PPS 功能,根据不同的电源和设备需求,可以动态调整电流和电压,从而实现更为高效的充电。
阅读全文