diff options
-rw-r--r-- | plugins/dexela/uca-dexela-camera.c | 72 | ||||
-rw-r--r-- | plugins/pylon/uca-pylon-camera.c | 9 |
2 files changed, 55 insertions, 26 deletions
diff --git a/plugins/dexela/uca-dexela-camera.c b/plugins/dexela/uca-dexela-camera.c index 81d9f74..4a9fc82 100644 --- a/plugins/dexela/uca-dexela-camera.c +++ b/plugins/dexela/uca-dexela-camera.c @@ -57,7 +57,7 @@ static gint base_overrideables[] = { PROP_SENSOR_VERTICAL_BINNING, PROP_SENSOR_VERTICAL_BINNINGS, PROP_EXPOSURE_TIME, - PROP_TRIGGER_MODE, + PROP_TRIGGER_SOURCE, PROP_ROI_X, PROP_ROI_Y, PROP_ROI_WIDTH, @@ -85,7 +85,8 @@ struct _UcaDexelaCameraPrivate { guint roi_height; guint bits; gsize num_bytes; - UcaCameraTrigger uca_trigger_mode; + UcaCameraTriggerSource uca_trigger_source; + UcaCameraTriggerType uca_trigger_type; }; /** @@ -105,35 +106,51 @@ static void fill_binnings(UcaDexelaCameraPrivate *priv) g_value_array_append(priv->binnings, &val); } -static void map_dexela_trigger_mode_to_uca(UcaDexelaCameraPrivate *priv, GValue* value, TriggerMode mode) +static void map_dexela_trigger_mode_to_uca_source(UcaDexelaCameraPrivate *priv, GValue* value, TriggerMode mode) { if (mode == SOFTWARE) { - g_value_set_enum(value, priv->uca_trigger_mode); - return; + priv->uca_trigger_source = UCA_CAMERA_TRIGGER_SOURCE_AUTO; + } + if (mode == EDGE || mode == DURATION) { + priv->uca_trigger_source = UCA_CAMERA_TRIGGER_SOURCE_EXTERNAL; } + g_value_set_enum(value, priv->uca_trigger_source); +} + +static void map_dexela_trigger_mode_to_uca_type(UcaDexelaCameraPrivate *priv, GValue* value, TriggerMode mode) +{ if (mode == EDGE) { - g_value_set_enum(value, UCA_CAMERA_TRIGGER_EXTERNAL); - return; + priv->uca_trigger_type = UCA_CAMERA_TRIGGER_TYPE_EDGE; + } + if (mode == DURATION) { + priv->uca_trigger_type = UCA_CAMERA_TRIGGER_TYPE_LEVEL; } - g_warning("Unsupported dexela trigger mode: %d", mode); + g_value_set_enum(value, priv->uca_trigger_type); } -static void set_trigger_mode(UcaDexelaCameraPrivate *priv, UcaCameraTrigger mode) +static void set_triggering(UcaDexelaCameraPrivate *priv, UcaCameraTriggerSource source, UcaCameraTriggerType type) { - priv->uca_trigger_mode = mode; - if (mode == UCA_CAMERA_TRIGGER_AUTO) { + priv->uca_trigger_source = source; + priv->uca_trigger_type = type; + if (source == UCA_CAMERA_TRIGGER_SOURCE_AUTO) { dexela_set_trigger_mode(SOFTWARE); return; } - if (mode == UCA_CAMERA_TRIGGER_SOFTWARE) { + if (source == UCA_CAMERA_TRIGGER_SOURCE_SOFTWARE) { dexela_set_trigger_mode(SOFTWARE); return; } - if (mode == UCA_CAMERA_TRIGGER_EXTERNAL) { - dexela_set_trigger_mode(EDGE); - return; + if (source == UCA_CAMERA_TRIGGER_SOURCE_EXTERNAL) { + if (type == UCA_CAMERA_TRIGGER_TYPE_EDGE) { + dexela_set_trigger_mode(EDGE); + return; + } + if (type == UCA_CAMERA_TRIGGER_TYPE_LEVEL) { + dexela_set_trigger_mode(DURATION); + return; + } } - g_warning("Unsupported uca trigger mode: %d", mode); + g_warning("Unsupported uca trigger source and type: %d/%d", source, type); } static gboolean is_binning_allowed(UcaDexelaCameraPrivate *priv, guint binning) @@ -249,9 +266,14 @@ static void uca_dexela_camera_get_property(GObject *object, guint property_id, G g_value_set_boolean(value, dexela_get_control_register() & 1); break; } - case PROP_TRIGGER_MODE: + case PROP_TRIGGER_SOURCE: { - map_dexela_trigger_mode_to_uca(priv, value, dexela_get_trigger_mode()); + map_dexela_trigger_mode_to_uca_source(priv, value, dexela_get_trigger_mode()); + break; + } + case PROP_TRIGGER_TYPE: + { + map_dexela_trigger_mode_to_uca_type(priv, value, dexela_get_trigger_mode()); break; } default: @@ -342,9 +364,14 @@ static void uca_dexela_camera_set_property(GObject *object, guint property_id, c dexela_set_control_register(dexela_get_control_register() & 0xFFFE); break; } - case PROP_TRIGGER_MODE: + case PROP_TRIGGER_SOURCE: + { + set_triggering(priv, g_value_get_enum(value), priv->uca_trigger_type); + break; + } + case PROP_TRIGGER_TYPE: { - set_trigger_mode(priv, g_value_get_enum(value)); + set_triggering(priv, priv->uca_trigger_source, g_value_get_enum(value)); break; } default: @@ -371,7 +398,7 @@ static gboolean uca_dexela_camera_grab(UcaCamera *camera, gpointer data, GError g_return_val_if_fail(UCA_IS_DEXELA_CAMERA(camera), FALSE); UcaDexelaCameraPrivate *priv = UCA_DEXELA_CAMERA_GET_PRIVATE(camera); - if (priv->uca_trigger_mode == UCA_CAMERA_TRIGGER_SOFTWARE) { + if (priv->uca_trigger_source == UCA_CAMERA_TRIGGER_SOURCE_SOFTWARE) { // TODO: wait for a signal from uca_camera_trigger() } guchar* fullFrame = dexela_grab(); @@ -451,7 +478,8 @@ static void uca_dexela_camera_init(UcaDexelaCamera *self) priv->roi_width = priv->width; priv->roi_height = priv->height; priv->num_bytes = 2; - priv->uca_trigger_mode = UCA_CAMERA_TRIGGER_AUTO; + priv->uca_trigger_source = UCA_CAMERA_TRIGGER_SOURCE_AUTO; + priv->uca_trigger_type = UCA_CAMERA_TRIGGER_TYPE_EDGE; } G_MODULE_EXPORT GType diff --git a/plugins/pylon/uca-pylon-camera.c b/plugins/pylon/uca-pylon-camera.c index af6b8cf..0265ade 100644 --- a/plugins/pylon/uca-pylon-camera.c +++ b/plugins/pylon/uca-pylon-camera.c @@ -68,7 +68,7 @@ static gint base_overrideables[] = { PROP_SENSOR_HORIZONTAL_BINNINGS, PROP_SENSOR_VERTICAL_BINNING, PROP_SENSOR_VERTICAL_BINNINGS, - PROP_TRIGGER_MODE, + PROP_TRIGGER_SOURCE, PROP_EXPOSURE_TIME, PROP_ROI_X, PROP_ROI_Y, @@ -149,7 +149,8 @@ static void uca_pylon_camera_set_property(GObject *object, guint property_id, co /* intentional fall-through*/ case PROP_SENSOR_VERTICAL_BINNING: /* intentional fall-through*/ - case PROP_TRIGGER_MODE: + case PROP_TRIGGER_SOURCE: + /* this plugin supports AUTO triggering only ATM */ break; case PROP_BALANCE_WHITE_AUTO: { @@ -262,8 +263,8 @@ static void uca_pylon_camera_get_property(GObject *object, guint property_id, GV g_value_set_boxed(value, priv->binnings); break; - case PROP_TRIGGER_MODE: - g_value_set_enum(value, UCA_CAMERA_TRIGGER_AUTO); + case PROP_TRIGGER_SOURCE: + g_value_set_enum(value, UCA_CAMERA_TRIGGER_SOURCE_AUTO); break; case PROP_HAS_STREAMING: |