Description
CAN.write()
in this core returns 0 for errors but should return a negative error code.
Details
The docstring for the Arduino CAN API states that HardwareCAN::write()
returns:
1 if the message was enqueued, an implementation defined error code < 0 if there was an error
This core implements HardwareCAN::write()
by calling mbed::CAN::write()
and directly returning the result (code, header).
However mbed::CAN::write()
has a different spec for returning errors:
0 if write failed, 1 if write was successful
Discussion
This was brought up by @bthacher-crabi in odriverobotics/ODriveArduino#4 and I'd be interested what the maintainers of this repo think. Technically the meaning of return 0
is unspecified in the API, so it's unclear what client code should do with it. It's conceivable that other cores use 0 to mean "success" (which is a fairly common convention). Should we add a preprocessor special case for the mbed core specifically?
Separately, going forward it would be cool if either the code or the API specs are changed so that they are consistent.
Activity
samuelsadok commentedon Sep 16, 2024
Any comment on this? (perhaps @facchinm?)
aentinger commentedon Sep 16, 2024
Hi @samuelsadok ☕ 👋 Thank you for reporting this, you are indeed correct. I'll prepare a PR with a fix.
Fix: Arduino_CAN::write return value incompatible with interface spec…
Fix: Arduino_CAN::write return value incompatible with interface spec…