// sample struct that keeps 3 samples in memory
struct sample_t {
int values [ 6 ] ;
int min ;
int max ;
} sample_t_default = { { 0 } , 0 , 0 } ;
// safety code requires floats
struct lookup_t {
float x [ 3 ] ;
float y [ 3 ] ;
} ;
void safety_rx_hook ( CAN_FIFOMailBox_TypeDef * to_push ) ;
int safety_tx_hook ( CAN_FIFOMailBox_TypeDef * to_send ) ;
int safety_tx_lin_hook ( int lin_num , uint8_t * data , int len ) ;
int safety_ignition_hook ( void ) ;
uint32_t get_ts_elapsed ( uint32_t ts , uint32_t ts_last ) ;
int to_signed ( int d , int bits ) ;
void update_sample ( struct sample_t * sample , int sample_new ) ;
bool max_limit_check ( int val , const int MAX , const int MIN ) ;
bool dist_to_meas_check ( int val , int val_last , struct sample_t * val_meas ,
const int MAX_RATE_UP , const int MAX_RATE_DOWN , const int MAX_ERROR ) ;
bool driver_limit_check ( int val , int val_last , struct sample_t * val_driver ,
const int MAX , const int MAX_RATE_UP , const int MAX_RATE_DOWN ,
const int MAX_ALLOWANCE , const int DRIVER_FACTOR ) ;
bool rt_rate_limit_check ( int val , int val_last , const int MAX_RT_DELTA ) ;
float interpolate ( struct lookup_t xy , float x ) ;
typedef void ( * safety_hook_init ) ( int16_t param ) ;
typedef void ( * rx_hook ) ( CAN_FIFOMailBox_TypeDef * to_push ) ;
typedef int ( * tx_hook ) ( CAN_FIFOMailBox_TypeDef * to_send ) ;
typedef int ( * tx_lin_hook ) ( int lin_num , uint8_t * data , int len ) ;
typedef int ( * ign_hook ) ( void ) ;
typedef int ( * fwd_hook ) ( int bus_num , CAN_FIFOMailBox_TypeDef * to_fwd ) ;
typedef struct {
safety_hook_init init ;
ign_hook ignition ;
rx_hook rx ;
tx_hook tx ;
tx_lin_hook tx_lin ;
fwd_hook fwd ;
} safety_hooks ;
// This can be set by the safety hooks.
bool controls_allowed = 0 ;
bool gas_interceptor_detected = 0 ;
int gas_interceptor_prev = 0 ;
// This is set by USB command 0xdf
bool long_controls_allowed = 1 ;
// avg between 2 tracks
# define GET_INTERCEPTOR(msg) (((GET_BYTE((msg), 0) << 8) + GET_BYTE((msg), 1) + ((GET_BYTE((msg), 2) << 8) + GET_BYTE((msg), 3)) / 2 ) / 2)