]> sigrok.org Git - libsigrokdecode.git/commitdiff
Remove samplerate from srd_decoder_logic_output_channel
authorSoeren Apel <redacted>
Sun, 1 Mar 2020 15:50:46 +0000 (16:50 +0100)
committerSoeren Apel <redacted>
Sat, 13 Feb 2021 21:40:15 +0000 (22:40 +0100)
This means that the samplerate for logic output channels is
implicitly determined by the input channel samplerate.

The motivation for this is that hard-coding a samplerate isn't
possible - but at the same time, it's also not possible to
determine the samplerate at the time the logic output channels
are initialized, as the samplerate can be set at runtime.

From my point of view, we would need one of two mechanisms to
make this work:

1) Allow creation of logic outputs at runtime via some
registration callback
or
2) Allow changing a logic output's samplerate after it has been
created, again requiring some kind of callback

To me, both currently are overkill because making the assumption
that samplerate_in = samplerate_out not only makes this problem
go away as it can easily be handled on the client side where
samplerate_in is already known, it also makes handling of the
logic data in the PDs easier.

decoder.c
decoders/pca9571/pd.py
decoders/tca6408a/pd.py
libsigrokdecode.h

index 3bbc7f9936d3a7a08423d8a55ce49136b7154a35..0d266d4625618651deb38c73a4df4830b93f1e78 100644 (file)
--- a/decoder.c
+++ b/decoder.c
@@ -621,7 +621,7 @@ err_out:
 /* Convert logic_output_channels to GSList of 'struct srd_decoder_logic_output_channel'. */
 static int get_logic_output_channels(struct srd_decoder *dec)
 {
-       PyObject *py_logic_out_chs, *py_logic_out_ch, *py_samplerate, *py_item;
+       PyObject *py_logic_out_chs, *py_logic_out_ch, *py_item;
        GSList *logic_out_chs;
        struct srd_decoder_logic_output_channel *logic_out_ch;
        ssize_t i;
@@ -651,9 +651,9 @@ static int get_logic_output_channels(struct srd_decoder *dec)
                if (!py_logic_out_ch)
                        goto except_out;
 
-               if (!PyTuple_Check(py_logic_out_ch) || PyTuple_Size(py_logic_out_ch) != 3) {
+               if (!PyTuple_Check(py_logic_out_ch) || PyTuple_Size(py_logic_out_ch) != 2) {
                        srd_err("Protocol decoder %s logic_output_channels "
-                               "must contain only tuples of 3 elements.",
+                               "must contain only tuples of 2 elements.",
                                dec->name);
                        goto err_out;
                }
@@ -672,19 +672,6 @@ static int get_logic_output_channels(struct srd_decoder *dec)
                        goto except_out;
                if (py_str_as_str(py_item, &logic_out_ch->desc) != SRD_OK)
                        goto err_out;
-
-               py_samplerate = PyTuple_GetItem(py_logic_out_ch, 2);
-               if (!py_samplerate)
-                       goto except_out;
-
-               if (!PyLong_Check(py_samplerate)) {
-                       srd_err("Protocol decoder %s logic_output_channels tuples "
-                               "must have a number as 3rd element.",
-                               dec->name);
-                       goto err_out;
-               }
-
-               logic_out_ch->samplerate = PyLong_AsUnsignedLongLong(py_samplerate);
        }
        dec->logic_output_channels = logic_out_chs;
        Py_DECREF(py_logic_out_chs);
index 600095247d08f268f3b669bcad19850437e9447e..85310819442f0c3b44e50366316c46faf5bbc2e6 100644 (file)
@@ -23,10 +23,10 @@ NUM_OUTPUT_CHANNELS = 8
 
 # TODO: Other I²C functions: general call / reset address, device ID address.
 
-def logic_channels(num_channels):
+def logic_channels(num_channels, samplerate):
     l = []
     for i in range(num_channels):
-        l.append(tuple(['p%d' % i, 'P%d' % i, 100000]))
+        l.append(tuple(['p%d' % i, 'P%d' % i]))
     return tuple(l)
 
 class Decoder(srd.Decoder):
index 3b0556f5df51767fa4b4ec661585da895b44e595..fdfebeddb23d92a26b31a98248993c4b7a405951 100644 (file)
@@ -26,7 +26,7 @@ NUM_OUTPUT_CHANNELS = 8
 def logic_channels(num_channels):
     l = []
     for i in range(num_channels):
-        l.append(tuple(['p%d' % i, 'P-port input/output %d' % i, 100000]))
+        l.append(tuple(['p%d' % i, 'P-port input/output %d' % i]))
     return tuple(l)
 
 class Decoder(srd.Decoder):
index 44402673479cd1af19d4599e7e9e5f3be5be7d52..30282f504fce7051c3a9f370bde262b41b4a9f0c 100644 (file)
@@ -190,7 +190,7 @@ struct srd_decoder {
        GSList *binary;
 
        /**
-        * List of logic output channels (item: id, description, samplerate).
+        * List of logic output channels (item: id, description).
         */
        GSList *logic_output_channels;
 
@@ -241,7 +241,6 @@ struct srd_decoder_annotation_row {
 struct srd_decoder_logic_output_channel {
        char *id;
        char *desc;
-       uint64_t samplerate;
 };
 
 struct srd_decoder_inst {