mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-07-27 00:48:23 +08:00
* fix(drivers/uavcannode): make CANNODE_NODE_ID the sole node ID policy The startup bootloader_app_shared_write() never reached the bootloader: it only accepts App-signed data and invalidates the shared region on every boot. The only consumer was uavcannode itself on a restart without a reset (nsh stop/start), where the persisted bus_speed=0 made the CAN driver init fail and left the node off the bus. The bootloader learns our node ID exclusively through the firmware update handoff in cb_beginfirmware_update, which already carries the static ID. CANNODE_NODE_ID now overrides the bootloader handoff only when nonzero, so the default (0) reuses the ID the bootloader already allocated instead of running allocation a second time. The handoff is ignored unless it carries a valid bitrate, healing regions poisoned by firmware that wrote bus_speed=0. Max is 125 because 126/127 are reserved for debug tools by DroneCAN convention, matching UAVCAN_NODE_ID. Signed-off-by: Jacob Dahl <dahl.jakejacob@gmail.com> * fix(drivers/uavcannode): harden bootloader handoff validation Invalidate the shared region whenever it was read valid, not only when the handoff is accepted, so stale data cannot linger on boards whose bootloader never invalidates it. Require a plausible bitrate (the CANNODE_BITRATE minimum) rather than nonzero: the canbootloader alt-app update path can hand off bus_speed = CAN_UNDEFINED (999). Reword the invalid-param error, which claimed dynamic allocation while keeping the bootloader handoff. Signed-off-by: Jacob Dahl <dahl.jakejacob@gmail.com> --------- Signed-off-by: Jacob Dahl <dahl.jakejacob@gmail.com>