Files
multithread_experiments/experiments/can/can_receive_counter.cpp

41 lines
1.1 KiB
C++

//
// Created by zuma on 12.10.2020.
//
#include <asyncdevice.h>
#include <picandevice.h>
#include <future>
int main() {
AsyncDevice device;
auto canDevice = new PICANDevice("can1");
int counter = 1;
std::promise<bool> is_success_promise;
auto is_success = is_success_promise.get_future();
auto closure = [&is_success_promise, &counter, canDevice](CAN_Raw msg){
if (msg.Id != 0x20) return;
if (msg.Size != sizeof(int)) {
is_success_promise.set_value(false);
throw can::error(canDevice, can::error::closed, "");
}
int recv_counter = reinterpret_cast<int&>(msg.Data);
if (counter != recv_counter) {
piCout << recv_counter << "<- miss ordering";
// is_success_promise.set_value(false);
// throw can::error(canDevice, can::error::closed, "");
} else {
piCout << recv_counter;
}
counter = recv_counter + 1;
if (counter - 1 == 1000) {
is_success_promise.set_value(true);
throw can::error(canDevice, can::error::closed, "");
}
};
CONNECTL(&device, readEvent, closure);
device.replace(canDevice);
bool result = is_success.get();
piCout << (result ? "success" : "failure");
}