int init() { int res = get_node_info_client_.init(); if (res < 0) { return res; } get_node_info_client_.setCallback( GetNodeInfoResponseCallback(this, &NodeDiscoverer::handleGetNodeInfoResponse)); res = node_status_sub_.start(NodeStatusCallback(this, &NodeDiscoverer::handleNodeStatus)); if (res < 0) { return res; } // Note: the timer starts ad-hoc from the node status callback, not here. return 0; }
/** * Starts the object. Once started, it can't be stopped unless destroyed. * * @param node_info_retriever The object will register itself against this retriever. * When the destructor is called, the object will unregister itself. * * @param common_path_prefix If set, this path will be prefixed to all firmware pathes provided by the * application interface. The prefix does not need to end with path separator; * the last trailing one will be removed (so use '//' if you need '/'). * By default the prefix is empty. * * @return Negative error code. */ int start(NodeInfoRetriever& node_info_retriever, const FirmwareFilePath& arg_common_path_prefix = FirmwareFilePath(), const TransferPriority priority = TransferPriority::OneHigherThanLowest) { /* * Configuring the node info retriever */ node_info_retriever_ = &node_info_retriever; int res = node_info_retriever_->addListener(this); if (res < 0) { return res; } /* * Initializing the prefix, removing only the last trailing path separator. */ common_path_prefix_ = arg_common_path_prefix; if (!common_path_prefix_.empty() && *(common_path_prefix_.end() - 1) == protocol::file::Path::SEPARATOR) { common_path_prefix_.resize(uint8_t(common_path_prefix_.size() - 1U)); } /* * Initializing the client */ res = begin_fw_update_client_.init(priority); if (res < 0) { return res; } begin_fw_update_client_.setCallback( BeginFirmwareUpdateResponseCallback(this, &FirmwareUpdateTrigger::handleBeginFirmwareUpdateResponse)); // The timer will be started ad-hoc return 0; }
int call(uavcan::NodeID node_id, const typename DataType::Request& request) { client.setCallback(collector.bind()); return client.call(node_id, request); }