blob: 0177eeb705dbdeecb3c4308b48e4bb9262623547 [file] [log] [blame]
#include <inttypes.h>
/* Error handling */
/*
* All the functions return a pointer to the renode_error_t structure in case of an error.
* Its memory has to be freed in case it's handled. NULL returned indicates success.
*/
#define NO_ERROR NULL
typedef enum {
ERR_CONNECTION_FAILED,
ERR_FATAL,
ERR_NOT_CONNECTED,
ERR_PERIPHERAL_INIT_FAILED,
ERR_TIMEOUT,
ERR_COMMAND_FAILED,
ERR_NO_ERROR = -1,
} renode_error_code;
typedef struct {
renode_error_code code;
int flags;
char *message;
void *data;
} renode_error_t;
/* General */
// Pointers to these structs must be obtained in `renode_get_X` functions (`connect` for renode_t)
// so that they can be later used in their related functions.
// Internals of these structs aren't part of the API.
typedef struct renode renode_t;
typedef struct renode_machine renode_machine_t;
typedef struct renode_adc renode_adc_t;
renode_error_t *renode_connect(const char *port, renode_t **renode);
renode_error_t *renode_disconnect(renode_t **renode);
renode_error_t *renode_get_machine(renode_t *renode_instance, const char *name, renode_machine_t **machine);
void renode_free_error(renode_error_t *error);
/* Time control */
typedef enum {
TU_MICROSECONDS = 1,
TU_MILLISECONDS = 1000,
TU_SECONDS = 1000000,
} renode_time_unit_t;
renode_error_t *renode_run_for(renode_t *renode, renode_time_unit_t unit, uint64_t value);
renode_error_t *renode_get_current_time(renode_t *renode_instance, renode_time_unit_t unit, uint64_t *current_time);
/* ADC */
renode_error_t *renode_get_adc(renode_machine_t *machine, const char *name, renode_adc_t **adc);
renode_error_t *renode_get_adc_channel_count(renode_adc_t *adc, int32_t *count);
renode_error_t *renode_get_adc_channel_value(renode_adc_t *adc, int32_t channel, uint32_t *value);
renode_error_t *renode_set_adc_channel_value(renode_adc_t *adc, int32_t channel, uint32_t value);