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  | 
