From ae63ad5db51d62d762a1223f2bf99b9a6086700f Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Fri, 28 Mar 2014 19:21:08 +0400 Subject: [PATCH] Meaningful error codes instead of plain -1 --- libuavcan/include/uavcan/error.hpp | 29 +++++++++++++++++++ libuavcan/include/uavcan/marshal/array.hpp | 7 +++-- .../include/uavcan/marshal/float_spec.hpp | 2 +- .../include/uavcan/node/generic_publisher.hpp | 22 +++++++------- .../uavcan/node/generic_subscriber.hpp | 18 +++++++----- libuavcan/include/uavcan/node/node.hpp | 5 ++-- libuavcan/include/uavcan/node/publisher.hpp | 2 +- libuavcan/include/uavcan/node/scheduler.hpp | 1 + .../include/uavcan/node/service_client.hpp | 8 ++--- .../include/uavcan/node/service_server.hpp | 2 +- libuavcan/include/uavcan/node/subscriber.hpp | 2 +- .../uavcan/protocol/panic_listener.hpp | 2 +- libuavcan/include/uavcan/transport/can_io.hpp | 1 + .../include/uavcan/transport/dispatcher.hpp | 1 + .../uavcan/transport/transfer_buffer.hpp | 5 ++-- .../uavcan/transport/transfer_listener.hpp | 1 + .../uavcan/transport/transfer_sender.hpp | 1 + libuavcan/src/node/scheduler.cpp | 2 +- .../src/protocol/data_type_info_provider.cpp | 2 +- .../src/protocol/global_time_sync_master.cpp | 4 +-- libuavcan/src/protocol/node_initializer.cpp | 2 +- .../src/protocol/node_status_provider.cpp | 6 ++-- libuavcan/src/protocol/param_server.cpp | 2 +- libuavcan/src/transport/can_io.cpp | 8 ++--- libuavcan/src/transport/dispatcher.cpp | 4 +-- libuavcan/src/transport/frame.cpp | 2 +- libuavcan/src/transport/transfer_buffer.cpp | 5 ++-- libuavcan/src/transport/transfer_listener.cpp | 6 ++-- libuavcan/src/transport/transfer_sender.cpp | 6 ++-- libuavcan/test/marshal/array.cpp | 4 +-- libuavcan/test/node/node.cpp | 2 +- libuavcan/test/node/service_client.cpp | 2 +- libuavcan/test/node/subscriber.cpp | 10 +++---- libuavcan/test/transport/can/io.cpp | 9 +++--- 34 files changed, 112 insertions(+), 73 deletions(-) create mode 100644 libuavcan/include/uavcan/error.hpp diff --git a/libuavcan/include/uavcan/error.hpp b/libuavcan/include/uavcan/error.hpp new file mode 100644 index 0000000000..7f559ac77e --- /dev/null +++ b/libuavcan/include/uavcan/error.hpp @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2014 Pavel Kirienko + */ + +#pragma once + +namespace uavcan +{ +/** + * Common error codes. + * Functions that return signed integers may also return inverted error codes, + * i.e. returned value should be inverted back to get the actual error code. + */ +enum +{ + ErrOk, + ErrFailure, + ErrInvalidParam, + ErrMemory, + ErrDriver, + ErrUnknownDataType, + ErrInvalidMarshalData, + ErrInvalidTransferListener, + ErrNotInited, + ErrRecursiveCall, + ErrLogic +}; + +} diff --git a/libuavcan/include/uavcan/marshal/array.hpp b/libuavcan/include/uavcan/marshal/array.hpp index 6b9704fe8e..c8a6c0ca94 100644 --- a/libuavcan/include/uavcan/marshal/array.hpp +++ b/libuavcan/include/uavcan/marshal/array.hpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -308,7 +309,7 @@ class Array : public ArrayImpl } if (size() == MaxSize_) // Error: Max array length reached, but the end of stream is not { - return -1; + return -ErrInvalidMarshalData; } push_back(value); } @@ -323,7 +324,7 @@ class Array : public ArrayImpl } if ((sz > 0) && ((sz - 1u) > (MaxSize_ - 1u))) // -Werror=type-limits { - return -1; + return -ErrInvalidMarshalData; } resize(sz); if (sz == 0) @@ -333,7 +334,7 @@ class Array : public ArrayImpl return decodeImpl(codec, tao_mode, FalseType()); } assert(0); // Unreachable - return -1; + return -ErrLogic; } public: diff --git a/libuavcan/include/uavcan/marshal/float_spec.hpp b/libuavcan/include/uavcan/marshal/float_spec.hpp index e63755365f..6481d06efd 100644 --- a/libuavcan/include/uavcan/marshal/float_spec.hpp +++ b/libuavcan/include/uavcan/marshal/float_spec.hpp @@ -5,13 +5,13 @@ #pragma once #include +#include #include #include #include #include #include #include -#include #ifndef UAVCAN_CPP_VERSION # error UAVCAN_CPP_VERSION diff --git a/libuavcan/include/uavcan/node/generic_publisher.hpp b/libuavcan/include/uavcan/node/generic_publisher.hpp index 38874c59d5..2c06ad883f 100644 --- a/libuavcan/include/uavcan/node/generic_publisher.hpp +++ b/libuavcan/include/uavcan/node/generic_publisher.hpp @@ -4,6 +4,7 @@ #pragma once +#include #include #include #include @@ -35,11 +36,11 @@ class GenericPublisher INode& node_; LazyConstructor sender_; - bool checkInit() + int checkInit() { if (sender_) { - return true; + return 0; } GlobalDataTypeRegistry::instance().freeze(); @@ -50,11 +51,11 @@ class GenericPublisher if (!descr) { UAVCAN_TRACE("GenericPublisher", "Type [%s] is not registered", DataSpec::getDataTypeFullName()); - return false; + return -ErrUnknownDataType; } sender_.template construct (node_.getDispatcher(), *descr, CanTxQueue::Qos(Qos), max_transfer_interval_); - return true; + return 0; } MonotonicTime getTxDeadline() const { return node_.getMonotonicTime() + tx_timeout_; } @@ -67,15 +68,16 @@ class GenericPublisher int genericPublish(const DataStruct& message, TransferType transfer_type, NodeID dst_node_id, TransferID* tid, MonotonicTime blocking_deadline) { - if (!checkInit()) + const int res = checkInit(); + if (res < 0) { - return -1; + return res; } IMarshalBuffer* const buf = getBuffer(); if (!buf) { - return -1; + return -ErrMemory; } { @@ -85,7 +87,7 @@ class GenericPublisher if (encode_res <= 0) { assert(0); // Impossible, internal error - return -1; + return -ErrInvalidMarshalData; } } if (tid) @@ -117,7 +119,7 @@ public: int init() { - return checkInit() ? 0 : -1; + return checkInit(); } int publish(const DataStruct& message, TransferType transfer_type, NodeID dst_node_id, @@ -134,7 +136,7 @@ public: TransferSender* getTransferSender() { - checkInit(); + (void)checkInit(); return sender_.isConstructed() ? static_cast(sender_) : NULL; } diff --git a/libuavcan/include/uavcan/node/generic_subscriber.hpp b/libuavcan/include/uavcan/node/generic_subscriber.hpp index 700aa99681..e6a94bc7d8 100644 --- a/libuavcan/include/uavcan/node/generic_subscriber.hpp +++ b/libuavcan/include/uavcan/node/generic_subscriber.hpp @@ -4,6 +4,7 @@ #pragma once +#include #include #include #include @@ -113,11 +114,11 @@ class GenericSubscriber : Noncopyable ReceivedDataStructureSpec message_; uint32_t failure_count_; - bool checkInit() + int checkInit() { if (forwarder_) { - return true; + return 0; } GlobalDataTypeRegistry::instance().freeze(); @@ -128,11 +129,11 @@ class GenericSubscriber : Noncopyable if (!descr) { UAVCAN_TRACE("GenericSubscriber", "Type [%s] is not registered", DataSpec::getDataTypeFullName()); - return false; + return -ErrUnknownDataType; } forwarder_.template construct (*this, *descr, node_.getAllocator()); - return true; + return 0; } bool decodeTransfer(IncomingTransfer& transfer) @@ -167,19 +168,20 @@ class GenericSubscriber : Noncopyable { stop(); - if (!checkInit()) + const int res = checkInit(); + if (res < 0) { UAVCAN_TRACE("GenericSubscriber", "Initialization failure [%s]", DataSpec::getDataTypeFullName()); - return -1; + return res; } if (!(node_.getDispatcher().*registration_method)(forwarder_)) { UAVCAN_TRACE("GenericSubscriber", "Failed to register transfer listener [%s]", DataSpec::getDataTypeFullName()); - return -1; + return -ErrInvalidTransferListener; } - return 1; + return 0; } protected: diff --git a/libuavcan/include/uavcan/node/node.hpp b/libuavcan/include/uavcan/node/node.hpp index 6e08d470a6..3861f32f77 100644 --- a/libuavcan/include/uavcan/node/node.hpp +++ b/libuavcan/include/uavcan/node/node.hpp @@ -5,6 +5,7 @@ #pragma once #include +#include #include #include #include @@ -94,7 +95,7 @@ public: { return INode::spin(deadline); } - return -1; + return -ErrNotInited; } int spin(MonotonicDuration duration) @@ -103,7 +104,7 @@ public: { return INode::spin(duration); } - return -1; + return -ErrNotInited; } bool isStarted() const { return started_; } diff --git a/libuavcan/include/uavcan/node/publisher.hpp b/libuavcan/include/uavcan/node/publisher.hpp index 9f7f1c6054..f5a6628c7e 100644 --- a/libuavcan/include/uavcan/node/publisher.hpp +++ b/libuavcan/include/uavcan/node/publisher.hpp @@ -37,7 +37,7 @@ public: if (!dst_node_id.isUnicast()) { assert(0); - return -1; + return -ErrInvalidParam; } return publish(message, TransferTypeMessageUnicast, dst_node_id); } diff --git a/libuavcan/include/uavcan/node/scheduler.hpp b/libuavcan/include/uavcan/node/scheduler.hpp index 363ea4ab96..b914c8bf82 100644 --- a/libuavcan/include/uavcan/node/scheduler.hpp +++ b/libuavcan/include/uavcan/node/scheduler.hpp @@ -4,6 +4,7 @@ #pragma once +#include #include #include diff --git a/libuavcan/include/uavcan/node/service_client.hpp b/libuavcan/include/uavcan/node/service_client.hpp index 40f7ace84b..ab09addd5e 100644 --- a/libuavcan/include/uavcan/node/service_client.hpp +++ b/libuavcan/include/uavcan/node/service_client.hpp @@ -182,7 +182,7 @@ public: if (!isCallbackValid()) { UAVCAN_TRACE("ServiceClient", "Invalid callback"); - return -1; + return -ErrInvalidParam; } pending_ = true; @@ -196,7 +196,7 @@ public: { UAVCAN_TRACE("ServiceClient", "Type [%s] is not registered", DataType::getDataTypeFullName()); cancel(); - return -1; + return -ErrUnknownDataType; } /* @@ -211,7 +211,7 @@ public: { UAVCAN_TRACE("ServiceClient", "OTR access failure, dtd=%s", descr->toString().c_str()); cancel(); - return -1; + return -ErrMemory; } const TransferID transfer_id = *otr_tid; otr_tid->increment(); @@ -235,7 +235,7 @@ public: { assert(0); // Must have been created cancel(); - return -1; + return -ErrLogic; } const typename TransferListenerType::ExpectedResponseParams erp(server_node_id, transfer_id); tl->setExpectedResponseParams(erp); diff --git a/libuavcan/include/uavcan/node/service_server.hpp b/libuavcan/include/uavcan/node/service_server.hpp index 3e55495c1c..b8899023b9 100644 --- a/libuavcan/include/uavcan/node/service_server.hpp +++ b/libuavcan/include/uavcan/node/service_server.hpp @@ -91,7 +91,7 @@ public: if (!try_implicit_cast(callback, true)) { UAVCAN_TRACE("ServiceServer", "Invalid callback"); - return -1; + return -ErrInvalidParam; } callback_ = callback; diff --git a/libuavcan/include/uavcan/node/subscriber.hpp b/libuavcan/include/uavcan/node/subscriber.hpp index f8c2b7cd59..fa5a78e0e0 100644 --- a/libuavcan/include/uavcan/node/subscriber.hpp +++ b/libuavcan/include/uavcan/node/subscriber.hpp @@ -67,7 +67,7 @@ public: if (!try_implicit_cast(callback, true)) { UAVCAN_TRACE("Subscriber", "Invalid callback"); - return -1; + return -ErrInvalidParam; } callback_ = callback; diff --git a/libuavcan/include/uavcan/protocol/panic_listener.hpp b/libuavcan/include/uavcan/protocol/panic_listener.hpp index 60f0f18cbd..1fc6bc56c4 100644 --- a/libuavcan/include/uavcan/protocol/panic_listener.hpp +++ b/libuavcan/include/uavcan/protocol/panic_listener.hpp @@ -101,7 +101,7 @@ public: if (!try_implicit_cast(callback, true)) { UAVCAN_TRACE("PanicListener", "Invalid callback"); - return -1; + return -ErrInvalidParam; } callback_ = callback; return sub_.start(PanicMsgCallback(this, &PanicListener::handleMsg)); diff --git a/libuavcan/include/uavcan/transport/can_io.hpp b/libuavcan/include/uavcan/transport/can_io.hpp index c6a28daf1f..11482537cb 100644 --- a/libuavcan/include/uavcan/transport/can_io.hpp +++ b/libuavcan/include/uavcan/transport/can_io.hpp @@ -6,6 +6,7 @@ #pragma once #include +#include #include #include #include diff --git a/libuavcan/include/uavcan/transport/dispatcher.hpp b/libuavcan/include/uavcan/transport/dispatcher.hpp index d1b25b9143..f0dbe4dbaf 100644 --- a/libuavcan/include/uavcan/transport/dispatcher.hpp +++ b/libuavcan/include/uavcan/transport/dispatcher.hpp @@ -5,6 +5,7 @@ #pragma once #include +#include #include #include #include diff --git a/libuavcan/include/uavcan/transport/transfer_buffer.hpp b/libuavcan/include/uavcan/transport/transfer_buffer.hpp index 1226167b19..f7e395495d 100644 --- a/libuavcan/include/uavcan/transport/transfer_buffer.hpp +++ b/libuavcan/include/uavcan/transport/transfer_buffer.hpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -166,7 +167,7 @@ public: if (!data) { assert(0); - return -1; + return -ErrInvalidParam; } if (offset >= max_write_pos_) { @@ -186,7 +187,7 @@ public: if (!data) { assert(0); - return -1; + return -ErrInvalidParam; } if (offset >= Size) { diff --git a/libuavcan/include/uavcan/transport/transfer_listener.hpp b/libuavcan/include/uavcan/transport/transfer_listener.hpp index 597a3c8ffb..94d52b9e59 100644 --- a/libuavcan/include/uavcan/transport/transfer_listener.hpp +++ b/libuavcan/include/uavcan/transport/transfer_listener.hpp @@ -6,6 +6,7 @@ #include #include +#include #include #include #include diff --git a/libuavcan/include/uavcan/transport/transfer_sender.hpp b/libuavcan/include/uavcan/transport/transfer_sender.hpp index a10f47b7b2..2e529ef074 100644 --- a/libuavcan/include/uavcan/transport/transfer_sender.hpp +++ b/libuavcan/include/uavcan/transport/transfer_sender.hpp @@ -6,6 +6,7 @@ #include #include +#include #include #include #include diff --git a/libuavcan/src/node/scheduler.cpp b/libuavcan/src/node/scheduler.cpp index 3e0e12b3ad..07ad39e75a 100644 --- a/libuavcan/src/node/scheduler.cpp +++ b/libuavcan/src/node/scheduler.cpp @@ -157,7 +157,7 @@ int Scheduler::spin(MonotonicTime deadline) if (inside_spin_) // Preventing recursive calls { assert(0); - return -1; + return -ErrRecursiveCall; } inside_spin_ = true; diff --git a/libuavcan/src/protocol/data_type_info_provider.cpp b/libuavcan/src/protocol/data_type_info_provider.cpp index 691853aa22..34c3867cce 100644 --- a/libuavcan/src/protocol/data_type_info_provider.cpp +++ b/libuavcan/src/protocol/data_type_info_provider.cpp @@ -84,7 +84,7 @@ void DataTypeInfoProvider::handleGetDataTypeInfoRequest(const protocol::GetDataT int DataTypeInfoProvider::start() { - int res = -1; + int res = 0; res = cats_srv_.start( ComputeAggregateTypeSignatureCallback(this, &DataTypeInfoProvider::handleComputeAggregateTypeSignatureRequest)); diff --git a/libuavcan/src/protocol/global_time_sync_master.cpp b/libuavcan/src/protocol/global_time_sync_master.cpp index 10991dc4cd..59df86526d 100644 --- a/libuavcan/src/protocol/global_time_sync_master.cpp +++ b/libuavcan/src/protocol/global_time_sync_master.cpp @@ -108,12 +108,12 @@ int GlobalTimeSyncMaster::init() GlobalDataTypeRegistry::instance().find(DataTypeKindMessage, protocol::GlobalTimeSync::getDataTypeFullName()); if (desc == NULL) { - return -1; + return -ErrUnknownDataType; } dtid_ = desc->getID(); // Iface master array - int res = -1; + int res = -ErrLogic; for (uint8_t i = 0; i < MaxCanIfaces; i++) { if (!iface_masters_[i].isConstructed()) diff --git a/libuavcan/src/protocol/node_initializer.cpp b/libuavcan/src/protocol/node_initializer.cpp index 4c9709feaa..52b194663c 100644 --- a/libuavcan/src/protocol/node_initializer.cpp +++ b/libuavcan/src/protocol/node_initializer.cpp @@ -105,7 +105,7 @@ int NodeInitializer::checkOneNodeOneDataTypeKind(NodeID nid, DataTypeKind kind) } if (!last_cats_request_ok_) { - return -1; + return -ErrFailure; } return 0; } diff --git a/libuavcan/src/protocol/node_status_provider.cpp b/libuavcan/src/protocol/node_status_provider.cpp index 74fcc558f1..2809dc83cb 100644 --- a/libuavcan/src/protocol/node_status_provider.cpp +++ b/libuavcan/src/protocol/node_status_provider.cpp @@ -59,15 +59,13 @@ void NodeStatusProvider::handleGetNodeInfoRequest(const protocol::GetNodeInfo::R int NodeStatusProvider::startAndPublish() { - int res = -1; - if (!isNodeInfoInitialized()) { UAVCAN_TRACE("NodeStatusProvider", "Node info was not initialized"); - return -1; + return -ErrNotInited; } - res = publish(); // Initial broadcast + int res = publish(); // Initial broadcast if (res < 0) { goto fail; diff --git a/libuavcan/src/protocol/param_server.cpp b/libuavcan/src/protocol/param_server.cpp index 11e54eb421..fc9fd1a69e 100644 --- a/libuavcan/src/protocol/param_server.cpp +++ b/libuavcan/src/protocol/param_server.cpp @@ -73,7 +73,7 @@ int ParamServer::start(IParamManager* manager) { if (manager == NULL) { - return -1; + return -ErrInvalidParam; } manager_ = manager; diff --git a/libuavcan/src/transport/can_io.cpp b/libuavcan/src/transport/can_io.cpp index 36bc6190ea..d3e05b16a1 100644 --- a/libuavcan/src/transport/can_io.cpp +++ b/libuavcan/src/transport/can_io.cpp @@ -219,7 +219,7 @@ int CanIOManager::sendToIface(int iface_index, const CanFrame& frame, MonotonicT if (iface == NULL) { assert(0); // Nonexistent interface - return -1; + return -ErrLogic; } const int res = iface->send(frame, tx_deadline, flags); if (res != 1) @@ -311,7 +311,7 @@ int CanIOManager::send(const CanFrame& frame, MonotonicTime tx_deadline, Monoton const int select_res = driver_.select(masks, blocking_deadline); if (select_res < 0) { - return select_res; + return -ErrDriver; } assert(masks.read == 0); } @@ -383,7 +383,7 @@ int CanIOManager::receive(CanRxFrame& out_frame, MonotonicTime blocking_deadline const int select_res = driver_.select(masks, blocking_deadline); if (select_res < 0) { - return select_res; + return -ErrDriver; } } @@ -418,7 +418,7 @@ int CanIOManager::receive(CanRxFrame& out_frame, MonotonicTime blocking_deadline { counters_[i].frames_rx += 1; } - return res; + return (res < 0) ? -ErrDriver : res; } } diff --git a/libuavcan/src/transport/dispatcher.cpp b/libuavcan/src/transport/dispatcher.cpp index 1445ae9139..244bf17c0d 100644 --- a/libuavcan/src/transport/dispatcher.cpp +++ b/libuavcan/src/transport/dispatcher.cpp @@ -226,7 +226,7 @@ int Dispatcher::send(const Frame& frame, MonotonicTime tx_deadline, MonotonicTim if (frame.getSrcNodeID() != getNodeID()) { assert(0); - return -1; + return -ErrLogic; } CanFrame can_frame; @@ -234,7 +234,7 @@ int Dispatcher::send(const Frame& frame, MonotonicTime tx_deadline, MonotonicTim { UAVCAN_TRACE("Dispatcher", "Unable to send: frame is malformed: %s", frame.toString().c_str()); assert(0); - return -1; + return -ErrLogic; } return canio_.send(can_frame, tx_deadline, blocking_deadline, iface_mask, qos, flags); } diff --git a/libuavcan/src/transport/frame.cpp b/libuavcan/src/transport/frame.cpp index ed592e5ff4..4e96ece30a 100644 --- a/libuavcan/src/transport/frame.cpp +++ b/libuavcan/src/transport/frame.cpp @@ -29,7 +29,7 @@ int Frame::getMaxPayloadLen() const } default: assert(0); - return -1; + return -ErrLogic; } } diff --git a/libuavcan/src/transport/transfer_buffer.cpp b/libuavcan/src/transport/transfer_buffer.cpp index b3b61bd6fc..c322135c4a 100644 --- a/libuavcan/src/transport/transfer_buffer.cpp +++ b/libuavcan/src/transport/transfer_buffer.cpp @@ -113,7 +113,7 @@ int DynamicTransferBufferManagerEntry::read(unsigned int offset, uint8_t* data, if (!data) { assert(0); - return -1; + return -ErrInvalidParam; } if (offset >= max_write_pos_) { @@ -148,7 +148,7 @@ int DynamicTransferBufferManagerEntry::write(unsigned int offset, const uint8_t* if (!data) { assert(0); - return -1; + return -ErrInvalidParam; } if (offset >= max_size_) @@ -190,7 +190,6 @@ int DynamicTransferBufferManagerEntry::write(unsigned int offset, const uint8_t* if (new_block == NULL) { break; // We're in deep shit. - } // Appending the chain with the new block if (last_written_block != NULL) diff --git a/libuavcan/src/transport/transfer_listener.cpp b/libuavcan/src/transport/transfer_listener.cpp index 4238ba3650..8fadd0e7ae 100644 --- a/libuavcan/src/transport/transfer_listener.cpp +++ b/libuavcan/src/transport/transfer_listener.cpp @@ -15,7 +15,7 @@ namespace uavcan int IncomingTransfer::write(unsigned int, const uint8_t*, unsigned int) { assert(0); // Incoming transfer container is read-only - return -1; + return -ErrLogic; } /* @@ -35,7 +35,7 @@ int SingleFrameIncomingTransfer::read(unsigned int offset, uint8_t* data, unsign if (data == NULL) { assert(0); - return -1; + return -ErrInvalidParam; } if (offset >= payload_len_) { @@ -69,7 +69,7 @@ int MultiFrameIncomingTransfer::read(unsigned int offset, uint8_t* data, unsigne if (tbb == NULL) { UAVCAN_TRACE("MultiFrameIncomingTransfer", "Read failed: no such buffer"); - return -1; + return -ErrLogic; } return tbb->read(offset, data, len); } diff --git a/libuavcan/src/transport/transfer_sender.cpp b/libuavcan/src/transport/transfer_sender.cpp index d80ba8ec24..11c29307bf 100644 --- a/libuavcan/src/transport/transfer_sender.cpp +++ b/libuavcan/src/transport/transfer_sender.cpp @@ -31,7 +31,7 @@ int TransferSender::send(const uint8_t* payload, int payload_len, MonotonicTime assert(0); UAVCAN_TRACE("TransferSender", "Frame payload write failure, %i", res); registerError(); - return (res < 0) ? res : -1; + return (res < 0) ? res : -ErrLogic; } frame.makeLast(); assert(frame.isLast() && frame.isFirst()); @@ -97,7 +97,7 @@ int TransferSender::send(const uint8_t* payload, int payload_len, MonotonicTime } assert(0); - return -1; // Return path analysis is apparently broken. There should be no warning, this 'return' is unreachable. + return -ErrLogic; // Return path analysis is apparently broken. There should be no warning, this 'return' is unreachable. } int TransferSender::send(const uint8_t* payload, int payload_len, MonotonicTime tx_deadline, @@ -113,7 +113,7 @@ int TransferSender::send(const uint8_t* payload, int payload_len, MonotonicTime { UAVCAN_TRACE("TransferSender", "OTR access failure, dtd=%s tt=%i", data_type_.toString().c_str(), int(transfer_type)); - return -1; + return -ErrMemory; } const TransferID this_tid = tid->get(); diff --git a/libuavcan/test/marshal/array.cpp b/libuavcan/test/marshal/array.cpp index ae6e0555a9..be72a73b8e 100644 --- a/libuavcan/test/marshal/array.cpp +++ b/libuavcan/test/marshal/array.cpp @@ -552,7 +552,7 @@ TEST(Array, TailArrayOptimizationErrors) a2.push_back(56); // Garbage ASSERT_EQ(1, a2.size()); // Will fail - declared length is more than 5 items - ASSERT_EQ(-1, A::decode(a2, sc_rd, uavcan::TailArrayOptDisabled)); + ASSERT_GT(0, A::decode(a2, sc_rd, uavcan::TailArrayOptDisabled)); // Must be cleared ASSERT_TRUE(a2.empty()); } @@ -563,7 +563,7 @@ TEST(Array, TailArrayOptimizationErrors) a2.push_back(56); // Garbage ASSERT_EQ(1, a2.size()); // Will fail - no length field, but the stream is too long - ASSERT_EQ(-1, A::decode(a2, sc_rd, uavcan::TailArrayOptEnabled)); + ASSERT_GT(0, A::decode(a2, sc_rd, uavcan::TailArrayOptEnabled)); // Will contain some garbage ASSERT_EQ(5, a2.size()); // Interpreted stream - see the values above diff --git a/libuavcan/test/node/node.cpp b/libuavcan/test/node/node.cpp index 6d6d8115b8..3202c932c2 100644 --- a/libuavcan/test/node/node.cpp +++ b/libuavcan/test/node/node.cpp @@ -67,7 +67,7 @@ TEST(Node, Basic) * Init the first node */ ASSERT_FALSE(node1.isStarted()); - ASSERT_EQ(-1, node1.spin(uavcan::MonotonicDuration::fromMSec(20))); // Not initialized - will fail + ASSERT_EQ(-uavcan::ErrNotInited, node1.spin(uavcan::MonotonicDuration::fromMSec(20))); ASSERT_LE(0, node1.start(result)); ASSERT_TRUE(node1.isStarted()); diff --git a/libuavcan/test/node/service_client.cpp b/libuavcan/test/node/service_client.cpp index 59d6864963..e6a390f2c3 100644 --- a/libuavcan/test/node/service_client.cpp +++ b/libuavcan/test/node/service_client.cpp @@ -63,7 +63,7 @@ TEST(ServiceClient, Basic) // Server uavcan::ServiceServer server(nodes.a); - ASSERT_EQ(1, server.start(stringServiceServerCallback)); + ASSERT_EQ(0, server.start(stringServiceServerCallback)); { // Caller diff --git a/libuavcan/test/node/subscriber.cpp b/libuavcan/test/node/subscriber.cpp index 80951e52ef..7f22d0fad8 100644 --- a/libuavcan/test/node/subscriber.cpp +++ b/libuavcan/test/node/subscriber.cpp @@ -82,7 +82,7 @@ TEST(Subscriber, Basic) sizeof(uavcan::Subscriber) << std::endl; // Null binder - will fail - ASSERT_EQ(-1, sub_extended.start(Listener::ExtendedBinder(NULL, NULL))); + ASSERT_EQ(-uavcan::ErrInvalidParam, sub_extended.start(Listener::ExtendedBinder(NULL, NULL))); Listener listener; @@ -125,10 +125,10 @@ TEST(Subscriber, Basic) */ ASSERT_EQ(0, node.getDispatcher().getNumMessageListeners()); - ASSERT_EQ(1, sub_extended.start(listener.bindExtended())); - ASSERT_EQ(1, sub_extended2.start(listener.bindExtended())); - ASSERT_EQ(1, sub_simple.start(listener.bindSimple())); - ASSERT_EQ(1, sub_simple2.start(listener.bindSimple())); + ASSERT_EQ(0, sub_extended.start(listener.bindExtended())); + ASSERT_EQ(0, sub_extended2.start(listener.bindExtended())); + ASSERT_EQ(0, sub_simple.start(listener.bindSimple())); + ASSERT_EQ(0, sub_simple2.start(listener.bindSimple())); ASSERT_EQ(4, node.getDispatcher().getNumMessageListeners()); diff --git a/libuavcan/test/transport/can/io.cpp b/libuavcan/test/transport/can/io.cpp index da007016f7..2ccceb6f9e 100644 --- a/libuavcan/test/transport/can/io.cpp +++ b/libuavcan/test/transport/can/io.cpp @@ -94,12 +94,12 @@ TEST(CanIOManager, Reception) * Perf counters */ driver.select_failure = true; - EXPECT_EQ(-1, iomgr.receive(frame, uavcan::MonotonicTime(), flags)); + EXPECT_EQ(-uavcan::ErrDriver, iomgr.receive(frame, uavcan::MonotonicTime(), flags)); driver.select_failure = false; driver.ifaces.at(1).pushRx(frames[0][0]); driver.ifaces.at(1).rx_failure = true; - EXPECT_EQ(-1, iomgr.receive(frame, uavcan::MonotonicTime(), flags)); + EXPECT_EQ(-uavcan::ErrDriver, iomgr.receive(frame, uavcan::MonotonicTime(), flags)); driver.ifaces.at(0).num_errors = 9000; driver.ifaces.at(1).num_errors = 100500; @@ -268,8 +268,9 @@ TEST(CanIOManager, Transmission) */ // Select failure driver.select_failure = true; - EXPECT_EQ(-1, iomgr.receive(rx_frame, tsMono(2000), flags)); - EXPECT_EQ(-1, iomgr.send(frames[0], tsMono(2100), tsMono(2000), ALL_IFACES_MASK, CanTxQueue::Volatile, flags)); + EXPECT_EQ(-uavcan::ErrDriver, iomgr.receive(rx_frame, tsMono(2000), flags)); + EXPECT_EQ(-uavcan::ErrDriver, + iomgr.send(frames[0], tsMono(2100), tsMono(2000), ALL_IFACES_MASK, CanTxQueue::Volatile, flags)); EXPECT_EQ(1200, clockmock.monotonic); EXPECT_EQ(1200, clockmock.utc); ASSERT_EQ(0, flags);