PortCapabilities.cs :  » Development » SerialPort » OpenNETCF » IO » Serial » C# / CSharp Open Source

Home
C# / CSharp Open Source
1.2.6.4 mono .net core
2.2.6.4 mono core
3.Aspect Oriented Frameworks
4.Bloggers
5.Build Systems
6.Business Application
7.Charting Reporting Tools
8.Chat Servers
9.Code Coverage Tools
10.Content Management Systems CMS
11.CRM ERP
12.Database
13.Development
14.Email
15.Forum
16.Game
17.GIS
18.GUI
19.IDEs
20.Installers Generators
21.Inversion of Control Dependency Injection
22.Issue Tracking
23.Logging Tools
24.Message
25.Mobile
26.Network Clients
27.Network Servers
28.Office
29.PDF
30.Persistence Frameworks
31.Portals
32.Profilers
33.Project Management
34.RSS RDF
35.Rule Engines
36.Script
37.Search Engines
38.Sound Audio
39.Source Control
40.SQL Clients
41.Template Engines
42.Testing
43.UML
44.Web Frameworks
45.Web Service
46.Web Testing
47.Wiki Engines
48.Windows Presentation Foundation
49.Workflows
50.XML Parsers
C# / C Sharp
C# / C Sharp by API
C# / CSharp Tutorial
C# / CSharp Open Source » Development » SerialPort 
SerialPort » OpenNETCF » IO » Serial » PortCapabilities.cs
//==========================================================================================
//
//    OpenNETCF.IO.Serial.PortCapabilities
//    Copyright (c) 2004, OpenNETCF.org
//
//    This library is free software; you can redistribute it and/or modify it under 
//    the terms of the OpenNETCF.org Shared Source License.
//
//    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 OpenNETCF.org Shared Source License 
//    for more details.
//
//    You should have received a copy of the OpenNETCF.org Shared Source License 
//    along with this library; if not, email licensing@opennetcf.org to request a copy.
//
//    If you wish to contact the OpenNETCF Advisory Board to discuss licensing, please 
//    email licensing@opennetcf.org.
//
//    For general enquiries, email enquiries@opennetcf.org or visit our website at:
//    http://www.opennetcf.org
//
//==========================================================================================
using System;
using System.Runtime.InteropServices;
using System.Collections.Specialized;
namespace OpenNETCF.IO.Serial{
  //
  // Serial provider type.
  //
/// <summary>
/// SEP enumerates known serial provider types. Currently SERIALCOMM is the only 
/// provider in this enumeration.
/// </summary>
  [Flags]
  public enum SEP 
  {
    /// <summary>
    /// SERIALCOMM is the only service provider supported by serial APIs.
    /// </summary>
    SEP_SERIALCOMM   = 0x00000001
  };
  //
  // Provider SubTypes
  //
  /// <summary>
  /// PST enumerates the provider subtypes supported by the WIN32 serial APIs. PST indicates which
  /// Port is used for serial communication. Ports can either be physical or logical devices.
  /// </summary>
  public enum PST 
  {
    /// <summary>
    /// no provider subtype specified
    /// </summary>
    PST_UNSPECIFIED     = 0x00000000,
    /// <summary>
    /// RS232 Port
    /// </summary>
    PST_RS232           = 0x00000001,
    /// <summary>
    /// parallel port
    /// </summary>
    PST_PARALLELPORT    = 0x00000002,
    /// <summary>
    /// RS422 Port
    /// </summary>
    PST_RS422           = 0x00000003,
    /// <summary>
    /// RS423 Port
    /// </summary>
    PST_RS423           = 0x00000004,
    /// <summary>
    /// RS449 Port
    /// </summary>
    PST_RS449           = 0x00000005,
    /// <summary>
    /// Modem
    /// </summary>
    PST_MODEM           = 0x00000006,
    /// <summary>
    /// Fax
    /// </summary>
    PST_FAX             = 0x00000021,
    /// <summary>
    /// Scanner
    /// </summary>
    PST_SCANNER         = 0x00000022,
    /// <summary>
    /// unspecified network bridge
    /// </summary>
    PST_NETWORK_BRIDGE  = 0x00000100,
    /// <summary>
    /// DEC's LAT Port
    /// </summary>
    PST_LAT             = 0x00000101,
    /// <summary>
    /// Telnet connection
    /// </summary>
    PST_TCPIP_TELNET    = 0x00000102,
    /// <summary>
    /// X.25 standard
    /// </summary>
    PST_X25             = 0x00000103
  };

  //
  // Provider capabilities flags.
  //
/// <summary>
/// PCF enumerates the provider capabilites supported by the specified COMx: Port. This enumeration
/// is used internaly only. Access to this bitfield information is provided through attributes of the
/// CommProp class.
/// </summary>
  [Flags]
  internal enum PCF
  {
    PCF_DTRDSR       = 0x0001,
    PCF_RTSCTS       = 0x0002,
    PCF_RLSD         = 0x0004,
    PCF_PARITY_CHECK = 0x0008,
    PCF_XONXOFF      = 0x0010,
    PCF_SETXCHAR     = 0x0020,
    PCF_TOTALTIMEOUTS= 0x0040,
    PCF_INTTIMEOUTS  = 0x0080,
    PCF_SPECIALCHARS = 0x0100,
    PCF_16BITMODE    = 0x0200
  };

  //
  // Comm provider settable parameters.
  //
/// <summary>
/// SP 
/// </summary>
  [Flags]
  internal enum SP
  {
    SP_PARITY        = 0x0001,
    SP_BAUD          = 0x0002,
    SP_DATABITS      = 0x0004,
    SP_STOPBITS      = 0x0008,
    SP_HANDSHAKING   = 0x0010,
    SP_PARITY_CHECK  = 0x0020,
    SP_RLSD          = 0x0040
  };

  //
  // Settable baud rates in the provider.
  //
  /// <summary>
  /// baud rates settable by Comm API 
  /// </summary>
  [Flags]
  public enum BAUD
  {
    /// <summary>
    /// 75 bits per second
    /// </summary>
    BAUD_075         = 0x00000001,
    /// <summary>
    /// 110 bits per second
    /// </summary>
    BAUD_110         = 0x00000002,
    /// <summary>
    /// 134.5 bits per second
    /// </summary>
    BAUD_134_5       = 0x00000004,
    /// <summary>
    /// 150 bits per second
    /// </summary>
    BAUD_150         = 0x00000008,
    /// <summary>
    /// 300 bits per second
    /// </summary>
    BAUD_300         = 0x00000010,
    /// <summary>
    /// 600 bits per second
    /// </summary>
    BAUD_600         = 0x00000020,
    /// <summary>
    /// 1,200 bits per second
    /// </summary>
    BAUD_1200        = 0x00000040,
    /// <summary>
    /// 1,800 bits per second
    /// </summary>
    BAUD_1800        = 0x00000080,
    /// <summary>
    /// 2,400 bits per second
    /// </summary>
    BAUD_2400        = 0x00000100,
    /// <summary>
    /// 4,800 bits per second
    /// </summary>
    BAUD_4800        = 0x00000200,
    /// <summary>
    /// 7,200 bits per second
    /// </summary>
    BAUD_7200        = 0x00000400,
    /// <summary>
    /// 9,600 bits per second
    /// </summary>
    BAUD_9600        = 0x00000800,
    /// <summary>
    /// 14,400 bits per second
    /// </summary>
    BAUD_14400       = 0x00001000,
    /// <summary>
    /// 19,200 bits per second
    /// </summary>
    BAUD_19200       = 0x00002000,
    /// <summary>
    /// 38,400 bits per second
    /// </summary>
    BAUD_38400       = 0x00004000,
    /// <summary>
    /// 56 Kbits per second
    /// </summary>
    BAUD_56K         = 0x00008000,
    /// <summary>
    /// 129 Kbits per second
    /// </summary>
    BAUD_128K        = 0x00010000,
    /// <summary>
    /// 115,200 bits per second
    /// </summary>
    BAUD_115200      = 0x00020000,
    /// <summary>
    /// 57,600 bits per second
    /// </summary>
    BAUD_57600       = 0x00040000,
    /// <summary>
    /// User defined bitrates
    /// </summary>
    BAUD_USER        = 0x10000000
  };
  //
  // Settable Data Bits
  //

  [Flags]
  internal enum DB 
  {
    DATABITS_5       = 0x0001,
    DATABITS_6       = 0x0002,
    DATABITS_7       = 0x0004,
    DATABITS_8       = 0x0008,
    DATABITS_16      = 0x0010,
    DATABITS_16X     = 0x0020
  };
  //
  // Settable Stop and Parity bits.
  //
  [Flags]
  internal enum SB 
  {
    STOPBITS_10      = 0x00010000,
    STOPBITS_15      = 0x00020000,
    STOPBITS_20      = 0x00040000,
    PARITY_NONE      = 0x01000000,
    PARITY_ODD       = 0x02000000,
    PARITY_EVEN      = 0x04000000,
    PARITY_MARK      = 0x08000000,
    PARITY_SPACE     = 0x10000000
  };
  //
  // Set dwProvSpec1 to COMMPROP_INITIALIZED to indicate that wPacketLength
  // is valid when calling GetCommProperties().
  //
  [Flags]
  internal enum CPS:uint 
  {
    COMMPROP_INITIALIZED= 0xE73CF52E
  };
  /// <summary>
  /// Container for all available information on port's capabilties 
  /// </summary>
  [StructLayout(LayoutKind.Sequential)]
  public class CommCapabilities 
  {
    private UInt16 wPacketLength;
    private UInt16 wPacketVersion;
    /// <summary>
    /// Indicates which services are supported by the port. SP_SERIALCOMM is specified for communication
    /// providers, including modem providers.
    /// </summary>
    public IO.Serial.SEP dwServiceMask;
    private UInt32 dwReserved1;
    /// <summary>
    /// Specifies the maximum size, in bytes, of the driver's internal output buffer. A value of zero
    /// indicates that no maximum value is imposed by the driver.
    /// </summary>
    [CLSCompliant(false)]
    public UInt32 dwMaxTxQueue;
    /// <summary>
    /// Specifies the maximum size, in bytes, of the driver's internal input buffer. A value of zero
    /// indicates that no maximum value is imposed by the driver.
    /// </summary>
    [CLSCompliant(false)]
    public UInt32 dwMaxRxQueue;
    /// <summary>
    /// Specifies the maximum baud rate, in bits per second (bps).
    /// </summary>
    public IO.Serial.BAUD dwMaxBaud;
    /// <summary>
    /// Specifies the communication provider type.
    /// </summary>
    public IO.Serial.PST dwProvSubType;
    private BitVector32 dwProvCapabilities;
    private BitVector32 dwSettableParams;
    private BitVector32 dwSettableBaud;
    private BitVector32 dwSettableStopParityData;
    /// <summary>
    /// Specifies the size, in bytes, of the driver's internal output buffer. A value of zero indicates 
    /// that the value is unavailable.
    /// </summary>
    [CLSCompliant(false)]
    public UInt32 dwCurrentTxQueue;
    /// <summary>
    /// Specifies the size, in bytes, of the driver's internal input buffer. A value of zero indicates 
    /// that the value is unavailable.
    /// </summary>
    [CLSCompliant(false)]
    public UInt32 dwCurrentRxQueue;
    private IO.Serial.CPS dwProvSpec1;
    private UInt32 dwProvSpec2;
    private UInt16 wcProvChar;

    internal CommCapabilities()
    {
      this.wPacketLength=(ushort)Marshal.SizeOf(this);
      this.dwProvSpec1=CPS.COMMPROP_INITIALIZED;

      dwProvCapabilities=new BitVector32(0);
      dwSettableParams=new BitVector32(0);
      dwSettableBaud=new BitVector32(0);
      dwSettableStopParityData=new BitVector32(0);
    }
    
    //
    // We need to have to define reserved fields in the CommCapabilties class definition
    // to preserve the size of the 
    // underlying structure to match the Win32 structure when it is 
    // marshaled. Use these fields to suppress compiler warnings.
    //
    internal void _SuppressCompilerWarnings()
    {
      wPacketVersion +=0;
      dwReserved1 +=0;
      dwProvSpec1 +=0;
      dwProvSpec2 +=0;
      wcProvChar +=0;
    }
    
    // Provider Capabilties
    /// <summary>
    /// Port supports special 16-bit mode
    /// </summary>
    public bool Supports16BitMode 
    {
      get { return dwProvCapabilities[(int)PCF.PCF_16BITMODE]; }
    }
    
    /// <summary>
    /// Port supports DTR (Data Terminal ready) and DSR (Data Set Ready) flow control
    /// </summary>
    public bool SupportsDtrDts 
    {
      get { return dwProvCapabilities[(int)PCF.PCF_DTRDSR]; }
    }

    /// <summary>
    /// Port supports interval timeouts
    /// </summary>
    public bool SupportsIntTimeouts 
    {
      get { return dwProvCapabilities[(int)PCF.PCF_INTTIMEOUTS]; }
    }

    /// <summary>
    /// Port supports parity checking
    /// </summary>
    public bool SupportsParityCheck
    {
      get { return dwProvCapabilities[(int)PCF.PCF_PARITY_CHECK]; }
    }

    /// <summary>
    /// Port supports RLSD (Receive Line Signal Detect)
    /// </summary>
    public bool SupportsRlsd 
    {
      get { return dwProvCapabilities[(int)PCF.PCF_RLSD]; }
    }
    
    /// <summary>
    /// Port supports RTS (Request To Send) and CTS (Clear To Send) flowcontrol
    /// </summary>
    public bool SupportsRtsCts 
    {
      get { return dwProvCapabilities[(int)PCF.PCF_RTSCTS]; }
    }

    /// <summary>
    /// Port supports user definded characters for XON and XOFF
    /// </summary>
    public bool SupportsSetXChar 
    {
      get { return dwProvCapabilities[(int)PCF.PCF_SETXCHAR]; }
    }

    /// <summary>
    /// Port supports special characters
    /// </summary>
    public bool SupportsSpecialChars 
    {
      get { return dwProvCapabilities[(int)PCF.PCF_SPECIALCHARS]; }
    }

    /// <summary>
    /// Port supports total and elapsed time-outs
    /// </summary>
    public bool SupportsTotalTimeouts 
    {
      get { return dwProvCapabilities[(int)PCF.PCF_TOTALTIMEOUTS]; }
    }

    /// <summary>
    /// Port supports XON/XOFF flow control
    /// </summary>
    public bool SupportsXonXoff 
    {
      get { return dwProvCapabilities[(int)PCF.PCF_XONXOFF]; }
    }

    // Settable Params
    /// <summary>
    /// Baud rate can be set
    /// </summary>
    public bool SettableBaud 
    {
      get { return dwSettableParams[(int)SP.SP_BAUD]; }
    }
    
    /// <summary>
    /// Number of data bits can be set
    /// </summary>
    public bool SettableDataBits 
    {
      get { return dwSettableParams[(int)SP.SP_DATABITS]; }
    }

    /// <summary>
    /// Handshake protocol can be set
    /// </summary>
    public bool SettableHandShaking 
    {
      get { return dwSettableParams[(int)SP.SP_HANDSHAKING]; }
    }

    /// <summary>
    /// Number of parity bits can be set
    /// </summary>
    public bool SettableParity 
    {
      get { return dwSettableParams[(int)SP.SP_PARITY]; }
    }

    /// <summary>
    /// Parity check can be enabled/disabled
    /// </summary>
    public bool SettableParityCheck 
    {
      get { return dwSettableParams[(int)SP.SP_PARITY_CHECK]; }
    }
    /// <summary>
    /// Receive Line Signal detect can be enabled/disabled
    /// </summary>
    public bool SettableRlsd 
    {
      get { return dwSettableParams[(int)SP.SP_RLSD]; }
    }
    /// <summary>
    /// Number of stop bits can be set
    /// </summary>
    public bool SettableStopBits 
    {
      get { return dwSettableParams[(int)SP.SP_STOPBITS]; }
    }

    // Settable Databits
    /// <summary>
    /// Port supports 5 data bits
    /// </summary>
    public bool Supports5DataBits 
    {
      get { return dwSettableStopParityData[(int)DB.DATABITS_5]; }
    }

    /// <summary>
    /// Port supports 6 data bits
    /// </summary>
    public bool Supports6DataBits 
    {
      get { return dwSettableStopParityData[(int)DB.DATABITS_6]; }
    }

    /// <summary>
    /// Port supports 7 data bits
    /// </summary>
    public bool Supports7DataBits 
    {
      get { return dwSettableStopParityData[(int)DB.DATABITS_7]; }
    }
    
    /// <summary>
    /// Port supports 8 data bits
    /// </summary>
    public bool Supports8DataBits 
    {
      get { return dwSettableStopParityData[(int)DB.DATABITS_8]; }
    }
    
    /// <summary>
    /// Port supports 16 data bits
    /// </summary>
    public bool Supports16DataBits 
    {
      get { return dwSettableStopParityData[(int)DB.DATABITS_16]; }
    }
    
    /// <summary>
    /// Port supports special wide data path through serial hardware lines
    /// </summary>
    public bool Supports16XDataBits 
    {
      get { return dwSettableStopParityData[(int)DB.DATABITS_16X]; }
    }

    // Settable Stop
    
    /// <summary>
    /// Port supports even parity
    /// </summary>
    public bool SupportsParityEven 
    {
      get { return dwSettableStopParityData[(int)SB.PARITY_EVEN]; }
    }
    
    /// <summary>
    /// Port supports mark parity
    /// </summary>
    public bool SupportsParityMark 
    {
      get { return dwSettableStopParityData[(int)SB.PARITY_MARK]; }
    }

    /// <summary>
    /// Port supports none parity
    /// </summary>
    public bool SupportsParityNone 
    {
      get { return dwSettableStopParityData[(int)SB.PARITY_NONE]; }
    }

    /// <summary>
    /// Port supports odd parity
    /// </summary>
    public bool SupportsParityOdd 
    {
      get { return dwSettableStopParityData[(int)SB.PARITY_ODD]; }
    }

    /// <summary>
    /// Port supports space parity
    /// </summary>
    public bool SupportsParitySpace 
    {
      get { return dwSettableStopParityData[(int)SB.PARITY_SPACE]; }
    }

    /// <summary>
    /// Port supports 1 stop bit
    /// </summary>
    public bool SupportsStopBits10 
    {
      get { return dwSettableStopParityData[(int)SB.STOPBITS_10]; }
    }
    
    /// <summary>
    /// Port supports 1.5 stop bits
    /// </summary>
    public bool SupportsStopBits15 
    {
      get { return dwSettableStopParityData[(int)SB.STOPBITS_15]; }
    }

    /// <summary>
    /// Port supports 2 stop bits
    /// </summary>
    public bool SupportsStopBits20 
    {
      get { return dwSettableStopParityData[(int)SB.STOPBITS_20]; }
    }

    // settable Baud Rates
    /// <summary>
    /// Port can be set to 75 bits per second
    /// </summary>
    public bool HasBaud75
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_075];}
    }
    /// <summary>
    /// Port can be set to 110 bits per second
    /// </summary>
    public bool HasBaud110
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_110];}
    }
    /// <summary>
    /// Port can be set to 134.5 bits per second
    /// </summary>
    public bool HasBaud134_5
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_134_5];}
    }
    /// <summary>
    /// Port can be set to 150 bits per second
    /// </summary>
    public bool HasBaud150
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_150];}
    }

    /// <summary>
    /// Port can be set to 300 bits per second
    /// </summary>
    public bool HasBaud300
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_300];}
    }

    /// <summary>
    /// Port can be set to 600 bits per second
    /// </summary>
    public bool HasBaud600
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_600];}
    }

    /// <summary>
    /// Port can be set to 1,200 bits per second
    /// </summary>
    public bool HasBaud1200
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_1200];}
    }
    
    /// <summary>
    /// Port can be set to 2,400 bits per second
    /// </summary>
    public bool HasBaud2400
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_2400];}
    }

    /// <summary>
    /// Port can be set to 4,800 bits per second
    /// </summary>
    public bool HasBaud4800
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_4800];}
    }

    /// <summary>
    /// Port can be set to 7,200 bits per second
    /// </summary>
    public bool HasBaud7200
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_7200];}
    }

    /// <summary>
    /// Port can be set to 9,600 bits per second
    /// </summary>
    public bool HasBaud9600
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_9600];}
    }

    /// <summary>
    /// Port can be set to 14,400 bits per second
    /// </summary>
    public bool HasBaud14400
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_14400];}
    }

    /// <summary>
    /// Port can be set to 19,200 bits per second
    /// </summary>
    public bool HasBaud19200
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_19200];}
    }

    /// <summary>
    /// Port can be set to 38,400 bits per second
    /// </summary>
    public bool HasBaud38400
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_38400];}
    }

    /// <summary>
    /// Port can be set to 56 Kbits per second
    /// </summary>
    public bool HasBaud56K
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_56K];}
    }
    
    /// <summary>
    /// Port can be set to 128 Kbits per second
    /// </summary>
    public bool HasBaud128K
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_128K];}
    }
    
    /// <summary>
    /// Port can be set to 115,200 bits per second
    /// </summary>
    public bool HasBaud115200
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_115200];}
    }
    
    /// <summary>
    /// Port can be set to 57,600 bits per second
    /// </summary>
    public bool HasBaud57600
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_57600];}
    }

    /// <summary>
    /// Port can be set to user defined bit rate
    /// </summary>
    public bool HasBaudUser
    {
      get { return dwSettableBaud[(int)BAUD.BAUD_USER];}
    }

  };

  
}
www.java2v.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.