37#ifndef __SCPI_CONFIG_H_
38#define __SCPI_CONFIG_H_
46#define SCPI_MAX_CMD_PATTERN_SIZE 32
49#define LINE_ENDING_CR "\r"
50#define LINE_ENDING_LF "\n"
51#define LINE_ENDING_CRLF "\r\n"
53#ifndef SCPI_LINE_ENDING
54#define SCPI_LINE_ENDING LINE_ENDING_LF
61#define SYSTEM_BARE_METAL 0
62#define SYSTEM_FULL_BLOWN 1
65#if defined(_WIN32) || defined(_WIN64) || defined(__unix) || defined(__unix__) || defined(__APPLE__)
66#define SYSTEM_TYPE SYSTEM_FULL_BLOWN
68#define SYSTEM_TYPE SYSTEM_BARE_METAL
79#ifndef USE_FULL_ERROR_LIST
80#define USE_FULL_ERROR_LIST SYSTEM_TYPE
88#ifndef USE_USER_ERROR_LIST
89#define USE_USER_ERROR_LIST SYSTEM_TYPE
92#ifndef USE_DEVICE_DEPENDENT_ERROR_INFORMATION
93#define USE_DEVICE_DEPENDENT_ERROR_INFORMATION SYSTEM_TYPE
96#if USE_DEVICE_DEPENDENT_ERROR_INFORMATION
97#ifndef USE_MEMORY_ALLOCATION_FREE
98#define USE_MEMORY_ALLOCATION_FREE 1
102#ifndef USE_COMMAND_TAGS
103#define USE_COMMAND_TAGS 1
106#ifndef USE_DEPRECATED_FUNCTIONS
107#define USE_DEPRECATED_FUNCTIONS 1
110#ifndef USE_CUSTOM_DTOSTR
111#define USE_CUSTOM_DTOSTR 0
114#ifndef USE_UNITS_IMPERIAL
115#define USE_UNITS_IMPERIAL 0
118#ifndef USE_UNITS_ANGLE
119#define USE_UNITS_ANGLE SYSTEM_TYPE
122#ifndef USE_UNITS_PARTICLES
123#define USE_UNITS_PARTICLES SYSTEM_TYPE
126#ifndef USE_UNITS_DISTANCE
127#define USE_UNITS_DISTANCE SYSTEM_TYPE
130#ifndef USE_UNITS_MAGNETIC
131#define USE_UNITS_MAGNETIC SYSTEM_TYPE
134#ifndef USE_UNITS_LIGHT
135#define USE_UNITS_LIGHT SYSTEM_TYPE
138#ifndef USE_UNITS_ENERGY_FORCE_MASS
139#define USE_UNITS_ENERGY_FORCE_MASS SYSTEM_TYPE
142#ifndef USE_UNITS_TIME
143#define USE_UNITS_TIME SYSTEM_TYPE
146#ifndef USE_UNITS_TEMPERATURE
147#define USE_UNITS_TEMPERATURE SYSTEM_TYPE
150#ifndef USE_UNITS_RATIO
151#define USE_UNITS_RATIO SYSTEM_TYPE
154#ifndef USE_UNITS_POWER
155#define USE_UNITS_POWER 1
158#ifndef USE_UNITS_FREQUENCY
159#define USE_UNITS_FREQUENCY 1
162#ifndef USE_UNITS_ELECTRIC
163#define USE_UNITS_ELECTRIC 1
166#ifndef USE_UNITS_ELECTRIC_CHARGE_CONDUCTANCE
167#define USE_UNITS_ELECTRIC_CHARGE_CONDUCTANCE SYSTEM_TYPE
172#define SCPIDEFINE_strnlen(s, l) strnlen((s), (l))
174#define SCPIDEFINE_strnlen(s, l) BSD_strnlen((s), (l))
179#define SCPIDEFINE_strncasecmp(s1, s2, l) strncasecmp((s1), (s2), (l))
181#define SCPIDEFINE_strncasecmp(s1, s2, l) strnicmp((s1), (s2), (l))
183#define SCPIDEFINE_strncasecmp(s1, s2, l) OUR_strncasecmp((s1), (s2), (l))
187#define SCPIDEFINE_floatToStr(v, s, l) dtostre((double)(v), (s), 6, DTOSTR_PLUS_SIGN | DTOSTR_ALWAYS_SIGN | DTOSTR_UPPERCASE)
188#elif USE_CUSTOM_DTOSTRE
189#define SCPIDEFINE_floatToStr(v, s, l) SCPI_dtostre((v), (s), (l), 6, 0)
191#define SCPIDEFINE_floatToStr(v, s, l) snprintf((s), (l), "%g", (v))
193#define SCPIDEFINE_floatToStr(v, s, l) SCPI_dtostre((v), (s), (l), 6, 0)
197#define SCPIDEFINE_doubleToStr(v, s, l) dtostre((v), (s), 15, DTOSTR_PLUS_SIGN | DTOSTR_ALWAYS_SIGN | DTOSTR_UPPERCASE)
198#elif USE_CUSTOM_DTOSTRE
199#define SCPIDEFINE_doubleToStr(v, s, l) SCPI_dtostre((v), (s), (l), 15, 0)
201#define SCPIDEFINE_doubleToStr(v, s, l) snprintf((s), (l), "%.15lg", (v))
203#define SCPIDEFINE_doubleToStr(v, s, l) SCPI_dtostre((v), (s), (l), 15, 0)
206#if USE_DEVICE_DEPENDENT_ERROR_INFORMATION
208 #if USE_MEMORY_ALLOCATION_FREE
211 #define SCPIDEFINE_DESCRIPTION_MAX_PARTS 2
213 #define SCPIDEFINE_strndup(h, s, l) strndup((s), (l))
215 #define SCPIDEFINE_strndup(h, s, l) OUR_strndup((s), (l))
217 #define SCPIDEFINE_free(h, s, r) free((s))
219 #define SCPIDEFINE_DESCRIPTION_MAX_PARTS 3
220 #define SCPIDEFINE_strndup(h, s, l) scpiheap_strndup((h), (s), (l))
221 #define SCPIDEFINE_free(h, s, r) scpiheap_free((h), (s), (r))
222 #define SCPIDEFINE_get_parts(h, s, l1, s2, l2) scpiheap_get_parts((h), (s), (l1), (s2), (l2))
225 #define SCPIDEFINE_DESCRIPTION_MAX_PARTS 1
226 #define SCPIDEFINE_strndup(h, s, l) NULL
227 #define SCPIDEFINE_free(h, s, r)
231 #define SCPIDEFINE_signbit(n) signbit(n)
233 #define SCPIDEFINE_signbit(n) ((n)<0)
237 #define SCPIDEFINE_isfinite(n) finite(n)
239 #define SCPIDEFINE_isfinite(n) isfinite(n)
241 #define SCPIDEFINE_isfinite(n) (!SCPIDEFINE_isnan((n)) && ((n) < INFINITY) && ((n) > -INFINITY))
245 #define SCPIDEFINE_strtof(n, p) strtof((n), (p))
247 #define SCPIDEFINE_strtof(n, p) strtod((n), (p))
251 #define SCPIDEFINE_strtoll(n, p, b) strtoll((n), (p), (b))
252 #define SCPIDEFINE_strtoull(n, p, b) strtoull((n), (p), (b))
254 #define SCPIDEFINE_strtoll(n, p, b) strtoll((n), (p), (b))
255 #define SCPIDEFINE_strtoull(n, p, b) strtoull((n), (p), (b))
256 extern long long int strtoll(
const char *nptr,
char **endptr,
int base);
257 extern unsigned long long int strtoull(
const char *nptr,
char **endptr,
int base);
263 #define SCPIDEFINE_isnan(n) isnan((n))
265 #define SCPIDEFINE_isnan(n) ((n) != (n))
269 #define NAN (0.0 / 0.0)
273 #define INFINITY (1.0 / 0.0)
long long int strtoll(const char *nptr, char **endptr, int base)
unsigned long long int strtoull(const char *nptr, char **endptr, int base)