libgphoto2 photo camera library (libgphoto2) API 2.4.11
|
00001 00024 #ifndef __GPHOTO2_PORT_H__ 00025 #define __GPHOTO2_PORT_H__ 00026 00027 #include <gphoto2/gphoto2-port-info-list.h> 00028 00029 /* For portability */ 00030 #include <gphoto2/gphoto2-port-portability.h> 00031 #ifdef OS2 00032 #include <gphoto2/gphoto2-port-portability-os2.h> 00033 #include <os2.h> 00034 #endif 00035 00036 #ifdef __cplusplus 00037 extern "C" { 00038 #endif /* __cplusplus */ 00039 00040 #ifndef TRUE 00041 #define TRUE (0==0) 00042 #endif 00043 00044 #ifndef FALSE 00045 #define FALSE (1==0) 00046 #endif 00047 00053 typedef enum _GPPortSerialParity 00054 { 00055 GP_PORT_SERIAL_PARITY_OFF = 0, 00056 GP_PORT_SERIAL_PARITY_EVEN, 00057 GP_PORT_SERIAL_PARITY_ODD 00058 } GPPortSerialParity; 00059 00061 #define GP_PORT_MAX_BUF_LEN 4096 00062 00066 typedef struct _GPPortSettingsSerial { 00067 char port[128]; 00068 int speed; 00069 int bits; 00070 GPPortSerialParity parity; 00072 int stopbits; 00073 } GPPortSettingsSerial; 00074 00078 typedef struct _GPPortSettingsUSB { 00079 int inep; 00080 int outep; 00081 int intep; 00082 int config; 00083 int interface; 00084 int altsetting; 00086 int maxpacketsize; 00088 /* must be last to avoid binary incompatibility. 00089 * luckily we just need to make sure this struct does not 00090 * get larger than _GPPortSettingsSerial. */ 00091 char port[64]; 00092 } GPPortSettingsUSB; 00093 00097 typedef struct _GPPortSettingsDisk { 00098 char mountpoint[128]; 00099 } GPPortSettingsDisk; 00100 00104 typedef struct _GPPortSettingsUsbDiskDirect { 00105 char path[128]; 00106 } GPPortSettingsUsbDiskDirect; 00107 00111 typedef struct _GPPortSettingsUsbScsi { 00112 char path[128]; 00113 } GPPortSettingsUsbScsi; 00114 00121 typedef union _GPPortSettings { 00122 GPPortSettingsSerial serial; 00123 GPPortSettingsUSB usb; 00124 GPPortSettingsDisk disk; 00125 GPPortSettingsUsbDiskDirect usbdiskdirect; 00126 GPPortSettingsUsbScsi usbscsi; 00127 } GPPortSettings; 00128 00129 enum { 00130 GP_PORT_USB_ENDPOINT_IN, 00131 GP_PORT_USB_ENDPOINT_OUT, 00132 GP_PORT_USB_ENDPOINT_INT 00133 }; 00134 00135 typedef struct _GPPortPrivateLibrary GPPortPrivateLibrary; 00136 typedef struct _GPPortPrivateCore GPPortPrivateCore; 00137 00151 typedef struct _GPPort { 00152 /* For your convenience */ 00153 GPPortType type; 00155 GPPortSettings settings; 00156 GPPortSettings settings_pending; 00158 int timeout; 00160 GPPortPrivateLibrary *pl; 00161 GPPortPrivateCore *pc; 00162 } GPPort; 00163 00164 int gp_port_new (GPPort **port); 00165 int gp_port_free (GPPort *port); 00166 00167 int gp_port_set_info (GPPort *port, GPPortInfo info); 00168 int gp_port_get_info (GPPort *port, GPPortInfo *info); 00169 00170 int gp_port_open (GPPort *port); 00171 int gp_port_close (GPPort *port); 00172 00173 int gp_port_write (GPPort *port, const char *data, int size); 00174 int gp_port_read (GPPort *port, char *data, int size); 00175 int gp_port_check_int (GPPort *port, char *data, int size); 00176 int gp_port_check_int_fast (GPPort *port, char *data, int size); 00177 00178 int gp_port_get_timeout (GPPort *port, int *timeout); 00179 int gp_port_set_timeout (GPPort *port, int timeout); 00180 00181 int gp_port_set_settings (GPPort *port, GPPortSettings settings); 00182 int gp_port_get_settings (GPPort *port, GPPortSettings *settings); 00183 00190 typedef enum _GPPin { 00191 GP_PIN_RTS, 00192 GP_PIN_DTR, 00193 GP_PIN_CTS, 00194 GP_PIN_DSR, 00195 GP_PIN_CD, 00196 GP_PIN_RING 00197 } GPPin; 00198 00204 typedef enum _GPLevel { 00205 GP_LEVEL_LOW = 0, 00206 GP_LEVEL_HIGH = 1 00207 } GPLevel; 00208 00209 int gp_port_get_pin (GPPort *port, GPPin pin, GPLevel *level); 00210 int gp_port_set_pin (GPPort *port, GPPin pin, GPLevel level); 00211 00212 int gp_port_send_break (GPPort *port, int duration); 00213 int gp_port_flush (GPPort *port, int direction); 00214 00215 int gp_port_usb_find_device (GPPort *port, int idvendor, int idproduct); 00216 int gp_port_usb_find_device_by_class (GPPort *port, int mainclass, int subclass, int protocol); 00217 int gp_port_usb_clear_halt (GPPort *port, int ep); 00218 int gp_port_usb_msg_write (GPPort *port, int request, int value, 00219 int index, char *bytes, int size); 00220 int gp_port_usb_msg_read (GPPort *port, int request, int value, 00221 int index, char *bytes, int size); 00222 int gp_port_usb_msg_interface_write (GPPort *port, int request, 00223 int value, int index, char *bytes, int size); 00224 int gp_port_usb_msg_interface_read (GPPort *port, int request, 00225 int value, int index, char *bytes, int size); 00226 int gp_port_usb_msg_class_write (GPPort *port, int request, 00227 int value, int index, char *bytes, int size); 00228 int gp_port_usb_msg_class_read (GPPort *port, int request, 00229 int value, int index, char *bytes, int size); 00230 00231 int gp_port_seek (GPPort *port, int offset, int whence); 00232 00233 int gp_port_send_scsi_cmd (GPPort *port, int to_dev, 00234 char *cmd, int cmd_size, 00235 char *sense, int sense_size, 00236 char *data, int data_size); 00237 00238 /* Error reporting */ 00239 int gp_port_set_error (GPPort *port, const char *format, ...) 00240 #ifdef __GNUC__ 00241 __attribute__((__format__(printf,2,3))) 00242 #endif 00243 ; 00244 const char *gp_port_get_error (GPPort *port); 00245 00246 /* DEPRECATED */ 00248 typedef GPPort gp_port; 00250 typedef GPPortSettings gp_port_settings; 00252 #define PIN_CTS GP_PIN_CTS 00253 00254 #ifdef __cplusplus 00255 } 00256 #endif /* __cplusplus */ 00257 00258 #endif /* __GPHOTO2_PORT_H__ */ 00259 00260