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.
/* Convert logic_output_channels to GSList of 'struct srd_decoder_logic_output_channel'. */
static int get_logic_output_channels(struct srd_decoder *dec)
{
/* 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;
GSList *logic_out_chs;
struct srd_decoder_logic_output_channel *logic_out_ch;
ssize_t i;
if (!py_logic_out_ch)
goto except_out;
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 "
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;
}
dec->name);
goto err_out;
}
goto except_out;
if (py_str_as_str(py_item, &logic_out_ch->desc) != SRD_OK)
goto err_out;
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);
}
dec->logic_output_channels = logic_out_chs;
Py_DECREF(py_logic_out_chs);
# TODO: Other I²C functions: general call / reset address, device ID address.
# 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 = []
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):
return tuple(l)
class Decoder(srd.Decoder):
def logic_channels(num_channels):
l = []
for i in range(num_channels):
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):
return tuple(l)
class Decoder(srd.Decoder):
- * List of logic output channels (item: id, description, samplerate).
+ * List of logic output channels (item: id, description).
*/
GSList *logic_output_channels;
*/
GSList *logic_output_channels;
struct srd_decoder_logic_output_channel {
char *id;
char *desc;
struct srd_decoder_logic_output_channel {
char *id;
char *desc;
};
struct srd_decoder_inst {
};
struct srd_decoder_inst {