@@ -40,11 +40,15 @@ void saadc_callback(nrf_drv_saadc_evt_t const *p_event) { NRF_LOG_INFO("ADC even
40
40
41
41
chrg_data_t chrg = {0 };
42
42
43
- void chrg_read (void * p_context ) {
44
- uint32_t new_stats = nrf_gpio_pin_read (CHRG_PIN );
45
- if (new_stats == chrg .stats ) return ;
46
- chrg .stats = new_stats ;
47
- if (chrg .callback != NULL ) chrg .callback ();
43
+ static void bat_measure (chrg_data_t * p_chrg );
44
+
45
+ void chrg_read (void * p_context ) {
46
+ uint8_t old_stats = chrg .stats ;
47
+ uint8_t old_level = chrg .level ;
48
+ bat_measure (& chrg );
49
+ if ((old_level != chrg .level || old_stats != chrg .stats ) && chrg .callback != NULL ) {
50
+ chrg .callback ();
51
+ }
48
52
}
49
53
50
54
void chrg_set_callback (void * cb ) { chrg .callback = cb ; }
@@ -61,13 +65,16 @@ void chrg_init(void) {
61
65
62
66
if (settings_get_data ()-> bat_mode ) {
63
67
nrf_gpio_cfg_input (CHRG_PIN , NRF_GPIO_PIN_PULLUP );
68
+ }
64
69
65
- err_code = app_timer_create ( & m_chrg_timer , APP_TIMER_MODE_REPEATED , chrg_read );
66
- APP_ERROR_CHECK ( err_code );
70
+ // measure once
71
+ bat_measure ( & chrg );
67
72
68
- err_code = app_timer_start (m_chrg_timer , APP_TIMER_TICKS (200 ), NULL );
69
- APP_ERROR_CHECK (err_code );
70
- }
73
+ err_code = app_timer_create (& m_chrg_timer , APP_TIMER_MODE_REPEATED , chrg_read );
74
+ APP_ERROR_CHECK (err_code );
75
+
76
+ err_code = app_timer_start (m_chrg_timer , APP_TIMER_TICKS (1000 ), NULL );
77
+ APP_ERROR_CHECK (err_code );
71
78
}
72
79
73
80
void saadc_init (void ) {
@@ -88,7 +95,9 @@ void saadc_uninit(void) {
88
95
nrf_drv_saadc_uninit ();
89
96
}
90
97
91
- uint8_t bat_get_level (void ) {
98
+ uint8_t bat_get_level (void ) { return chrg .level ; }
99
+
100
+ void bat_measure (chrg_data_t * p_chrg ) {
92
101
93
102
nrf_saadc_value_t adc_value ;
94
103
ret_code_t err_code ;
@@ -121,5 +130,7 @@ uint8_t bat_get_level(void) {
121
130
// sprintf(txt, "BAT: %d, %.02fV, %d", adc_value, voltage, level);
122
131
// NRF_LOG_INFO("%s", nrf_log_push(txt));
123
132
124
- return level ;
133
+ p_chrg -> level = level ;
134
+ p_chrg -> voltage = voltage ;
135
+ p_chrg -> stats = nrf_gpio_pin_read (CHRG_PIN );
125
136
}
0 commit comments