44
55# ifdef ESP32
66
7- #include " ../PluginStructs/P139_data_struct_formselectors.h"
7+ # include " ../PluginStructs/P139_data_struct_formselectors.h"
88
99// **************************************************************************/
1010// Constructors
@@ -47,8 +47,9 @@ String P139_data_struct::loadSettings(struct EventStruct *event) {
4747// applySettings: Write the current settings to AXP2101
4848// **************************************************************************/
4949void P139_data_struct::applySettings (struct EventStruct *event) {
50- if (!isInitialized ())
50+ if (!isInitialized ()) {
5151 return ;
52+ }
5253 uint8_t count = 0 ;
5354
5455 for (int s = 0 ; s < AXP2101_settings_count; ++s) {
@@ -103,7 +104,7 @@ void P139_data_struct::applySettings(struct EventStruct *event) {
103104 axp2101->setTS_disabled (_settings.getTS_disabled ());
104105
105106
106- // axp2101->set_IRQ_enable_0(0b11110000); // Disable temperature checks
107+ // axp2101->set_IRQ_enable_0(0b11110000); // Disable temperature checks
107108 axp2101->setConstChargeCurrentLimit (_settings.getConstChargeCurrentLimit ());
108109}
109110
@@ -153,9 +154,9 @@ void P139_data_struct::webform_load(struct EventStruct *event) {
153154 {
154155 // Reg 63: Iterm Charger Settings and Control
155156 // 0 .. 200 mA in 25 mA steps + enable checkbox
156- AXP2101_PreChargeCurrentLimit_FormSelector selector (_settings.getTerminationChargeCurrentLimit ());
157-
158- // TODO TD-er: Must add 'enabled' checkbox
157+ AXP2101_TerminationChargeCurrentLimit_FormSelector selector (_settings.getTerminationChargeCurrentLimit ());
158+ addFormCheckBox ( F ( " Enable CV Charging " ), F ( " iterm_en " ), _settings. getTerminationChargeCurrentLimitEnable ());
159+ addFormNote ( F ( " When enabled, the last part of the charge cycle is done using constant voltage (CV) " ));
159160 }
160161
161162 {
@@ -178,7 +179,7 @@ void P139_data_struct::webform_load(struct EventStruct *event) {
178179 }
179180
180181 addFormCheckBox (F (" Disable TS pin" ), F (" dis_TS" ), _settings.getTS_disabled ());
181- addFormNote (F (" Make sure to disable TS pin when no NTC is used, or else the battery will not charge" ));
182+ addFormNote (F (" Make sure to disable TS pin when no battery temperature sensor is used, or else the battery will not charge" ));
182183
183184 addFormCheckBox (F (" Generate events" ), F (" events" ), P139_GET_GENERATE_EVENTS);
184185
@@ -275,13 +276,42 @@ void P139_data_struct::webform_load(struct EventStruct *event) {
275276 static_cast <int >(pin));
276277 }
277278 }
279+
278280 html_end_table ();
279281
280282 addFormNote (F (" Check your device documentation for what is connected to each output." ));
283+
284+ if (isInitialized ()) {
285+ addFormSubHeader (F (" Current State" ));
286+
287+ const AXP2101_registers_e registers[] = {
288+ AXP2101_registers_e::vbat,
289+ AXP2101_registers_e::vbus,
290+ AXP2101_registers_e::vsys,
291+ AXP2101_registers_e::battemp,
292+ AXP2101_registers_e::chiptemp
293+ };
294+
295+ for (size_t i = 0 ; i < NR_ELEMENTS (registers); ++i) {
296+ addRowLabel (toString (registers[i], true ));
297+
298+ if ((registers[i] == AXP2101_registers_e::battemp) ||
299+ (registers[i] == AXP2101_registers_e::chiptemp))
300+ {
301+ addHtmlFloat (read_value (registers[i]));
302+ addUnit (F (" °C" ));
303+ } else {
304+ addHtmlInt (static_cast <int >(read_value (registers[i])));
305+ addUnit (F (" mV" ));
306+ }
307+ }
308+
309+ addRowLabel (F (" Charging State" ));
310+ addHtml (toString (axp2101->getChargingDetail ()));
311+ }
281312 }
282313}
283314
284-
285315void P139_data_struct::webform_save (struct EventStruct *event) {
286316 for (uint8_t i = 0 ; i < P139_NR_OUTPUT_VALUES; ++i) {
287317 sensorTypeHelper_saveOutputSelector (event, P139_CONFIG_BASE + i, i,
@@ -300,37 +330,36 @@ void P139_data_struct::webform_save(struct EventStruct *event) {
300330 }
301331 }
302332
303- _settings.setChargeLed (static_cast <AXP2101_chargeled_d>( getFormItemInt ( F ( " led " )) ));
333+ _settings.setChargeLed (AXP2101_ChargeLED_FormSelector::get ( ));
304334
305335 // Reg 61: Iprechg Charger Settings
306- _settings.setPreChargeCurrentLimit (getFormItemInt ( F ( " iprechg " ) ));
336+ _settings.setPreChargeCurrentLimit (AXP2101_PreChargeCurrentLimit_FormSelector::get ( ));
307337
308338 // Reg 62: ICC Charger Settings
309- _settings.setConstChargeCurrentLimit (getFormItemInt ( F ( " iccchg " ) ));
339+ _settings.setConstChargeCurrentLimit (AXP2101_ConstChargeCurrentLimit_FormSelector::get ( ));
310340
311341 // Reg 63: Iterm Charger Settings and Control
312342 _settings.setTerminationChargeCurrentLimit (
313- getFormItemInt ( F ( " iterm " ) ),
343+ AXP2101_TerminationChargeCurrentLimit_FormSelector::get ( ),
314344 isFormItemChecked (F (" iterm_en" )));
315345
316346 // Reg 64: CV Charger Voltage Settings
317- _settings.setCV_chargeVoltage (static_cast <AXP2101_CV_charger_voltage_e>( getFormItemInt ( F ( " cv_volt " )) ));
347+ _settings.setCV_chargeVoltage (AXP2101_CV_charger_voltage_FormSelector::get ( ));
318348
319349 // Reg 14: Minimum System Voltage Control
320- _settings.setLinear_Charger_Vsys_dpm (static_cast <AXP2101_Linear_Charger_Vsys_dpm_e>( getFormItemInt ( F ( " min_vsys " )) ));
350+ _settings.setLinear_Charger_Vsys_dpm (AXP2101_Linear_Charger_Vsys_dpm_FormSelector::get ( ));
321351
322352 // Reg 15: Input Voltage Limit
323- _settings.setVin_DPM (static_cast <AXP2101_VINDPM_e>( getFormItemInt ( F ( " vin_dpm " )) ));
353+ _settings.setVin_DPM (AXP2101_Vin_DPM_FormSelector::get ( ));
324354
325355 // Reg 16: Input Current Limit
326- _settings.setInputCurrentLimit (static_cast <AXP2101_InputCurrentLimit_e>( getFormItemInt ( F ( " cur_lim_in " )) ));
356+ _settings.setInputCurrentLimit (AXP2101_InputCurrentLimit_FormSelector::get ( ));
327357
328358 _settings.setTS_disabled (isFormItemChecked (F (" dis_TS" )));
329359
330360 saveSettings (event);
331361}
332362
333-
334363// **************************************************************************/
335364// plugin_read: Read the values and send to controller(s)
336365// **************************************************************************/
@@ -353,32 +382,32 @@ float P139_data_struct::read_value(AXP2101_registers_e value) {
353382 if (isInitialized ()) {
354383 switch (value)
355384 {
356- case AXP2101_registers_e::chargeled:
357- return static_cast <float >(axp2101->getChargeLed ());
358- case AXP2101_registers_e::batcharge:
359- return static_cast <float >(axp2101->getBatCharge ());
360- case AXP2101_registers_e::charging:
361- return static_cast <float >(axp2101->getChargingState ());
362- case AXP2101_registers_e::batpresent:
363- return static_cast <float >(axp2101->isBatteryDetected ());
364- case AXP2101_registers_e::chipid:
365- return static_cast <float >(axp2101->getChipIDRaw ());
366- case AXP2101_registers_e::chargedet:
367- return static_cast <float >(axp2101->getChargingDetail ());
368-
369- case AXP2101_registers_e::vbat:
370- case AXP2101_registers_e::vbus:
371- case AXP2101_registers_e::vsys:
372- return static_cast <float >(axp2101->getADCVoltage (value));
373-
374- case AXP2101_registers_e::battemp:
375- return axp2101->TS_registerToTemp (axp2101->getADCVoltage (value));
376-
377- case AXP2101_registers_e::chiptemp:
378- return ( 22 .0f + (7274 - axp2101->getADCVoltage (value)) / 20 .0f ) ;
379-
380- default :
381- return static_cast <float >(axp2101->getPortVoltage (value));
385+ case AXP2101_registers_e::chargeled:
386+ return static_cast <float >(axp2101->getChargeLed ());
387+ case AXP2101_registers_e::batcharge:
388+ return static_cast <float >(axp2101->getBatCharge ());
389+ case AXP2101_registers_e::charging:
390+ return static_cast <float >(axp2101->getChargingState ());
391+ case AXP2101_registers_e::batpresent:
392+ return static_cast <float >(axp2101->isBatteryDetected ());
393+ case AXP2101_registers_e::chipid:
394+ return static_cast <float >(axp2101->getChipIDRaw ());
395+ case AXP2101_registers_e::chargedet:
396+ return static_cast <float >(axp2101->getChargingDetail ());
397+
398+ case AXP2101_registers_e::vbat:
399+ case AXP2101_registers_e::vbus:
400+ case AXP2101_registers_e::vsys:
401+ return static_cast <float >(axp2101->getADCVoltage (value));
402+
403+ case AXP2101_registers_e::battemp:
404+ return axp2101->TS_registerToTemp (axp2101->getADCVoltage (value));
405+
406+ case AXP2101_registers_e::chiptemp:
407+ return 22 .0f + (7274 - axp2101->getADCVoltage (value)) / 20 .0f ;
408+
409+ default :
410+ return static_cast <float >(axp2101->getPortVoltage (value));
382411 }
383412 }
384413 return 0 .0f ;
@@ -634,8 +663,8 @@ bool P139_data_struct::plugin_get_config_value(struct EventStruct *event,
634663 const AXP2101_registers_e reg = AXP2101_intToRegister (r);
635664
636665 if (equals (command, toString (reg, false ))) { // Voltage (mV) / numeric state
637- if (reg == AXP2101_registers_e::battemp ||
638- reg == AXP2101_registers_e::chiptemp)
666+ if (( reg == AXP2101_registers_e::battemp) ||
667+ ( reg == AXP2101_registers_e::chiptemp))
639668 {
640669 string = floatToString (read_value (reg), 2 );
641670 } else {
0 commit comments