# distutils: language = c++
#cython: language_level=3
from libc.stdint cimport uint32_t , uint64_t , uint16_t
from libcpp.vector cimport vector
from libcpp.map cimport map
from libcpp.string cimport string
from libcpp.unordered_set cimport unordered_set
from libcpp cimport bool
ctypedef enum SignalType :
DEFAULT ,
HONDA_CHECKSUM ,
HONDA_COUNTER ,
TOYOTA_CHECKSUM ,
PEDAL_CHECKSUM ,
PEDAL_COUNTER ,
VOLKSWAGEN_CHECKSUM ,
VOLKSWAGEN_COUNTER
cdef struct Signal :
const char * name
int b1 , b2 , bo
bool is_signed
double factor , offset
SignalType type
cdef struct Msg :
const char * name
uint32_t address
unsigned int size
size_t num_sigs
const Signal * sigs
cdef struct Val :
const char * name
uint32_t address
const char * def_val
const Signal * sigs
cdef struct DBC :
const char * name
size_t num_msgs
const Msg * msgs
const Val * vals
size_t num_vals
cdef struct SignalParseOptions :
uint32_t address
const char * name
double default_value
cdef struct MessageParseOptions :
uint32_t address
int check_frequency
cdef struct SignalValue :
uint32_t address
uint16_t ts
const char * name
double value
ctypedef const DBC * ( * dbc_lookup_func ) ( const char * dbc_name )
ctypedef void * ( * can_init_with_vectors_func ) ( int bus , const char * dbc_name ,
vector [ MessageParseOptions ] message_options ,
vector [ SignalParseOptions ] signal_options ,
bool sendcan ,
const char * tcp_addr ,
int timeout )
ctypedef int ( * can_update_func ) ( void * can , uint64_t sec , bool wait ) ;
ctypedef void ( * can_update_string_func ) ( void * can , const char * dat , int len ) ;
ctypedef size_t ( * can_query_latest_func ) ( void * can , bool * out_can_valid , size_t out_values_size , SignalValue * out_values ) ;
ctypedef void ( * can_query_latest_vector_func ) ( void * can , bool * out_can_valid , vector [ SignalValue ] & values )
cdef class CANParser :
cdef :
void * can
const DBC * dbc
dbc_lookup_func dbc_lookup
can_init_with_vectors_func can_init_with_vectors
can_update_func can_update
can_update_string_func can_update_string
can_query_latest_vector_func can_query_latest_vector
map [ string , uint32_t ] msg_name_to_address
map [ uint32_t , string ] address_to_msg_name
vector [ SignalValue ] can_values
bool test_mode_enabled
cdef public :
string dbc_name
dict vl
dict ts
bool can_valid
int can_invalid_cnt
cdef unordered_set [uint32_t ] update_vl ( self )