From 8e656e887f8f8819f4af6e2b2e2fcf41533f5671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A4=D0=BE=D0=BC=D0=B5=D0=BD=D0=BA=D0=BE=20=D0=A1=D1=82?= =?UTF-8?q?=D0=B5=D0=BF=D0=B0=D0=BD=20=D0=92=D0=BB=D0=B0=D0=B4=D0=B8=D0=BC?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B8=D1=87?= Date: Mon, 12 Oct 2020 13:26:59 +0300 Subject: [PATCH] Msg ordering tests --- experiments/can/can_receive_counter.cpp | 41 +++++++++++++++++++++++++ experiments/can/can_send_counter.cpp | 22 +++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 experiments/can/can_receive_counter.cpp create mode 100644 experiments/can/can_send_counter.cpp diff --git a/experiments/can/can_receive_counter.cpp b/experiments/can/can_receive_counter.cpp new file mode 100644 index 0000000..6144709 --- /dev/null +++ b/experiments/can/can_receive_counter.cpp @@ -0,0 +1,41 @@ +// +// 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"); +} \ No newline at end of file diff --git a/experiments/can/can_send_counter.cpp b/experiments/can/can_send_counter.cpp new file mode 100644 index 0000000..a0104cd --- /dev/null +++ b/experiments/can/can_send_counter.cpp @@ -0,0 +1,22 @@ +// +// Created by zuma on 12.10.2020. +// + +#include +#include + +int main() { + AsyncDevice device; + device.replace(new PICANDevice("can0")); + + CAN_Raw msg = { .Id = 0x20, .Size = sizeof(int) }; + int& counter = reinterpret_cast(msg.Data); + + counter = 0; + while (counter++ < 1000) { + device.send(msg); + piMSleep(1); + } + + piSleep(5); +} \ No newline at end of file