From c057b7da49848d45a57b69269f5e7959a0957784 Mon Sep 17 00:00:00 2001 From: Federico Mandelli <federicomandelli@skywarder.eu> Date: Mon, 31 Jul 2023 10:42:26 +0200 Subject: [PATCH] [CanProtocol] Fixed bug when calculating bus velocity --- .../drivers/canbus/CanDriver/BusLoadEstimation.h | 4 ++-- .../drivers/canbus/CanProtocol/CanProtocol.cpp | 5 +++++ .../drivers/canbus/CanDriver/test-can-2way.cpp | 11 +++++------ .../canbus/CanProtocol/test-can-protocol-2way.cpp | 6 +----- .../CanProtocol/test-can-protocol-loopback.cpp | 15 --------------- 5 files changed, 13 insertions(+), 28 deletions(-) diff --git a/src/shared/drivers/canbus/CanDriver/BusLoadEstimation.h b/src/shared/drivers/canbus/CanDriver/BusLoadEstimation.h index a68da6aeb..1a0d00366 100644 --- a/src/shared/drivers/canbus/CanDriver/BusLoadEstimation.h +++ b/src/shared/drivers/canbus/CanDriver/BusLoadEstimation.h @@ -46,7 +46,7 @@ struct BusLoadInfo }; class BusLoadEstimation { - static constexpr uint16_t BUFFER_LEN = 20; + static constexpr uint16_t BUFFER_LEN = 50; public: BusLoadEstimation(uint32_t baudRate) : baudRate(baudRate) {} @@ -90,7 +90,7 @@ private: }; CircularBuffer<PacketInfo, BUFFER_LEN> c; - mutable FastMutex mutex; + FastMutex mutex; uint32_t baudRate; }; diff --git a/src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp b/src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp index 546d5879b..2884c27a4 100644 --- a/src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp +++ b/src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp @@ -22,6 +22,8 @@ #include "CanProtocol.h" +#include <drivers/timer/TimestampTimer.h> + using namespace miosix; namespace Boardcore @@ -134,6 +136,8 @@ void CanProtocol::sendMessage(const CanMessage& msg) static_cast<uint32_t>(CanProtocolIdMask::LEFT_TO_SEND)); packet.length = byteForUint64(msg.payload[0]); + packet.timestamp = Boardcore::TimestampTimer::getTimestamp(); + // Splits payload[0] in the right number of uint8_t for (int i = 0; i < packet.length; i++) packet.data[i] = msg.payload[0] >> (8 * i); @@ -262,6 +266,7 @@ void CanProtocol::runReceiver() // Add the data to the message msg.payload[msg.length - leftToReceive - 1] = payload; + loadEstimator->addPacket(pkt); nReceived++; } } diff --git a/src/tests/drivers/canbus/CanDriver/test-can-2way.cpp b/src/tests/drivers/canbus/CanDriver/test-can-2way.cpp index 1bcb2e3e7..56be5fefd 100644 --- a/src/tests/drivers/canbus/CanDriver/test-can-2way.cpp +++ b/src/tests/drivers/canbus/CanDriver/test-can-2way.cpp @@ -195,11 +195,10 @@ int main() CanbusDriver::CanbusConfig cfg{}; CanbusDriver::AutoBitTiming bt; - bt.baudRate = BAUD_RATE; - bt.samplePoint = SAMPLE_POINT; - CanbusDriver* c1 = new CanbusDriver(CAN1, cfg, bt); - CanbusDriver* c = new CanbusDriver(CAN2, cfg, bt); - canManager = new SimpleCanManager(*c, BAUD_RATE, handleCanMessage); + bt.baudRate = BAUD_RATE; + bt.samplePoint = SAMPLE_POINT; + CanbusDriver* c = new CanbusDriver(CAN2, cfg, bt); + canManager = new SimpleCanManager(*c, BAUD_RATE, handleCanMessage); // Allow every message Mask32FilterBank f2(0, 0, 0, 0, 0, 0, 0); @@ -208,7 +207,7 @@ int main() canManager->start(); mc.start(); - const int slp = 5; + const int slp = 100; for (;;) { sendNewRequest(); diff --git a/src/tests/drivers/canbus/CanProtocol/test-can-protocol-2way.cpp b/src/tests/drivers/canbus/CanProtocol/test-can-protocol-2way.cpp index 1d62c6ec7..37d4b9e86 100644 --- a/src/tests/drivers/canbus/CanProtocol/test-can-protocol-2way.cpp +++ b/src/tests/drivers/canbus/CanProtocol/test-can-protocol-2way.cpp @@ -202,10 +202,6 @@ int main() bt.baudRate = BAUD_RATE; bt.samplePoint = SAMPLE_POINT; - CanbusDriver* c1 = new CanbusDriver(CAN1, cfg, bt); - if (false && c1) - { - } CanbusDriver* c = new CanbusDriver(CAN2, cfg, bt); protocol = new CanProtocol(c, bind(&handleCanMessage, _1), BAUD_RATE); @@ -216,7 +212,7 @@ int main() protocol->start(); mc.start(); - const int slp = 20; + const int slp = 10; for (;;) { sendNewRequest(); diff --git a/src/tests/drivers/canbus/CanProtocol/test-can-protocol-loopback.cpp b/src/tests/drivers/canbus/CanProtocol/test-can-protocol-loopback.cpp index 686ebd184..e245245af 100644 --- a/src/tests/drivers/canbus/CanProtocol/test-can-protocol-loopback.cpp +++ b/src/tests/drivers/canbus/CanProtocol/test-can-protocol-loopback.cpp @@ -42,21 +42,6 @@ void print(const CanMessage& msg) int main() { - GpioPin canA{GPIOB_BASE, 8}; - GpioPin canB{GPIOB_BASE, 9}; - - canA.mode(Mode::ALTERNATE); - canB.mode(Mode::ALTERNATE); - canA.alternateFunction(9); - canB.alternateFunction(9); - - GpioPin can2A{GPIOB_BASE, 12}; - GpioPin can2B{GPIOB_BASE, 13}; - - can2A.mode(Mode::ALTERNATE); - can2B.mode(Mode::ALTERNATE); - can2A.alternateFunction(9); - can2B.alternateFunction(9); printf("provolone fritto\n"); -- GitLab