Logo Search packages:      
Sourcecode: f-spot version File versions  Download package

Port.cs

using System;
using System.Runtime.InteropServices;

namespace LibGPhoto2
{
      public enum PortType
      {
            None = 0,
            Serial = 1 << 0,
            USB = 1 << 2
      }

      public enum PortSerialParity
      {
            Off = 0,
            Even,
            Odd
      }
      
      public enum Pin
      {
            RTS,
            DTR,
            CTS,
            DSR,
            CD,
            RING
      }
      
      public enum Level
      {
            Low = 0,
            High = 1
      }
      
      [StructLayout(LayoutKind.Sequential)]
      internal unsafe struct PortPrivateLibrary
      {
      }

      [StructLayout(LayoutKind.Sequential)]
      internal unsafe struct PortPrivateCore
      {
      }

      [StructLayout(LayoutKind.Sequential)]
      public unsafe struct PortSettingsSerial
      {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)] public char[] port;
            public int speed;
            public int bits;
            public PortSerialParity parity;
            public int stopbits;
      }

      [StructLayout(LayoutKind.Sequential)]
      public unsafe struct PortSettingsUSB
      {
            public int inep, outep, intep;
            public int config;
            public int pinterface;
            public int altsetting;
      }

      [StructLayout(LayoutKind.Explicit)]
      public unsafe struct PortSettings
      {
            [FieldOffset(0)] public PortSettingsSerial serial;
            [FieldOffset(0)] public PortSettingsUSB usb;
      }

#if false
      [StructLayout(LayoutKind.Sequential)]
      internal unsafe struct _Port
      {
            PortType type;

            PortSettings settings;
            PortSettings settings_pending;

            int timout;

            PortPrivateLibrary *pl;
            PortPrivateCore *pc;

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_new (out _Port *port);

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_free (_Port *port);

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_set_info (_Port *port, ref _PortInfo info);

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_get_info (_Port *port, out _PortInfo info);

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_open (_Port *port);

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_close (_Port *port);

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_read (_Port *port, [MarshalAs(UnmanagedType.LPTStr)] byte[] data, int size);

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_write (_Port *port, [MarshalAs(UnmanagedType.LPTStr)] byte[] data, int size);

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_get_settings (_Port *port, out PortSettings settings);

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_set_settings (_Port *port, PortSettings settings);

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_get_timeout (_Port *port, int *timeout);

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_set_timeout (_Port *port, int timeout);

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_get_pin (_Port *port, Pin pin, Level *level);

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_set_pin (_Port *port, Pin pin, Level level);

            [DllImport ("libgphoto2.so")]
            internal static extern char* gp_port_get_error (_Port *port);

            //[DllImport ("libgphoto2.so")]
            //internal static extern int gp_port_set_error (_Port *port, const char *format, ...);
      }
#endif

      public class Port : Object
      {
            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_new (out IntPtr port);

            public Port()
            {
                  IntPtr native;

                  Error.CheckError (gp_port_new (out native));

                  this.handle = new HandleRef (this, native);
            }
            
            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_free (HandleRef port);
            
            protected override void Cleanup ()
            {
                  Error.CheckError (gp_port_free (this.handle));
            }

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_set_info (HandleRef port, ref _PortInfo info);

            public void SetInfo (PortInfo info)
            {
            Error.CheckError (gp_port_set_info (this.Handle, ref info.Handle));
            }
            
            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_get_info (HandleRef port, out _PortInfo info);

            public PortInfo GetInfo ()
            {
                  PortInfo info = new PortInfo (); 

                  Error.CheckError (gp_port_get_info (this.Handle, out info.Handle));

                  return info;
            }
            
            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_open (HandleRef port);

            public void Open ()
            {
                  Error.CheckError (gp_port_open (this.Handle));
            }
            
            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_close (HandleRef port);

            public void Close ()
            {
                  Error.CheckError (gp_port_close (this.Handle));
            }
            
            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_read (HandleRef port, [MarshalAs(UnmanagedType.LPTStr)] byte[] data, int size);

            public byte[] Read (int size)
            {
                  byte[] data = new byte[size];

                  Error.CheckError (gp_port_read (this.Handle, data, size));

                  return data;
            }
            
            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_write (HandleRef port, [MarshalAs(UnmanagedType.LPTStr)] byte[] data, int size);

            public void Write (byte[] data)
            {
                  Error.CheckError (gp_port_write (this.Handle, data, data.Length));
            }
            

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_set_settings (HandleRef port, PortSettings settings);

            public void SetSettings (PortSettings settings)
            {
                  Error.CheckError (gp_port_set_settings (this.Handle, settings));
            }
            
            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_get_settings (HandleRef port, out PortSettings settings);

            public PortSettings GetSettings ()
            {
                  PortSettings settings;

                  Error.CheckError (gp_port_get_settings (this.Handle, out settings));

                  return settings;
            }
            
            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_get_timeout (HandleRef port, out int timeout);

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_set_timeout (HandleRef port, int timeout);

            public int Timeout
            {
                  get {
                        int timeout;

                        Error.CheckError (gp_port_get_timeout (this.Handle, out timeout));

                        return timeout;
                  }
                  set {
                        Error.CheckError (gp_port_set_timeout (this.Handle, value));
                  }
            }
            
            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_get_pin (HandleRef port, Pin pin, out Level level);

            [DllImport ("libgphoto2.so")]
            internal static extern ErrorCode gp_port_set_pin (HandleRef port, Pin pin, Level level);

            [DllImport ("libgphoto2.so")]
            internal static extern string gp_port_get_error (HandleRef port);
      }
}

Generated by  Doxygen 1.6.0   Back to index