X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=controller.c;h=1ed852bea9b539ca8c3cf8c5379191617e130e0c;hp=19dc2525cc43af06749a8722c3a9d176239c2b32;hb=f9a3947a7a8d884de6c55693b216f89b1d27d979;hpb=159699490ea4bf2495e99dcd5fb18b240d7499df diff --git a/controller.c b/controller.c index 19dc252..1ed852b 100644 --- a/controller.c +++ b/controller.c @@ -24,6 +24,8 @@ #include +static GSList *callbacks = NULL; + /* TODO static GSList *pipelines = NULL; struct srd_pipeline { @@ -291,7 +293,7 @@ int srd_session_feed(uint64_t timeoffset, uint64_t duration, uint8_t *inbuf, } -int pd_output_new(struct srd_decoder_instance *di, int output_type, +int pd_add(struct srd_decoder_instance *di, int output_type, char *protocol_id) { struct srd_pd_output *pdo; @@ -326,6 +328,38 @@ struct srd_decoder_instance *get_di_by_decobject(void *decobject) return NULL; } +int srd_register_callback(int output_type, void *cb) +{ + struct srd_pd_callback *pd_cb; + + if (!(pd_cb = g_try_malloc(sizeof(struct srd_pd_callback)))) + return SRD_ERR_MALLOC; + + pd_cb->output_type = output_type; + pd_cb->callback = cb; + callbacks = g_slist_append(callbacks, pd_cb); + + printf("got cb for %d: %p\n", output_type, cb); + return SRD_OK; +} + +void *srd_find_callback(int output_type) +{ + GSList *l; + struct srd_pd_callback *pd_cb; + void *(cb); + + cb = NULL; + for (l = callbacks; l; l = l->next) { + pd_cb = l->data; + if (pd_cb->output_type == output_type) { + cb = pd_cb->callback; + break; + } + } + + return cb; +} //int srd_pipeline_new(int plid) //{