Skip to content

Commit 65320c8

Browse files
committed
[P139] Fix ESP8266 build + show device state
1 parent 0a684b0 commit 65320c8

File tree

9 files changed

+181
-101
lines changed

9 files changed

+181
-101
lines changed

lib/AXP2101/src/AXP2101.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ uint16_t AXP2101::registerToVoltage(uint8_t data,
259259
}
260260

261261
// Values in mVolt, raw ADC data is expressed in 0.5 mV
262+
// LUT is based on 10k NTC with 50 uA current
262263
constexpr uint16_t axp2101_TS_LUT[] {
263264
3150, // -20
264265
2508, // -15

lib/AXP2101/src/AXP2101_settings.cpp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -108,18 +108,6 @@ const __FlashStringHelper* toString(AXP2101_chargingDetail_e charge) {
108108
return F("");
109109
}
110110

111-
const __FlashStringHelper* toString(AXP2101_CV_charger_voltage_e voltage) {
112-
switch (voltage) {
113-
case AXP2101_CV_charger_voltage_e::limit_4_00V: return F("4.0");
114-
case AXP2101_CV_charger_voltage_e::limit_4_10V: return F("4.1");
115-
case AXP2101_CV_charger_voltage_e::limit_4_20V: return F("4.2");
116-
case AXP2101_CV_charger_voltage_e::limit_4_35V: return F("4.35");
117-
case AXP2101_CV_charger_voltage_e::limit_4_40V: return F("4.4");
118-
case AXP2101_CV_charger_voltage_e::reserved: break;
119-
}
120-
return F("");
121-
}
122-
123111
AXP2101_registers_e AXP2101_intToRegister(int reg) {
124112
switch (reg) {
125113
case 0: return AXP2101_registers_e::dcdc1;

lib/AXP2101/src/AXP2101_settings.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,6 @@ const __FlashStringHelper* toString(AXP2101_chargeled_d led);
294294
const __FlashStringHelper* toString(AXP2101_chargingState_e state);
295295
const __FlashStringHelper* toString(AXP2101_chipid_e chip);
296296
const __FlashStringHelper* toString(AXP2101_chargingDetail_e charge);
297-
const __FlashStringHelper* toString(AXP2101_CV_charger_voltage_e voltage);
298297

299298
class AXP2101_settings { // Voltages in mV, range 0..3700, max. depending on the AXP2101 pin/port used.
300299
public:

src/src/DataTypes/FormSelectorOptions.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,18 @@
22

33
#include "../WebServer/Markup.h"
44

5+
FormSelectorOptions::FormSelectorOptions(int optionCount)
6+
: _optionCount(optionCount)
7+
{
8+
classname = F("wide");
9+
}
10+
511
FormSelectorOptions::FormSelectorOptions(
612
int optionCount,
713
const int indices[],
814
const String attr[]) : _optionCount(optionCount)
915
{
16+
classname = F("wide");
1017
_indices = new int[optionCount];
1118

1219
if (attr != nullptr) {
@@ -28,6 +35,7 @@ FormSelectorOptions::FormSelectorOptions(
2835
const int indices[],
2936
const String attr[]) : _optionCount(optionCount)
3037
{
38+
classname = F("wide");
3139
_names_str = new String[optionCount];
3240

3341
if (indices != nullptr) {
@@ -58,6 +66,7 @@ FormSelectorOptions::FormSelectorOptions(
5866
const int indices[],
5967
const String attr[]) : _optionCount(optionCount)
6068
{
69+
classname = F("wide");
6170
_names_f = new const __FlashStringHelper *[optionCount];
6271

6372
if (indices != nullptr) {

src/src/DataTypes/FormSelectorOptions.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
class FormSelectorOptions {
77
public:
88

9-
FormSelectorOptions(int optionCount) : _optionCount(optionCount) {}
9+
FormSelectorOptions(int optionCount);
1010

1111
FormSelectorOptions(int optionCount,
1212
const int indices[],
@@ -49,7 +49,7 @@ class FormSelectorOptions {
4949

5050
bool reloadonchange = false;
5151
bool enabled = true;
52-
const __FlashStringHelper * classname = F("wide");
52+
const __FlashStringHelper * classname;
5353
#if FEATURE_TOOLTIPS
5454
String tooltip;
5555
#endif // if FEATURE_TOOLTIPS

src/src/PluginStructs/P139_data_struct.cpp

Lines changed: 74 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
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
// **************************************************************************/
4949
void 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-
285315
void 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 {

src/src/PluginStructs/P139_data_struct.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
# define P139_CONST_MAX_LDO 3700 // Max. output voltage
3636

3737

38-
3938
struct P139_data_struct : public PluginTaskData_base {
4039
public:
4140

0 commit comments

Comments
 (0)