Commit Graph

118 Commits

Author SHA1 Message Date
Andrew Tridgell 322b7520de AP_CANManager: fixed critical race in log_text()
the AP_CANManager::log_text() gets called from debug logging in
AP_DroneCAN. It is a method on a common AP_CANManager object which is
shared by multiple AP_DroneCAN threads.

if two threads call the debug log messages at the same time then we
can end up with _log_pos greater than LOG_BUFFER_SIZE (1024) and
overwrite past the end of the buffer

in the crash_dump we have for this case the next piece of memory was
hal.can[0], and the overwrite of the buffer had corrupted the
MessageRam_ structurre in the ChibiOS CAN interface code. That led to
a hardfault on receive of a CAN message

Note that this issue only happens if CAN_LOGLEVEL is set to greater
than zero, and the default is zero. So users can avoid the bug by
checking they have not changed CAN_LOGLEVEL.

Also, this is likely an issue that only happens on startup, as once
the two AP_DroneCAN threads are fully running they have the same
thread priority so can't pre-empt each other. During startup some
messages are sent from the main thread which has a different priority
to the AP_DroneCAN threads, and can thus trigger this issue
2024-12-14 15:41:38 +11:00
Andrew Tridgell c2864b5733 AP_CANManager: support CAN frame logging
this supports logging of all bxCAN and CANFD frames, which helps with
debugging tricky CAN support issues and for the development of new CAN
driver lua scripts
2024-12-11 08:43:56 +11:00
Thomas Watson 3dd8aa5304 AP_CANManager: use 32 bit timeout for write_aux_frame
Saves a handful of bytes. 71 minutes ought to be enough for anybody!
2024-11-17 10:38:12 +11:00
Thomas Watson a4f6853a7b AP_CANManager: use 32 bit timeout for write_frame
Saves a few bytes. 71 minutes ought to be enough for anybody!
2024-11-17 10:38:12 +11:00
muramura e4ca54b2e4 AP_CANManager: Integrate methods for converting hexadecimal characters to numbers 2024-09-25 08:48:44 +10:00
Andrew Tridgell 89c2b48286 AP_CANManager: ensure we only remove our own fwd registrations
keep a record of which bus we have registered a callback for and only
unregister with that bus. This prevents us unregistering a multicast
callback when disconnecting from MAVCAN
2024-09-23 21:01:22 +10:00
Andrew Tridgell b98c7c5296 AP_CANManager: fixed de-registering CAN forwarding
this prevented MissionPlanner MAVCAN UI from working reliably as the
CANManager could think we are registered when we are not
2024-09-23 21:01:22 +10:00
Andrew Tridgell cc930bd49f AP_CANManager: update for new callback API 2024-09-17 10:02:29 +10:00
Peter Barker a0ac6f22df AP_CANManager: use a switch statement to tidy driver allocation 2024-07-25 11:09:07 +10:00
Andrew Tridgell 02456875e7 AP_CANManager: use NEW_NOTHROW for new(std::nothrow) 2024-06-04 09:20:21 +10:00
Iampete1 632d0a93c1 AP_CANManager: CANSensor: add getter for initialized 2024-05-07 09:48:10 +10:00
Peter Barker 9120c1e324 AP_CANManager: correct includes
neither of these headers are used in this file
2024-03-20 18:45:52 +11:00
Peter Barker 5d5dd4630e AP_CANManager: correct filename for CANDriver_Params
This name doesn't contain objects for CANDriver - it contains objects owned by the CAN Manager which it then uses to configure the drivers.
2024-03-20 18:45:52 +11:00
Peter Barker 565e3f0175 AP_CANManager: correct array bounds used for sanity check
both of these are currently HAL_MAX_CAN_PROTOCOL_DRIVERS in length
2024-03-19 07:29:58 +11:00
Peter Barker 5cd18dbc45 AP_CANManager: remove redundant calls to snprintf
these only differ by the constant substring, so pull that out as a variable
2024-03-16 22:45:14 +11:00
rishabsingh3003 a707628b16 AP_CANManager: Add multiCAN interface 2024-02-27 10:59:41 +11:00
rishabsingh3003 0cdfdc6234 AP_CANMangaer: Add support for CAN MR72 2024-02-06 10:57:21 +11:00
Andrew Tridgell e22e07fbbd AP_CANManager: reimplement with BinarySemaphore 2024-01-03 07:37:05 +11:00
Andrew Tridgell d17a1ca7bc AP_CANManager: support CAN_Dn_PROTOCOL2 for an aux 11 bit protocol 2023-11-28 11:38:16 +11:00
Thomas Watson de26095c58 AP_CANManager: use get_HAL_mutable() to install new CAN interfaces
Avoids dubious const_casting.
2023-11-28 08:24:25 +11:00
Mykhailo Kuznietsov 5e9b88cf9f AP_CANManager: Fix some typos
Fixed some typos found in the code.
2023-10-12 18:30:42 +11:00
Peter Barker 3c93fd3c5f AP_CANManager: handle CAN_FORWARD as both command_INT and COMMAND_LONG 2023-09-20 17:50:56 +10:00
rishabsingh3003 ba08993a0b AP_CANManger: Add NRA24 CAN driver 2023-09-09 17:21:44 +10:00
rishabsingh3003 0110c98afc AP_CANManager: Add TOFSenseP CAN driver 2023-09-09 17:21:44 +10:00
Peter Barker ffe46b760e AP_CANManager: allow more libraries to compile with no HAL_GCS_ENABLED 2023-09-05 22:23:51 +10:00
Andrew Tridgell c32d95cbfc AP_CANManager: update docs 2023-09-01 13:04:59 +10:00
Andrew Tridgell f1aaf78fee AP_CANManager: fixes for macos CAN SITL build 2023-08-29 15:09:48 +10:00
Andrew Tridgell 0a04043c4c AP_CANManager: allow SITL CAN with speedup 2023-08-24 13:06:40 +10:00
Andrew Tridgell b55c1d7193 AP_CANManager: removed native_millis/micros 2023-08-24 13:06:40 +10:00
Andrew Tridgell 1723cca023 AP_CANManager: fixed owner of SLCAN UART
this broke when we moved to the unified AP_HAL locking system for
UARTs. The SLCAN code relied on the fact that the thread owner check
was not done for the read_locked() path. Now that we have a higher
level consistent API that check is done and SLCAN broke
2023-08-02 17:44:39 +10:00
Andrew Tridgell a5fd60ec71 AP_CANManager: fixed usage of read_locked
this didn't actually cause an issue, but is wrong
2023-08-02 17:44:39 +10:00
Andrew Tridgell aa74615ce1 AP_CANManager: moved UART port locking up to AP_HAL 2023-07-12 17:06:02 +10:00
Peter Barker ce00251333 AP_CANManager: correct gate on definition of AP_CANManager class 2023-04-20 08:53:46 +10:00
Peter Barker fea2c8d923 AP_CANManager: move and rename CAN Driver_Type enumeration 2023-04-20 08:53:46 +10:00
Peter Barker b055b67a7f AP_CANManager: remove CANTester 2023-04-18 11:43:58 +10:00
Tom Pittenger 2bbd7d8d91 AP_CANManager: set _driver_type_cache for *all* ifaces 2023-04-17 11:52:52 +10:00
Tom Pittenger 5ca3aa6346 AP_CANManager: remove KDECAN from CANTester 2023-04-17 11:52:52 +10:00
Tom Pittenger eed3cf3255 AP_CANManager: promote KDECAN to a first-class library 2023-04-17 11:52:52 +10:00
Tom Pittenger 84b7444047 AP_CANSensor: add get_driver_type() accessor 2023-04-17 11:52:52 +10:00
Andrew Tridgell 44a0f502fe AP_CANManager: text messages and more defines 2023-04-11 10:31:31 +10:00
Andrew Tridgell 5b45a4060a AP_CANManager: cleanup more defines and classes 2023-04-11 10:31:31 +10:00
Andrew Tridgell 33df480f87 AP_CANManager: rename more variables, types and defines 2023-04-11 10:31:31 +10:00
Andrew Tridgell d59e881301 AP_CANManager: fixed MAVCAN fwding flag
this caused corruption due to multiple frames
2023-04-10 14:46:54 +10:00
Andrew Tridgell dbe91670a9 AP_CANManager: rename AP_UAVCAN to AP_DroneCAN 2023-04-08 07:11:23 +10:00
bugobliterator 44e897cf2d AP_CANManager: setup CANManager for DroneCAN Driver tests 2023-03-29 17:16:39 +11:00
bugobliterator 7e660c2e74 AP_CANManager: replace libuavcan with libcanard based driver 2023-03-29 17:16:39 +11:00
Peter Barker 14089d4919 AP_CANManager: add and use a "bool read(c)" method to AP_HAL
this is much less likely to not work vs the int16_t equivalent
2023-03-22 17:59:11 +11:00
Peter Barker c1c8158687 AP_CANManager: add and use option to compile SLCAN support out of code 2023-03-15 19:08:09 +11:00
Andrew Tridgell 6bff28d5d5 AP_CANManager: check for alloc failure of ObjectBuffer 2023-01-08 15:11:32 +11:00
Andrew Tridgell 34bb5e10cd AP_CANManager: add an output buffer for MAVCAN
this fixes firmware update of peripheral nodes using MAVCAN
2022-11-30 20:06:13 +11:00