# 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 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)