Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: UAVCAN UAVCAN_Subscriber
libuavcan_drivers/linux/include/uavcan_linux/exception.hpp@0:dfe6edabb8ec, 2018-04-14 (annotated)
- Committer:
- RuslanUrya
- Date:
- Sat Apr 14 10:25:32 2018 +0000
- Revision:
- 0:dfe6edabb8ec
Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RuslanUrya | 0:dfe6edabb8ec | 1 | /* |
RuslanUrya | 0:dfe6edabb8ec | 2 | * Copyright (C) 2014 Pavel Kirienko <pavel.kirienko@gmail.com> |
RuslanUrya | 0:dfe6edabb8ec | 3 | */ |
RuslanUrya | 0:dfe6edabb8ec | 4 | |
RuslanUrya | 0:dfe6edabb8ec | 5 | #pragma once |
RuslanUrya | 0:dfe6edabb8ec | 6 | |
RuslanUrya | 0:dfe6edabb8ec | 7 | #include <cerrno> |
RuslanUrya | 0:dfe6edabb8ec | 8 | #include <cstring> |
RuslanUrya | 0:dfe6edabb8ec | 9 | #include <stdexcept> |
RuslanUrya | 0:dfe6edabb8ec | 10 | |
RuslanUrya | 0:dfe6edabb8ec | 11 | namespace uavcan_linux |
RuslanUrya | 0:dfe6edabb8ec | 12 | { |
RuslanUrya | 0:dfe6edabb8ec | 13 | /** |
RuslanUrya | 0:dfe6edabb8ec | 14 | * This is the root exception class for all exceptions that can be thrown from the libuavcan Linux driver. |
RuslanUrya | 0:dfe6edabb8ec | 15 | */ |
RuslanUrya | 0:dfe6edabb8ec | 16 | class Exception : public std::runtime_error |
RuslanUrya | 0:dfe6edabb8ec | 17 | { |
RuslanUrya | 0:dfe6edabb8ec | 18 | const int errno_; |
RuslanUrya | 0:dfe6edabb8ec | 19 | |
RuslanUrya | 0:dfe6edabb8ec | 20 | static std::string makeErrorString(const std::string& descr, int use_errno) |
RuslanUrya | 0:dfe6edabb8ec | 21 | { |
RuslanUrya | 0:dfe6edabb8ec | 22 | return descr + " [errno " + std::to_string(use_errno) + " \"" + std::strerror(use_errno) + "\"]"; |
RuslanUrya | 0:dfe6edabb8ec | 23 | } |
RuslanUrya | 0:dfe6edabb8ec | 24 | |
RuslanUrya | 0:dfe6edabb8ec | 25 | public: |
RuslanUrya | 0:dfe6edabb8ec | 26 | explicit Exception(const std::string& descr, int use_errno = errno) |
RuslanUrya | 0:dfe6edabb8ec | 27 | : std::runtime_error(makeErrorString(descr, use_errno)) |
RuslanUrya | 0:dfe6edabb8ec | 28 | , errno_(use_errno) |
RuslanUrya | 0:dfe6edabb8ec | 29 | { } |
RuslanUrya | 0:dfe6edabb8ec | 30 | |
RuslanUrya | 0:dfe6edabb8ec | 31 | /** |
RuslanUrya | 0:dfe6edabb8ec | 32 | * Returns standard UNIX errno value captured at the moment |
RuslanUrya | 0:dfe6edabb8ec | 33 | * when this exception object was constructed. |
RuslanUrya | 0:dfe6edabb8ec | 34 | */ |
RuslanUrya | 0:dfe6edabb8ec | 35 | int getErrno() const { return errno_; } |
RuslanUrya | 0:dfe6edabb8ec | 36 | }; |
RuslanUrya | 0:dfe6edabb8ec | 37 | |
RuslanUrya | 0:dfe6edabb8ec | 38 | /** |
RuslanUrya | 0:dfe6edabb8ec | 39 | * This type is thrown when a Libuavcan API method exits with error. |
RuslanUrya | 0:dfe6edabb8ec | 40 | * The error code is stored in the exception object and is avialable via @ref getLibuavcanErrorCode(). |
RuslanUrya | 0:dfe6edabb8ec | 41 | */ |
RuslanUrya | 0:dfe6edabb8ec | 42 | class LibuavcanErrorException : public Exception |
RuslanUrya | 0:dfe6edabb8ec | 43 | { |
RuslanUrya | 0:dfe6edabb8ec | 44 | const std::int16_t error_; |
RuslanUrya | 0:dfe6edabb8ec | 45 | |
RuslanUrya | 0:dfe6edabb8ec | 46 | static std::string makeErrorString(std::int16_t e) |
RuslanUrya | 0:dfe6edabb8ec | 47 | { |
RuslanUrya | 0:dfe6edabb8ec | 48 | return "Libuavcan error (" + std::to_string(e) + ")"; |
RuslanUrya | 0:dfe6edabb8ec | 49 | } |
RuslanUrya | 0:dfe6edabb8ec | 50 | |
RuslanUrya | 0:dfe6edabb8ec | 51 | public: |
RuslanUrya | 0:dfe6edabb8ec | 52 | explicit LibuavcanErrorException(std::int16_t uavcan_error_code) : |
RuslanUrya | 0:dfe6edabb8ec | 53 | Exception(makeErrorString(uavcan_error_code)), |
RuslanUrya | 0:dfe6edabb8ec | 54 | error_(std::abs(uavcan_error_code)) |
RuslanUrya | 0:dfe6edabb8ec | 55 | { } |
RuslanUrya | 0:dfe6edabb8ec | 56 | |
RuslanUrya | 0:dfe6edabb8ec | 57 | std::int16_t getLibuavcanErrorCode() const { return error_; } |
RuslanUrya | 0:dfe6edabb8ec | 58 | }; |
RuslanUrya | 0:dfe6edabb8ec | 59 | |
RuslanUrya | 0:dfe6edabb8ec | 60 | /** |
RuslanUrya | 0:dfe6edabb8ec | 61 | * This exception is thrown when all available interfaces become down. |
RuslanUrya | 0:dfe6edabb8ec | 62 | */ |
RuslanUrya | 0:dfe6edabb8ec | 63 | class AllIfacesDownException : public Exception |
RuslanUrya | 0:dfe6edabb8ec | 64 | { |
RuslanUrya | 0:dfe6edabb8ec | 65 | public: |
RuslanUrya | 0:dfe6edabb8ec | 66 | AllIfacesDownException() : Exception("All ifaces are down", ENETDOWN) { } |
RuslanUrya | 0:dfe6edabb8ec | 67 | }; |
RuslanUrya | 0:dfe6edabb8ec | 68 | |
RuslanUrya | 0:dfe6edabb8ec | 69 | } |