-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtps23861.h
150 lines (110 loc) · 7.59 KB
/
tps23861.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#ifndef tps23861_h
#define tps23861_h
#include <Arduino.h>
#include <Wire.h>
class tps23861
{
public:
tps23861();
void begin(uint8_t sdaPin, uint8_t sclPin, int clockSpeed = 400000);
uint8_t readInterrupt(uint8_t tps23861Id);
void readInterrupt(uint8_t tps23861Id, bool &PEC, bool &PGC, bool &DISF, bool &DETC, bool &CLASC, bool &IFAULT, bool &STRTF, bool &SUPF);
uint8_t readInterruptEnable(uint8_t tps23861Id);
void writeInterruptEnable(uint8_t tps23861Id, uint8_t data);
uint8_t readPowerEvent(uint8_t tps23861Id);
uint8_t readPowerEventClearOnRead(uint8_t tps23861Id);
void readPowerEventClearOnRead(uint8_t tps23861Id, bool &PEC1, bool &PEC2, bool &PEC3, bool &PEC4, bool &PGC1, bool &PGC2, bool &PGC3, bool &PGC4);
uint8_t readDetectionEvent(uint8_t tps23861Id);
uint8_t readDetectionEventClearOnRead(uint8_t tps23861Id);
void readDetectionEventClearOnRead(uint8_t tps23861Id, bool &DETEC1, bool &DETEC2, bool &DETEC3, bool &DETEC4, bool &CLSC1, bool &CLSC2, bool &CLSC3, bool &CLSC4);
uint8_t readFaultEvent(uint8_t tps23861Id);
uint8_t readFaultEventClearOnRead(uint8_t tps23861Id);
void readFaultEventClearOnRead(uint8_t tps23861Id, bool &ICUT1, bool &ICUT2, bool &ICUT3, bool &ICUT4, bool &DISF1, bool &DISF2, bool &DISF3, bool &DISF4);
uint8_t readStartIlimEvent(uint8_t tps23861Id);
uint8_t readStartIlimEventClearOnRead(uint8_t tps23861Id);
void readStartIlimEventClearOnRead(uint8_t tps23861Id, bool &STRT1, bool &STRT2, bool &STRT3, bool &STRT4, bool &ILIM1, bool &ILIM2, bool &ILIM3, bool &ILIM4);
uint8_t readSupplyEvent(uint8_t tps23861Id);
uint8_t readSupplyEventClearOnRead(uint8_t tps23861Id);
void readSupplyEventClearOnRead(uint8_t tps23861Id, bool &VPUV, bool &VDUV, bool &TSD);
uint8_t readPort1Status(uint8_t tps23861Id);
uint8_t readPort2Status(uint8_t tps23861Id);
uint8_t readPort3Status(uint8_t tps23861Id);
uint8_t readPort4Status(uint8_t tps23861Id);
void readPortStatus(uint8_t tps23861Id, uint8_t port, uint8_t &portDetectResult, uint8_t &portClass);
uint8_t readPowerStatus(uint8_t tps23861Id);
// void i2cSlaveAdress(uint8_t tps23861Id); //I dont have a board with more than 2 tps23861's so I cant test this, the default adress is 0x20 and 0x28 with the a3 on gnd
uint8_t readOperatingMode(uint8_t tps23861Id);
void writeOperatingMode(uint8_t tps23861Id, uint8_t data);
uint8_t readDisconnectEnable(uint8_t tps23861Id);
void writeDisconnectEnable(uint8_t tps23861Id, uint8_t data);
uint8_t readDetectClassEnable(uint8_t tps23861Id);
void writeDetectClassEnable(uint8_t tps23861Id, uint8_t data);
void writeDetectClassEnable(uint8_t tps23861Id, bool port1Detection, bool port2Detection, bool port3Detection, bool port4Detection, bool port1Classification, bool port2Classification, bool port3Classification, bool port4Classification);
uint8_t readPortPowerPriority(uint8_t tps23861Id);
void writePortPowerPriority(uint8_t tps23861Id, uint8_t data);
uint8_t readTimingConfiguration(uint8_t tps23861Id);
void writeTimingConfiguration(uint8_t tps23861Id, uint8_t data);
uint8_t readGeneralMask(uint8_t tps23861Id);
void writeGeneralMask(uint8_t tps23861Id, uint8_t data);
void writeDetectClassRestart(uint8_t tps23861Id, uint8_t data);
void writePowerEnable(uint8_t tps23861Id, uint8_t data);
void writePowerEnable(uint8_t tps23861Id, bool enablePort1, bool enablePort2, bool enablePort3, bool enablePort4);
void writeReset(uint8_t tps23861Id, uint8_t data);
uint8_t readLegacyDetectMode(uint8_t tps23861Id);
void writeLegacyDetectMode(uint8_t tps23861Id, uint8_t data);
uint8_t readTwoEventClassification(uint8_t tps23861Id);
void writeTwoEventClassification(uint8_t tps23861Id, uint8_t data);
uint8_t readInterruptTimer(uint8_t tps23861Id);
void writeInterruptTimer(uint8_t tps23861Id, uint8_t data);
uint8_t readDisconnectThreshold(uint8_t tps23861Id);
void writeDisconnectThreshold(uint8_t tps23861Id, uint8_t data);
uint8_t readICUT21Config(uint8_t tps23861Id);
void readICUT21Config(uint8_t tps23861Id, uint8_t &ICUTport1, uint8_t &ICUTport2);
void writeICUT21Config(uint8_t tps23861Id, uint8_t data);
void writeICUT21Config(uint8_t tps23861Id, uint8_t ICUTport1, uint8_t ICUTport2);
uint8_t readICUT43Config(uint8_t tps23861Id);
void readICUT43Config(uint8_t tps23861Id, uint8_t &ICUTport3, uint8_t &ICUTport4);
void writeICUT43Config(uint8_t tps23861Id, uint8_t data);
void writeICUT43Config(uint8_t tps23861Id, uint8_t ICUTport3, uint8_t ICUTport4);
int8_t readTemperature(uint8_t tps23861Id);
uint16_t readInputVoltage(uint8_t tps23861Id);
uint32_t readPort1Current(uint8_t tps23861Id, bool currentResistor250or255 = 0);
uint32_t readPort2Current(uint8_t tps23861Id, bool currentResistor250or255 = 0);
uint32_t readPort3Current(uint8_t tps23861Id, bool currentResistor250or255 = 0);
uint32_t readPort4Current(uint8_t tps23861Id, bool currentResistor250or255 = 0);
uint16_t readPort1Voltage(uint8_t tps23861Id);
uint16_t readPort2Voltage(uint8_t tps23861Id);
uint16_t readPort3Voltage(uint8_t tps23861Id);
uint16_t readPort4Voltage(uint8_t tps23861Id);
uint8_t readPoePlus(uint8_t tps23861Id);
void readPoePlus(uint8_t tps23861Id, bool &PoEP1, bool &PoEP2, bool &PoEP3, bool &PoEP4);
void writePoePlus(uint8_t tps23861Id, uint8_t data);
void writePoePlus(uint8_t tps23861Id, bool PoEP1, bool PoEP2, bool PoEP3, bool PoEP4);
uint8_t readFirmwareRevision(uint8_t tps23861Id);
uint8_t readI2cWatchdog(uint8_t tps23861Id);
void writeI2cWatchdog(uint8_t tps23861Id, uint8_t data);
uint8_t readDeviceIdRegister(uint8_t tps23861Id);
void writeDeviceIdRegister(uint8_t tps23861Id, uint8_t data);
uint8_t readCoolDownGateDrive(uint8_t tps23861Id);
void writeCoolDownGateDrive(uint8_t tps23861Id, uint8_t data);
void readPort1DetectResistance(uint8_t tps23861Id, uint16_t &portResistance, uint8_t &portRS);
void readPort2DetectResistance(uint8_t tps23861Id, uint16_t &portResistance, uint8_t &portRS);
void readPort3DetectResistance(uint8_t tps23861Id, uint16_t &portResistance, uint8_t &portRS);
void readPort4DetectResistance(uint8_t tps23861Id, uint16_t &portResistance, uint8_t &portRS);
void readPort1DetectVoltageDifference(uint8_t tps23861Id, float &portVoltageDifference, uint8_t &portVDS);
void readPort2DetectVoltageDifference(uint8_t tps23861Id, float &portVoltageDifference, uint8_t &portVDS);
void readPort3DetectVoltageDifference(uint8_t tps23861Id, float &portVoltageDifference, uint8_t &portVDS);
void readPort4DetectVoltageDifference(uint8_t tps23861Id, float &portVoltageDifference, uint8_t &portVDS);
private:
void transmissionDelay();
void writeI2c(uint8_t address, uint8_t data);
void writeI2c(uint8_t address, uint8_t data, uint8_t data2);
uint8_t readI2c(uint8_t address);
uint16_t writeAndRead2BytesI2c(uint8_t address, uint8_t addr1, uint8_t addr2);
uint16_t voltageCalculation(uint8_t tps23861Id, uint8_t lsbAddress, uint8_t msbAddress);
uint32_t currentCalculation(uint8_t tps23861Id, bool currentResistor250or255, uint8_t lsbAddress, uint8_t msbAddress);
void resistanceCalculation(uint8_t tps23861Id, uint8_t lsbAddress, uint8_t msbAddress, uint16_t &portResistance, uint8_t &portRS);
void voltageDifferenceCalculation(uint8_t tps23861Id, uint8_t lsbAddress, uint8_t msbAddress, float &portVoltageDifference, uint8_t &portVDS);
void splitByteIn8Bools(uint8_t data, bool &bit0, bool &bit1, bool &bit2, bool &bit3, bool &bit4, bool &bit5, bool &bit6, bool &bit7);
};
#endif