using System; using Microsoft.SPOT; using System.Text; namespace instrumentModel { class SerialDevice : InstrumentDevice { // definitions public enum SerialParity { Even = System.IO.Ports.Parity.Even, Odd = System.IO.Ports.Parity.Odd, None = System.IO.Ports.Parity.None, Mark = System.IO.Ports.Parity.Mark, Space = System.IO.Ports.Parity.Space } public struct PortSettings { public String Name; public int BaudRate; public int ByteSize; public SerialParity Parity; public int StopBits; public PortSettings(String name, int baudrate, int bytesize, SerialParity parity, int stopbits) { Name = name; BaudRate = baudrate; ByteSize = bytesize; Parity = parity; StopBits = stopbits; } } // class variables private System.IO.Ports.SerialPort _port; private PortSettings _portsettings; //Constructors public SerialDevice(String name, String portname, int baudrate, int bytesize, SerialParity parity, int stopbits) : base(name) { _portsettings.Name = portname; _portsettings.ByteSize = bytesize; _portsettings.Parity = parity; _portsettings.BaudRate = baudrate; _portsettings.StopBits = stopbits; this.Status = initialize(); } public override DevStatus initialize() { _port = new System.IO.Ports.SerialPort(_portsettings.Name, _portsettings.BaudRate, (System.IO.Ports.Parity)_portsettings.Parity, _portsettings.ByteSize, (System.IO.Ports.StopBits)_portsettings.StopBits); this.connect(); return Status; } public override DevStatus printState() { // some common print statment return Status; } public override DevStatus process(String msg) { // let's override this too. return Status; } //Attempt to Close the port public override DevStatus disconnect() { if (_port.IsOpen) _port.Close(); // Error check if (_port.IsOpen) Status = DevStatus.Error; else Status = DevStatus.Ok; return Status; } public override DevStatus connect() { if (!_port.IsOpen) _port.Open(); // Test if port creation succeeded and return if (_port.IsOpen) Status = DevStatus.Ready; else Status = DevStatus.Error; return Status; } public override DevStatus write(string msg) { // first convert the string to a byte array byte[] bytemsg = UTF8Encoding.UTF8.GetBytes(msg); // check message length first if (bytemsg.Length > 0) { _port.Write(bytemsg, 0, bytemsg.Length); Debug.Print("Printing String to Port\n"); Debug.Print(bytemsg.ToString()); } else { //Print something in the log } Status = DevStatus.Ok; return Status; } public override DevStatus read(byte[] msg, ref int length) { // write in reverse.. ish return Status; } public override void run() { throw new NotImplementedException(); // leave this here and the derived class has to implement it. } } }