X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=tests%2Flib.c;h=b5a4950843181cd9ddac5d1164c242ab9f680592;hb=71185b48a114a8278e8baac04f5053ae046fdbcf;hp=523d4399c5a8986e2d18cc28a43646236ca14d31;hpb=34e4c273916d8fd246ca6aefbff05528f92391fc;p=libsigrok.git diff --git a/tests/lib.c b/tests/lib.c index 523d4399..b5a49508 100644 --- a/tests/lib.c +++ b/tests/lib.c @@ -20,6 +20,8 @@ #include #include +#include +#include #include #include "../libsigrok.h" @@ -42,6 +44,44 @@ struct sr_dev_driver *srtest_driver_get(const char *drivername) return driver; } +/* Get a libsigrok input format by ID. */ +struct sr_input_format *srtest_input_get(const char *id) +{ + struct sr_input_format **inputs, *input = NULL; + int i; + + inputs = sr_input_list(); + fail_unless(inputs != NULL, "No input modules found."); + + for (i = 0; inputs[i]; i++) { + if (strcmp(inputs[i]->id, id)) + continue; + input = inputs[i]; + } + fail_unless(input != NULL, "Input module '%s' not found.", id); + + return input; +} + +/* Get a libsigrok output format by ID. */ +struct sr_output_format *srtest_output_get(const char *id) +{ + struct sr_output_format **outputs, *output = NULL; + int i; + + outputs = sr_output_list(); + fail_unless(outputs != NULL, "No output modules found."); + + for (i = 0; outputs[i]; i++) { + if (strcmp(outputs[i]->id, id)) + continue; + output = outputs[i]; + } + fail_unless(output != NULL, "Output module '%s' not found.", id); + + return output; +} + /* Initialize a libsigrok driver. */ void srtest_driver_init(struct sr_context *sr_ctx, struct sr_dev_driver *driver) { @@ -69,6 +109,40 @@ void srtest_driver_init_all(struct sr_context *sr_ctx) } } +/* Initialize a libsigrok input module. */ +void srtest_input_init(struct sr_context *sr_ctx, struct sr_input_format *input) +{ + int ret; + struct sr_input *in; + + (void)sr_ctx; + + in = g_try_malloc0(sizeof(struct sr_input)); + fail_unless(in != NULL); + + in->format = input; + in->param = NULL; + + ret = in->format->init(in, "nonexisting.dat"); + fail_unless(ret == SR_OK, "Failed to init '%s' input module: %d.", + input->id, ret); + + g_free(in); +} + +/* Initialize all libsigrok input modules. */ +void srtest_input_init_all(struct sr_context *sr_ctx) +{ + struct sr_input_format **inputs; + int i; + + inputs = sr_input_list(); + fail_unless(inputs != NULL, "No input modules found."); + + for (i = 0; inputs[i]; i++) + srtest_input_init(sr_ctx, inputs[i]); +} + /* Set the samplerate for the respective driver to the specified value. */ void srtest_set_samplerate(struct sr_dev_driver *driver, uint64_t samplerate) { @@ -120,3 +194,37 @@ void srtest_check_samplerate(struct sr_context *sr_ctx, const char *drivername, fail_unless(s == samplerate, "%s: Incorrect samplerate: %" PRIu64 ".", drivername, s); } + +void srtest_buf_to_file(const char *filename, const uint8_t *buf, uint64_t len) +{ + FILE *f; + GError *error; + gboolean ret; + + f = g_fopen(filename, "wb"); + fail_unless(f != NULL); + + ret = g_file_set_contents(filename, (const gchar *)buf, len, &error); + fail_unless(ret == TRUE); + + fclose(f); +} + +GArray *srtest_get_enabled_logic_probes(const struct sr_dev_inst *sdi) +{ + struct sr_probe *probe; + GArray *probes; + GSList *l; + + probes = g_array_new(FALSE, FALSE, sizeof(int)); + for (l = sdi->probes; l; l = l->next) { + probe = l->data; + if (probe->type != SR_PROBE_LOGIC) + continue; + if (probe->enabled != TRUE) + continue; + g_array_append_val(probes, probe->index); + } + + return probes; +}