41 lines
1.1 KiB
C++
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");
|
|
} |