From 382f4f4ba3b033809c31f3d1a06e9bba87589ca4 Mon Sep 17 00:00:00 2001
From: Alexander Entinger <consulting@lxrobotics.com>
Date: Fri, 20 Sep 2024 09:50:50 +0200
Subject: [PATCH] Fix: Arduino_CAN::write return value incompatible with
 interface specification at ArduinoCore-API/HardwareCAN. This fixes #924.

---
 libraries/Arduino_CAN/src/Arduino_CAN.cpp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/libraries/Arduino_CAN/src/Arduino_CAN.cpp b/libraries/Arduino_CAN/src/Arduino_CAN.cpp
index de74c22c5..30690e83f 100644
--- a/libraries/Arduino_CAN/src/Arduino_CAN.cpp
+++ b/libraries/Arduino_CAN/src/Arduino_CAN.cpp
@@ -57,7 +57,10 @@ int Arduino_CAN::write(CanMsg const & msg)
     CANData,
     is_standard_id ? CANStandard : CANExtended);
 
-  return _can.write(can_msg);
+  int const rc = _can.write(can_msg);
+  if (rc == 0) /* mbed returns 0 in case of failed CAN::write(). */
+    return -1; /* Note: provide named constant in ArduinoCore-API/HardwareCAN.h, i.e. CAN_WRITE_GENERIC_ERROR */
+  return 1;
 }
 
 size_t Arduino_CAN::available()