From 46aab317d54a8e22cccd98401d39a54022ef45bf Mon Sep 17 00:00:00 2001 From: JacobCrabill Date: Mon, 30 Mar 2020 15:07:51 -0700 Subject: [PATCH] uavcan: bug fix sensor bridge init failure Fixes case where a UAVCAN SensorBridge has callback channels available, but NuttX / uORB does not have an additional driver / topic instance available. --- src/drivers/uavcan/sensors/sensor_bridge.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/drivers/uavcan/sensors/sensor_bridge.cpp b/src/drivers/uavcan/sensors/sensor_bridge.cpp index 7a0e9842a2..6c1544636d 100644 --- a/src/drivers/uavcan/sensors/sensor_bridge.cpp +++ b/src/drivers/uavcan/sensors/sensor_bridge.cpp @@ -185,8 +185,13 @@ uavcan_bridge::Channel *UavcanCDevSensorBridgeBase::get_channel_for_node(int nod int ret = init_driver(channel); if (ret != PX4_OK) { + // Driver initialization failed - probably out of channels. Return nullptr so + // the callback exits gracefully, and clear the assigned node_id for the channel + // so future callbacks exit immediately. DEVICE_LOG("INIT ERROR node %d errno %d", channel->node_id, ret); - return channel; + channel->node_id = -1; + _out_of_channels = true; + return nullptr; } DEVICE_LOG("channel %d class instance %d ok", channel->node_id, channel->class_instance);