import os
import subprocess
from cffi import FFI
can_dir = os . path . dirname ( os . path . abspath ( __file__ ) )
libpandasafety_fn = os . path . join ( can_dir , " libpandasafety.so " )
subprocess . check_call ( [ " make " ] , cwd = can_dir )
ffi = FFI ( )
ffi . cdef ( """
typedef struct
{
uint32_t TIR ; / * ! < CAN TX mailbox identifier register * /
uint32_t TDTR ; / * ! < CAN mailbox data length control and time stamp register * /
uint32_t TDLR ; / * ! < CAN mailbox data low register * /
uint32_t TDHR ; / * ! < CAN mailbox data high register * /
} CAN_TxMailBox_TypeDef ;
typedef struct
{
uint32_t RIR ; / * ! < CAN receive FIFO mailbox identifier register * /
uint32_t RDTR ; / * ! < CAN receive FIFO mailbox data length control and time stamp register * /
uint32_t RDLR ; / * ! < CAN receive FIFO mailbox data low register * /
uint32_t RDHR ; / * ! < CAN receive FIFO mailbox data high register * /
} CAN_FIFOMailBox_TypeDef ;
typedef struct
{
uint32_t CNT ;
} TIM_TypeDef ;
void toyota_rx_hook ( CAN_FIFOMailBox_TypeDef * to_push ) ;
int toyota_tx_hook ( CAN_FIFOMailBox_TypeDef * to_send ) ;
void toyota_init ( int16_t param ) ;
void set_controls_allowed ( int c ) ;
void reset_angle_control ( void ) ;
int get_controls_allowed ( void ) ;
void init_tests_toyota ( void ) ;
void set_timer ( int t ) ;
void set_toyota_torque_meas ( int min , int max ) ;
void set_cadillac_torque_driver ( int min , int max ) ;
void set_gm_torque_driver ( int min , int max ) ;
void set_toyota_rt_torque_last ( int t ) ;
void set_toyota_desired_torque_last ( int t ) ;
int get_toyota_torque_meas_min ( void ) ;
int get_toyota_torque_meas_max ( void ) ;
void init_tests_honda ( void ) ;
int get_ego_speed ( void ) ;
void honda_init ( int16_t param ) ;
void honda_rx_hook ( CAN_FIFOMailBox_TypeDef * to_push ) ;
int honda_tx_hook ( CAN_FIFOMailBox_TypeDef * to_send ) ;
int get_brake_prev ( void ) ;
int get_gas_prev ( void ) ;
void set_honda_alt_brake_msg ( bool ) ;
void set_bosch_hardware ( bool ) ;
void init_tests_cadillac ( void ) ;
void cadillac_init ( int16_t param ) ;
void cadillac_rx_hook ( CAN_FIFOMailBox_TypeDef * to_push ) ;
int cadillac_tx_hook ( CAN_FIFOMailBox_TypeDef * to_send ) ;
void set_cadillac_desired_torque_last ( int t ) ;
void set_cadillac_rt_torque_last ( int t ) ;
void init_tests_gm ( void ) ;
void gm_init ( int16_t param ) ;
void gm_rx_hook ( CAN_FIFOMailBox_TypeDef * to_push ) ;
int gm_tx_hook ( CAN_FIFOMailBox_TypeDef * to_send ) ;
void set_gm_desired_torque_last ( int t ) ;
void set_gm_rt_torque_last ( int t ) ;
void toyota_ipas_rx_hook ( CAN_FIFOMailBox_TypeDef * to_push ) ;
int toyota_ipas_tx_hook ( CAN_FIFOMailBox_TypeDef * to_send ) ;
""" )
libpandasafety = ffi . dlopen ( libpandasafety_fn )