3232CallbackValue_int32_t callback_value_current ;
3333CallbackValue_int32_t callback_value_voltage ;
3434CallbackValue_int32_t callback_value_power ;
35+ CallbackValueTimeState callback_value_time_current ;
36+ CallbackValueTimeState callback_value_time_voltage ;
37+ CallbackValueTimeState callback_value_time_power ;
3538
3639BootloaderHandleMessageResponse handle_message (const void * message , void * response ) {
3740 switch (tfp_get_fid_from_message (message )) {
@@ -48,6 +51,16 @@ BootloaderHandleMessageResponse handle_message(const void *message, void *respon
4851 case FID_GET_CONFIGURATION : return get_configuration (message , response );
4952 case FID_SET_CALIBRATION : return set_calibration (message );
5053 case FID_GET_CALIBRATION : return get_calibration (message , response );
54+ case FID_GET_CURRENT_TIME : return get_value_time (message , response , & ina226 .current , & ina226 .current_time );
55+ case FID_SET_CURRENT_TIME_CALLBACK_CONFIGURATION : return set_value_time_callback_configuration (message , & callback_value_time_current );
56+ case FID_GET_CURRENT_TIME_CALLBACK_CONFIGURATION : return get_value_time_callback_configuration (message , response , & callback_value_time_current );
57+ case FID_GET_VOLTAGE_TIME : return get_value_time (message , response , & ina226 .voltage , & ina226 .voltage_time );
58+ case FID_SET_VOLTAGE_TIME_CALLBACK_CONFIGURATION : return set_value_time_callback_configuration (message , & callback_value_time_voltage );
59+ case FID_GET_VOLTAGE_TIME_CALLBACK_CONFIGURATION : return get_value_time_callback_configuration (message , response , & callback_value_time_voltage );
60+ case FID_GET_POWER_TIME : return get_value_time (message , response , & ina226 .power , & ina226 .current_time );
61+ case FID_SET_POWER_TIME_CALLBACK_CONFIGURATION : return set_value_time_callback_configuration (message , & callback_value_time_power );
62+ case FID_GET_POWER_TIME_CALLBACK_CONFIGURATION : return get_value_time_callback_configuration (message , response , & callback_value_time_power );
63+ case FID_GET_TIME : return get_time (message , response );
5164 default : return HANDLE_MESSAGE_RESPONSE_NOT_SUPPORTED ;
5265 }
5366}
@@ -103,6 +116,34 @@ BootloaderHandleMessageResponse get_calibration(const GetCalibration *data, GetC
103116 return HANDLE_MESSAGE_RESPONSE_NEW_MESSAGE ;
104117}
105118
119+ BootloaderHandleMessageResponse get_value_time (const GetValueTime * data , GetValueTime_Response * response , const int32_t * value , const uint32_t * time ) {
120+ response -> header .length = sizeof (GetValueTime_Response );
121+ response -> value = * value ;
122+ response -> time = * time ;
123+
124+ return HANDLE_MESSAGE_RESPONSE_NEW_MESSAGE ;
125+ }
126+
127+ BootloaderHandleMessageResponse set_value_time_callback_configuration (const SetValueTimeCallbackConfiguration * data , CallbackValueTimeState * state ) {
128+ state -> enabled = data -> enable ;
129+
130+ return HANDLE_MESSAGE_RESPONSE_EMPTY ;
131+ }
132+
133+ BootloaderHandleMessageResponse get_value_time_callback_configuration (const GetValueTimeCallbackConfiguration * data , GetValueTimeCallbackConfiguration_Response * response , CallbackValueTimeState * state ) {
134+ response -> header .length = sizeof (GetValueTimeCallbackConfiguration_Response );
135+ response -> enable = state -> enabled ;
136+
137+ return HANDLE_MESSAGE_RESPONSE_NEW_MESSAGE ;
138+ }
139+
140+ BootloaderHandleMessageResponse get_time (const GetTime * data , GetTime_Response * response ) {
141+ response -> header .length = sizeof (GetTime_Response );
142+ response -> time = system_timer_get_ms ();
143+
144+ return HANDLE_MESSAGE_RESPONSE_NEW_MESSAGE ;
145+ }
146+
106147bool handle_current_callback (void ) {
107148 return handle_callback_value_callback_int32_t (& callback_value_current , FID_CALLBACK_CURRENT );
108149}
@@ -115,6 +156,42 @@ bool handle_power_callback(void) {
115156 return handle_callback_value_callback_int32_t (& callback_value_power , FID_CALLBACK_POWER );
116157}
117158
159+ bool handle_value_time_callback (CallbackValueTimeState * state , const uint8_t fid , const int32_t * value , const uint32_t * time ) {
160+ if (!state -> is_buffered ) {
161+ if (!state -> enabled || state -> last_time == * time ) {
162+ return false;
163+ }
164+
165+ tfp_make_default_header (& state -> cb .header , bootloader_get_uid (), sizeof (ValueTime_Callback ), fid );
166+ state -> cb .value = * value ;
167+ state -> cb .time = * time ;
168+
169+ state -> last_time = * time ;
170+ }
171+
172+ if (bootloader_spitfp_is_send_possible (& bootloader_status .st )) {
173+ bootloader_spitfp_send_ack_and_message (& bootloader_status , (uint8_t * )& state -> cb , sizeof (ValueTime_Callback ));
174+ state -> is_buffered = false;
175+ return true;
176+ } else {
177+ state -> is_buffered = true;
178+ }
179+
180+ return false;
181+ }
182+
183+ bool handle_current_time_callback (void ) {
184+ return handle_value_time_callback (& callback_value_time_current , FID_CALLBACK_CURRENT_TIME , & ina226 .current , & ina226 .current_time );
185+ }
186+
187+ bool handle_voltage_time_callback (void ) {
188+ return handle_value_time_callback (& callback_value_time_voltage , FID_CALLBACK_VOLTAGE_TIME , & ina226 .voltage , & ina226 .voltage_time );
189+ }
190+
191+ bool handle_power_time_callback (void ) {
192+ return handle_value_time_callback (& callback_value_time_power , FID_CALLBACK_POWER_TIME , & ina226 .power , & ina226 .current_time );
193+ }
194+
118195void communication_tick (void ) {
119196 communication_callback_tick ();
120197}
@@ -124,5 +201,15 @@ void communication_init(void) {
124201 callback_value_init_int32_t (& callback_value_voltage , ina226_get_voltage );
125202 callback_value_init_int32_t (& callback_value_power , ina226_get_power );
126203
204+ callback_value_time_current .is_buffered = false;
205+ callback_value_time_current .enabled = false;
206+ callback_value_time_current .last_time = 0 ;
207+ callback_value_time_voltage .is_buffered = false;
208+ callback_value_time_voltage .enabled = false;
209+ callback_value_time_voltage .last_time = 0 ;
210+ callback_value_time_power .is_buffered = false;
211+ callback_value_time_power .enabled = false;
212+ callback_value_time_power .last_time = 0 ;
213+
127214 communication_callback_init ();
128215}
0 commit comments