@@ -51,50 +51,53 @@ int iRes=0;
5151void setup () {
5252
5353 Serial.begin (57600 );
54-
55- PowerDevice.begin ();
54+
55+ for (int i = 0 ; i < BATTERY_COUNT; i++) {
56+ PowerDevice[i].begin ();
5657
57- // Serial No is set in a special way as it forms Arduino port name
58- PowerDevice.setSerial (STRING_SERIAL);
58+ // Serial No is set in a special way as it forms Arduino port name
59+ PowerDevice[i] .setSerial (STRING_SERIAL);
5960
60- // Used for debugging purposes.
61- PowerDevice.setOutput (Serial);
61+ // Used for debugging purposes.
62+ PowerDevice[i].setOutput (Serial);
63+ }
6264
6365 pinMode (CHGDCHPIN, INPUT_PULLUP); // ground this pin to simulate power failure.
6466 pinMode (RUNSTATUSPIN, OUTPUT); // output flushing 1 sec indicating that the arduino cycle is running.
6567 pinMode (COMMLOSTPIN, OUTPUT); // output is on once communication is lost with the host, otherwise off.
6668
69+ for (int i = 0 ; i < BATTERY_COUNT; i++) {
70+ PowerDevice[i].SetFeature (HID_PD_PRESENTSTATUS, &iPresentStatus, sizeof (iPresentStatus));
6771
68- PowerDevice.SetFeature (HID_PD_PRESENTSTATUS, &iPresentStatus, sizeof (iPresentStatus));
69-
70- PowerDevice.SetFeature (HID_PD_RUNTIMETOEMPTY, &iRunTimeToEmpty, sizeof (iRunTimeToEmpty));
71- PowerDevice.SetFeature (HID_PD_AVERAGETIME2FULL, &iAvgTimeToFull, sizeof (iAvgTimeToFull));
72- PowerDevice.SetFeature (HID_PD_AVERAGETIME2EMPTY, &iAvgTimeToEmpty, sizeof (iAvgTimeToEmpty));
73- PowerDevice.SetFeature (HID_PD_REMAINTIMELIMIT, &iRemainTimeLimit, sizeof (iRemainTimeLimit));
74- PowerDevice.SetFeature (HID_PD_DELAYBE4REBOOT, &iDelayBe4Reboot, sizeof (iDelayBe4Reboot));
75- PowerDevice.SetFeature (HID_PD_DELAYBE4SHUTDOWN, &iDelayBe4ShutDown, sizeof (iDelayBe4ShutDown));
76-
77- PowerDevice.SetFeature (HID_PD_RECHARGEABLE, &bRechargable, sizeof (bRechargable));
78- PowerDevice.SetFeature (HID_PD_CAPACITYMODE, &bCapacityMode, sizeof (bCapacityMode));
79- PowerDevice.SetFeature (HID_PD_CONFIGVOLTAGE, &iConfigVoltage, sizeof (iConfigVoltage));
80- PowerDevice.SetFeature (HID_PD_VOLTAGE, &iVoltage, sizeof (iVoltage));
72+ PowerDevice[i].SetFeature (HID_PD_RUNTIMETOEMPTY, &iRunTimeToEmpty, sizeof (iRunTimeToEmpty));
73+ PowerDevice[i].SetFeature (HID_PD_AVERAGETIME2FULL, &iAvgTimeToFull, sizeof (iAvgTimeToFull));
74+ PowerDevice[i].SetFeature (HID_PD_AVERAGETIME2EMPTY, &iAvgTimeToEmpty, sizeof (iAvgTimeToEmpty));
75+ PowerDevice[i].SetFeature (HID_PD_REMAINTIMELIMIT, &iRemainTimeLimit, sizeof (iRemainTimeLimit));
76+ PowerDevice[i].SetFeature (HID_PD_DELAYBE4REBOOT, &iDelayBe4Reboot, sizeof (iDelayBe4Reboot));
77+ PowerDevice[i].SetFeature (HID_PD_DELAYBE4SHUTDOWN, &iDelayBe4ShutDown, sizeof (iDelayBe4ShutDown));
78+
79+ PowerDevice[i].SetFeature (HID_PD_RECHARGEABLE, &bRechargable, sizeof (bRechargable));
80+ PowerDevice[i].SetFeature (HID_PD_CAPACITYMODE, &bCapacityMode, sizeof (bCapacityMode));
81+ PowerDevice[i].SetFeature (HID_PD_CONFIGVOLTAGE, &iConfigVoltage, sizeof (iConfigVoltage));
82+ PowerDevice[i].SetFeature (HID_PD_VOLTAGE, &iVoltage, sizeof (iVoltage));
8183
82- PowerDevice.setStringFeature (HID_PD_IDEVICECHEMISTRY, &bDeviceChemistry, STRING_DEVICECHEMISTRY);
83- PowerDevice.setStringFeature (HID_PD_IOEMINFORMATION, &bOEMVendor, STRING_OEMVENDOR);
84+ PowerDevice[i] .setStringFeature (HID_PD_IDEVICECHEMISTRY, &bDeviceChemistry, STRING_DEVICECHEMISTRY);
85+ PowerDevice[i] .setStringFeature (HID_PD_IOEMINFORMATION, &bOEMVendor, STRING_OEMVENDOR);
8486
85- PowerDevice.SetFeature (HID_PD_AUDIBLEALARMCTRL, &iAudibleAlarmCtrl, sizeof (iAudibleAlarmCtrl));
87+ PowerDevice[i] .SetFeature (HID_PD_AUDIBLEALARMCTRL, &iAudibleAlarmCtrl, sizeof (iAudibleAlarmCtrl));
8688
87- PowerDevice.SetFeature (HID_PD_DESIGNCAPACITY, &iDesignCapacity, sizeof (iDesignCapacity));
88- PowerDevice.SetFeature (HID_PD_FULLCHRGECAPACITY, &iFullChargeCapacity, sizeof (iFullChargeCapacity));
89- PowerDevice.SetFeature (HID_PD_REMAININGCAPACITY, &iRemaining, sizeof (iRemaining));
90- PowerDevice.SetFeature (HID_PD_WARNCAPACITYLIMIT, &iWarnCapacityLimit, sizeof (iWarnCapacityLimit));
91- PowerDevice.SetFeature (HID_PD_REMNCAPACITYLIMIT, &iRemnCapacityLimit, sizeof (iRemnCapacityLimit));
92- PowerDevice.SetFeature (HID_PD_CPCTYGRANULARITY1, &bCapacityGranularity1, sizeof (bCapacityGranularity1));
93- PowerDevice.SetFeature (HID_PD_CPCTYGRANULARITY2, &bCapacityGranularity2, sizeof (bCapacityGranularity2));
89+ PowerDevice[i] .SetFeature (HID_PD_DESIGNCAPACITY, &iDesignCapacity, sizeof (iDesignCapacity));
90+ PowerDevice[i] .SetFeature (HID_PD_FULLCHRGECAPACITY, &iFullChargeCapacity, sizeof (iFullChargeCapacity));
91+ PowerDevice[i] .SetFeature (HID_PD_REMAININGCAPACITY, &iRemaining, sizeof (iRemaining));
92+ PowerDevice[i] .SetFeature (HID_PD_WARNCAPACITYLIMIT, &iWarnCapacityLimit, sizeof (iWarnCapacityLimit));
93+ PowerDevice[i] .SetFeature (HID_PD_REMNCAPACITYLIMIT, &iRemnCapacityLimit, sizeof (iRemnCapacityLimit));
94+ PowerDevice[i] .SetFeature (HID_PD_CPCTYGRANULARITY1, &bCapacityGranularity1, sizeof (bCapacityGranularity1));
95+ PowerDevice[i] .SetFeature (HID_PD_CPCTYGRANULARITY2, &bCapacityGranularity2, sizeof (bCapacityGranularity2));
9496
9597 uint16_t year = 2024 , month = 10 , day = 12 ;
9698 iManufacturerDate = (year - 1980 )*512 + month*32 + day; // from 4.2.6 Battery Settings in "Universal Serial Bus Usage Tables for HID Power Devices"
97- PowerDevice.SetFeature (HID_PD_MANUFACTUREDATE, &iManufacturerDate, sizeof (iManufacturerDate));
99+ PowerDevice[i].SetFeature (HID_PD_MANUFACTUREDATE, &iManufacturerDate, sizeof (iManufacturerDate));
100+ }
98101}
99102
100103void loop () {
@@ -166,9 +169,11 @@ void loop() {
166169
167170 if ((iPresentStatus != iPreviousStatus) || (iRemaining != iPrevRemaining) || (iRunTimeToEmpty != iPrevRunTimeToEmpty) || (iIntTimer>MINUPDATEINTERVAL) ) {
168171
169- PowerDevice.SendReport (HID_PD_REMAININGCAPACITY, &iRemaining, sizeof (iRemaining));
170- if (bDischarging) PowerDevice.SendReport (HID_PD_RUNTIMETOEMPTY, &iRunTimeToEmpty, sizeof (iRunTimeToEmpty));
171- iRes = PowerDevice.SendReport (HID_PD_PRESENTSTATUS, &iPresentStatus, sizeof (iPresentStatus));
172+ for (int i = 0 ; i < BATTERY_COUNT; i++) {
173+ PowerDevice[i].SendReport (HID_PD_REMAININGCAPACITY, &iRemaining, sizeof (iRemaining));
174+ if (bDischarging) PowerDevice[i].SendReport (HID_PD_RUNTIMETOEMPTY, &iRunTimeToEmpty, sizeof (iRunTimeToEmpty));
175+ iRes = PowerDevice[i].SendReport (HID_PD_PRESENTSTATUS, &iPresentStatus, sizeof (iPresentStatus));
176+ }
172177
173178 if (iRes <0 ) {
174179 digitalWrite (COMMLOSTPIN, HIGH);
0 commit comments