00001
00024 #ifndef __GPHOTO2_PORT_H__
00025 #define __GPHOTO2_PORT_H__
00026
00027 #include <gphoto2/gphoto2-port-info-list.h>
00028
00029
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
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
00089
00090
00091 char port[64];
00092 } GPPortSettingsUSB;
00093
00097 typedef struct _GPPortSettingsDisk {
00098 char mountpoint[128];
00099 } GPPortSettingsDisk;
00100
00107 typedef union _GPPortSettings {
00108 GPPortSettingsSerial serial;
00109 GPPortSettingsUSB usb;
00110 GPPortSettingsDisk disk;
00111 } GPPortSettings;
00112
00113 enum {
00114 GP_PORT_USB_ENDPOINT_IN,
00115 GP_PORT_USB_ENDPOINT_OUT,
00116 GP_PORT_USB_ENDPOINT_INT
00117 };
00118
00119 typedef struct _GPPortPrivateLibrary GPPortPrivateLibrary;
00120 typedef struct _GPPortPrivateCore GPPortPrivateCore;
00121
00135 typedef struct _GPPort {
00136
00137 GPPortType type;
00139 GPPortSettings settings;
00140 GPPortSettings settings_pending;
00142 int timeout;
00144 GPPortPrivateLibrary *pl;
00145 GPPortPrivateCore *pc;
00146 } GPPort;
00147
00148 int gp_port_new (GPPort **port);
00149 int gp_port_free (GPPort *port);
00150
00151 int gp_port_set_info (GPPort *port, GPPortInfo info);
00152 int gp_port_get_info (GPPort *port, GPPortInfo *info);
00153
00154 int gp_port_open (GPPort *port);
00155 int gp_port_close (GPPort *port);
00156
00157 int gp_port_write (GPPort *port, const char *data, int size);
00158 int gp_port_read (GPPort *port, char *data, int size);
00159 int gp_port_check_int (GPPort *port, char *data, int size);
00160 int gp_port_check_int_fast (GPPort *port, char *data, int size);
00161
00162 int gp_port_get_timeout (GPPort *port, int *timeout);
00163 int gp_port_set_timeout (GPPort *port, int timeout);
00164
00165 int gp_port_set_settings (GPPort *port, GPPortSettings settings);
00166 int gp_port_get_settings (GPPort *port, GPPortSettings *settings);
00167
00174 typedef enum _GPPin {
00175 GP_PIN_RTS,
00176 GP_PIN_DTR,
00177 GP_PIN_CTS,
00178 GP_PIN_DSR,
00179 GP_PIN_CD,
00180 GP_PIN_RING
00181 } GPPin;
00182
00188 typedef enum _GPLevel {
00189 GP_LEVEL_LOW = 0,
00190 GP_LEVEL_HIGH = 1
00191 } GPLevel;
00192
00193 int gp_port_get_pin (GPPort *port, GPPin pin, GPLevel *level);
00194 int gp_port_set_pin (GPPort *port, GPPin pin, GPLevel level);
00195
00196 int gp_port_send_break (GPPort *port, int duration);
00197 int gp_port_flush (GPPort *port, int direction);
00198
00199 int gp_port_usb_find_device (GPPort *port, int idvendor, int idproduct);
00200 int gp_port_usb_find_device_by_class (GPPort *port, int mainclass, int subclass, int protocol);
00201 int gp_port_usb_clear_halt (GPPort *port, int ep);
00202 int gp_port_usb_msg_write (GPPort *port, int request, int value,
00203 int index, char *bytes, int size);
00204 int gp_port_usb_msg_read (GPPort *port, int request, int value,
00205 int index, char *bytes, int size);
00206 int gp_port_usb_msg_interface_write (GPPort *port, int request,
00207 int value, int index, char *bytes, int size);
00208 int gp_port_usb_msg_interface_read (GPPort *port, int request,
00209 int value, int index, char *bytes, int size);
00210 int gp_port_usb_msg_class_write (GPPort *port, int request,
00211 int value, int index, char *bytes, int size);
00212 int gp_port_usb_msg_class_read (GPPort *port, int request,
00213 int value, int index, char *bytes, int size);
00214
00215
00216 int gp_port_set_error (GPPort *port, const char *format, ...)
00217 #ifdef __GNUC__
00218 __attribute__((__format__(printf,2,3)))
00219 #endif
00220 ;
00221 const char *gp_port_get_error (GPPort *port);
00222
00223
00225 typedef GPPort gp_port;
00227 typedef GPPortSettings gp_port_settings;
00229 #define PIN_CTS GP_PIN_CTS
00230
00231 #ifdef __cplusplus
00232 }
00233 #endif
00234
00235 #endif
00236
00237