|
|
|
@ -99,7 +99,11 @@ void safety_setter_thread() { |
|
|
|
|
} |
|
|
|
|
LOGW("got %d bytes CarParams", params.size()); |
|
|
|
|
|
|
|
|
|
capnp::FlatArrayMessageReader cmsg(AlignedBuffer(params.data(), params.size())); |
|
|
|
|
// format for board, make copy due to alignment issues, will be freed on out of scope
|
|
|
|
|
auto amsg = kj::heapArray<capnp::word>((params.size() / sizeof(capnp::word)) + 1); |
|
|
|
|
memcpy(amsg.begin(), params.data(), params.size()); |
|
|
|
|
|
|
|
|
|
capnp::FlatArrayMessageReader cmsg(amsg); |
|
|
|
|
cereal::CarParams::Reader car_params = cmsg.getRoot<cereal::CarParams>(); |
|
|
|
|
cereal::CarParams::SafetyModel safety_model = car_params.getSafetyModel(); |
|
|
|
|
|
|
|
|
@ -197,7 +201,7 @@ void can_recv(PubMaster &pm) { |
|
|
|
|
void can_send_thread(bool fake_send) { |
|
|
|
|
LOGD("start send thread"); |
|
|
|
|
|
|
|
|
|
AlignedBuffer aligned_buf; |
|
|
|
|
kj::Array<capnp::word> buf = kj::heapArray<capnp::word>(1024); |
|
|
|
|
Context * context = Context::create(); |
|
|
|
|
SubSocket * subscriber = SubSocket::create(context, "sendcan"); |
|
|
|
|
assert(subscriber != NULL); |
|
|
|
@ -213,8 +217,13 @@ void can_send_thread(bool fake_send) { |
|
|
|
|
} |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
const size_t size = (msg->getSize() / sizeof(capnp::word)) + 1; |
|
|
|
|
if (buf.size() < size) { |
|
|
|
|
buf = kj::heapArray<capnp::word>(size); |
|
|
|
|
} |
|
|
|
|
memcpy(buf.begin(), msg->getData(), msg->getSize()); |
|
|
|
|
|
|
|
|
|
capnp::FlatArrayMessageReader cmsg(aligned_buf.get(msg)); |
|
|
|
|
capnp::FlatArrayMessageReader cmsg(buf.slice(0, size)); |
|
|
|
|
cereal::Event::Reader event = cmsg.getRoot<cereal::Event>(); |
|
|
|
|
|
|
|
|
|
//Dont send if older than 1 second
|
|
|
|
|