summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthias Vogelgesang <matthias.vogelgesang@ipe.fzk.de>2011-02-25 17:44:23 +0100
committerMatthias Vogelgesang <matthias.vogelgesang@ipe.fzk.de>2011-02-25 17:44:23 +0100
commita10b4d2abbb2aafbcb398f659975d673b0181e8c (patch)
treefa03f1413b43cddbd408a9e01c949525f6886453 /src
parente99970e82e665cb5668584827af320bc49e27300 (diff)
downloadlibuca-a10b4d2abbb2aafbcb398f659975d673b0181e8c.tar.gz
libuca-a10b4d2abbb2aafbcb398f659975d673b0181e8c.tar.bz2
libuca-a10b4d2abbb2aafbcb398f659975d673b0181e8c.tar.xz
libuca-a10b4d2abbb2aafbcb398f659975d673b0181e8c.zip
Make the properties complete and build even better test app
Diffstat (limited to 'src')
-rw-r--r--src/uca.c65
-rw-r--r--src/uca.h27
2 files changed, 62 insertions, 30 deletions
diff --git a/src/uca.c b/src/uca.c
index 3ee6c33..73dd79e 100644
--- a/src/uca.c
+++ b/src/uca.c
@@ -59,48 +59,55 @@ void uca_destroy(struct uca_t *uca)
}
}
-static const char* property_map[] = {
- "name",
- "width",
- "width.min",
- "width.max",
- "height",
- "height.min",
- "height.max",
- "offset.x",
- "offset.y",
- "bit-depth",
- "exposure",
- "exposure.min",
- "exposure.max",
- "delay",
- "delay.min",
- "delay.max",
- "trigger-mode",
- "frame-rate",
- "timestamp-mode",
- "scan-mode",
- "interlace.sample-rate",
- "interlace.threshold.pixel",
- "interlace.threshold.row",
- "correction-mode",
- NULL
+static struct uca_property_t property_map[UCA_PROP_LAST] = {
+ { "name", uca_na, uca_string },
+ { "width", uca_pixel, uca_uint32t },
+ { "width.min", uca_pixel, uca_uint32t },
+ { "width.max", uca_pixel, uca_uint32t },
+ { "height", uca_pixel, uca_uint32t },
+ { "height.min", uca_pixel, uca_uint32t },
+ { "height.max", uca_pixel, uca_uint32t },
+ { "offset.x", uca_pixel, uca_uint32t },
+ { "offset.y", uca_pixel, uca_uint32t },
+ { "bit-depth", uca_pixel, uca_uint8t },
+ { "exposure", uca_us, uca_uint32t },
+ { "exposure.min", uca_ns, uca_uint32t },
+ { "exposure.max", uca_ms, uca_uint32t },
+ { "delay", uca_us, uca_uint32t },
+ { "delay.min", uca_ns, uca_uint32t },
+ { "delay.max", uca_ms, uca_uint32t },
+ { "frame-rate", uca_na, uca_uint32t },
+ { "trigger-mode", uca_na, uca_uint32t },
+ { "timestamp-mode", uca_na, uca_uint32t },
+ { "scan-mode", uca_na, uca_uint32t },
+ { "interlace.sample-rate", uca_na, uca_uint32t },
+ { "interlace.threshold.pixel", uca_na, uca_uint32t },
+ { "interlace.threshold.row", uca_na, uca_uint32t },
+ { "correction-mode", uca_na, uca_uint32t },
+ { NULL, 0, 0 }
};
int32_t uca_get_property_id(const char *property_name)
{
char *name;
int i = 0;
- while (property_map[i] != NULL) {
- if (!strcmp(property_map[i], property_name))
+ while (property_map[i].name != NULL) {
+ if (!strcmp(property_map[i].name, property_name))
return i;
i++;
}
return UCA_PROP_INVALID;
}
+struct uca_property_t *uca_get_full_property(int32_t property_id)
+{
+ if ((property_id >= 0) && (property_id < UCA_PROP_LAST))
+ return &property_map[property_id];
+ return NULL;
+}
+
const char* uca_get_property_name(int32_t property_id)
{
/* TODO: guard that thing */
- return property_map[property_id];
+ return property_map[property_id].name;
}
diff --git a/src/uca.h b/src/uca.h
index 52cc7b8..bf0cc21 100644
--- a/src/uca.h
+++ b/src/uca.h
@@ -14,6 +14,7 @@
#include <stdint.h>
struct uca_t;
+struct uca_property_t;
/**
* \brief Camera probing and initialization
@@ -73,6 +74,7 @@ int32_t uca_get_property_id(const char *property_name);
*/
const char* uca_get_property_name(int32_t property_id);
+struct uca_property_t *uca_get_full_property(int32_t property_id);
#define UCA_NO_ERROR 0
#define UCA_ERR_INIT_NOT_FOUND 1 /**< camera probing or initialization failed */
@@ -115,7 +117,9 @@ const char* uca_get_property_name(int32_t property_id);
#define UCA_PROP_INTERLACE_ROW_THRESH 24
/* Photon Focus specific */
-#define UCA_PROP_CORRECTION_MODE 21
+#define UCA_PROP_CORRECTION_MODE 25
+
+#define UCA_PROP_LAST 26
/* Possible timestamp modes for UCA_PROP_TIMESTAMP_MODE */
#define UCA_TIMESTAMP_ASCII 0x01
@@ -131,6 +135,27 @@ const char* uca_get_property_name(int32_t property_id);
#define UCA_CORRECT_HOTPIXEL 0x02
#define UCA_CORRECT_GAIN 0x04
+struct uca_property_t {
+ const char *name;
+
+ enum uca_unit {
+ uca_pixel,
+ uca_bits,
+ uca_ns,
+ uca_us,
+ uca_ms,
+ uca_s,
+ uca_rows,
+ uca_na
+ } unit;
+
+ enum uca_types {
+ uca_uint32t,
+ uca_uint8t,
+ uca_string
+ } type;
+};
+
struct uca_t {
/* Function pointers to camera-specific methods */
uca_cam_set_property cam_set_property;