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