// // Created by zuma on 12.10.2020. // #include #include #include int main() { AsyncDevice device; auto canDevice = new PICANDevice("can1"); int counter = 1; std::promise 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(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"); }