|
|
|
@ -531,8 +531,8 @@ void can_send(cereal::Event::Reader &event) { |
|
|
|
|
//Older than 1 second. Dont send.
|
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
auto can_data_list = event.getSendcan();
|
|
|
|
|
|
|
|
|
|
auto can_data_list = event.getSendcan(); |
|
|
|
|
int msg_count = can_data_list.size(); |
|
|
|
|
|
|
|
|
|
uint32_t *send = (uint32_t*)malloc(msg_count*0x10); |
|
|
|
@ -586,20 +586,26 @@ void *can_send_thread(void *crap) { |
|
|
|
|
Context * context = Context::create(); |
|
|
|
|
SubSocket * subscriber = SubSocket::create(context, "sendcan"); |
|
|
|
|
assert(subscriber != NULL); |
|
|
|
|
subscriber->setTimeout(100); |
|
|
|
|
|
|
|
|
|
// run as fast as messages come in
|
|
|
|
|
while (!do_exit) { |
|
|
|
|
Message * msg = subscriber->receive(); |
|
|
|
|
|
|
|
|
|
if (msg){ |
|
|
|
|
auto amsg = kj::heapArray<capnp::word>((msg->getSize() / sizeof(capnp::word)) + 1); |
|
|
|
|
memcpy(amsg.begin(), msg->getData(), msg->getSize()); |
|
|
|
|
|
|
|
|
|
capnp::FlatArrayMessageReader cmsg(amsg); |
|
|
|
|
cereal::Event::Reader event = cmsg.getRoot<cereal::Event>(); |
|
|
|
|
can_send(event); |
|
|
|
|
delete msg; |
|
|
|
|
if (!msg){ |
|
|
|
|
if (errno == EINTR) { |
|
|
|
|
do_exit = true; |
|
|
|
|
} |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
auto amsg = kj::heapArray<capnp::word>((msg->getSize() / sizeof(capnp::word)) + 1); |
|
|
|
|
memcpy(amsg.begin(), msg->getData(), msg->getSize()); |
|
|
|
|
|
|
|
|
|
capnp::FlatArrayMessageReader cmsg(amsg); |
|
|
|
|
cereal::Event::Reader event = cmsg.getRoot<cereal::Event>(); |
|
|
|
|
can_send(event); |
|
|
|
|
delete msg; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
delete subscriber; |
|
|
|
|