/usr/include/dc1394/camera.h is in libdc1394-22-dev 2.2.4-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 | /*
* 1394-Based Digital Camera Control Library
*
* Written by Damien Douxchamps <ddouxchamps@users.sf.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <dc1394/log.h>
#include <stdio.h>
#ifndef __DC1394_CAMERA_H__
#define __DC1394_CAMERA_H__
/*! \file dc1394/camera.h
\brief Basic system and camera functions
\author Damien Douxchamps: coding
\author Peter Antoniac: documentation maintainer
More details soon
*/
/**
* List of IIDC versions
*
* Currently, the following versions exist: 1.04, 1.20, PTGREY, 1.30 and 1.31 (1.32 coming soon)
* Observing other versions means that there's a bug crawling somewhere.
*/
typedef enum {
DC1394_IIDC_VERSION_1_04 = 544,
DC1394_IIDC_VERSION_1_20,
DC1394_IIDC_VERSION_PTGREY,
DC1394_IIDC_VERSION_1_30,
DC1394_IIDC_VERSION_1_31,
DC1394_IIDC_VERSION_1_32,
DC1394_IIDC_VERSION_1_33,
DC1394_IIDC_VERSION_1_34,
DC1394_IIDC_VERSION_1_35,
DC1394_IIDC_VERSION_1_36,
DC1394_IIDC_VERSION_1_37,
DC1394_IIDC_VERSION_1_38,
DC1394_IIDC_VERSION_1_39
} dc1394iidc_version_t;
#define DC1394_IIDC_VERSION_MIN DC1394_IIDC_VERSION_1_04
#define DC1394_IIDC_VERSION_MAX DC1394_IIDC_VERSION_1_39
#define DC1394_IIDC_VERSION_NUM (DC1394_IIDC_VERSION_MAX - DC1394_IIDC_VERSION_MIN + 1)
/**
* Enumeration of power classes
*
* This is currently not used in libdc1394.
*/
typedef enum {
DC1394_POWER_CLASS_NONE=608,
DC1394_POWER_CLASS_PROV_MIN_15W,
DC1394_POWER_CLASS_PROV_MIN_30W,
DC1394_POWER_CLASS_PROV_MIN_45W,
DC1394_POWER_CLASS_USES_MAX_1W,
DC1394_POWER_CLASS_USES_MAX_3W,
DC1394_POWER_CLASS_USES_MAX_6W,
DC1394_POWER_CLASS_USES_MAX_10W
} dc1394power_class_t;
#define DC1394_POWER_CLASS_MIN DC1394_POWER_CLASS_NONE
#define DC1394_POWER_CLASS_MAX DC1394_POWER_CLASS_USES_MAX_10W
#define DC1394_POWER_CLASS_NUM (DC1394_POWER_CLASS_MAX - DC1394_POWER_CLASS_MIN + 1)
/**
* Enumeration of PHY delays
*
* This is currently not used in libdc1394.
*/
typedef enum {
DC1394_PHY_DELAY_MAX_144_NS=640,
DC1394_PHY_DELAY_UNKNOWN_0,
DC1394_PHY_DELAY_UNKNOWN_1,
DC1394_PHY_DELAY_UNKNOWN_2
} dc1394phy_delay_t;
#define DC1394_PHY_DELAY_MIN DC1394_PHY_DELAY_MAX_144_NS
#define DC1394_PHY_DELAY_MAX DC1394_PHY_DELAY_UNKNOWN_0
#define DC1394_PHY_DELAY_NUM (DC1394_PHY_DELAY_MAX - DC1394_PHY_DELAY_MIN + 1)
/**
* Camera structure
*
* This structure represents the camera in libdc1394. It contains a number of useful static information, such as model/vendor names,
* a few capabilities, some ROM offsets, a unique identifier, etc...
*/
typedef struct __dc1394_camera
{
/* system/firmware information */
uint64_t guid;
int unit;
uint32_t unit_spec_ID;
uint32_t unit_sw_version;
uint32_t unit_sub_sw_version;
uint32_t command_registers_base;
uint32_t unit_directory;
uint32_t unit_dependent_directory;
uint64_t advanced_features_csr;
uint64_t PIO_control_csr;
uint64_t SIO_control_csr;
uint64_t strobe_control_csr;
uint64_t format7_csr[DC1394_VIDEO_MODE_FORMAT7_NUM];
dc1394iidc_version_t iidc_version;
char * vendor;
char * model;
uint32_t vendor_id;
uint32_t model_id;
dc1394bool_t bmode_capable;
dc1394bool_t one_shot_capable;
dc1394bool_t multi_shot_capable;
dc1394bool_t can_switch_on_off;
dc1394bool_t has_vmode_error_status;
dc1394bool_t has_feature_error_status;
int max_mem_channel;
/* not used, for future use: */
uint32_t flags;
} dc1394camera_t;
/**
* A unique identifier for a functional camera unit
*
* Since a single camera can contain several functional units (think stereo cameras), the GUID is not enough to identify an IIDC camera.
* The unit number must also be used, hence this struct.
*/
typedef struct
{
uint16_t unit;
uint64_t guid;
} dc1394camera_id_t;
/**
* A list of cameras
*
* Usually returned by dc1394_camera_eumerate().
*/
typedef struct __dc1394camera_list_t
{
uint32_t num;
dc1394camera_id_t *ids;
} dc1394camera_list_t;
typedef struct __dc1394_t dc1394_t;
#ifdef __cplusplus
extern "C" {
#endif
/***************************************************************************
General system functions
***************************************************************************/
/**
* Creates a new context in which cameras can be searched and used. This should be called before using any other libdc1394 function.
*/
dc1394_t* dc1394_new (void);
/**
* Liberates a context. Last function to use in your program. After this, no libdc1394 function can be used.
*/
void dc1394_free (dc1394_t *dc1394);
/**
* Sets and gets the broadcast flag of a camera. If the broadcast flag is set,
* all devices on the bus will execute the command. Useful to sync ISO start
* commands or setting a bunch of cameras at the same time. Broadcast only works
* with identical devices (brand/model). If the devices are not identical your
* mileage may vary. Some cameras may not answer broadcast commands at all. Also,
* this only works with cameras on the SAME bus (IOW, the same port).
*/
dc1394error_t dc1394_camera_set_broadcast(dc1394camera_t *camera, dc1394bool_t pwr);
dc1394error_t dc1394_camera_get_broadcast(dc1394camera_t *camera, dc1394bool_t *pwr);
/**
* Resets the IEEE1394 bus which camera is attached to. Calling this function is
* "rude" to other devices because it causes them to re-enumerate on the bus and
* may cause a temporary disruption in their current activities. Thus, use it
* sparingly. Its primary use is if a program shuts down uncleanly and needs to
* free leftover ISO channels or bandwidth. A bus reset will free those things
* as a side effect.
*/
dc1394error_t dc1394_reset_bus(dc1394camera_t *camera);
dc1394error_t dc1394_read_cycle_timer (dc1394camera_t * camera,
uint32_t * cycle_timer, uint64_t * local_time);
/**
* Gets the IEEE 1394 node ID of the camera.
*/
dc1394error_t dc1394_camera_get_node(dc1394camera_t *camera, uint32_t *node,
uint32_t * generation);
/***************************************************************************
Camera functions
***************************************************************************/
/**
* Returns the list of cameras available on the computer. If present, multiple cards will be probed
*/
dc1394error_t dc1394_camera_enumerate(dc1394_t *dc1394, dc1394camera_list_t **list);
/**
* Frees the memory allocated in dc1394_enumerate_cameras for the camera list
*/
void dc1394_camera_free_list(dc1394camera_list_t *list);
/**
* Create a new camera based on a GUID (Global Unique IDentifier)
*/
dc1394camera_t * dc1394_camera_new(dc1394_t *dc1394, uint64_t guid);
/**
* Create a new camera based on a GUID and a unit number (for multi-unit cameras)
*/
dc1394camera_t * dc1394_camera_new_unit(dc1394_t *dc1394, uint64_t guid, int unit);
/**
* Frees a camera structure
*/
void dc1394_camera_free(dc1394camera_t *camera);
/**
* Print various camera information, such as GUID, vendor, model, supported IIDC specs, etc...
*/
dc1394error_t dc1394_camera_print_info(dc1394camera_t *camera, FILE *fd);
#ifdef __cplusplus
}
#endif
#endif
|