summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt5
-rw-r--r--src/scangobj.sh.in2
-rw-r--r--src/uca-plugin-manager.c125
-rw-r--r--src/uca-plugin-manager.h9
-rw-r--r--src/uca.pc.in1
-rw-r--r--src/uca.types.in3
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