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 #include <uhd/types/sensors.h>
9 #include <string.h>
10 #include <stdexcept>
11 #include <string>
12
uhd_sensor_value_make(uhd_sensor_value_handle * h)13 uhd_error uhd_sensor_value_make(uhd_sensor_value_handle* h)
14 {
15 try {
16 *h = new uhd_sensor_value_t;
17 } catch (...) {
18 return UHD_ERROR_UNKNOWN;
19 }
20
21 UHD_SAFE_C_SAVE_ERROR(
22 (*h), (*h)->sensor_value_cpp = new uhd::sensor_value_t("", false, "", "");)
23 }
24
uhd_sensor_value_make_from_bool(uhd_sensor_value_handle * h,const char * name,bool value,const char * utrue,const char * ufalse)25 uhd_error uhd_sensor_value_make_from_bool(uhd_sensor_value_handle* h,
26 const char* name,
27 bool value,
28 const char* utrue,
29 const char* ufalse)
30 {
31 try {
32 *h = new uhd_sensor_value_t;
33 } catch (...) {
34 return UHD_ERROR_UNKNOWN;
35 }
36
37 UHD_SAFE_C_SAVE_ERROR(
38 (*h),
39 (*h)->sensor_value_cpp = new uhd::sensor_value_t(name, value, utrue, ufalse);)
40 }
41
uhd_sensor_value_make_from_int(uhd_sensor_value_handle * h,const char * name,int value,const char * unit,const char * formatter)42 uhd_error uhd_sensor_value_make_from_int(uhd_sensor_value_handle* h,
43 const char* name,
44 int value,
45 const char* unit,
46 const char* formatter)
47 {
48 try {
49 *h = new uhd_sensor_value_t;
50 } catch (...) {
51 return UHD_ERROR_UNKNOWN;
52 }
53
54 UHD_SAFE_C_SAVE_ERROR(
55 (*h), std::string fmt(formatter); if (fmt.empty()) {
56 (*h)->sensor_value_cpp = new uhd::sensor_value_t(name, value, unit);
57 } else {
58 (*h)->sensor_value_cpp = new uhd::sensor_value_t(name, value, unit, fmt);
59 })
60 }
61
uhd_sensor_value_make_from_realnum(uhd_sensor_value_handle * h,const char * name,double value,const char * unit,const char * formatter)62 uhd_error uhd_sensor_value_make_from_realnum(uhd_sensor_value_handle* h,
63 const char* name,
64 double value,
65 const char* unit,
66 const char* formatter)
67 {
68 try {
69 *h = new uhd_sensor_value_t;
70 } catch (...) {
71 return UHD_ERROR_UNKNOWN;
72 }
73
74 UHD_SAFE_C_SAVE_ERROR(
75 (*h), std::string fmt(formatter); if (fmt.empty()) {
76 (*h)->sensor_value_cpp = new uhd::sensor_value_t(name, value, unit);
77 } else {
78 (*h)->sensor_value_cpp = new uhd::sensor_value_t(name, value, unit, fmt);
79 })
80 }
81
uhd_sensor_value_make_from_string(uhd_sensor_value_handle * h,const char * name,const char * value,const char * unit)82 uhd_error uhd_sensor_value_make_from_string(
83 uhd_sensor_value_handle* h, const char* name, const char* value, const char* unit)
84 {
85 try {
86 *h = new uhd_sensor_value_t;
87 } catch (...) {
88 return UHD_ERROR_UNKNOWN;
89 }
90
91 UHD_SAFE_C_SAVE_ERROR(
92 (*h), (*h)->sensor_value_cpp = new uhd::sensor_value_t(name, value, unit);)
93 }
94
uhd_sensor_value_free(uhd_sensor_value_handle * h)95 uhd_error uhd_sensor_value_free(uhd_sensor_value_handle* h)
96 {
97 UHD_SAFE_C(delete (*h)->sensor_value_cpp; delete *h; *h = NULL;)
98 }
99
uhd_sensor_value_to_bool(uhd_sensor_value_handle h,bool * value_out)100 uhd_error uhd_sensor_value_to_bool(uhd_sensor_value_handle h, bool* value_out)
101 {
102 UHD_SAFE_C_SAVE_ERROR(h, *value_out = h->sensor_value_cpp->to_bool();)
103 }
104
uhd_sensor_value_to_int(uhd_sensor_value_handle h,int * value_out)105 uhd_error uhd_sensor_value_to_int(uhd_sensor_value_handle h, int* value_out)
106 {
107 UHD_SAFE_C_SAVE_ERROR(h, *value_out = h->sensor_value_cpp->to_int();)
108 }
109
uhd_sensor_value_to_realnum(uhd_sensor_value_handle h,double * value_out)110 uhd_error uhd_sensor_value_to_realnum(uhd_sensor_value_handle h, double* value_out)
111 {
112 UHD_SAFE_C_SAVE_ERROR(h, *value_out = h->sensor_value_cpp->to_real();)
113 }
114
uhd_sensor_value_name(uhd_sensor_value_handle h,char * name_out,size_t strbuffer_len)115 uhd_error uhd_sensor_value_name(
116 uhd_sensor_value_handle h, char* name_out, size_t strbuffer_len)
117 {
118 UHD_SAFE_C_SAVE_ERROR(h, memset(name_out, '\0', strbuffer_len); strncpy(
119 name_out, h->sensor_value_cpp->name.c_str(), strbuffer_len);)
120 }
121
uhd_sensor_value_value(uhd_sensor_value_handle h,char * value_out,size_t strbuffer_len)122 uhd_error uhd_sensor_value_value(
123 uhd_sensor_value_handle h, char* value_out, size_t strbuffer_len)
124 {
125 UHD_SAFE_C_SAVE_ERROR(h, memset(value_out, '\0', strbuffer_len); strncpy(
126 value_out, h->sensor_value_cpp->value.c_str(), strbuffer_len);)
127 }
128
uhd_sensor_value_unit(uhd_sensor_value_handle h,char * unit_out,size_t strbuffer_len)129 uhd_error uhd_sensor_value_unit(
130 uhd_sensor_value_handle h, char* unit_out, size_t strbuffer_len)
131 {
132 UHD_SAFE_C_SAVE_ERROR(h, memset(unit_out, '\0', strbuffer_len); strncpy(
133 unit_out, h->sensor_value_cpp->unit.c_str(), strbuffer_len);)
134 }
135
uhd_sensor_value_data_type(uhd_sensor_value_handle h,uhd_sensor_value_data_type_t * data_type_out)136 uhd_error uhd_sensor_value_data_type(
137 uhd_sensor_value_handle h, uhd_sensor_value_data_type_t* data_type_out)
138 {
139 UHD_SAFE_C_SAVE_ERROR(
140 h, *data_type_out = uhd_sensor_value_data_type_t(h->sensor_value_cpp->type);)
141 }
142
uhd_sensor_value_to_pp_string(uhd_sensor_value_handle h,char * pp_string_out,size_t strbuffer_len)143 uhd_error uhd_sensor_value_to_pp_string(
144 uhd_sensor_value_handle h, char* pp_string_out, size_t strbuffer_len)
145 {
146 UHD_SAFE_C_SAVE_ERROR(
147 h, std::string pp_string_cpp = h->sensor_value_cpp->to_pp_string();
148 memset(pp_string_out, '\0', strbuffer_len);
149 strncpy(pp_string_out, pp_string_cpp.c_str(), strbuffer_len);)
150 }
151
uhd_sensor_value_last_error(uhd_sensor_value_handle h,char * error_out,size_t strbuffer_len)152 uhd_error uhd_sensor_value_last_error(
153 uhd_sensor_value_handle h, char* error_out, size_t strbuffer_len)
154 {
155 UHD_SAFE_C(memset(error_out, '\0', strbuffer_len);
156 strncpy(error_out, h->last_error.c_str(), strbuffer_len);)
157 }
158