X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=blobdiff_plain;f=controller.c;h=cabca3b5edbf5a6acb57243d684291013142d7aa;hp=c265ae7fe0d305af9cd4cb2a2b307eff1b091123;hb=0ff2d191726ef2e5a30ce697c7c93e4b0b1605f3;hpb=38ff5046e8344940601f2b9eb5d8dbfbef975c30 diff --git a/controller.c b/controller.c index c265ae7..cabca3b 100644 --- a/controller.c +++ b/controller.c @@ -25,12 +25,75 @@ #include #include +/** + * @mainpage libsigrokdecode API + * + * @section sec_intro Introduction + * + * The sigrok project aims at creating a + * portable, cross-platform, Free/Libre/Open-Source signal analysis software + * suite that supports various device types (such as logic analyzers, + * oscilloscopes, multimeters, and more). + * + * libsigrokdecode is a + * shared library written in C which provides the basic API for (streaming) + * protocol decoding functionality. + * + * The protocol decoders + * are written in Python (>= 3.0). + * + * @section sec_api API reference + * + * See the "Modules" page for an introduction to various libsigrokdecode + * related topics and the detailed API documentation of the respective + * functions. + * + * You can also browse the API documentation by file, or review all + * data structures. + * + * @section sec_mailinglists Mailing lists + * + * There are two mailing lists for sigrok/libsigrokdecode: sigrok-devel and sigrok-commits. + * + * @section sec_irc IRC + * + * You can find the sigrok developers in the + * \#sigrok + * IRC channel on Freenode. + * + * @section sec_website Website + * + * sigrok.org/wiki/Libsigrokdecode + */ + +/** + * @file + * + * Initializing and shutting down libsigrokdecode. + */ + +/** + * @defgroup grp_init Initialization + * + * Initializing and shutting down libsigrokdecode. + * + * Before using any of the libsigrokdecode functionality, srd_init() must + * be called to initialize the library. + * + * When libsigrokdecode functionality is no longer needed, srd_exit() should + * be called. + * + * @{ + */ + /* List of decoder instances. */ static GSList *di_list = NULL; /* List of frontend callbacks to receive decoder output. */ static GSList *callbacks = NULL; +/** @cond PRIVATE */ + /* decoder.c */ extern SRD_PRIV GSList *pd_list; @@ -41,6 +104,8 @@ extern PyMODINIT_FUNC PyInit_sigrokdecode(void); /* type_logic.c */ extern SRD_PRIV PyTypeObject srd_logic_type; +/** @endcond */ + /** * Initialize libsigrokdecode. * @@ -144,6 +209,8 @@ SRD_API int srd_exit(void) * be added to the Python sys.path, or NULL. * * @return SRD_OK upon success, a (negative) error code otherwise. + * + * @private */ SRD_PRIV int srd_decoder_searchpath_add(const char *path) { @@ -198,6 +265,16 @@ SRD_PRIV int srd_decoder_searchpath_add(const char *path) return SRD_OK; } +/** @} */ + +/** + * @defgroup grp_instances Decoder instances + * + * Decoder instance handling. + * + * @{ + */ + /** * Set one or more options in a decoder instance. * @@ -209,7 +286,7 @@ SRD_PRIV int srd_decoder_searchpath_add(const char *path) * @return SRD_OK upon success, a (negative) error code otherwise. */ SRD_API int srd_inst_option_set(struct srd_decoder_inst *di, - GHashTable *options) + GHashTable *options) { PyObject *py_dec_options, *py_dec_optkeys, *py_di_options, *py_optval; PyObject *py_optlist, *py_classval; @@ -337,7 +414,7 @@ static gint compare_probe_id(const struct srd_probe *a, const char *probe_id) * @return SRD_OK upon success, a (negative) error code otherwise. */ SRD_API int srd_inst_probe_set_all(struct srd_decoder_inst *di, - GHashTable *new_probes) + GHashTable *new_probes) { GList *l; GSList *sl; @@ -426,7 +503,7 @@ SRD_API int srd_inst_probe_set_all(struct srd_decoder_inst *di, * NULL in case of failure. */ SRD_API struct srd_decoder_inst *srd_inst_new(const char *decoder_id, - GHashTable *options) + GHashTable *options) { int i; struct srd_decoder *dec; @@ -501,7 +578,7 @@ SRD_API struct srd_decoder_inst *srd_inst_new(const char *decoder_id, * @return SRD_OK upon success, a (negative) error code otherwise. */ SRD_API int srd_inst_stack(struct srd_decoder_inst *di_from, - struct srd_decoder_inst *di_to) + struct srd_decoder_inst *di_to) { if (!di_from || !di_to) { srd_err("Invalid from/to instance pair."); @@ -558,11 +635,12 @@ SRD_API struct srd_decoder_inst *srd_inst_find_by_id(const char *inst_id) * @param obj The Python class instantiation. * * @return Pointer to struct srd_decoder_inst, or NULL if not found. + * + * @private */ SRD_PRIV struct srd_decoder_inst *srd_inst_find_by_obj(const GSList *stack, - const PyObject *obj) + const PyObject *obj) { -// TODO? const GSList *l; struct srd_decoder_inst *tmp, *di; @@ -578,6 +656,7 @@ SRD_PRIV struct srd_decoder_inst *srd_inst_find_by_obj(const GSList *stack, return di; } +/** @private */ SRD_PRIV int srd_inst_start(struct srd_decoder_inst *di, PyObject *args) { PyObject *py_name, *py_res; @@ -627,10 +706,12 @@ SRD_PRIV int srd_inst_start(struct srd_decoder_inst *di, PyObject *args) * @param inbuflen Length of the buffer. Must be > 0. * * @return SRD_OK upon success, a (negative) error code otherwise. + * + * @private */ SRD_PRIV int srd_inst_decode(uint64_t start_samplenum, - const struct srd_decoder_inst *di, - const uint8_t *inbuf, uint64_t inbuflen) + const struct srd_decoder_inst *di, const uint8_t *inbuf, + uint64_t inbuflen) { PyObject *py_res; srd_logic *logic; @@ -674,13 +755,14 @@ SRD_PRIV int srd_inst_decode(uint64_t start_samplenum, end_samplenum, logic))) { srd_exception_catch("Protocol decoder instance %s: ", di->inst_id); - return SRD_ERR_PYTHON; /* TODO: More specific error? */ + return SRD_ERR_PYTHON; } Py_DecRef(py_res); return SRD_OK; } +/** @private */ SRD_PRIV void srd_inst_free(struct srd_decoder_inst *di) { GSList *l; @@ -700,6 +782,7 @@ SRD_PRIV void srd_inst_free(struct srd_decoder_inst *di) g_slist_free(di->pd_output); } +/** @private */ SRD_PRIV void srd_inst_free_all(GSList *stack) { GSList *l; @@ -718,6 +801,16 @@ SRD_PRIV void srd_inst_free_all(GSList *stack) } } +/** @} */ + +/** + * @defgroup grp_session Session handling + * + * Starting and handling decoding sessions. + * + * @{ + */ + /** * Start a decoding session. * @@ -775,7 +868,7 @@ SRD_API int srd_session_start(int num_probes, int unitsize, uint64_t samplerate) * @return SRD_OK upon success, a (negative) error code otherwise. */ SRD_API int srd_session_send(uint64_t start_samplenum, const uint8_t *inbuf, - uint64_t inbuflen) + uint64_t inbuflen) { GSList *d; int ret; @@ -806,7 +899,7 @@ SRD_API int srd_session_send(uint64_t start_samplenum, const uint8_t *inbuf, * @param cb_data Private data for the callback function. Can be NULL. */ SRD_API int srd_pd_output_callback_add(int output_type, - srd_pd_output_callback_t cb, void *cb_data) + srd_pd_output_callback_t cb, void *cb_data) { struct srd_pd_callback *pd_cb; @@ -825,6 +918,7 @@ SRD_API int srd_pd_output_callback_add(int output_type, return SRD_OK; } +/** @private */ SRD_PRIV void *srd_pd_output_callback_find(int output_type) { GSList *l; @@ -844,6 +938,7 @@ SRD_PRIV void *srd_pd_output_callback_find(int output_type) } /* This is the backend function to Python sigrokdecode.add() call. */ +/** @private */ SRD_PRIV int srd_inst_pd_output_add(struct srd_decoder_inst *di, int output_type, const char *proto_id) { @@ -866,3 +961,5 @@ SRD_PRIV int srd_inst_pd_output_add(struct srd_decoder_inst *di, return pdo->pdo_id; } + +/** @} */