diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 5 | ||||
-rw-r--r-- | src/scangobj.sh.in | 2 | ||||
-rw-r--r-- | src/uca-plugin-manager.c | 125 | ||||
-rw-r--r-- | src/uca-plugin-manager.h | 9 | ||||
-rw-r--r-- | src/uca.pc.in | 1 | ||||
-rw-r--r-- | src/uca.types.in | 3 |
6 files changed, 109 insertions, 36 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 160c52b..e7db6a7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -85,6 +85,9 @@ if (INTROSPECTION_SCANNER AND INTROSPECTION_COMPILER) list(APPEND _gir_input "${CMAKE_CURRENT_SOURCE_DIR}/${_src}") endforeach() + list(APPEND _gir_input "${CMAKE_CURRENT_BINARY_DIR}/uca-enums.h") + list(APPEND _gir_input "${CMAKE_CURRENT_BINARY_DIR}/uca-enums.c") + add_custom_command(OUTPUT ${GIR_XML} COMMAND ${INTROSPECTION_SCANNER} --namespace=Uca @@ -199,7 +202,7 @@ install(TARGETS uca COMPONENT libraries) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/uca.pc - DESTINATION lib/pkgconfig + DESTINATION ${LIB_INSTALL_DIR}/pkgconfig COMPONENT libraries) install(FILES ${uca_HDRS} diff --git a/src/scangobj.sh.in b/src/scangobj.sh.in index 65766b6..088d67e 100644 --- a/src/scangobj.sh.in +++ b/src/scangobj.sh.in @@ -1 +1 @@ -LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}:/opt/pylon/lib64:/opt/pylon/genicam/bin/Linux64_x64 CC=gcc CFLAGS="${GTK_DOC_CFLAGS}" LDFLAGS="${GTK_DOC_LDFLAGS} -L${CMAKE_CURRENT_BINARY_DIR} -L${CMAKE_CURRENT_BINARY_DIR} -luca `pkg-config --libs gtk+-2.0`" gtkdoc-scangobj --module=uca +LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}:/opt/pylon/lib64:/opt/pylon/genicam/bin/Linux64_x64 CC=gcc CFLAGS="${GTK_DOC_CFLAGS}" LDFLAGS="${GTK_DOC_LDFLAGS} -L${CMAKE_CURRENT_BINARY_DIR} -luca `pkg-config --libs gtk+-2.0`" gtkdoc-scangobj --module=uca diff --git a/src/uca-plugin-manager.c b/src/uca-plugin-manager.c index e99f478..5013981 100644 --- a/src/uca-plugin-manager.c +++ b/src/uca-plugin-manager.c @@ -32,6 +32,7 @@ * * @Since: 1.1 */ +#include <gio/gio.h> #include <gmodule.h> #include "uca-plugin-manager.h" @@ -45,7 +46,7 @@ struct _UcaPluginManagerPrivate { static const gchar *MODULE_PATTERN = "libuca([A-Za-z]+)"; -typedef UcaCamera * (*GetCameraFunc) (GError **error); +typedef GType (*GetTypeFunc) (void); /** * UcaPluginManagerError: @@ -208,39 +209,22 @@ find_camera_module_path (GList *search_paths, const gchar *name) return result; } -/** - * uca_plugin_manager_get_camera: - * @manager: A #UcaPluginManager - * @name: Name of the camera module, that maps to libuca<name>.so - * @error: Location for a #GError - * - * Create a new camera instance with camera @name. - * - * Returns: (transfer full): A new #UcaCamera object. - */ -UcaCamera * -uca_plugin_manager_get_camera (UcaPluginManager *manager, - const gchar *name, - GError **error) +static GType +get_camera_type (UcaPluginManagerPrivate *priv, + const gchar *name, + GError **error) { - UcaPluginManagerPrivate *priv; - UcaCamera *camera; GModule *module; - GetCameraFunc *func; gchar *module_path; - GError *tmp_error = NULL; + GetTypeFunc *func; + const gchar *symbol_name = "uca_camera_get_type"; - const gchar *symbol_name = "uca_camera_impl_new"; - - g_return_val_if_fail (UCA_IS_PLUGIN_MANAGER (manager) && (name != NULL), NULL); - - priv = manager->priv; module_path = find_camera_module_path (priv->search_paths, name); if (module_path == NULL) { g_set_error (error, UCA_PLUGIN_MANAGER_ERROR, UCA_PLUGIN_MANAGER_ERROR_MODULE_NOT_FOUND, - "Camera module `%s' not found", name); - return NULL; + "Camera module `%s' not found", name); + return G_TYPE_NONE; } module = g_module_open (module_path, G_MODULE_BIND_LAZY); @@ -249,10 +233,10 @@ uca_plugin_manager_get_camera (UcaPluginManager *manager, if (!module) { g_set_error (error, UCA_PLUGIN_MANAGER_ERROR, UCA_PLUGIN_MANAGER_ERROR_MODULE_OPEN, "Camera module `%s' could not be opened: %s", name, g_module_error ()); - return NULL; + return G_TYPE_NONE; } - func = g_malloc0 (sizeof (GetCameraFunc)); + func = g_malloc0 (sizeof (GetTypeFunc)); if (!g_module_symbol (module, symbol_name, (gpointer *) func)) { g_set_error (error, UCA_PLUGIN_MANAGER_ERROR, UCA_PLUGIN_MANAGER_ERROR_SYMBOL_NOT_FOUND, @@ -262,15 +246,90 @@ uca_plugin_manager_get_camera (UcaPluginManager *manager, if (!g_module_close (module)) g_warning ("%s", g_module_error ()); - return NULL; + return G_TYPE_NONE; } - camera = (*func) (&tmp_error); + return (*func) (); +} - if (tmp_error != NULL) { - g_propagate_error (error, tmp_error); +/** + * uca_plugin_manager_get_camerav: + * @manager: A #UcaPluginManager + * @name: Name of the camera module, that maps to libuca<name>.so + * @n_parameters: number of parameters in @parameters + * @parameters: (array length=n_parameters): the parameters to use to construct + * the camera + * @error: Location for a #GError or %NULL + * + * Create a new camera instance with camera @name. + * + * Returns: (transfer full): A new #UcaCamera object. + * @Since: 1.2 + */ +UcaCamera * +uca_plugin_manager_get_camerav (UcaPluginManager *manager, + const gchar *name, + guint n_parameters, + GParameter *parameters, + GError **error) +{ + UcaPluginManagerPrivate *priv; + UcaCamera *camera; + GType type; + + g_return_val_if_fail (UCA_IS_PLUGIN_MANAGER (manager) && (name != NULL), NULL); + + priv = manager->priv; + type = get_camera_type (priv, name, error); + + if (type == G_TYPE_NONE) return NULL; - } + + camera = (UcaCamera *) g_initable_newv (type, n_parameters, parameters, + NULL, error); + + return camera; +} + +/** + * uca_plugin_manager_get_camera: (skip) + * @manager: A #UcaPluginManager + * @name: Name of the camera module, that maps to libuca<name>.so + * @error: Location for a #GError + * @first_prop_name: (allow-none): name of the first property, or %NULL if no + * properties + * @...: value of the first property, followed by and other property value + * pairs, and ended by %NULL. + * + * Create a new camera instance with camera @name. + * + * Returns: (transfer full): A new #UcaCamera object. + * @Since: 1.2: Pass construction properties. + */ +UcaCamera * +uca_plugin_manager_get_camera (UcaPluginManager *manager, + const gchar *name, + GError **error, + const gchar *first_prop_name, + ...) +{ + UcaPluginManagerPrivate *priv; + UcaCamera *camera; + GType type; + va_list var_args; + + g_return_val_if_fail (UCA_IS_PLUGIN_MANAGER (manager) && (name != NULL), NULL); + + priv = manager->priv; + type = get_camera_type (priv, name, error); + + if (type == G_TYPE_NONE) + return NULL; + + va_start (var_args, first_prop_name); + camera = (UcaCamera *) g_initable_new (type, NULL, error, + first_prop_name, var_args); + va_end (var_args); return camera; } diff --git a/src/uca-plugin-manager.h b/src/uca-plugin-manager.h index 6c3ab4e..10fe9d1 100644 --- a/src/uca-plugin-manager.h +++ b/src/uca-plugin-manager.h @@ -55,9 +55,16 @@ void uca_plugin_manager_add_path (UcaPluginManager *manager const gchar *path); GList *uca_plugin_manager_get_available_cameras (UcaPluginManager *manager); -UcaCamera *uca_plugin_manager_get_camera (UcaPluginManager *manager, +UcaCamera *uca_plugin_manager_get_camerav (UcaPluginManager *manager, const gchar *name, + guint n_parameters, + GParameter *parameters, GError **error); +UcaCamera *uca_plugin_manager_get_camera (UcaPluginManager *manager, + const gchar *name, + GError **error, + const gchar *first_prop_name, + ...); GType uca_plugin_manager_get_type (void); G_END_DECLS diff --git a/src/uca.pc.in b/src/uca.pc.in index 6401368..3ca4dbe 100644 --- a/src/uca.pc.in +++ b/src/uca.pc.in @@ -11,3 +11,4 @@ Description: @UCA_DESCRIPTION@ Version: @VERSION@ Libs: -L${libdir} -luca Cflags: -I${includedir_old} -I${includedir_new} +Requires: glib-2.0 gobject-2.0 diff --git a/src/uca.types.in b/src/uca.types.in index 7526948..76acc2b 100644 --- a/src/uca.types.in +++ b/src/uca.types.in @@ -1,2 +1,5 @@ uca_camera_get_type +uca_camera_error_get_type +uca_camera_trigger_get_type uca_plugin_manager_get_type +uca_unit_get_type |