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