quick draft of what this might look like

This commit is contained in:
Shane Smiskol 2022-05-19 00:08:16 -07:00
parent 38ea0a0aaa
commit 55c617a97d
4 changed files with 26 additions and 4 deletions

View File

@ -67,6 +67,7 @@ public:
uint64_t last_sec = 0;
uint64_t last_nonempty_sec = 0;
uint64_t bus_timeout_threshold = 0;
SignalValue get_msg(uint32_t msg_addr);
CANParser(int abus, const std::string& dbc_name,
const std::vector<MessageParseOptions> &options);

View File

@ -53,7 +53,6 @@ cdef extern from "common_dbc.h":
uint32_t address
string name
cdef struct MessageParseOptions:
uint32_t address
int check_frequency
@ -78,6 +77,7 @@ cdef extern from "common.h":
CANParser(int, string, vector[MessageParseOptions])
void update_string(string, bool)
vector[SignalValue] query_latest()
SignalValue get_msg(uint32_t msg_addr)
cdef cppclass CANPacker:
CANPacker(string)

View File

@ -295,6 +295,21 @@ void CANParser::UpdateValid(uint64_t sec) {
}
}
SignalValue CANParser::get_msg(uint32_t msg_addr) {
auto state_it = message_states.find(msg_addr);
if (state_it != message_states.end()) {
MessageState state = state_it->second;
const Signal &sig = state.parse_sigs[0];
return (SignalValue){
.address = state.address,
.name = sig.name,
.value = state.vals[0],
.all_values = state.all_vals[0],
};
}
assert(false);
}
std::vector<SignalValue> CANParser::query_latest() {
std::vector<SignalValue> ret;

View File

@ -7,6 +7,7 @@ from libcpp.unordered_set cimport unordered_set
from libc.stdint cimport uint32_t, uint64_t, uint16_t
from libcpp cimport bool
from libcpp.map cimport map
import time
from .common cimport CANParser as cpp_CANParser
from .common cimport SignalParseOptions, MessageParseOptions, dbc_lookup, SignalValue, DBC
@ -97,6 +98,9 @@ cdef class CANParser:
self.can = new cpp_CANParser(bus, dbc_name, message_options_v)
self.update_vl()
def get_msg(self):
return self.can.get_msg(835)
cdef unordered_set[uint32_t] update_vl(self):
cdef unordered_set[uint32_t] updated_addrs
@ -118,11 +122,13 @@ cdef class CANParser:
return updated_addrs
def update_string(self, dat, sendcan=False):
for v in self.vl_all.values():
v.clear()
#for v in self.vl_all.values():
# v.clear()
# t = time.time()
self.can.update_string(dat, sendcan)
return self.update_vl()
# print(time.time() - t)
# return self.update_vl()
def update_strings(self, strings, sendcan=False):
for v in self.vl_all.values():