-static PyObject *Decoder_init(PyObject *self, PyObject *args)
-{
- (void)self;
- (void)args;
-// printf("init object %x\n", self);
-
- Py_RETURN_NONE;
-}
-
-struct srd_decoder_instance *get_di_by_decobject(void *decobject);
-
-static PyObject *Decoder_put(PyObject *self, PyObject *args)
-{
- GSList *l;
- PyObject *data;
- struct srd_decoder_instance *di;
- struct srd_pd_output *pdo;
- uint64_t timeoffset, duration;
- int output_id;
-
- if (!(di = get_di_by_decobject(self)))
- return NULL;
-
- if (!PyArg_ParseTuple(args, "KKiO", &timeoffset, &duration, &output_id, &data))
- return NULL;
-
- printf("put: %s instance %p time %" PRIu64 " duration %" PRIu64 " ",
- di->decoder->name, di, timeoffset, duration);
-
- if (!(l = g_slist_nth(di->pd_output, output_id)))
- /* PD supplied invalid output id */
- /* TODO: better error message */
- return NULL;
- pdo = l->data;
-
- printf("stream %d: ", pdo->output_type);
- PyObject_Print(data, stdout, Py_PRINT_RAW);
- puts("");
-
- Py_RETURN_NONE;
-}
-
-
-static PyObject *Decoder_output_new(PyObject *self, PyObject *py_output_type)
-{
- PyObject *ret;
- struct srd_decoder_instance *di;
- char *protocol_id, *description;
- int output_type, pdo_id;
-
- if (!(di = get_di_by_decobject(self)))
- return NULL;
-
- printf("output_new di %s\n", di->decoder->name);
-
-// if (!PyArg_ParseTuple(args, "i:output_type,s:protocol_id,s:description",
-// &output_type, &protocol_id, &description))
- if (!PyArg_ParseTuple(py_output_type, "i:output_type", &output_type))
- return NULL;
-
- protocol_id = "i2c";
- description = "blah";
- pdo_id = pd_output_new(di, output_type, protocol_id, description);
- if (pdo_id < 0)
- Py_RETURN_NONE;
- else
- ret = Py_BuildValue("i", pdo_id);
-
- return ret;
-}
-
-static PyMethodDef no_methods[] = { {NULL, NULL, 0, NULL} };
-static PyMethodDef Decoder_methods[] = {
- {"__init__", Decoder_init, METH_VARARGS, ""},
- {"put", Decoder_put, METH_VARARGS,
- "Accepts a dictionary with the following keys: time, duration, data"},
- {"output_new", Decoder_output_new, METH_VARARGS,
- "Create a new output stream"},
- {NULL, NULL, 0, NULL}
-};
-
-
-typedef struct {
- PyObject_HEAD
-} sigrok_Decoder_object;
-
-static PyTypeObject sigrok_Decoder_type = {
- PyObject_HEAD_INIT(NULL)
- .tp_name = "sigrok.Decoder",
- .tp_basicsize = sizeof(sigrok_Decoder_object),
- .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
- .tp_doc = "Sigrok Decoder object",
- .tp_methods = Decoder_methods,
-};
-
-PyMODINIT_FUNC init_sigrok_Decoder(void)
-{
- PyObject *mod;
-
- /* assign this here, for compiler portability */
- sigrok_Decoder_type.tp_new = PyType_GenericNew;
- if (PyType_Ready(&sigrok_Decoder_type) < 0)
- return;
-
- mod = Py_InitModule3("sigrok", no_methods, "sigrok base classes");
- Py_INCREF(&sigrok_Decoder_type);
- PyModule_AddObject(mod, "Decoder", (PyObject *)&sigrok_Decoder_type);
-
-}
-
-
-struct srd_decoder_instance *get_di_by_decobject(void *decobject)
-{
- GSList *l;
- struct srd_decoder_instance *di;
-
- for (l = di_list; l; l = l->next) {
- di = l->data;
- if (decobject == di->py_instance)
- return di;
- }
-
- return NULL;
-}