Commit Graph

110 Commits

Author SHA1 Message Date
Thomas Watson 5874337df7 AP_DroneCAN: optimize DroneCAN subscription process
* remove unnecessary nullptr check, these are always called from an
  initialized AP_DroneCAN so if it's nullptr something has gone
  horrifically wrong

* pass in driver index instead of repeatedly calling function to get it

* simplify error handling; knowing exactly which allocation failed is not
  super helpful and one failing likely means subsequent ones will too,
  as it can only fail due to being out of memory
2024-11-18 10:30:29 +11:00
Thomas Watson 378fc63d75 AP_DroneCAN: DNAServer: drop declaration of nonexistent func definition 2024-11-18 10:30:29 +11:00
Thomas Watson 7ca558f625 AP_DroneCAN: 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
Andrew Tridgell 03de099452 AP_DroneCAN: support FlexDebug message 2024-11-05 17:03:23 +09:00
Andrew Tridgell 996b36531b AP_DroneCAN: force DroneCAN zero throttle when disarmed
if a user has set CAN_D1_UC_ESC_RV which is the mask of ESCs that are
reversible we were sending -8191 when disarmed, which is full reverse
throttle. This is the correct output when armed as it is treated as
full reverse at "PWM" 1000 and stopped at 1500, but when disarmed we
should always send zero or the user may find all ESCs spin up at full
reverse when disarmed if the ESC supports reverse throttle (which is
rare in DroneCAN ESCs)
2024-10-15 11:51:10 +11:00
Thomas Watson e9e7eba799 AP_DroneCAN: properly convert timeout to deadline for aux frames
The timeout specified for auxiliary driver frames was passed to the
driver where a deadline was expected. The transmission was then started
after its "deadline", thereby causing it to be canceled and the data
lost if the frame could not be sent immediately.

Fix by converting the timeout to a deadline before passing to the
driver. The conversion is done in the Canard interface code as it
already does other conversions from timeouts to deadlines.
2024-10-08 10:35:41 +11:00
Andrew Tridgell 9dc7dc32c8 AP_DroneCAN: prevent saturation of CPU with DroneCAN thread 2024-09-27 11:06:20 +10:00
Peter Barker 3a9f1c1f37 AP_DroneCAN: re-order initialiser lines so -Werror=reorder will work 2024-09-24 22:50:28 +10:00
bugobliterator 4d7b94c3cb AP_DroneCAN: Fix constructor initialization order
bad ordering was leading to dronecan dna server getting initialised before canard interface is initialised leading
2024-09-24 11:29:34 +10:00
Thomas Watson 20d04fa823 AP_DroneCAN: DNAServer: remove preferred allocation support
Nothing is known to support it so it can't be tested. Removing it saves
flash and reduces complexity.
2024-09-17 22:10:08 +10:00
Thomas Watson 12a106333c AP_DroneCAN: DNAServer: optimize allocation strategy
Number of allocation messages with 3 nodes (6 trials):

before: 44, 36, 35, 92, 107, 41

after: 28, 28, 28, 28, 26, 28
2024-09-17 10:42:05 +10:00
Thomas Watson db18d37ed2 AP_DroneCAN: DNAServer: avoid resetting when server node ID changes
Avoids confusing the user and removes weirdness with multiple servers
sharing the same storage. Does leak the registration for the old ID but
in the unlikely event the table fills up the user can simply reset the
database.

We keep the check for an existing registration to avoid dirtying the
storage every boot unnecessarily. We also factor out the deletion of an
existing registration (which is very unlikely but technically possible)
to save some flash.
2024-09-17 10:01:45 +10:00
Bob Long 8e707ef4e2 AP_DroneCAN: prevent invalid numbers spinning ESCs
This prevents bugs and misconfigurations from causing DroneCAN ESCs to
spin at full speed while the vehicle is disarmed.
2024-09-17 09:18:36 +10:00
Thomas Watson aca624486d AP_DroneCAN: DNAServer: don't "allocate" broadcast ID
While technically legal, it's unlikely to have been tested and an
allocatee might do silly things. Also makes the logic a bit more clear
and improves the failure message.
2024-09-10 12:35:04 +10:00
Thomas Watson 5a1c825ea2 AP_DroneCAN: DNAServer: clean up and optimize allocation 2024-09-10 12:35:04 +10:00
Thomas Watson 4427cbee71 AP_DroneCAN: DNAServer: avoid clearing node ID during allocation
Not necessary and wastes flash.
2024-09-10 12:35:04 +10:00
olliw42 3c9965f5e5 AP_DroneCAN: set protocol in tunnel.Targetted message according to protocol parameter 2024-09-10 11:41:59 +10:00
Thomas Watson 89c9e59c55 AP_DroneCAN: DNA_Server: polish db methods
No compiler output change.
2024-09-02 11:53:24 +10:00
Iampete1 5453f3a0cc AP_DroneCAN: register handle_actuator_status_Volz callback and fix logging 2024-08-27 11:18:18 +10:00
Thomas Watson 7c5a46bac2 AP_DroneCAN: DNA_Server: arrange db methods into more logical order 2024-08-20 10:22:55 +10:00
Thomas Watson b38766c469 AP_DroneCAN: DNA_Server: clarify comments with consistent terminology 2024-08-20 10:22:55 +10:00
Thomas Watson 9669b4e85d AP_DroneCAN: DNA_Server: rename db methods to use consistent terminology
Also use snake_case like the rest of Ardupilot.
2024-08-20 10:22:55 +10:00
Thomas Watson ddf74e2da4 AP_DroneCAN: DNA_Server: rename node record structure
Rename NodeData to NodeRecord to provide a more specific name and match
the record term used in the comments. Also nominally allows stuff to be
associated with the nodes that's not the record, as expanding the record
is hard.

Additionally, rename the `hwid` field to `uid` as that's what's used in
the rest of the code.
2024-08-20 10:22:55 +10:00
Thomas Watson e22f26e507 AP_DroneCAN: DNA_Server: briefly document database to guide cleanup 2024-08-20 10:22:55 +10:00
Thomas Watson e12f345bae AP_DroneCAN: DNA_Server: make lower level database tasks private
All the higher level database operations need to be locked for the whole
duration of the operation, so nobody should be using the lower-level
tasks or raw read/write functions. We can also remove the locks from
them.

The database can now safely be used by multiple servers.
2024-08-13 09:58:44 +10:00
Thomas Watson 4097e9fa42 AP_DroneCAN: DNA_Server: move allocation operation to db
Must be locked for the whole operation due to the find free/add
read-modify-write.

Preserves the previous behavior of sending back an ID of 0 in case of
allocation failure, for better or worse.
2024-08-13 09:58:44 +10:00
Thomas Watson f406c62449 AP_DroneCAN: DNA_Server: move node info update operation to db
Must be locked for the whole operation due to the occupied check and
addition read-modify-write.
2024-08-13 09:58:44 +10:00
Thomas Watson e79437d04a AP_DroneCAN: DNA_Server: move init operation into db
Must be locked for the whole operation due to the get/add
read-modify-write.
2024-08-13 09:58:44 +10:00
Thomas Watson 01e285c681 AP_DroneCAN: DNA_Server: move database tasks to db class
The server should not have raw read/write access to the database so the
database needs to take over the tasks.
2024-08-13 09:58:44 +10:00
Thomas Watson a9774d2334 AP_DroneCAN: DNA_Server: move storage read/write to its own class
There is (currently) only one storage area that is used by all servers,
so it needs to be managed by its own class shared among them.

The occupied mask is also moved as it reflects the storage contents and
so can't be stored by each server.
2024-08-13 09:58:44 +10:00
Iampete1 8ec3d0f0a9 AP_DroneCAN: populate ESC power percentage 2024-08-07 11:23:35 +01:00
Pradeep CK c7216c05b8 AP_DroneCAN: addition of ESC extended status message
- Conditional compilation definition : AP_EXTENDED_ESC_TELEM_ENABLE
 - ESCX log structure
 - Update functionalities for ESCX status message
 - ESCX DroneCAN callback
2024-08-06 10:57:36 +10:00
Thomas Watson 60a9f1722c AP_DroneCAN: DNA_Server: unify bitmask handling
Put documentation with each bitmask and use the object directly. Node ID
range checks can be removed as the bitmask itself checks and we don't
expect to trip them.

Substantially cleans up the code.
2024-07-30 09:49:43 +10:00
Thomas Watson 56593574a9 AP_DroneCAN: DNA_Server: miscellaneous cleanup 2024-07-30 09:49:43 +10:00
Thomas Watson 5e0bb99dbb AP_DroneCAN: DNA_Server: fix handling of empty entry
Replaces the check for a CRC of 0 with a check that the hwid is 0.
Substantially reduces 1/256 chance that a particular node ID couldn't be
stored.
2024-07-30 09:49:43 +10:00
Thomas Watson 9aeab7b424 AP_DroneCAN: DNA_Server: use 0 as unknown ID
Slightly reduces flash usage and probably is clearer.
2024-07-30 09:49:43 +10:00
Thomas Watson 8d57533f1c AP_DroneCAN: DNA_Server: fix cases involving use of invalid node IDs 2024-07-30 09:49:43 +10:00
Thomas Watson a9317b1a07 AP_DroneCAN: correct and validate allowed NODE range
Node IDs >= 128 don't exist, and IDs 126 and 127 are "reserved for
network maintenance tools" according to the spec.
2024-07-30 09:49:43 +10:00
Thomas Watson 485a9387b1 AP_DroneCAN: DNA_Server: clean up storage failure handling
The StorageManager read_block/write_block methods only return failure if
an out of bounds access is performed. Assert statically that this does
not happen.

Also remove the now-impossible failed to add node state.
2024-07-30 09:49:43 +10:00
Thomas Watson cd8519321b AP_DroneCAN: DNA_Server: search for valid nodes after magic check
Ensures the occupation mask doesn't get populated with junk if the magic
is not valid.
2024-07-30 09:49:43 +10:00
Thomas Watson c1f59186fa AP_DroneCAN: DNA_Server: make reset method private 2024-07-30 09:49:43 +10:00
Andrew Tridgell 35a8f6c7b2 AP_DroneCAN: use NEW_NOTHROW for new(std::nothrow) 2024-06-04 09:20:21 +10:00
Andrew Tridgell ed8926361f AP_DroneCAN: use NEW_NOTHROW for new(std::nothrow) 2024-06-04 09:20:21 +10:00
Iampete1 3f6ce2dc09 AP_DroneCAN: Serial: map baudrates so param works as expected 2024-05-28 10:27:20 +10:00
Iampete1 982cc3a00f AP_DroneCAN: call RPM subscribe 2024-05-02 20:25:38 +10:00
Peter Barker 75bbff01c1 AP_DroneCAN: move Arming, Beacon and RC_Mapper into ardupilotwaf.py
these were built for all vehicles, so put them in the common list
2024-04-17 18:11:46 +10:00
Patrick José Pereira 3c095706ca DroneCAN_sniffer: Use new default for reboot
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
2024-03-12 21:13:41 +11:00
Andrew Tridgell ed27e30f9e AP_DroneCAN: map DroneCAN debug levels to MAV_SEVERITY levels 2024-02-22 15:03:01 +11:00
Iampete1 ff00d562fe AP_DroneCAN: DNA_Server: log driver index in CAND 2024-02-16 21:55:07 +11:00
Iampete1 5fd3be1b75 AP_DroneCAN: add subscribe msgs for TemperatureSensor 2024-01-30 10:13:35 +11:00