1 //
2 // Copyright 2013-2014 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 
9 #pragma once
10 
11 #include <stdio.h>
12 #include <stddef.h>
13 #include <stdint.h>
14 #include <string>
15 #include <uhd/config.hpp>
16 #include <uhd/exception.hpp>
17 
18 #define ENABLE_EXTENDED_ERROR_INFO false
19 
20 typedef int32_t nirio_status;
21 
22 namespace uhd { namespace niusrprio {
23 struct nirio_err_info {
nirio_err_infonirio_err_info24     nirio_err_info(nirio_status arg_code, const char* arg_msg): code(arg_code), msg(arg_msg) {}
25 
26     nirio_status code;
27     const char* msg;
28 
29     static const nirio_err_info NIRIO_ERROR_TABLE[];
30     static const size_t NIRIO_ERROR_TABLE_SIZE;
31 };
32 
33 UHD_API const std::string lookup_err_msg(nirio_status code);
34 
35 UHD_API void nirio_status_to_exception(const nirio_status& status, const std::string& message);
36 }}
37 
38 #define nirio_status_fatal(status) ((status) < 0)
39 #define nirio_status_not_fatal(status) ((status) >= 0)
40 
41 #define nirio_status_chain(func, status) 	\
42 	if (nirio_status_not_fatal(status)) {	\
43 		status = (func);					\
44 		if (ENABLE_EXTENDED_ERROR_INFO && nirio_status_fatal(status)) {	\
45 			fprintf(stderr,"ERROR: The following function call returned status code %d\n%s\n%s:%d\n",status,#func,__FILE__,__LINE__);	\
46 		}									\
47 	}										\
48 
49 
50 #define NIRIO_ERR_INFO(CONST_NAME, ERR_CODE, ERR_MSG) \
51     static const nirio_status CONST_NAME = ERR_CODE;
52 #include "nirio_err_template.h"
53 #undef NIRIO_ERR_INFO
54