diff options
author | Gareth McMullin <gareth@blacksphere.co.nz> | 2011-11-20 18:39:50 +1300 |
---|---|---|
committer | Gareth McMullin <gareth@blacksphere.co.nz> | 2011-11-20 18:39:50 +1300 |
commit | f97f531c2d31b729afbf1c97a0d017526bf8e52a (patch) | |
tree | 4ca0ecfef74be831ff3490db67986e15e08c32bb | |
parent | 74911b4c1f6d184dac878d94992d480af0564734 (diff) | |
download | libsigrokdecode-f97f531c2d31b729afbf1c97a0d017526bf8e52a.tar.gz libsigrokdecode-f97f531c2d31b729afbf1c97a0d017526bf8e52a.zip |
libsigrokdecode: Allow frontend to configure decoder probes.
-rw-r--r-- | decode.c | 24 | ||||
-rw-r--r-- | decoders/spi.py | 2 | ||||
-rw-r--r-- | sigrokdecode.h | 2 |
3 files changed, 26 insertions, 2 deletions
@@ -284,6 +284,8 @@ static int srd_load_decoder(const char *name, struct srd_decoder_instance *srd_instance_new(const char *id) { struct srd_decoder *dec = srd_get_decoder_by_id(id); + if (!dec) + return NULL; struct srd_decoder_instance *di = g_malloc(sizeof(*di)); PyObject *py_args, *py_value; @@ -317,6 +319,26 @@ struct srd_decoder_instance *srd_instance_new(const char *id) return di; } +int srd_instance_set_probe(struct srd_decoder_instance *di, + const char *probename, int num) +{ + PyObject *probedict, *probenum; + probedict = PyObject_GetAttrString(di->py_instance, "probes"); /* NEWREF */ + if (!probedict) { + if (PyErr_Occurred()) + PyErr_Print(); /* Returns void. */ + + return SRD_ERR_PYTHON; /* TODO: More specific error? */ + } + + probenum = PyInt_FromLong(num); + PyMapping_SetItemString(probedict, (char*)probename, probenum); + + Py_XDECREF(probenum); + Py_XDECREF(probedict); + return SRD_OK; +} + /** * Run the specified decoder function. * @@ -333,7 +355,7 @@ int srd_run_decoder(struct srd_decoder_instance *dec, uint8_t **outbuf, uint64_t *outbuflen) { PyObject *py_instance, *py_value, *py_res; - int r, ret; + int ret; /* FIXME: Don't have a timebase available here. Make one up. */ static int _timehack = 0; diff --git a/decoders/spi.py b/decoders/spi.py index 0b688c8..0ac8b56 100644 --- a/decoders/spi.py +++ b/decoders/spi.py @@ -47,7 +47,7 @@ class Decoder(): #print kwargs self.unitsize = unitsize - self.probes = Decoder.probes + self.probes = Decoder.probes.copy() self.oldsck = True self.rxcount = 0 self.rxdata = 0 diff --git a/sigrokdecode.h b/sigrokdecode.h index 76b53f5..dabfd33 100644 --- a/sigrokdecode.h +++ b/sigrokdecode.h @@ -106,6 +106,8 @@ int srd_run_decoder(struct srd_decoder_instance *dec, uint8_t *inbuf, uint64_t inbuflen, uint8_t **outbuf, uint64_t *outbuflen); struct srd_decoder_instance *srd_instance_new(const char *id); +int srd_instance_set_probe(struct srd_decoder_instance *di, + const char *probename, int num); int srd_exit(void); #ifdef __cplusplus |