SensorLib 0.5.0
Multi-platform sensor driver library for Arduino, PlatformIO, and ESP-IDF
Loading...
Searching...
No Matches
AXP517Tcpc.hpp
Go to the documentation of this file.
1
31#pragma once
32
33#include <stdint.h>
34#include "AXP517Core.hpp"
35
45{
46public:
51 explicit AXP517Tcpc(AXP517Core &core) : _core(core) {}
52
56 enum Alert : uint16_t {
57 AlertCcStatus = (1u << 0),
58 AlertPowerStatus = (1u << 1),
59 AlertRxStatus = (1u << 2),
60 AlertRxHardReset = (1u << 3),
61 AlertTxFailed = (1u << 4),
62 AlertTxDiscarded = (1u << 5),
63 AlertTxSuccess = (1u << 6),
64 AlertVbusAlarmHi = (1u << 7),
65 AlertVbusAlarmLo = (1u << 8),
66 AlertFault = (1u << 9),
67 AlertRxBufOverflow = (1u << 10),
68 AlertVbusDisconnect = (1u << 11),
69 AlertExtendedStatus = (1u << 13),
70 AlertExtended = (1u << 14),
71 };
72
76 enum class TransmitType : uint8_t {
77 SOP = 0,
78 SOP_PRIME = 1,
79 SOP_DPRIME = 2,
80 SOP_DBG_PRIME = 3,
81 SOP_DBG_DPRIME = 4,
82 HARD_RESET = 5,
83 CABLE_RESET = 6,
85 };
86
90 enum class RetryCount : uint8_t {
91 R0 = 0,
92 R1 = 1,
93 R2 = 2,
94 R3 = 3,
95 };
96
100 enum class CcStatus : uint8_t {
101 OPEN = 0,
102 RP_DEF,
103 RP_1_5,
104 RP_3_0,
105 };
106
110 struct RxFifoMsg {
111 uint8_t byteCount = 0;
112 uint8_t frameType = 0;
113 uint16_t headerLE = 0;
114 uint8_t payload[28] = {0};
115 uint8_t payloadLen = 0;
116 };
117
122 bool init();
123
128 bool checkVendorId();
129
135 bool readAlert(uint16_t &out);
136
142 bool clearAlert(uint16_t maskRw1c);
143
149 {
150 return clearAlert(0xFFFF);
151 }
152
158 bool readFaultStatus(uint8_t &out);
159
165 bool clearFaultStatus(uint8_t maskRw1c);
166
171 bool clearPmicIrqStatus();
172
178 bool writeMessageHeaderInfo(uint8_t v);
179
185 bool writeReceiveDetect(uint8_t v);
186
191 bool clearTx();
192
198
203 bool setPolarityFromCc();
204
211 bool getCc(CcStatus &cc1, CcStatus &cc2);
212
217 bool isAttached();
218
224 bool getPowerStatus(uint8_t &status);
225
230 bool isVbusPresent();
231
237 bool readVbusMv(uint16_t &mv);
238
244 bool rxReadMessage(RxFifoMsg &out);
245
255 bool txSend(TransmitType type, RetryCount retry, uint16_t headerLE,
256 const uint8_t *payload, uint8_t payloadLen);
257
264 bool readReg(uint8_t reg, uint8_t &out)
265 {
266 return r8(reg, out);
267 }
268
275 bool writeReg(uint8_t reg, uint8_t v)
276 {
277 return w8(reg, v);
278 }
279
281 uint32_t millis()
282 {
283 return _core.millis();
284 }
285
287 void delayMs(uint32_t ms)
288 {
289 _core.delayMs(ms);
290 }
291
293 void pinMode(uint8_t pin, uint8_t mode)
294 {
295 _core.pinMode(pin, mode);
296 }
297
299 uint8_t digitalRead(uint8_t pin)
300 {
301 return _core.digitalRead(pin);
302 }
303
304private:
311 bool r8(uint8_t reg, uint8_t &out);
312
319 bool w8(uint8_t reg, uint8_t v);
320
328 bool readNoInc(uint8_t reg, uint8_t *buf, uint8_t len);
329
337 bool writeNoInc(uint8_t reg, const uint8_t *buf, uint8_t len);
338
339private:
340 AXP517Core &_core;
341};
@license MIT License
AXP517 low-level core driver.
uint8_t digitalRead(uint8_t pin)
Read a platform GPIO pin through the active HAL.
uint32_t millis()
Return the current platform millisecond counter.
void pinMode(uint8_t pin, uint8_t mode)
Configure a platform GPIO pin through the active HAL.
void delayMs(uint32_t ms)
Delay using the active platform HAL.
AXP517 Type-C Port Controller helper.
uint8_t digitalRead(uint8_t pin)
Read a platform GPIO pin through the active HAL.
bool writeMessageHeaderInfo(uint8_t v)
Write the TCPCI MESSAGE_HEADER_INFO register.
bool clearAlert(uint16_t maskRw1c)
Clear PD_ALERTL/H bits using write-one-to-clear semantics.
bool setSinkMessageHeaderAndRx()
Configure sink message-header defaults and enable SOP RX.
bool clearPmicIrqStatus()
Clear the non-PD PMIC IRQ status registers.
bool init()
Initialize the TCPC as a USB-PD sink.
bool clearTx()
Reset the TX byte count and transmit command register.
bool txSend(TransmitType type, RetryCount retry, uint16_t headerLE, const uint8_t *payload, uint8_t payloadLen)
Send a USB-PD packet through the TCPC TX FIFO.
void pinMode(uint8_t pin, uint8_t mode)
Configure a platform GPIO pin through the active HAL.
bool clearFaultStatus(uint8_t maskRw1c)
Clear TCPC FAULT_STATUS bits using write-one-to-clear semantics.
bool readReg(uint8_t reg, uint8_t &out)
Read one TCPC register.
bool isAttached()
Check whether either CC pin indicates attachment.
RetryCount
TCPCI transmit retry count values.
@ R3
Three retries.
bool readFaultStatus(uint8_t &out)
Read the TCPC FAULT_STATUS register.
void delayMs(uint32_t ms)
Delay using the active platform HAL.
bool getCc(CcStatus &cc1, CcStatus &cc2)
Read and decode CC1/CC2 status.
Alert
PD_ALERTL/H bit definitions returned by readAlert().
@ AlertExtendedStatus
EXTENDED_STATUS register changed.
@ AlertTxFailed
Message transmission failed.
@ AlertPowerStatus
POWER_STATUS register changed.
@ AlertExtended
ALERT_EXTENDED register changed.
@ AlertTxSuccess
Message transmission completed.
@ AlertRxHardReset
Hard Reset received.
@ AlertVbusAlarmHi
VBUS high-voltage alarm.
@ AlertRxStatus
RX buffer contains a SOP message.
@ AlertTxDiscarded
Transmission discarded due to RX activity.
@ AlertVbusAlarmLo
VBUS low-voltage alarm.
@ AlertRxBufOverflow
RX buffer overflow.
@ AlertFault
TCPC fault status changed.
@ AlertVbusDisconnect
VBUS sink disconnect threshold crossed.
@ AlertCcStatus
CC_STATUS register changed.
CcStatus
Decoded sink-side CC status.
@ RP_1_5
1.5 A current advertisement.
@ RP_DEF
Default USB current advertisement.
@ OPEN
No source detected on this CC pin.
@ RP_3_0
3.0 A current advertisement.
bool writeReceiveDetect(uint8_t v)
Write the TCPCI RECEIVE_DETECT register.
bool readVbusMv(uint16_t &mv)
Read TCPC VBUS ADC value.
bool readAlert(uint16_t &out)
Read PD_ALERTL/H.
bool rxReadMessage(RxFifoMsg &out)
Read and decode one TCPC RX FIFO message.
uint32_t millis()
Return the platform millisecond counter.
bool checkVendorId()
Verify the TCPC vendor ID.
bool getPowerStatus(uint8_t &status)
Read POWER_STATUS.
bool clearAllAlerts()
Clear all PD alert bits.
bool writeReg(uint8_t reg, uint8_t v)
Write one TCPC register.
TransmitType
TCPCI TRANSMIT register packet type values.
@ SOP_DBG_DPRIME
Debug SOP'' packet.
@ BIST_CARRIER_MODE2
BIST carrier mode 2.
@ HARD_RESET
Hard Reset ordered set.
@ CABLE_RESET
Cable Reset ordered set.
@ SOP_DBG_PRIME
Debug SOP' packet.
@ SOP_DPRIME
SOP'' packet.
bool isVbusPresent()
Check whether TCPC VBUS present status is set.
bool setPolarityFromCc()
Set TCPC polarity from the current CC status.
AXP517Tcpc(AXP517Core &core)
Construct a TCPC helper using the shared AXP517 core transport.
char buf[64]
Decoded RX FIFO message.
uint16_t headerLE
USB-PD message header in little-endian order.
uint8_t frameType
TCPCI RX frame type.
uint8_t byteCount
TCPCI readable byte count.
uint8_t payload[28]
USB-PD payload bytes.
uint8_t payloadLen
Number of valid payload bytes.