24 #include "libsigrok-internal.h"
124 static int sanity_check_all_drivers(
void)
126 int i, errors, ret =
SR_OK;
130 sr_spew(
"Sanity-checking all drivers.");
133 for (i = 0; drivers[i]; i++) {
136 d = (drivers[i]->
name) ? drivers[i]->
name :
"NULL";
138 if (!drivers[i]->
name) {
139 sr_err(
"No name in driver %d ('%s').", i, d);
143 sr_err(
"No longname in driver %d ('%s').", i, d);
147 sr_err(
"API version in driver %d ('%s') < 1.", i, d);
150 if (!drivers[i]->
init) {
151 sr_err(
"No init in driver %d ('%s').", i, d);
155 sr_err(
"No cleanup in driver %d ('%s').", i, d);
158 if (!drivers[i]->
scan) {
159 sr_err(
"No scan in driver %d ('%s').", i, d);
163 sr_err(
"No dev_list in driver %d ('%s').", i, d);
167 sr_err(
"No dev_clear in driver %d ('%s').", i, d);
172 sr_err(
"No config_set in driver %d ('%s').", i, d);
176 sr_err(
"No config_list in driver %d ('%s').", i, d);
180 sr_err(
"No dev_open in driver %d ('%s').", i, d);
184 sr_err(
"No dev_close in driver %d ('%s').", i, d);
188 sr_err(
"No dev_acquisition_start in driver %d ('%s').",
193 sr_err(
"No dev_acquisition_stop in driver %d ('%s').",
214 static int sanity_check_all_input_modules(
void)
216 int i, errors, ret =
SR_OK;
220 sr_spew(
"Sanity-checking all input modules.");
223 for (i = 0; inputs[i]; i++) {
226 d = (inputs[i]->
id) ? inputs[i]->
id :
"NULL";
228 if (!inputs[i]->
id) {
229 sr_err(
"No ID in module %d ('%s').", i, d);
233 sr_err(
"No description in module %d ('%s').", i, d);
237 sr_err(
"No format_match in module %d ('%s').", i, d);
240 if (!inputs[i]->
init) {
241 sr_err(
"No init in module %d ('%s').", i, d);
245 sr_err(
"No loadfile in module %d ('%s').", i, d);
263 static int sanity_check_all_output_modules(
void)
265 int i, errors, ret =
SR_OK;
269 sr_spew(
"Sanity-checking all output modules.");
272 for (i = 0; outputs[i]; i++) {
275 d = (outputs[i]->
id) ? outputs[i]->
id :
"NULL";
277 if (!outputs[i]->
id) {
278 sr_err(
"No ID in module %d ('%s').", i, d);
282 sr_err(
"No description in module %d ('%s').", i, d);
286 sr_err(
"Invalid df_type %d in module %d ('%s').",
293 sr_err(
"No data/receive in module %d ('%s').", i, d);
330 struct sr_context *context;
333 sr_err(
"%s(): libsigrok context was NULL.", __func__);
337 if (sanity_check_all_drivers() < 0) {
338 sr_err(
"Internal driver error(s), aborting.");
342 if (sanity_check_all_input_modules() < 0) {
343 sr_err(
"Internal input module error(s), aborting.");
347 if (sanity_check_all_output_modules() < 0) {
348 sr_err(
"Internal output module error(s), aborting.");
353 context = g_try_malloc0(
sizeof(
struct sr_context) + 1);
360 #ifdef HAVE_LIBUSB_1_0
361 ret = libusb_init(&context->libusb_ctx);
362 if (LIBUSB_SUCCESS != ret) {
363 sr_err(
"libusb_init() returned %s.\n", libusb_error_name(ret));
392 sr_err(
"%s(): libsigrok context was NULL.", __func__);
398 #ifdef HAVE_LIBUSB_1_0
399 libusb_exit(ctx->libusb_ctx);
struct sr_output_format ** sr_output_list(void)
int(* init)(struct sr_context *sr_ctx)
int(* config_list)(int info_id, GVariant **data, const struct sr_dev_inst *sdi)
int(* dev_open)(struct sr_dev_inst *sdi)
int(* format_match)(const char *filename)
Check if this input module can load and parse the specified file.
GSList *(* scan)(GSList *options)
char * id
The unique ID for this input format.
int sr_exit(struct sr_context *ctx)
Shutdown libsigrok.
int(* loadfile)(struct sr_input *in, const char *filename)
Load a file, parsing the input according to the file's format.
The public libsigrok header file to be used by frontends.
Malloc/calloc/realloc error.
int(* config_set)(int id, GVariant *data, const struct sr_dev_inst *sdi)
Generic/unspecified error.
struct sr_input_format ** sr_input_list(void)
char * id
A unique ID for this output format.
char * description
A short description of the output format.
int(* dev_acquisition_stop)(struct sr_dev_inst *sdi, void *cb_data)
int(* init)(struct sr_input *in, const char *filename)
Initialize the input module.
struct sr_session * session
int(* data)(struct sr_output *o, const uint8_t *data_in, uint64_t length_in, uint8_t **data_out, uint64_t *length_out)
Whenever a chunk of data comes in, it will be passed to the output module via this function...
int(* dev_close)(struct sr_dev_inst *sdi)
char * description
A short description of the input format, which can (for example) be displayed to the user by frontend...
struct sr_dev_driver ** sr_driver_list(void)
Return the list of supported hardware drivers.
GSList *(* dev_list)(void)
int(* receive)(struct sr_output *o, const struct sr_dev_inst *sdi, const struct sr_datafeed_packet *packet, GString **out)
This function is passed a copy of every packed in the data feed.
int sr_init(struct sr_context **ctx)
Initialize libsigrok.
#define sr_err(s, args...)
#define sr_spew(s, args...)
int(* dev_acquisition_start)(const struct sr_dev_inst *sdi, void *cb_data)