]> sigrok.org Git - libsigrokdecode.git/blobdiff - controller.c
srd: PDs now get a logic feed with sample numbers, not time/duration
[libsigrokdecode.git] / controller.c
index 20364f7076c8d4eab8c7fdacd8d4c5db8b293d4f..9a663ff8d01b125b048347048a8d730dcea03da9 100644 (file)
@@ -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;