10
10
#include <zephyr/drivers/sensor.h>
11
11
#include <zephyr/drivers/sensor/npm1300_charger.h>
12
12
#include <zephyr/sys/printk.h>
13
+ #include <zephyr/sys/util.h>
13
14
14
15
#include "nrf_fuel_gauge.h"
15
16
17
+ /* nPM1300 CHARGER.BCHGCHARGESTATUS.CONSTANTCURRENT register bitmask */
18
+ #define NPM1300_CHG_STATUS_CC_MASK BIT_MASK(3)
19
+
16
20
static float max_charge_current ;
17
21
static float term_charge_current ;
18
22
static int64_t ref_time ;
@@ -21,7 +25,8 @@ static const struct battery_model battery_model = {
21
25
#include "battery_model.inc"
22
26
};
23
27
24
- static int read_sensors (const struct device * charger , float * voltage , float * current , float * temp )
28
+ static int read_sensors (const struct device * charger ,
29
+ float * voltage , float * current , float * temp , int32_t * chg_status )
25
30
{
26
31
struct sensor_value value ;
27
32
int ret ;
@@ -40,16 +45,25 @@ static int read_sensors(const struct device *charger, float *voltage, float *cur
40
45
sensor_channel_get (charger , SENSOR_CHAN_GAUGE_AVG_CURRENT , & value );
41
46
* current = (float )value .val1 + ((float )value .val2 / 1000000 );
42
47
48
+ sensor_channel_get (charger , SENSOR_CHAN_NPM1300_CHARGER_STATUS , & value );
49
+ * chg_status = value .val1 ;
50
+
43
51
return 0 ;
44
52
}
45
53
46
54
int fuel_gauge_init (const struct device * charger )
47
55
{
48
56
struct sensor_value value ;
49
- struct nrf_fuel_gauge_init_parameters parameters = { .model = & battery_model };
57
+ struct nrf_fuel_gauge_init_parameters parameters = {
58
+ .model = & battery_model ,
59
+ .opt_params = NULL ,
60
+ };
61
+ int32_t chg_status ;
50
62
int ret ;
51
63
52
- ret = read_sensors (charger , & parameters .v0 , & parameters .i0 , & parameters .t0 );
64
+ printk ("nRF Fuel Gauge version: %s\n" , nrf_fuel_gauge_version );
65
+
66
+ ret = read_sensors (charger , & parameters .v0 , & parameters .i0 , & parameters .t0 , & chg_status );
53
67
if (ret < 0 ) {
54
68
return ret ;
55
69
}
@@ -75,19 +89,23 @@ int fuel_gauge_update(const struct device *charger)
75
89
float tte ;
76
90
float ttf ;
77
91
float delta ;
92
+ int32_t chg_status ;
93
+ bool cc_charging ;
78
94
int ret ;
79
95
80
- ret = read_sensors (charger , & voltage , & current , & temp );
96
+ ret = read_sensors (charger , & voltage , & current , & temp , & chg_status );
81
97
if (ret < 0 ) {
82
98
printk ("Error: Could not read from charger device\n" );
83
99
return ret ;
84
100
}
85
101
102
+ cc_charging = (chg_status & NPM1300_CHG_STATUS_CC_MASK ) != 0 ;
103
+
86
104
delta = (float ) k_uptime_delta (& ref_time ) / 1000.f ;
87
105
88
106
soc = nrf_fuel_gauge_process (voltage , current , temp , delta , NULL );
89
107
tte = nrf_fuel_gauge_tte_get ();
90
- ttf = nrf_fuel_gauge_ttf_get (- max_charge_current , - term_charge_current );
108
+ ttf = nrf_fuel_gauge_ttf_get (cc_charging , - term_charge_current );
91
109
92
110
printk ("V: %.3f, I: %.3f, T: %.2f, " , voltage , current , temp );
93
111
printk ("SoC: %.2f, TTE: %.0f, TTF: %.0f\n" , soc , tte , ttf );
0 commit comments