45#if USE_DEVICE_DEPENDENT_ERROR_INFORMATION
46#define SCPI_ERROR_SETVAL(e, c, i) do { (e)->error_code = (c); (e)->device_dependent_info = (i); } while(0)
48#define SCPI_ERROR_SETVAL(e, c, i) do { (e)->error_code = (c); (void)(i);} while(0)
56 fifo_init(&context->error_queue, data, size);
67 if (context->interface && context->interface->error) {
68 context->interface->error(context, 0);
81 if (context->interface && context->interface->error) {
82 context->interface->error(context, err);
91#if USE_DEVICE_DEPENDENT_ERROR_INFORMATION
93 while (
fifo_remove(&context->error_queue, &error)) {
94 SCPIDEFINE_free(&context->error_info_heap, error.device_dependent_info,
false);
109 if (!error || !context)
return FALSE;
132 scpi_error_t error_value;
133 char * info_ptr = info ?
SCPIDEFINE_strndup(&context->error_info_heap, info, info_len) : NULL;
135 if (!
fifo_add(&context->error_queue, &error_value)) {
136 SCPIDEFINE_free(&context->error_info_heap, error_value.device_dependent_info,
true);
138 SCPIDEFINE_free(&context->error_info_heap, error_value.device_dependent_info,
true);
140 fifo_add(&context->error_queue, &error_value);
152#define ERROR_DEFS_N 9
176 if (info && info_len == 0) {
188 if (queue_overflow) {
193 context->cmd_error =
TRUE;
214#define X(def, val, str) case def: return str;
215#if USE_FULL_ERROR_LIST
218#define XE(def, val, str)
222#if USE_USER_ERROR_LIST
227 default:
return "Unknown error";
#define SCPIDEFINE_strnlen(s, l)
#define SCPIDEFINE_strndup(h, s, l)
#define SCPIDEFINE_free(h, s, r)
#define SCPI_STD_ERROR_DESC_MAX_STRING_LENGTH
void SCPI_ErrorPush(scpi_t *context, int16_t err)
#define SCPI_ERROR_SETVAL(e, c, i)
int32_t SCPI_ErrorCount(scpi_t *context)
static void SCPI_ErrorEmitEmpty(scpi_t *context)
void SCPI_ErrorPushEx(scpi_t *context, int16_t err, char *info, size_t info_len)
const char * SCPI_ErrorTranslate(int16_t err)
void SCPI_ErrorInit(scpi_t *context, scpi_error_t *data, int16_t size)
scpi_bool_t SCPI_ErrorPop(scpi_t *context, scpi_error_t *error)
static void SCPI_ErrorEmit(scpi_t *context, int16_t err)
void SCPI_ErrorClear(scpi_t *context)
static scpi_bool_t SCPI_ErrorAddInternal(scpi_t *context, int16_t err, char *info, size_t info_len)
static const struct error_reg errs[9]
@ SCPI_ERROR_QUEUE_OVERFLOW
scpi_bool_t fifo_remove_last(scpi_fifo_t *fifo, scpi_error_t *value)
scpi_bool_t fifo_remove(scpi_fifo_t *fifo, scpi_error_t *value)
scpi_bool_t fifo_add(scpi_fifo_t *fifo, const scpi_error_t *value)
scpi_bool_t fifo_count(scpi_fifo_t *fifo, int16_t *value)
void fifo_init(scpi_fifo_t *fifo, scpi_error_t *data, int16_t size)
void fifo_clear(scpi_fifo_t *fifo)
void SCPI_RegSetBits(scpi_t *context, scpi_reg_name_t name, scpi_reg_val_t bits)
scpi_reg_val_t SCPI_RegGet(scpi_t *context, scpi_reg_name_t name)
void SCPI_RegClearBits(scpi_t *context, scpi_reg_name_t name, scpi_reg_val_t bits)