summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/xkit/uca-xkit-camera.cc88
1 files changed, 66 insertions, 22 deletions
diff --git a/plugins/xkit/uca-xkit-camera.cc b/plugins/xkit/uca-xkit-camera.cc
index 6ecae84..7b580a3 100644
--- a/plugins/xkit/uca-xkit-camera.cc
+++ b/plugins/xkit/uca-xkit-camera.cc
@@ -43,31 +43,31 @@ G_DEFINE_TYPE_WITH_CODE (UcaXkitCamera, uca_xkit_camera, UCA_TYPE_CAMERA,
GQuark uca_xkit_camera_error_quark()
{
- return g_quark_from_static_string("uca-ufo-camera-error-quark");
+ return g_quark_from_static_string("uca-xkit-camera-error-quark");
}
enum {
- PROP_SENSOR_TEMPERATURE = N_BASE_PROPERTIES,
- PROP_FPGA_TEMPERATURE,
- PROP_UFO_START,
- N_MAX_PROPERTIES = 512
+ PROP_POSITIVE_POLARITY = N_BASE_PROPERTIES,
+ N_PROPERTIES
};
static gint base_overrideables[] = {
PROP_NAME,
PROP_SENSOR_WIDTH,
PROP_SENSOR_HEIGHT,
+ PROP_SENSOR_MAX_FRAME_RATE,
PROP_SENSOR_BITDEPTH,
+ PROP_EXPOSURE_TIME,
PROP_ROI_X,
PROP_ROI_Y,
PROP_ROI_WIDTH,
PROP_ROI_HEIGHT,
+ PROP_HAS_STREAMING,
+ PROP_HAS_CAMRAM_RECORDING,
0,
};
-static GParamSpec *ufo_properties[N_MAX_PROPERTIES] = { NULL, };
-
-static guint N_PROPERTIES;
+static GParamSpec *xkit_properties[N_PROPERTIES] = { NULL, };
struct _UcaXkitCameraPrivate {
GError *construct_error;
@@ -75,7 +75,9 @@ struct _UcaXkitCameraPrivate {
gint devices[4];
gint n_devices;
gint device;
+
DevInfo info;
+ AcqParams acq;
};
@@ -92,6 +94,14 @@ setup_xkit (UcaXkitCameraPrivate *priv)
priv->device = priv->devices[0];
priv->interface->getDevInfo (priv->device, &priv->info);
+ /* TODO: find some sensible defaults */
+ priv->acq.useHwTimer = TRUE;
+ priv->acq.enableCst = FALSE;
+ priv->acq.polarityPositive = TRUE;
+ priv->acq.mode = ACQMODE_ACQSTART_TIMERSTOP;
+ priv->acq.acqCount = 1;
+ priv->acq.time = 1.0;
+
return TRUE;
}
@@ -99,7 +109,15 @@ static void
uca_xkit_camera_start_recording (UcaCamera *camera,
GError **error)
{
+ UcaXkitCameraPrivate *priv;
+
g_return_if_fail (UCA_IS_XKIT_CAMERA (camera));
+ priv = UCA_XKIT_CAMERA_GET_PRIVATE (camera);
+
+ if (priv->interface->setAcqPars (priv->device, &priv->acq)) {
+ g_set_error_literal (error, UCA_CAMERA_ERROR, UCA_CAMERA_ERROR_RECORDING,
+ "Could not set acquisition parameters");
+ }
}
static void
@@ -172,9 +190,15 @@ uca_xkit_camera_set_property (GObject *object,
const GValue *value,
GParamSpec *pspec)
{
- /* UcaXkitCameraPrivate *priv = UCA_XKIT_CAMERA_GET_PRIVATE(object); */
+ UcaXkitCameraPrivate *priv = UCA_XKIT_CAMERA_GET_PRIVATE(object);
switch (property_id) {
+ case PROP_EXPOSURE_TIME:
+ priv->acq.time = g_value_get_double (value);
+ break;
+ case PROP_POSITIVE_POLARITY:
+ priv->acq.polarityPositive = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
return;
@@ -193,6 +217,10 @@ uca_xkit_camera_get_property (GObject *object,
case PROP_NAME:
g_value_set_string (value, priv->info.ifaceName);
break;
+ case PROP_SENSOR_MAX_FRAME_RATE:
+ /* TODO: pretty arbitrary, huh? */
+ g_value_set_float (value, 150.0f);
+ break;
case PROP_SENSOR_WIDTH:
g_value_set_uint (value, priv->info.rowLen);
break;
@@ -202,6 +230,15 @@ uca_xkit_camera_get_property (GObject *object,
case PROP_SENSOR_BITDEPTH:
g_value_set_uint (value, 11);
break;
+ case PROP_EXPOSURE_TIME:
+ g_value_set_double (value, priv->acq.time);
+ break;
+ case PROP_HAS_STREAMING:
+ g_value_set_boolean (value, TRUE);
+ break;
+ case PROP_HAS_CAMRAM_RECORDING:
+ g_value_set_boolean (value, FALSE);
+ break;
case PROP_ROI_X:
g_value_set_uint (value, 0);
break;
@@ -214,6 +251,9 @@ uca_xkit_camera_get_property (GObject *object,
case PROP_ROI_HEIGHT:
g_value_set_uint (value, priv->info.numberOfRows * MEDIPIX_SENSOR_HEIGHT);
break;
+ case PROP_POSITIVE_POLARITY:
+ g_value_set_boolean (value, priv->acq.polarityPositive);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -269,12 +309,13 @@ uca_xkit_camera_initable_iface_init (GInitableIface *iface)
static void
uca_xkit_camera_class_init (UcaXkitCameraClass *klass)
{
- GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
- gobject_class->set_property = uca_xkit_camera_set_property;
- gobject_class->get_property = uca_xkit_camera_get_property;
- gobject_class->finalize = uca_xkit_camera_finalize;
+ GObjectClass *oclass = G_OBJECT_CLASS (klass);
+ UcaCameraClass *camera_class = UCA_CAMERA_CLASS (klass);
+
+ oclass->set_property = uca_xkit_camera_set_property;
+ oclass->get_property = uca_xkit_camera_get_property;
+ oclass->finalize = uca_xkit_camera_finalize;
- UcaCameraClass *camera_class = UCA_CAMERA_CLASS(klass);
camera_class->start_recording = uca_xkit_camera_start_recording;
camera_class->stop_recording = uca_xkit_camera_stop_recording;
camera_class->start_readout = uca_xkit_camera_start_readout;
@@ -283,27 +324,30 @@ uca_xkit_camera_class_init (UcaXkitCameraClass *klass)
camera_class->trigger = uca_xkit_camera_trigger;
for (guint i = 0; base_overrideables[i] != 0; i++)
- g_object_class_override_property(gobject_class, base_overrideables[i], uca_camera_props[base_overrideables[i]]);
+ g_object_class_override_property (oclass, base_overrideables[i], uca_camera_props[base_overrideables[i]]);
+
+ xkit_properties[PROP_POSITIVE_POLARITY] =
+ g_param_spec_boolean ("positive-polarity",
+ "Is polarity positive",
+ "Is polarity positive",
+ TRUE, (GParamFlags) G_PARAM_READWRITE);
- g_type_class_add_private(klass, sizeof(UcaXkitCameraPrivate));
+ for (guint id = N_BASE_PROPERTIES; id < N_PROPERTIES; id++)
+ g_object_class_install_property (oclass, id, xkit_properties[id]);
+
+ g_type_class_add_private (klass, sizeof(UcaXkitCameraPrivate));
}
static void
uca_xkit_camera_init (UcaXkitCamera *self)
{
UcaXkitCameraPrivate *priv;
- GObjectClass *oclass;
self->priv = priv = UCA_XKIT_CAMERA_GET_PRIVATE (self);
priv->construct_error = NULL;
if (!setup_xkit (priv))
return;
-
- oclass = G_OBJECT_GET_CLASS (self);
-
- for (guint id = N_BASE_PROPERTIES; id < N_PROPERTIES; id++)
- g_object_class_install_property (oclass, id, ufo_properties[id]);
}
G_MODULE_EXPORT GType