You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					38 lines
				
				1.1 KiB
			
		
		
			
		
	
	
					38 lines
				
				1.1 KiB
			| 
											6 years ago
										 | #include <vector>
 | ||
|  | #include <tuple>
 | ||
|  | #include <string>
 | ||
|  | #include "common/timing.h"
 | ||
|  | #include <capnp/serialize.h>
 | ||
|  | #include "cereal/gen/cpp/log.capnp.h"
 | ||
|  | #include "cereal/gen/cpp/car.capnp.h"
 | ||
|  | 
 | ||
|  | typedef struct {
 | ||
|  | 	long address;
 | ||
|  | 	std::string dat;
 | ||
|  | 	long busTime;
 | ||
|  | 	long src;
 | ||
|  | } can_frame;
 | ||
|  | 
 | ||
|  | extern "C" {
 | ||
|  | 
 | ||
|  | void can_list_to_can_capnp_cpp(const std::vector<can_frame> &can_list, std::string &out, bool sendCan, bool valid) {
 | ||
|  |   capnp::MallocMessageBuilder msg;
 | ||
|  |   cereal::Event::Builder event = msg.initRoot<cereal::Event>();
 | ||
|  |   event.setLogMonoTime(nanos_since_boot());
 | ||
|  |   event.setValid(valid);
 | ||
|  | 
 | ||
|  |   auto canData = sendCan ? event.initSendcan(can_list.size()) : event.initCan(can_list.size());
 | ||
|  |   int j = 0;
 | ||
|  |   for (auto it = can_list.begin(); it != can_list.end(); it++, j++) {
 | ||
|  |     canData[j].setAddress(it->address);
 | ||
|  |     canData[j].setBusTime(it->busTime);
 | ||
|  |     canData[j].setDat(kj::arrayPtr((uint8_t*)it->dat.data(), it->dat.size()));
 | ||
|  |     canData[j].setSrc(it->src);
 | ||
|  |   }
 | ||
|  |   auto words = capnp::messageToFlatArray(msg);
 | ||
|  |   auto bytes = words.asBytes();
 | ||
|  |   out.append((const char *)bytes.begin(), bytes.size());
 | ||
|  | }
 | ||
|  | 
 | ||
|  | }
 |