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