00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __GPHOTO2_PORT_H__
00022 #define __GPHOTO2_PORT_H__
00023
00024 #include <gphoto2-port-info-list.h>
00025
00026
00027 #include <gphoto2-port-portability.h>
00028 #ifdef OS2
00029 #include <gphoto2-port-portability-os2.h>
00030 #include <os2.h>
00031 #endif
00032
00033 #ifdef __cplusplus
00034 extern "C" {
00035 #endif
00036
00037 #ifndef TRUE
00038 #define TRUE (0==0)
00039 #endif
00040
00041 #ifndef FALSE
00042 #define FALSE (1==0)
00043 #endif
00044
00049 typedef enum _GPPortSerialParity
00050 {
00051 GP_PORT_SERIAL_PARITY_OFF = 0,
00052 GP_PORT_SERIAL_PARITY_EVEN,
00053 GP_PORT_SERIAL_PARITY_ODD
00054 } GPPortSerialParity;
00055
00056
00057 #define GP_PORT_MAX_BUF_LEN 4096
00058
00059 typedef struct _GPPortSettingsSerial GPPortSettingsSerial;
00060 struct _GPPortSettingsSerial {
00061 char port[128];
00062 int speed;
00063 int bits;
00064 GPPortSerialParity parity;
00066 int stopbits;
00067 };
00068
00069 typedef struct _GPPortSettingsUSB GPPortSettingsUSB;
00070 struct _GPPortSettingsUSB {
00071 int inep, outep, intep;
00072 int config;
00073 int interface;
00074 int altsetting;
00075
00076
00077
00078
00079 char port[64];
00080 };
00081
00082 typedef struct _GPPortSettingsDisk GPPortSettingsDisk;
00083 struct _GPPortSettingsDisk {
00084 char mountpoint[128];
00085 };
00086
00087 typedef union _GPPortSettings GPPortSettings;
00088 union _GPPortSettings {
00089 GPPortSettingsSerial serial;
00090 GPPortSettingsUSB usb;
00091 GPPortSettingsDisk disk;
00092 };
00093
00094 enum {
00095 GP_PORT_USB_ENDPOINT_IN,
00096 GP_PORT_USB_ENDPOINT_OUT,
00097 GP_PORT_USB_ENDPOINT_INT
00098 };
00099
00100 typedef struct _GPPortPrivateLibrary GPPortPrivateLibrary;
00101 typedef struct _GPPortPrivateCore GPPortPrivateCore;
00102
00103 typedef struct _GPPort GPPort;
00104 struct _GPPort {
00105
00106
00107 GPPortType type;
00108
00109 GPPortSettings settings;
00110 GPPortSettings settings_pending;
00111
00112 int timeout;
00113
00114 GPPortPrivateLibrary *pl;
00115 GPPortPrivateCore *pc;
00116 };
00117
00118 int gp_port_new (GPPort **port);
00119 int gp_port_free (GPPort *port);
00120
00121 int gp_port_set_info (GPPort *port, GPPortInfo info);
00122 int gp_port_get_info (GPPort *port, GPPortInfo *info);
00123
00124 int gp_port_open (GPPort *port);
00125 int gp_port_close (GPPort *port);
00126
00127 int gp_port_write (GPPort *port, const char *data, int size);
00128 int gp_port_read (GPPort *port, char *data, int size);
00129 int gp_port_check_int (GPPort *port, char *data, int size);
00130 int gp_port_check_int_fast (GPPort *port, char *data, int size);
00131
00132 int gp_port_get_timeout (GPPort *port, int *timeout);
00133 int gp_port_set_timeout (GPPort *port, int timeout);
00134
00135 int gp_port_set_settings (GPPort *port, GPPortSettings settings);
00136 int gp_port_get_settings (GPPort *port, GPPortSettings *settings);
00137
00138 enum _GPPin {
00139 GP_PIN_RTS,
00140 GP_PIN_DTR,
00141 GP_PIN_CTS,
00142 GP_PIN_DSR,
00143 GP_PIN_CD,
00144 GP_PIN_RING
00145 };
00146 typedef enum _GPPin GPPin;
00147
00148 enum _GPLevel {
00149 GP_LEVEL_LOW = 0,
00150 GP_LEVEL_HIGH = 1
00151 };
00152 typedef enum _GPLevel GPLevel;
00153
00154 int gp_port_get_pin (GPPort *port, GPPin pin, GPLevel *level);
00155 int gp_port_set_pin (GPPort *port, GPPin pin, GPLevel level);
00156
00157 int gp_port_send_break (GPPort *port, int duration);
00158 int gp_port_flush (GPPort *port, int direction);
00159
00160 int gp_port_usb_find_device (GPPort *port, int idvendor, int idproduct);
00161 int gp_port_usb_find_device_by_class (GPPort *port, int mainclass, int subclass, int protocol);
00162 int gp_port_usb_clear_halt (GPPort *port, int ep);
00163 int gp_port_usb_msg_write (GPPort *port, int request, int value,
00164 int index, char *bytes, int size);
00165 int gp_port_usb_msg_read (GPPort *port, int request, int value,
00166 int index, char *bytes, int size);
00167 int gp_port_usb_msg_interface_write (GPPort *port, int request,
00168 int value, int index, char *bytes, int size);
00169 int gp_port_usb_msg_interface_read (GPPort *port, int request,
00170 int value, int index, char *bytes, int size);
00171
00172
00173 int gp_port_set_error (GPPort *port, const char *format, ...)
00174 #ifdef __GNUC__
00175 __attribute__((__format__(printf,2,3)))
00176 #endif
00177 ;
00178 const char *gp_port_get_error (GPPort *port);
00179
00180
00181 typedef GPPort gp_port;
00182 typedef GPPortSettings gp_port_settings;
00183 #define PIN_CTS GP_PIN_CTS
00184
00185 #ifdef __cplusplus
00186 }
00187 #endif
00188
00189 #endif
00190
00191