using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.ComponentModel;
namespace SerialPortListener.Serial
{
///
/// Class containing properties related to a serial port
///
public class SerialSettings : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
string _portName = "";
string[] _portNameCollection;
int _baudRate = 4800;
BindingList _baudRateCollection = new BindingList();
Parity _parity = Parity.None;
int _dataBits = 8;
int[] _dataBitsCollection = new int[] { 5, 6, 7, 8 };
StopBits _stopBits = StopBits.One;
#region Properties
///
/// The port to use (for example, COM1).
///
public string PortName
{
get { return _portName; }
set
{
if (!_portName.Equals(value))
{
_portName = value;
SendPropertyChangedEvent("PortName");
}
}
}
///
/// The baud rate.
///
public int BaudRate
{
get { return _baudRate; }
set
{
if (_baudRate != value)
{
_baudRate = value;
SendPropertyChangedEvent("BaudRate");
}
}
}
///
/// One of the Parity values.
///
public Parity Parity
{
get { return _parity; }
set
{
if (_parity != value)
{
_parity = value;
SendPropertyChangedEvent("Parity");
}
}
}
///
/// The data bits value.
///
public int DataBits
{
get { return _dataBits; }
set
{
if (_dataBits != value)
{
_dataBits = value;
SendPropertyChangedEvent("DataBits");
}
}
}
///
/// One of the StopBits values.
///
public StopBits StopBits
{
get { return _stopBits; }
set
{
if (_stopBits != value)
{
_stopBits = value;
SendPropertyChangedEvent("StopBits");
}
}
}
///
/// Available ports on the computer
///
public string[] PortNameCollection
{
get { return _portNameCollection; }
set { _portNameCollection = value; }
}
///
/// Available baud rates for current serial port
///
public BindingList BaudRateCollection
{
get { return _baudRateCollection; }
}
///
/// Available databits setting
///
public int[] DataBitsCollection
{
get { return _dataBitsCollection; }
set { _dataBitsCollection = value; }
}
#endregion
#region Methods
///
/// Updates the range of possible baud rates for device
///
/// dwSettableBaud parameter from the COMMPROP Structure
/// An updated list of values
public void UpdateBaudRateCollection(int possibleBaudRates)
{
const int BAUD_075 = 0x00000001;
const int BAUD_110 = 0x00000002;
const int BAUD_150 = 0x00000008;
const int BAUD_300 = 0x00000010;
const int BAUD_600 = 0x00000020;
const int BAUD_1200 = 0x00000040;
const int BAUD_1800 = 0x00000080;
const int BAUD_2400 = 0x00000100;
const int BAUD_4800 = 0x00000200;
const int BAUD_7200 = 0x00000400;
const int BAUD_9600 = 0x00000800;
const int BAUD_14400 = 0x00001000;
const int BAUD_19200 = 0x00002000;
const int BAUD_38400 = 0x00004000;
const int BAUD_56K = 0x00008000;
const int BAUD_57600 = 0x00040000;
const int BAUD_115200 = 0x00020000;
const int BAUD_128K = 0x00010000;
_baudRateCollection.Clear();
if ((possibleBaudRates & BAUD_115200) > 0)
_baudRateCollection.Add(115200);
if ((possibleBaudRates & BAUD_075) > 0)
_baudRateCollection.Add(75);
if ((possibleBaudRates & BAUD_110) > 0)
_baudRateCollection.Add(110);
if ((possibleBaudRates & BAUD_150) > 0)
_baudRateCollection.Add(150);
if ((possibleBaudRates & BAUD_300) > 0)
_baudRateCollection.Add(300);
if ((possibleBaudRates & BAUD_600) > 0)
_baudRateCollection.Add(600);
if ((possibleBaudRates & BAUD_1200) > 0)
_baudRateCollection.Add(1200);
if ((possibleBaudRates & BAUD_1800) > 0)
_baudRateCollection.Add(1800);
if ((possibleBaudRates & BAUD_2400) > 0)
_baudRateCollection.Add(2400);
if ((possibleBaudRates & BAUD_4800) > 0)
_baudRateCollection.Add(4800);
if ((possibleBaudRates & BAUD_7200) > 0)
_baudRateCollection.Add(7200);
if ((possibleBaudRates & BAUD_9600) > 0)
_baudRateCollection.Add(9600);
if ((possibleBaudRates & BAUD_14400) > 0)
_baudRateCollection.Add(14400);
if ((possibleBaudRates & BAUD_19200) > 0)
_baudRateCollection.Add(19200);
if ((possibleBaudRates & BAUD_38400) > 0)
_baudRateCollection.Add(38400);
if ((possibleBaudRates & BAUD_56K) > 0)
_baudRateCollection.Add(56000);
if ((possibleBaudRates & BAUD_57600) > 0)
_baudRateCollection.Add(57600);
if ((possibleBaudRates & BAUD_128K) > 0)
_baudRateCollection.Add(128000);
SendPropertyChangedEvent("BaudRateCollection");
}
///
/// Send a PropertyChanged event
///
/// Name of changed property
private void SendPropertyChangedEvent(String propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
}