USRP Hardware Driver and USRP Manual  Version: 4.7.0.0
UHD and USRP Manual
error.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015 Ettus Research LLC
3  * Copyright 2018 Ettus Research, a National Instruments Company
4  *
5  * SPDX-License-Identifier: GPL-3.0-or-later
6  */
7 
8 #pragma once
9 
10 #include <stdlib.h>
11 
13 
20 typedef enum {
21 
26 
31 
36 
41 
58 
61 
64 
67 } uhd_error;
68 
69 #ifdef __cplusplus
70 # include <uhd/config.hpp>
71 # include <uhd/exception.hpp>
72 
73 # include <boost/exception/diagnostic_information.hpp>
74 
75 # include <string>
76 
77 UHD_API uhd_error error_from_uhd_exception(const uhd::exception* e);
78 
80 UHD_API std::string get_c_global_error_string();
81 
82 UHD_API void set_c_global_error_string(const std::string& msg);
83 
89 # define UHD_SAFE_C(...) \
90  try { \
91  __VA_ARGS__ \
92  } catch (const uhd::exception& e) { \
93  set_c_global_error_string(e.what()); \
94  return error_from_uhd_exception(&e); \
95  } catch (const boost::exception& e) { \
96  set_c_global_error_string(boost::diagnostic_information(e)); \
97  return UHD_ERROR_BOOSTEXCEPT; \
98  } catch (const std::exception& e) { \
99  set_c_global_error_string(e.what()); \
100  return UHD_ERROR_STDEXCEPT; \
101  } catch (...) { \
102  set_c_global_error_string("Unrecognized exception caught."); \
103  return UHD_ERROR_UNKNOWN; \
104  } \
105  set_c_global_error_string("None"); \
106  return UHD_ERROR_NONE;
107 
113 # define UHD_SAFE_C_SAVE_ERROR(h, ...) \
114  h->last_error.clear(); \
115  try { \
116  __VA_ARGS__ \
117  } catch (const uhd::exception& e) { \
118  set_c_global_error_string(e.what()); \
119  h->last_error = e.what(); \
120  return error_from_uhd_exception(&e); \
121  } catch (const boost::exception& e) { \
122  set_c_global_error_string(boost::diagnostic_information(e)); \
123  h->last_error = boost::diagnostic_information(e); \
124  return UHD_ERROR_BOOSTEXCEPT; \
125  } catch (const std::exception& e) { \
126  set_c_global_error_string(e.what()); \
127  h->last_error = e.what(); \
128  return UHD_ERROR_STDEXCEPT; \
129  } catch (...) { \
130  set_c_global_error_string("Unrecognized exception caught."); \
131  h->last_error = "Unrecognized exception caught."; \
132  return UHD_ERROR_UNKNOWN; \
133  } \
134  h->last_error = "None"; \
135  set_c_global_error_string("None"); \
136  return UHD_ERROR_NONE;
137 
138 extern "C" {
139 #endif
140 
142 
147 UHD_API uhd_error uhd_get_last_error(char* error_out, size_t strbuffer_len);
148 #ifdef __cplusplus
149 }
150 #endif
Definition: exception.hpp:35
See uhd::runtime_error.
Definition: error.h:51
See uhd::io_error.
Definition: error.h:38
See uhd::system_error.
Definition: error.h:55
UHD_API uhd_error uhd_get_last_error(char *error_out, size_t strbuffer_len)
Return the last error string reported by UHD.
See uhd::not_implemented_error.
Definition: error.h:33
See uhd::exception.
Definition: error.h:57
See uhd::os_error.
Definition: error.h:40
See uhd::assertion_error.
Definition: error.h:43
Invalid device arguments.
Definition: error.h:25
See uhd::environment_error.
Definition: error.h:53
See uhd::key_error.
Definition: error.h:30
uhd_error
UHD error codes.
Definition: error.h:20
See uhd::usb_error.
Definition: error.h:35
See uhd::type_error.
Definition: error.h:47
See uhd::index_error.
Definition: error.h:28
No error thrown.
Definition: error.h:23
#define UHD_API
Definition: config.h:87
See uhd::value_error.
Definition: error.h:49
See uhd::lookup_error.
Definition: error.h:45
An unknown error was thrown.
Definition: error.h:66
A boost::exception was thrown.
Definition: error.h:60
A std::exception was thrown.
Definition: error.h:63