Skip to content

Commit ff36548

Browse files
Peter Rowleynashif
authored andcommitted
drivers: fuel_gauge: Add support for RSOC and ASOC
Current driver only allows state-of-charge. Adding relative-state- of-charge and absolute-state-of-charge to differentiate between the different types. Updated sbs and max drivers to support new enum. Discussed in issue #57523 Signed-off-by: Peter Rowley <[email protected]>
1 parent 442a452 commit ff36548

File tree

7 files changed

+24
-12
lines changed

7 files changed

+24
-12
lines changed

drivers/fuel_gauge/max17048/max17048.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,8 @@ static int max17048_get_prop(const struct device *dev, struct fuel_gauge_get_pro
187187
case FUEL_GAUGE_RUNTIME_TO_FULL:
188188
prop->value.runtime_to_full = data->time_to_full;
189189
break;
190-
case FUEL_GAUGE_STATE_OF_CHARGE:
191-
prop->value.state_of_charge = data->charge;
190+
case FUEL_GAUGE_RELATIVE_STATE_OF_CHARGE:
191+
prop->value.relative_state_of_charge = data->charge;
192192
break;
193193
case FUEL_GAUGE_VOLTAGE:
194194
prop->value.voltage = data->voltage;

drivers/fuel_gauge/sbs_gauge/emul_sbs_gauge.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ static int emul_sbs_gauge_reg_read(const struct emul *target, int reg, int *val)
9191
case SBS_GAUGE_CMD_AVG_CURRENT:
9292
case SBS_GAUGE_CMD_TEMP:
9393
case SBS_GAUGE_CMD_ASOC:
94+
case SBS_GAUGE_CMD_RSOC:
9495
case SBS_GAUGE_CMD_FULL_CAPACITY:
9596
case SBS_GAUGE_CMD_REM_CAPACITY:
9697
case SBS_GAUGE_CMD_NOM_CAPACITY:

drivers/fuel_gauge/sbs_gauge/sbs_gauge.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,13 @@ static int sbs_gauge_get_prop(const struct device *dev, struct fuel_gauge_get_pr
8383
rc = sbs_cmd_reg_read(dev, SBS_GAUGE_CMD_MANUFACTURER_ACCESS, &val);
8484
prop->value.sbs_mfr_access_word = val;
8585
break;
86-
case FUEL_GAUGE_STATE_OF_CHARGE:
86+
case FUEL_GAUGE_ABSOLUTE_STATE_OF_CHARGE:
8787
rc = sbs_cmd_reg_read(dev, SBS_GAUGE_CMD_ASOC, &val);
88-
prop->value.state_of_charge = val;
88+
prop->value.absolute_state_of_charge = val;
89+
break;
90+
case FUEL_GAUGE_RELATIVE_STATE_OF_CHARGE:
91+
rc = sbs_cmd_reg_read(dev, SBS_GAUGE_CMD_RSOC, &val);
92+
prop->value.relative_state_of_charge = val;
8993
break;
9094
case FUEL_GAUGE_TEMPERATURE:
9195
rc = sbs_cmd_reg_read(dev, SBS_GAUGE_CMD_TEMP, &val);

include/zephyr/drivers/fuel_gauge.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,11 @@ extern "C" {
5959
/** Retrieve word from SBS1.1 ManufactuerAccess */
6060
#define FUEL_GAUGE_SBS_MFR_ACCESS FUEL_GAUGE_RUNTIME_TO_FULL + 1
6161
/** Absolute state of charge (percent, 0-100) - expressed as % of design capacity */
62-
#define FUEL_GAUGE_STATE_OF_CHARGE FUEL_GAUGE_SBS_MFR_ACCESS + 1
62+
#define FUEL_GAUGE_ABSOLUTE_STATE_OF_CHARGE FUEL_GAUGE_SBS_MFR_ACCESS + 1
63+
/** Relative state of charge (percent, 0-100) - expressed as % of full charge capacity */
64+
#define FUEL_GAUGE_RELATIVE_STATE_OF_CHARGE FUEL_GAUGE_ABSOLUTE_STATE_OF_CHARGE + 1
6365
/** Temperature in 0.1 K */
64-
#define FUEL_GAUGE_TEMPERATURE FUEL_GAUGE_STATE_OF_CHARGE + 1
66+
#define FUEL_GAUGE_TEMPERATURE FUEL_GAUGE_RELATIVE_STATE_OF_CHARGE + 1
6567
/** Battery voltage (uV) */
6668
#define FUEL_GAUGE_VOLTAGE FUEL_GAUGE_TEMPERATURE + 1
6769
/** Battery Mode (flags) */
@@ -134,8 +136,10 @@ struct fuel_gauge_get_property {
134136
uint32_t runtime_to_full;
135137
/** FUEL_GAUGE_SBS_MFR_ACCESS */
136138
uint16_t sbs_mfr_access_word;
137-
/** FUEL_GAUGE_STATE_OF_CHARGE */
138-
uint8_t state_of_charge;
139+
/** FUEL_GAUGE_ABSOLUTE_STATE_OF_CHARGE */
140+
uint8_t absolute_state_of_charge;
141+
/** FUEL_GAUGE_RELATIVE_STATE_OF_CHARGE */
142+
uint8_t relative_state_of_charge;
139143
/** FUEL_GAUGE_TEMPERATURE */
140144
uint16_t temperature;
141145
/** FUEL_GAUGE_VOLTAGE */

samples/fuel_gauge/max17048/src/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ int main(void)
4646
.property_type = FUEL_GAUGE_RUNTIME_TO_FULL,
4747
},
4848
{
49-
.property_type = FUEL_GAUGE_STATE_OF_CHARGE,
49+
.property_type = FUEL_GAUGE_RELATIVE_STATE_OF_CHARGE,
5050
},
5151
{
5252
.property_type = FUEL_GAUGE_VOLTAGE,
@@ -80,7 +80,7 @@ int main(void)
8080
}
8181

8282
if (props[2].status == 0) {
83-
printk("Charge %d%%\n", props[2].value.state_of_charge);
83+
printk("Charge %d%%\n", props[2].value.relative_state_of_charge);
8484
} else {
8585
printk(
8686
"Property FUEL_GAUGE_STATE_OF_CHARGE failed with error %d\n",

tests/drivers/fuel_gauge/max17048/src/test_max17048.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ ZTEST_USER_F(max17048, test_get_props__returns_ok)
9393
.property_type = FUEL_GAUGE_RUNTIME_TO_FULL,
9494
},
9595
{
96-
.property_type = FUEL_GAUGE_STATE_OF_CHARGE,
96+
.property_type = FUEL_GAUGE_RELATIVE_STATE_OF_CHARGE,
9797
},
9898
{
9999
.property_type = FUEL_GAUGE_VOLTAGE,

tests/drivers/fuel_gauge/sbs_gauge/src/test_sbs_gauge.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,10 @@ ZTEST_USER_F(sbs_gauge_new_api, test_get_props__returns_ok)
214214
.property_type = FUEL_GAUGE_TEMPERATURE,
215215
},
216216
{
217-
.property_type = FUEL_GAUGE_STATE_OF_CHARGE,
217+
.property_type = FUEL_GAUGE_ABSOLUTE_STATE_OF_CHARGE,
218+
},
219+
{
220+
.property_type = FUEL_GAUGE_RELATIVE_STATE_OF_CHARGE,
218221
},
219222
{
220223
.property_type = FUEL_GAUGE_RUNTIME_TO_FULL,

0 commit comments

Comments
 (0)