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 */
43typedef 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 */
60typedef 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 */
91typedef 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 */
105typedef 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 */
116typedef 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 */
128typedef 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 */
137typedef 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 */
146typedef 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 */
157typedef 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 */
193typedef struct __dc1394featureset_t
194{
195 dc1394feature_info_t feature[DC1394_FEATURE_NUM];
196} dc1394featureset_t;
197
198#ifdef __cplusplus
199extern "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 */
209dc1394error_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 */
214dc1394error_t dc1394_feature_get(dc1394camera_t *camera, dc1394feature_info_t *feature);
215
216/**
217 * Displays the bounds and options of the given feature
218 */
219dc1394error_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 */
224dc1394error_t dc1394_feature_print_all(dc1394featureset_t *features, FILE *fd);
225
226/**
227 * Gets the whitebalance values
228 */
229dc1394error_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 */
234dc1394error_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 */
239dc1394error_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 */
244dc1394error_t dc1394_feature_temperature_set_value(dc1394camera_t *camera, uint32_t target_temperature);
245
246/**
247 * Gets the white shading values
248 */
249dc1394error_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 */
254dc1394error_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 */
259dc1394error_t dc1394_feature_get_value(dc1394camera_t *camera, dc1394feature_t feature, uint32_t *value);
260
261/**
262 * Sets the value of a feature
263 */
264dc1394error_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 */
269dc1394error_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 */
274dc1394error_t dc1394_feature_is_readable(dc1394camera_t *camera, dc1394feature_t feature, dc1394bool_t *value);
275
276/**
277 * Gets the boundaries of a feature
278 */
279dc1394error_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 */
284dc1394error_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 */
289dc1394error_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 */
294dc1394error_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 */
299dc1394error_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 */
304dc1394error_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 */
309dc1394error_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 */
314dc1394error_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 */
319dc1394error_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 */
324dc1394error_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 */
329dc1394error_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 */
334dc1394error_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 */
339dc1394error_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 */
348dc1394error_t dc1394_external_trigger_set_polarity(dc1394camera_t *camera, dc1394trigger_polarity_t polarity);
349
350/**
351 * Gets the polarity of the external trigger
352 */
353dc1394error_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 */
358dc1394error_t dc1394_external_trigger_has_polarity(dc1394camera_t *camera, dc1394bool_t *polarity_capable);
359
360/**
361 * Switch between internal and external trigger
362 */
363dc1394error_t dc1394_external_trigger_set_power(dc1394camera_t *camera, dc1394switch_t pwr);
364
365/**
366 * Gets the status of the external trigger
367 */
368dc1394error_t dc1394_external_trigger_get_power(dc1394camera_t *camera, dc1394switch_t *pwr);
369
370/**
371 * Sets the external trigger mode
372 */
373dc1394error_t dc1394_external_trigger_set_mode(dc1394camera_t *camera, dc1394trigger_mode_t mode);
374
375/**
376 * Gets the external trigger mode
377 */
378dc1394error_t dc1394_external_trigger_get_mode(dc1394camera_t *camera, dc1394trigger_mode_t *mode);
379
380/**
381 * Sets the external trigger source
382 */
383dc1394error_t dc1394_external_trigger_set_source(dc1394camera_t *camera, dc1394trigger_source_t source);
384
385/**
386 * Gets the external trigger source
387 */
388dc1394error_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 */
393dc1394error_t dc1394_external_trigger_get_supported_sources(dc1394camera_t *camera, dc1394trigger_sources_t *sources);
394
395/**
396 * Turn software trigger on or off
397 */
398dc1394error_t dc1394_software_trigger_set_power(dc1394camera_t *camera, dc1394switch_t pwr);
399
400/**
401 * Gets the state of software trigger
402 */
403dc1394error_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 */
412dc1394error_t dc1394_pio_set(dc1394camera_t *camera, uint32_t value);
413
414/**
415 * Gets the current quadlet at the PIO (input)
416 */
417dc1394error_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 */
426dc1394error_t dc1394_camera_reset(dc1394camera_t *camera);
427
428/**
429 * turn a camera on or off
430 */
431dc1394error_t dc1394_camera_set_power(dc1394camera_t *camera, dc1394switch_t pwr);
432
433/**
434 * Download a camera setup from the memory.
435 */
436dc1394error_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 */
444dc1394error_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 */
449dc1394error_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

source code of include/dc1394/control.h