1 /* 2 * 1394-Based Digital Camera Control Library 3 * 4 * Generic camera control functions 5 * 6 * Written by Damien Douxchamps <ddouxchamps@users.sf.net> 7 * 8 * This library is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU Lesser General Public 10 * License as published by the Free Software Foundation; either 11 * version 2.1 of the License, or (at your option) any later version. 12 * 13 * This library is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public 19 * License along with this library; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 */ 22 23 #include <dc1394/log.h> 24 25 #ifndef __DC1394_CONTROL_H__ 26 #define __DC1394_CONTROL_H__ 27 28 /*! \file dc1394/control.h 29 \brief Diverse controls of camera features 30 \author Gord Peters: main writer 31 \author Chris Urmson: some additions 32 \author Damien Douxchamps: some additions 33 \author Peter Antoniac: documentation maintainer 34 \author Rudolf Leitgeb: documentation writer 35 36 This is the main include file of the library. It lists most of the library 37 functions, enumerations and data structures. 38 */ 39 40 /** 41 * Enumeration of trigger modes 42 */ 43 typedef enum { 44 DC1394_TRIGGER_MODE_0= 384, 45 DC1394_TRIGGER_MODE_1, 46 DC1394_TRIGGER_MODE_2, 47 DC1394_TRIGGER_MODE_3, 48 DC1394_TRIGGER_MODE_4, 49 DC1394_TRIGGER_MODE_5, 50 DC1394_TRIGGER_MODE_14, 51 DC1394_TRIGGER_MODE_15 52 } dc1394trigger_mode_t; 53 #define DC1394_TRIGGER_MODE_MIN DC1394_TRIGGER_MODE_0 54 #define DC1394_TRIGGER_MODE_MAX DC1394_TRIGGER_MODE_15 55 #define DC1394_TRIGGER_MODE_NUM (DC1394_TRIGGER_MODE_MAX - DC1394_TRIGGER_MODE_MIN + 1) 56 57 /** 58 * Enumeration of camera features 59 */ 60 typedef enum { 61 DC1394_FEATURE_BRIGHTNESS= 416, 62 DC1394_FEATURE_EXPOSURE, 63 DC1394_FEATURE_SHARPNESS, 64 DC1394_FEATURE_WHITE_BALANCE, 65 DC1394_FEATURE_HUE, 66 DC1394_FEATURE_SATURATION, 67 DC1394_FEATURE_GAMMA, 68 DC1394_FEATURE_SHUTTER, 69 DC1394_FEATURE_GAIN, 70 DC1394_FEATURE_IRIS, 71 DC1394_FEATURE_FOCUS, 72 DC1394_FEATURE_TEMPERATURE, 73 DC1394_FEATURE_TRIGGER, 74 DC1394_FEATURE_TRIGGER_DELAY, 75 DC1394_FEATURE_WHITE_SHADING, 76 DC1394_FEATURE_FRAME_RATE, 77 DC1394_FEATURE_ZOOM, 78 DC1394_FEATURE_PAN, 79 DC1394_FEATURE_TILT, 80 DC1394_FEATURE_OPTICAL_FILTER, 81 DC1394_FEATURE_CAPTURE_SIZE, 82 DC1394_FEATURE_CAPTURE_QUALITY 83 } dc1394feature_t; 84 #define DC1394_FEATURE_MIN DC1394_FEATURE_BRIGHTNESS 85 #define DC1394_FEATURE_MAX DC1394_FEATURE_CAPTURE_QUALITY 86 #define DC1394_FEATURE_NUM (DC1394_FEATURE_MAX - DC1394_FEATURE_MIN + 1) 87 88 /** 89 * Enumeration of trigger sources 90 */ 91 typedef enum { 92 DC1394_TRIGGER_SOURCE_0= 576, 93 DC1394_TRIGGER_SOURCE_1, 94 DC1394_TRIGGER_SOURCE_2, 95 DC1394_TRIGGER_SOURCE_3, 96 DC1394_TRIGGER_SOURCE_SOFTWARE 97 } dc1394trigger_source_t; 98 #define DC1394_TRIGGER_SOURCE_MIN DC1394_TRIGGER_SOURCE_0 99 #define DC1394_TRIGGER_SOURCE_MAX DC1394_TRIGGER_SOURCE_SOFTWARE 100 #define DC1394_TRIGGER_SOURCE_NUM (DC1394_TRIGGER_SOURCE_MAX - DC1394_TRIGGER_SOURCE_MIN + 1) 101 102 /** 103 * External trigger polarity 104 */ 105 typedef enum { 106 DC1394_TRIGGER_ACTIVE_LOW= 704, 107 DC1394_TRIGGER_ACTIVE_HIGH 108 } dc1394trigger_polarity_t; 109 #define DC1394_TRIGGER_ACTIVE_MIN DC1394_TRIGGER_ACTIVE_LOW 110 #define DC1394_TRIGGER_ACTIVE_MAX DC1394_TRIGGER_ACTIVE_HIGH 111 #define DC1394_TRIGGER_ACTIVE_NUM (DC1394_TRIGGER_ACTIVE_MAX - DC1394_TRIGGER_ACTIVE_MIN + 1) 112 113 /** 114 * Control modes for a feature (excl. absolute control) 115 */ 116 typedef enum { 117 DC1394_FEATURE_MODE_MANUAL= 736, 118 DC1394_FEATURE_MODE_AUTO, 119 DC1394_FEATURE_MODE_ONE_PUSH_AUTO 120 } dc1394feature_mode_t; 121 #define DC1394_FEATURE_MODE_MIN DC1394_FEATURE_MODE_MANUAL 122 #define DC1394_FEATURE_MODE_MAX DC1394_FEATURE_MODE_ONE_PUSH_AUTO 123 #define DC1394_FEATURE_MODE_NUM (DC1394_FEATURE_MODE_MAX - DC1394_FEATURE_MODE_MIN + 1) 124 125 /** 126 * List of feature modes 127 */ 128 typedef struct 129 { 130 uint32_t num; 131 dc1394feature_mode_t modes[DC1394_FEATURE_MODE_NUM]; 132 } dc1394feature_modes_t; 133 134 /** 135 * List of trigger modes 136 */ 137 typedef struct 138 { 139 uint32_t num; 140 dc1394trigger_mode_t modes[DC1394_TRIGGER_MODE_NUM]; 141 } dc1394trigger_modes_t; 142 143 /** 144 * List of trigger sources 145 */ 146 typedef struct 147 { 148 uint32_t num; 149 dc1394trigger_source_t sources[DC1394_TRIGGER_SOURCE_NUM]; 150 } dc1394trigger_sources_t; 151 152 /** 153 * A structure containing all information about a feature. 154 * 155 * Some fields are only valid for some features (e.g. trigger, white balance,...) 156 */ 157 typedef struct __dc1394feature_info_t_struct 158 { 159 dc1394feature_t id; 160 dc1394bool_t available; 161 dc1394bool_t absolute_capable; 162 dc1394bool_t readout_capable; 163 dc1394bool_t on_off_capable; 164 dc1394bool_t polarity_capable; 165 dc1394switch_t is_on; 166 dc1394feature_mode_t current_mode; 167 dc1394feature_modes_t modes; 168 dc1394trigger_modes_t trigger_modes; 169 dc1394trigger_mode_t trigger_mode; 170 dc1394trigger_polarity_t trigger_polarity; 171 dc1394trigger_sources_t trigger_sources; 172 dc1394trigger_source_t trigger_source; 173 uint32_t min; 174 uint32_t max; 175 uint32_t value; 176 uint32_t BU_value; 177 uint32_t RV_value; 178 uint32_t B_value; 179 uint32_t R_value; 180 uint32_t G_value; 181 uint32_t target_value; 182 183 dc1394switch_t abs_control; 184 float abs_value; 185 float abs_max; 186 float abs_min; 187 188 } dc1394feature_info_t; 189 190 /** 191 * The list of features 192 */ 193 typedef struct __dc1394featureset_t 194 { 195 dc1394feature_info_t feature[DC1394_FEATURE_NUM]; 196 } dc1394featureset_t; 197 198 #ifdef __cplusplus 199 extern "C" { 200 #endif 201 202 /*************************************************************************** 203 Features 204 ***************************************************************************/ 205 206 /** 207 * Collects the available features for the camera described by node and stores them in features. 208 */ 209 dc1394error_t dc1394_feature_get_all(dc1394camera_t *camera, dc1394featureset_t *features); 210 211 /** 212 * Stores the bounds and options associated with the feature described by feature->feature_id 213 */ 214 dc1394error_t dc1394_feature_get(dc1394camera_t *camera, dc1394feature_info_t *feature); 215 216 /** 217 * Displays the bounds and options of the given feature 218 */ 219 dc1394error_t dc1394_feature_print(dc1394feature_info_t *feature, FILE *fd); 220 221 /** 222 * Displays the bounds and options of every feature supported by the camera 223 */ 224 dc1394error_t dc1394_feature_print_all(dc1394featureset_t *features, FILE *fd); 225 226 /** 227 * Gets the whitebalance values 228 */ 229 dc1394error_t dc1394_feature_whitebalance_get_value(dc1394camera_t *camera, uint32_t *u_b_value, uint32_t *v_r_value); 230 231 /** 232 * Sets the whitebalance values 233 */ 234 dc1394error_t dc1394_feature_whitebalance_set_value(dc1394camera_t *camera, uint32_t u_b_value, uint32_t v_r_value); 235 236 /** 237 * Gets the temperature values (target and current) 238 */ 239 dc1394error_t dc1394_feature_temperature_get_value(dc1394camera_t *camera, uint32_t *target_temperature, uint32_t *temperature); 240 241 /** 242 * Sets the temperature values (target only) FIXME: COULD BE DROPPED? already in the standard feature_set_value()? 243 */ 244 dc1394error_t dc1394_feature_temperature_set_value(dc1394camera_t *camera, uint32_t target_temperature); 245 246 /** 247 * Gets the white shading values 248 */ 249 dc1394error_t dc1394_feature_whiteshading_get_value(dc1394camera_t *camera, uint32_t *r_value, uint32_t *g_value, uint32_t *b_value); 250 251 /** 252 * Sets the white shading values 253 */ 254 dc1394error_t dc1394_feature_whiteshading_set_value(dc1394camera_t *camera, uint32_t r_value, uint32_t g_value, uint32_t b_value); 255 256 /** 257 * Gets the value of a feature 258 */ 259 dc1394error_t dc1394_feature_get_value(dc1394camera_t *camera, dc1394feature_t feature, uint32_t *value); 260 261 /** 262 * Sets the value of a feature 263 */ 264 dc1394error_t dc1394_feature_set_value(dc1394camera_t *camera, dc1394feature_t feature, uint32_t value); 265 266 /** 267 * Tells whether a feature is present or not 268 */ 269 dc1394error_t dc1394_feature_is_present(dc1394camera_t *camera, dc1394feature_t feature, dc1394bool_t *value); 270 271 /** 272 * Tells whether a feature is readable or not 273 */ 274 dc1394error_t dc1394_feature_is_readable(dc1394camera_t *camera, dc1394feature_t feature, dc1394bool_t *value); 275 276 /** 277 * Gets the boundaries of a feature 278 */ 279 dc1394error_t dc1394_feature_get_boundaries(dc1394camera_t *camera, dc1394feature_t feature, uint32_t *min, uint32_t *max); 280 281 /** 282 * Tells whether a feature is switcheable or not (ON/OFF) 283 */ 284 dc1394error_t dc1394_feature_is_switchable(dc1394camera_t *camera, dc1394feature_t feature, dc1394bool_t *value); 285 286 /** 287 * Gets the power status of a feature (ON or OFF) 288 */ 289 dc1394error_t dc1394_feature_get_power(dc1394camera_t *camera, dc1394feature_t feature, dc1394switch_t *pwr); 290 291 /** 292 * Sets the power status of a feature (ON or OFF) 293 */ 294 dc1394error_t dc1394_feature_set_power(dc1394camera_t *camera, dc1394feature_t feature, dc1394switch_t pwr); 295 296 /** 297 * Gets the list of control modes for a feature (manual, auto, etc...) 298 */ 299 dc1394error_t dc1394_feature_get_modes(dc1394camera_t *camera, dc1394feature_t feature, dc1394feature_modes_t *modes); 300 301 /** 302 * Gets the current control modes for a feature 303 */ 304 dc1394error_t dc1394_feature_get_mode(dc1394camera_t *camera, dc1394feature_t feature, dc1394feature_mode_t *mode); 305 306 /** 307 * Sets the current control modes for a feature 308 */ 309 dc1394error_t dc1394_feature_set_mode(dc1394camera_t *camera, dc1394feature_t feature, dc1394feature_mode_t mode); 310 311 /** 312 * Tells whether a feature can be controlled in absolute mode 313 */ 314 dc1394error_t dc1394_feature_has_absolute_control(dc1394camera_t *camera, dc1394feature_t feature, dc1394bool_t *value); 315 316 /** 317 * Gets the absolute boundaries of a feature 318 */ 319 dc1394error_t dc1394_feature_get_absolute_boundaries(dc1394camera_t *camera, dc1394feature_t feature, float *min, float *max); 320 321 /** 322 * Gets the absolute value of a feature 323 */ 324 dc1394error_t dc1394_feature_get_absolute_value(dc1394camera_t *camera, dc1394feature_t feature, float *value); 325 326 /** 327 * Sets the absolute value of a feature 328 */ 329 dc1394error_t dc1394_feature_set_absolute_value(dc1394camera_t *camera, dc1394feature_t feature, float value); 330 331 /** 332 * Gets the status of absolute control of a feature 333 */ 334 dc1394error_t dc1394_feature_get_absolute_control(dc1394camera_t *camera, dc1394feature_t feature, dc1394switch_t *pwr); 335 336 /** 337 * Sets the feature in absolute control mode (ON/OFF) 338 */ 339 dc1394error_t dc1394_feature_set_absolute_control(dc1394camera_t *camera, dc1394feature_t feature, dc1394switch_t pwr); 340 341 /*************************************************************************** 342 Trigger 343 ***************************************************************************/ 344 345 /** 346 * Sets the polarity of the external trigger 347 */ 348 dc1394error_t dc1394_external_trigger_set_polarity(dc1394camera_t *camera, dc1394trigger_polarity_t polarity); 349 350 /** 351 * Gets the polarity of the external trigger 352 */ 353 dc1394error_t dc1394_external_trigger_get_polarity(dc1394camera_t *camera, dc1394trigger_polarity_t *polarity); 354 355 /** 356 * Tells whether the external trigger can change its polarity or not. 357 */ 358 dc1394error_t dc1394_external_trigger_has_polarity(dc1394camera_t *camera, dc1394bool_t *polarity_capable); 359 360 /** 361 * Switch between internal and external trigger 362 */ 363 dc1394error_t dc1394_external_trigger_set_power(dc1394camera_t *camera, dc1394switch_t pwr); 364 365 /** 366 * Gets the status of the external trigger 367 */ 368 dc1394error_t dc1394_external_trigger_get_power(dc1394camera_t *camera, dc1394switch_t *pwr); 369 370 /** 371 * Sets the external trigger mode 372 */ 373 dc1394error_t dc1394_external_trigger_set_mode(dc1394camera_t *camera, dc1394trigger_mode_t mode); 374 375 /** 376 * Gets the external trigger mode 377 */ 378 dc1394error_t dc1394_external_trigger_get_mode(dc1394camera_t *camera, dc1394trigger_mode_t *mode); 379 380 /** 381 * Sets the external trigger source 382 */ 383 dc1394error_t dc1394_external_trigger_set_source(dc1394camera_t *camera, dc1394trigger_source_t source); 384 385 /** 386 * Gets the external trigger source 387 */ 388 dc1394error_t dc1394_external_trigger_get_source(dc1394camera_t *camera, dc1394trigger_source_t *source); 389 390 /** 391 * Gets the list of available external trigger source 392 */ 393 dc1394error_t dc1394_external_trigger_get_supported_sources(dc1394camera_t *camera, dc1394trigger_sources_t *sources); 394 395 /** 396 * Turn software trigger on or off 397 */ 398 dc1394error_t dc1394_software_trigger_set_power(dc1394camera_t *camera, dc1394switch_t pwr); 399 400 /** 401 * Gets the state of software trigger 402 */ 403 dc1394error_t dc1394_software_trigger_get_power(dc1394camera_t *camera, dc1394switch_t *pwr); 404 405 /*************************************************************************** 406 PIO, SIO and Strobe Functions 407 ***************************************************************************/ 408 409 /** 410 * Sends a quadlet on the PIO (output) 411 */ 412 dc1394error_t dc1394_pio_set(dc1394camera_t *camera, uint32_t value); 413 414 /** 415 * Gets the current quadlet at the PIO (input) 416 */ 417 dc1394error_t dc1394_pio_get(dc1394camera_t *camera, uint32_t *value); 418 419 /*************************************************************************** 420 Other functionalities 421 ***************************************************************************/ 422 423 /** 424 * reset a camera to factory default settings 425 */ 426 dc1394error_t dc1394_camera_reset(dc1394camera_t *camera); 427 428 /** 429 * turn a camera on or off 430 */ 431 dc1394error_t dc1394_camera_set_power(dc1394camera_t *camera, dc1394switch_t pwr); 432 433 /** 434 * Download a camera setup from the memory. 435 */ 436 dc1394error_t dc1394_memory_busy(dc1394camera_t *camera, dc1394bool_t *value); 437 438 /** 439 * Uploads a camera setup in the memory. 440 * 441 * Note that this operation can only be performed a certain number of 442 * times for a given camera, as it requires reprogramming of an EEPROM. 443 */ 444 dc1394error_t dc1394_memory_save(dc1394camera_t *camera, uint32_t channel); 445 446 /** 447 * Tells whether the writing of the camera setup in memory is finished or not. 448 */ 449 dc1394error_t dc1394_memory_load(dc1394camera_t *camera, uint32_t channel); 450 451 452 #ifdef __cplusplus 453 } 454 #endif 455 456 #endif /* __DC1394_CONTROL_H__ */ 457