From 739db562900b850ecc13918586ad35ba303e6980 Mon Sep 17 00:00:00 2001
From: Matteo Pignataro <matteo.pignataro@skywarder.eu>
Date: Tue, 12 Sep 2023 07:19:16 +0000
Subject: [PATCH] [CanProtocol] Added thread priority as parameter

---
 src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp    | 9 +++++----
 src/shared/drivers/canbus/CanProtocol/CanProtocol.h      | 4 +++-
 .../drivers/canbus/CanProtocol/test-can-protocol.cpp     | 2 +-
 3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp b/src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp
index c2714aedf..a58beed63 100644
--- a/src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp
+++ b/src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp
@@ -30,8 +30,9 @@ namespace Boardcore
 namespace Canbus
 {
 
-CanProtocol::CanProtocol(CanbusDriver* can, MsgHandler onReceive)
-    : can(can), onReceive(onReceive)
+CanProtocol::CanProtocol(CanbusDriver* can, MsgHandler onReceive,
+                         miosix::Priority threadPriority)
+    : can(can), onReceive(onReceive), threadPriority(threadPriority)
 {
 }
 
@@ -46,7 +47,7 @@ bool CanProtocol::start()
     if (!sndStarted)
     {
         sndThread = miosix::Thread::create(
-            sndLauncher, skywardStack(4 * 1024), miosix::MAIN_PRIORITY,
+            sndLauncher, skywardStack(4 * 1024), threadPriority,
             reinterpret_cast<void*>(this), miosix::Thread::JOINABLE);
 
         if (sndThread != nullptr)
@@ -59,7 +60,7 @@ bool CanProtocol::start()
     if (!rcvStarted)
     {
         rcvThread = miosix::Thread::create(rcvLauncher, skywardStack(4 * 1024),
-                                           miosix::MAIN_PRIORITY,
+                                           threadPriority,
                                            reinterpret_cast<void*>(this));
 
         if (rcvThread != nullptr)
diff --git a/src/shared/drivers/canbus/CanProtocol/CanProtocol.h b/src/shared/drivers/canbus/CanProtocol/CanProtocol.h
index 3df511ecd..0f437a53d 100644
--- a/src/shared/drivers/canbus/CanProtocol/CanProtocol.h
+++ b/src/shared/drivers/canbus/CanProtocol/CanProtocol.h
@@ -55,7 +55,8 @@ public:
      *
      * @param can Pointer to a CanbusDriver object.
      */
-    CanProtocol(CanbusDriver* can, MsgHandler onReceive);
+    CanProtocol(CanbusDriver* can, MsgHandler onReceive,
+                miosix::Priority threadPriority);
 
     /**
      * @brief Start the receiving and sending threads.
@@ -180,6 +181,7 @@ private:
 
     miosix::Thread* sndThread = nullptr;
     miosix::Thread* rcvThread = nullptr;
+    miosix::Priority threadPriority;
 
     SyncCircularBuffer<CanMessage, 10> outQueue;
 
diff --git a/src/tests/drivers/canbus/CanProtocol/test-can-protocol.cpp b/src/tests/drivers/canbus/CanProtocol/test-can-protocol.cpp
index 686ebd184..799338d4d 100644
--- a/src/tests/drivers/canbus/CanProtocol/test-can-protocol.cpp
+++ b/src/tests/drivers/canbus/CanProtocol/test-can-protocol.cpp
@@ -70,7 +70,7 @@ int main()
     CanbusDriver* driver2 = new CanbusDriver(CAN2, config, bitTiming);
 
     // // Prepare the can driver
-    CanProtocol protocol(driver2, print);
+    CanProtocol protocol(driver2, print, miosix::MAIN_PRIORITY);
 
     // Add a filter to allow every message
     Mask32FilterBank f2(0, 0, 1, 1, 0, 0, 0);
-- 
GitLab