X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=include%2Fbabeltrace%2Fplugin%2Fplugin.h;h=b9be67436b08bd386ab30f6f3fb9b840e6f78394;hb=c55a9f585da53ea54ac458155fac3cdec1779d47;hp=9c2c5f00606bb581b397e8a243bba9aeff30d7a6;hpb=90354d3a48e8659a3550bf6edf8d714323855a7d;p=babeltrace.git diff --git a/include/babeltrace/plugin/plugin.h b/include/babeltrace/plugin/plugin.h index 9c2c5f00..b9be6743 100644 --- a/include/babeltrace/plugin/plugin.h +++ b/include/babeltrace/plugin/plugin.h @@ -1,10 +1,11 @@ -#ifndef BABELTRACE_PLUGIN_H -#define BABELTRACE_PLUGIN_H +#ifndef BABELTRACE_PLUGIN_PLUGIN_H +#define BABELTRACE_PLUGIN_PLUGIN_H /* - * BabelTrace - Plug-in + * BabelTrace - Babeltrace Plug-in Interface * - * Copyright 2015 Jérémie Galarneau + * Copyright 2016 Jérémie Galarneau + * Copyright 2017 Philippe Proulx * * Author: Jérémie Galarneau * @@ -28,46 +29,106 @@ */ #include +#include +#include +#include #ifdef __cplusplus extern "C" { #endif struct bt_plugin; -struct bt_notification; - -enum bt_plugin_type { - BT_PLUGIN_TYPE_UNKNOWN = -1, - /* A source plug-in is a notification generator. */ - BT_PLUGIN_TYPE_SOURCE = 0, - /* A sink plug-in handles incoming notifications. */ - BT_PLUGIN_TYPE_SINK = 1, - /* A filter plug-in implements both SOURCE and SINK interfaces. */ - BT_PLUGIN_TYPE_FILTER = 2, +struct bt_plugin_set; +struct bt_component_class; + +/** + * Status code. Errors are always negative. + */ +enum bt_plugin_status { + /** No error, okay. */ + BT_PLUGIN_STATUS_OK = 0, + /** General error. */ + BT_PLUGIN_STATUS_ERROR = -1, + /** Memory allocation failure. */ + BT_PLUGIN_STATUS_NOMEM = -4, }; +extern struct bt_plugin *bt_plugin_find(const char *plugin_name); + +extern struct bt_component_class *bt_plugin_find_component_class( + const char *plugin_name, const char *component_class_name, + enum bt_component_class_type component_class_type); + +extern struct bt_plugin_set *bt_plugin_create_all_from_file(const char *path); + +extern struct bt_plugin_set *bt_plugin_create_all_from_dir(const char *path, + bt_bool recurse); + +extern struct bt_plugin_set *bt_plugin_create_all_from_static(void); + /** - * Plug-in discovery functions. + * Get the name of a plug-in. * - * The Babeltrace plug-in architecture mandates that a given plug-in shared - * object only define one plug-in. These functions are used to query a about - * shared object about its attributes. + * @param plugin An instance of a plug-in + * @returns Plug-in name or NULL on error + */ +extern const char *bt_plugin_get_name(struct bt_plugin *plugin); + +/** + * Get the name of a plug-in's author. * - * The functions marked as mandatory MUST be exported by the shared object - * to be considered a valid plug-in. + * @param plugin An instance of a plug-in + * @returns Plug-in author or NULL on error */ -enum bt_plugin_type bt_plugin_get_type(void); -const char *bt_plugin_get_name(void); +extern const char *bt_plugin_get_author(struct bt_plugin *plugin); + +/** + * Get the license of a plug-in. + * + * @param plugin An instance of a plug-in + * @returns Plug-in license or NULL on error + */ +extern const char *bt_plugin_get_license(struct bt_plugin *plugin); + +/** + * Get the decription of a plug-in. + * + * @param plugin An instance of a plug-in + * @returns Plug-in description or NULL if none is available + */ +extern const char *bt_plugin_get_description(struct bt_plugin *plugin); + +/** + * Get the path of a plug-in. + * + * @param plugin An instance of a plug-in + * @returns Plug-in path or NULL on error + */ +extern const char *bt_plugin_get_path(struct bt_plugin *plugin); + +extern enum bt_plugin_status bt_plugin_get_version(struct bt_plugin *plugin, + unsigned int *major, unsigned int *minor, unsigned int *patch, + const char **extra); + +extern int64_t bt_plugin_get_component_class_count(struct bt_plugin *plugin); + +extern struct bt_component_class *bt_plugin_get_component_class_by_index( + struct bt_plugin *plugin, uint64_t index); + +extern +struct bt_component_class *bt_plugin_get_component_class_by_name_and_type( + struct bt_plugin *plugin, const char *name, + enum bt_component_class_type type); -/* TODO: document mandatory fields and their expected types */ -int bt_plugin_set_parameters(struct bt_plugin *plugin, - struct bt_ctf_field *field); +extern +int64_t bt_plugin_set_get_plugin_count(struct bt_plugin_set *plugin_set); -void bt_plugin_get(struct bt_plugin *plugin); -void bt_plugin_put(struct bt_plugin *plugin); +extern +struct bt_plugin *bt_plugin_set_get_plugin(struct bt_plugin_set *plugin_set, + uint64_t index); #ifdef __cplusplus } #endif -#endif /* BABELTRACE_PLUGIN_H */ +#endif /* BABELTRACE_PLUGIN_PLUGIN_H */