@@ -56,6 +56,15 @@ static bool brake_pressed = false;
5656static osMutexId_t brake_state_mut ;
5757static osMutexAttr_t brake_mutex_attributes ;
5858
59+ typedef struct {
60+ float accel1_volts ;
61+ float accel2_volts ;
62+ float brake1_volts ;
63+ float brake2_volts ;
64+ float accel_norm ;
65+ float brake_norm ;
66+ } pedal_data_t ;
67+
5968bool get_brake_state ()
6069{
6170 bool temp ;
@@ -295,35 +304,55 @@ bool calc_brake_faults(float brake1, float brake2)
295304 */
296305void send_pedal_data (void * arg )
297306{
298- uint32_t * adc_data = (uint32_t * )arg ;
307+ pedal_data_t * pedal_vals = (pedal_data_t * )arg ;
308+
309+ can_msg_t pedals_volts_msg = { .id = CANID_PEDALS_VOLTS_MSG ,
310+ .len = 8 ,
311+ .data = { 0 } };
299312
300- can_msg_t pedals_msg = { .id = CANID_PEDALS_MSG ,
301- .len = 8 ,
302- .data = { 0 } };
313+ can_msg_t pedals_norm_msg = { .id = CAN_ID_PEDALS_NORM_MSG ,
314+ .len = 4 ,
315+ .data = { 0 } };
303316
304317 struct __attribute__((__packed__ )) {
305318 uint16_t accel_1 ;
306319 uint16_t accel_2 ;
307320 uint16_t brake_1 ;
308321 uint16_t brake_2 ;
309- } voltage_data ;
310-
311- voltage_data .accel_1 =
312- (uint16_t )(adc_to_volts (adc_data [ACCELPIN_1 ]) * 100 );
313- voltage_data .accel_2 =
314- (uint16_t )(adc_to_volts (adc_data [ACCELPIN_2 ]) * 100 );
315- voltage_data .brake_1 =
316- (uint16_t )(adc_to_volts (adc_data [BRAKEPIN_1 ]) * 100 );
317- voltage_data .brake_2 =
318- (uint16_t )(adc_to_volts (adc_data [BRAKEPIN_2 ]) * 100 );
319-
320- endian_swap (& voltage_data .accel_1 , sizeof (voltage_data .accel_1 ));
321- endian_swap (& voltage_data .accel_2 , sizeof (voltage_data .accel_2 ));
322- endian_swap (& voltage_data .brake_1 , sizeof (voltage_data .brake_1 ));
323- endian_swap (& voltage_data .brake_2 , sizeof (voltage_data .brake_2 ));
324-
325- memcpy (pedals_msg .data , & voltage_data , pedals_msg .len );
326- queue_can_msg (pedals_msg );
322+ } pedal_volts_data ;
323+
324+ struct __attribute((__packed__ )) {
325+ uint16_t accel_norm ;
326+ uint16_t brake_norm ;
327+ } pedal_norm_data ;
328+
329+ pedal_volts_data .accel_1 = (uint16_t )(pedal_vals -> accel1_volts * 100 );
330+ pedal_volts_data .accel_2 = (uint16_t )(pedal_vals -> accel2_volts * 100 );
331+ pedal_volts_data .brake_1 = (uint16_t )(pedal_vals -> brake1_volts * 100 );
332+ pedal_volts_data .brake_2 = (uint16_t )(pedal_vals -> brake2_volts * 100 );
333+
334+ endian_swap (& pedal_volts_data .accel_1 ,
335+ sizeof (pedal_volts_data .accel_1 ));
336+ endian_swap (& pedal_volts_data .accel_2 ,
337+ sizeof (pedal_volts_data .accel_2 ));
338+ endian_swap (& pedal_volts_data .brake_1 ,
339+ sizeof (pedal_volts_data .brake_1 ));
340+ endian_swap (& pedal_volts_data .brake_2 ,
341+ sizeof (pedal_volts_data .brake_2 ));
342+
343+ pedal_norm_data .accel_norm = (uint16_t )(pedal_vals -> accel_norm * 100 );
344+ pedal_norm_data .brake_norm = (uint16_t )(pedal_vals -> brake_norm * 100 );
345+
346+ endian_swap (& pedal_norm_data .accel_norm ,
347+ sizeof (pedal_norm_data .accel_norm ));
348+ endian_swap (& pedal_norm_data .brake_norm ,
349+ sizeof (pedal_norm_data .brake_norm ));
350+
351+ memcpy (pedals_volts_msg .data , & pedal_volts_data , pedals_volts_msg .len );
352+ queue_can_msg (pedals_volts_msg );
353+
354+ memcpy (pedals_norm_msg .data , & pedal_norm_data , pedals_norm_msg .len );
355+ queue_can_msg (pedals_norm_msg );
327356}
328357
329358/**
@@ -603,9 +632,11 @@ void vProcessPedals(void *pv_params)
603632
604633 free (args );
605634
635+ pedal_data_t pedal_data ;
636+
606637 uint32_t adc_data [4 ];
607- osTimerId_t send_pedal_data_timer =
608- osTimerNew ( & send_pedal_data , osTimerPeriodic , adc_data , NULL );
638+ osTimerId_t send_pedal_data_timer = osTimerNew (
639+ & send_pedal_data , osTimerPeriodic , & pedal_data , NULL );
609640
610641 /* Send CAN messages with raw pedal readings, we do not care if it fails*/
611642 osTimerStart (send_pedal_data_timer , 100 );
@@ -656,6 +687,13 @@ void vProcessPedals(void *pv_params)
656687 adc_to_volts (brake_avg ), 0 , MAX_VOLTS_UNSCALED );
657688 float accel_value = (accel1_norm + accel2_norm ) / 2 ;
658689
690+ pedal_data .accel1_volts = accel1_volts ;
691+ pedal_data .accel2_volts = accel2_volts ;
692+ pedal_data .brake1_volts = brake1_volts ;
693+ pedal_data .brake2_volts = brake2_volts ;
694+ pedal_data .accel_norm = accel_value ;
695+ pedal_data .brake_norm = brake_value ;
696+
659697 /* Turn brakelight on or off */
660698 osMutexAcquire (brake_state_mut , osWaitForever );
661699 if (brake_value > PEDAL_BRAKE_THRESH ) {
0 commit comments