diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/uca.c | 65 | ||||
-rw-r--r-- | src/uca.h | 27 |
2 files changed, 62 insertions, 30 deletions
@@ -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; } @@ -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; |