X-Git-Url: https://sigrok.org/gitweb/?p=sigrok-test.git;a=blobdiff_plain;f=decoder%2Fruntc.c;h=3d0bfd8f0c845b2ab2104e979fd3d1b18420fdbb;hp=05ddfd2470e89f2716c95cdaf847c1ecf02c211b;hb=987819ad8910f5fedca4553706ec88919a3c9ad9;hpb=6463feb2b58ac16cb12cfd325d9662c4a15e19ee diff --git a/decoder/runtc.c b/decoder/runtc.c index 05ddfd2..3d0bfd8 100644 --- a/decoder/runtc.c +++ b/decoder/runtc.c @@ -53,17 +53,17 @@ struct option { }; struct pd { - char *name; + const char *name; GSList *channels; GSList *options; }; struct output { - char *pd; + const char *pd; int type; - char *class; + const char *class; int class_idx; - char *outfile; + const char *outfile; int outfd; }; @@ -74,12 +74,12 @@ struct cvg { GSList *missed_lines; }; -static struct cvg *get_mod_cov(PyObject *py_cov, char *module_name); -static void cvg_add(struct cvg *dst, struct cvg *src); +static struct cvg *get_mod_cov(PyObject *py_cov, const char *module_name); +static void cvg_add(struct cvg *dst, const struct cvg *src); static struct cvg *cvg_new(void); -static gboolean find_missed_line(struct cvg *cvg, char *linespec); +static gboolean find_missed_line(struct cvg *cvg, const char *linespec); -static void logmsg(char *prefix, FILE *out, const char *format, va_list args) +static void logmsg(const char *prefix, FILE *out, const char *format, va_list args) { if (prefix) fprintf(out, "%s", prefix); @@ -131,27 +131,30 @@ static int srd_log(void *cb_data, int loglevel, const char *format, va_list args return SRD_OK; } -static void usage(char *msg) +static void usage(const char *msg) { if (msg) fprintf(stderr, "%s\n", msg); - printf("Usage: runtc [-dPpoiOf]\n"); - printf(" -d Debug\n"); - printf(" -P \n"); - printf(" -p (optional)\n"); - printf(" -o (optional)\n"); + printf("Usage: runtc [-dPpoiOfcS]\n"); + printf(" -d (enables debug output)\n"); + printf(" -P \n"); + printf(" -p (optional)\n"); + printf(" -o (optional)\n"); printf(" -i \n"); printf(" -O \n"); printf(" -f (optional)\n"); printf(" -c (optional)\n"); + printf(" -S (enables statistics)\n"); exit(msg ? 1 : 0); } -/* This is a neutered version of libsigrokdecode's py_str_as_str(). It +/* + * This is a neutered version of libsigrokdecode's py_str_as_str(). It * does no error checking, but then the only strings it processes are - * generated by Python's repr(), so are known good. */ + * generated by Python's repr(), so are known good. + */ static char *py_str_as_str(const PyObject *py_str) { PyObject *py_encstr; @@ -172,12 +175,12 @@ static void srd_cb_py(struct srd_proto_data *pdata, void *cb_data) GString *out; char *s; - DBG("Python output from %s", pdata->pdo->di->inst_id); + DBG("Python output from %s", pdata->pdo->di->decoder->id); op = cb_data; pydata = pdata->data; DBG("ptr %p", pydata); - if (strcmp(pdata->pdo->di->inst_id, op->pd)) + if (strcmp(pdata->pdo->di->decoder->id, op->pd)) /* This is not the PD selected for output. */ return; @@ -192,7 +195,7 @@ static void srd_cb_py(struct srd_proto_data *pdata, void *cb_data) out = g_string_sized_new(128); g_string_printf(out, "%" PRIu64 "-%" PRIu64 " %s: %s\n", pdata->start_sample, pdata->end_sample, - pdata->pdo->di->inst_id, s); + pdata->pdo->di->decoder->id, s); g_free(s); if (write(op->outfd, out->str, out->len) == -1) ERR("SRD_OUTPUT_PYTHON callback write failure!"); @@ -208,11 +211,11 @@ static void srd_cb_bin(struct srd_proto_data *pdata, void *cb_data) GString *out; unsigned int i; - DBG("Binary output from %s", pdata->pdo->di->inst_id); + DBG("Binary output from %s", pdata->pdo->di->decoder->id); op = cb_data; pdb = pdata->data; - if (strcmp(pdata->pdo->di->inst_id, op->pd)) + if (strcmp(pdata->pdo->di->decoder->id, op->pd)) /* This is not the PD selected for output. */ return; @@ -226,7 +229,7 @@ static void srd_cb_bin(struct srd_proto_data *pdata, void *cb_data) out = g_string_sized_new(128); g_string_printf(out, "%" PRIu64 "-%" PRIu64 " %s:", pdata->start_sample, pdata->end_sample, - pdata->pdo->di->inst_id); + pdata->pdo->di->decoder->id); for (i = 0; i < pdb->size; i++) { g_string_append_printf(out, " %.2x", pdb->data[i]); } @@ -245,11 +248,11 @@ static void srd_cb_ann(struct srd_proto_data *pdata, void *cb_data) int i; char **dec_ann; - DBG("Annotation output from %s", pdata->pdo->di->inst_id); + DBG("Annotation output from %s", pdata->pdo->di->decoder->id); op = cb_data; pda = pdata->data; dec = pdata->pdo->di->decoder; - if (strcmp(pdata->pdo->di->inst_id, op->pd)) + if (strcmp(pdata->pdo->di->decoder->id, op->pd)) /* This is not the PD selected for output. */ return; @@ -264,7 +267,7 @@ static void srd_cb_ann(struct srd_proto_data *pdata, void *cb_data) line = g_string_sized_new(256); g_string_printf(line, "%" PRIu64 "-%" PRIu64 " %s: %s:", pdata->start_sample, pdata->end_sample, - pdata->pdo->di->inst_id, dec_ann[0]); + pdata->pdo->di->decoder->id, dec_ann[0]); for (i = 0; pda->ann_text[i]; i++) g_string_append_printf(line, " \"%s\"", pda->ann_text[i]); g_string_append(line, "\n"); @@ -277,12 +280,12 @@ static void srd_cb_ann(struct srd_proto_data *pdata, void *cb_data) static void sr_cb(const struct sr_dev_inst *sdi, const struct sr_datafeed_packet *packet, void *cb_data) { + static int samplecnt = 0; const struct sr_datafeed_logic *logic; struct srd_session *sess; GVariant *gvar; uint64_t samplerate; int num_samples; - static int samplecnt = 0; struct sr_dev_driver *driver; sess = cb_data; @@ -315,8 +318,8 @@ static void sr_cb(const struct sr_dev_inst *sdi, DBG("Received SR_DF_LOGIC (%"PRIu64" bytes, unitsize = %d).", logic->length, logic->unitsize); srd_session_send(sess, samplecnt, samplecnt + num_samples, - logic->data, logic->length); - samplecnt += logic->length / logic->unitsize; + logic->data, logic->length, logic->unitsize); + samplecnt += num_samples; break; case SR_DF_END: DBG("Received SR_DF_END"); @@ -325,7 +328,7 @@ static void sr_cb(const struct sr_dev_inst *sdi, } -static int run_testcase(char *infile, GSList *pdlist, struct output *op) +static int run_testcase(const char *infile, GSList *pdlist, struct output *op) { struct srd_session *sess; struct srd_decoder *dec; @@ -343,14 +346,11 @@ static int run_testcase(char *infile, GSList *pdlist, struct output *op) struct sr_session *sr_sess; gboolean is_number; const char *s; - struct sr_dev_inst *sdi; - uint64_t unitsize; - struct sr_dev_driver *driver; if (op->outfile) { if ((op->outfd = open(op->outfile, O_CREAT|O_WRONLY, 0600)) == -1) { ERR("Unable to open %s for writing: %s", op->outfile, - strerror(errno)); + g_strerror(errno)); return FALSE; } } @@ -359,11 +359,6 @@ static int run_testcase(char *infile, GSList *pdlist, struct output *op) return FALSE; sr_session_dev_list(sr_sess, &devices); - sdi = devices->data; - driver = sr_dev_inst_driver_get(sdi); - sr_config_get(driver, sdi, NULL, SR_CONF_CAPTURE_UNITSIZE, &gvar); - unitsize = g_variant_get_uint64(gvar); - g_variant_unref(gvar); if (srd_session_new(&sess) != SRD_OK) return FALSE; @@ -430,13 +425,15 @@ static int run_testcase(char *infile, GSList *pdlist, struct output *op) g_hash_table_insert(channels, channel->name, gvar); } - if (srd_inst_channel_set_all(di, channels, unitsize) != SRD_OK) + if (srd_inst_channel_set_all(di, channels) != SRD_OK) return FALSE; g_hash_table_destroy(channels); } - /* If this is not the first decoder in the list, stack it - * on top of the previous one. */ + /* + * If this is not the first decoder in the list, stack it + * on top of the previous one. + */ if (prev_di) { if (srd_inst_stack(sess, prev_di, di) != SRD_OK) { ERR("Failed to stack decoder instances."); @@ -524,7 +521,7 @@ static PyObject *start_coverage(GSList *pdlist) return py_cov; } -static struct cvg *get_mod_cov(PyObject *py_cov, char *module_name) +static struct cvg *get_mod_cov(PyObject *py_cov, const char *module_name) { PyObject *py_mod, *py_pathlist, *py_path, *py_func, *py_pd; PyObject *py_result, *py_missed, *py_item; @@ -541,7 +538,7 @@ static struct cvg *get_mod_cov(PyObject *py_cov, char *module_name) py_pathlist = PyObject_GetAttrString(py_mod, "__path__"); for (i = 0; i < PyList_Size(py_pathlist); i++) { py_path = PyList_GetItem(py_pathlist, i); - PyUnicode_FSConverter(PyList_GetItem(py_pathlist, i), &py_path); + PyUnicode_FSConverter(PyList_GetItem(py_pathlist, i), &py_path); path = PyBytes_AS_STRING(py_path); if (!(d = opendir(path))) { ERR("Invalid module path '%s'", path); @@ -601,7 +598,7 @@ static struct cvg *cvg_new(void) return cvg; } -static gboolean find_missed_line(struct cvg *cvg, char *linespec) +static gboolean find_missed_line(struct cvg *cvg, const char *linespec) { GSList *l; @@ -612,7 +609,7 @@ static gboolean find_missed_line(struct cvg *cvg, char *linespec) return FALSE; } -static void cvg_add(struct cvg *dst, struct cvg *src) +static void cvg_add(struct cvg *dst, const struct cvg *src) { GSList *l; char *linespec;