X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=controller.c;h=9a663ff8d01b125b048347048a8d730dcea03da9;hp=20364f7076c8d4eab8c7fdacd8d4c5db8b293d4f;hb=86528298fa2abfe825d6763b806095972e8bd8f4;hpb=42a85ed0aed14216232ae48af1b5b709ec31f800 diff --git a/controller.c b/controller.c index 20364f7..9a663ff 100644 --- a/controller.c +++ b/controller.c @@ -168,7 +168,7 @@ struct srd_decoder_instance *srd_instance_new(const char *id, } /* Create an instance of the 'Decoder' class. */ - di->py_instance = PyObject_Call(dec->py_decobj, py_args, NULL); + di->py_instance = PyObject_Call(dec->py_dec, py_args, NULL); if (!di->py_instance) { if (PyErr_Occurred()) PyErr_Print(); @@ -230,6 +230,7 @@ int srd_instance_set_probe(struct srd_decoder_instance *di, return SRD_OK; } +/* TODO: this should go into the PD stack */ struct srd_decoder_instance *srd_instance_find(char *instance_id) { GSList *l; @@ -282,11 +283,12 @@ int srd_instance_start(struct srd_decoder_instance *di, PyObject *args) * * @return SRD_OK upon success, a (negative) error code otherwise. */ -int srd_instance_decode(uint64_t timeoffset, uint64_t duration, +int srd_instance_decode(uint64_t start_samplenum, struct srd_decoder_instance *di, uint8_t *inbuf, uint64_t inbuflen) { PyObject *py_instance, *py_res; srd_logic *logic; + uint64_t end_samplenum; /* Return an error upon unusable input. */ if (di == NULL) @@ -303,14 +305,16 @@ int srd_instance_decode(uint64_t timeoffset, uint64_t duration, logic = PyObject_New(srd_logic, &srd_logic_type); Py_INCREF(logic); logic->di = di; + logic->start_samplenum = start_samplenum; logic->itercnt = 0; logic->inbuf = inbuf; logic->inbuflen = inbuflen; logic->sample = PyList_New(2); Py_INCREF(logic->sample); + end_samplenum = start_samplenum + inbuflen / di->unitsize; if (!(py_res = PyObject_CallMethod(py_instance, "decode", - "KKO", timeoffset, duration, logic))) { + "KKO", logic->start_samplenum, end_samplenum, logic))) { if (PyErr_Occurred()) PyErr_Print(); /* Returns void. */ @@ -359,14 +363,13 @@ int srd_session_start(int num_probes, int unitsize, uint64_t samplerate) } /* Feed logic samples to decoder session. */ -int srd_session_feed(uint64_t timeoffset, uint64_t duration, uint8_t *inbuf, - uint64_t inbuflen) +int srd_session_feed(uint64_t start_samplenum, uint8_t *inbuf, uint64_t inbuflen) { GSList *d; int ret; for (d = di_list; d; d = d->next) { - if ((ret = srd_instance_decode(timeoffset, duration, d->data, inbuf, + if ((ret = srd_instance_decode(start_samplenum, d->data, inbuf, inbuflen)) != SRD_OK) return ret; } @@ -376,7 +379,7 @@ int srd_session_feed(uint64_t timeoffset, uint64_t duration, uint8_t *inbuf, int pd_add(struct srd_decoder_instance *di, int output_type, - char *protocol_id) + char *proto_id) { struct srd_pd_output *pdo; @@ -387,7 +390,7 @@ int pd_add(struct srd_decoder_instance *di, int output_type, pdo->pdo_id = g_slist_length(di->pd_output); pdo->output_type = output_type; pdo->decoder = di->decoder; - pdo->protocol_id = g_strdup(protocol_id); + pdo->proto_id = g_strdup(proto_id); di->pd_output = g_slist_append(di->pd_output, pdo); return pdo->pdo_id;