Set timeouts on boardd and ubloxd receive sockets

pull/1772/head
Willem Melching 2020-06-23 15:56:00 -07:00
parent 33f905b1ed
commit 28110ea880
2 changed files with 20 additions and 10 deletions

View File

@ -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;

View File

@ -37,12 +37,16 @@ int ubloxd_main(poll_ubloxraw_msg_func poll_func, send_gps_event_func send_func)
Context * context = Context::create();
SubSocket * subscriber = SubSocket::create(context, "ubloxRaw");
assert(subscriber != NULL);
subscriber->setTimeout(100);
PubMaster pm({"ubloxGnss", "gpsLocationExternal"});
while (!do_exit) {
Message * msg = subscriber->receive();
if (!msg){
if (errno == EINTR) {
do_exit = true;
}
continue;
}