1 /************************************************************************************\ 2 * CatLog - An SDSG Production * 3 \************************************************************************************/ 4 5 /*! \file SerialLog.cs 6 * \author Andrew Shurney 7 * \brief Logs from a serial port. Sends out data over events. 8 */ 9 10 using System; 11 using System.Collections.Generic; 12 using System.Linq; 13 using System.Text; 14 using System.ComponentModel; 15 using System.Threading; 16 using System.IO.Ports; 17 using System.Windows.Forms; 18 19 namespace CatLog 20 { 21 class SerialLog 22 { 23 public String portName; 24 SerialPort port = null; 25 NewDataHandler(String line)26 public delegate void NewDataHandler(String line); ClearHandler()27 public delegate void ClearHandler(); 28 29 public event NewDataHandler NewData = null; 30 public event ClearHandler Clear = null; 31 SerialLog(String portName)32 public SerialLog(String portName) 33 { 34 this.portName = portName; 35 } 36 Start()37 public void Start() 38 { 39 if (IsRunning) 40 return; 41 42 port = new SerialPort(portName, 57600, Parity.None, 8, StopBits.One); 43 port.Handshake = Handshake.None; 44 port.Encoding = Encoding.UTF8; 45 port.DataReceived +=new SerialDataReceivedEventHandler(port_DataReceived); 46 47 Reset(); 48 49 port.Open(); 50 } 51 port_DataReceived(object sender, SerialDataReceivedEventArgs e)52 void port_DataReceived(object sender, SerialDataReceivedEventArgs e) 53 { 54 SerialPort sp = (SerialPort)sender; 55 56 String data = sp.ReadExisting(); 57 if (NewData != null) 58 NewData(data); 59 } 60 61 public bool IsRunning 62 { 63 get 64 { 65 if (port == null) 66 return false; 67 68 return port.IsOpen; 69 } 70 } 71 Stop()72 public void Stop() 73 { 74 if (!IsRunning) 75 return; 76 77 port.Close(); 78 } 79 Reset()80 public void Reset() 81 { 82 if (Clear != null) 83 Clear(); 84 } 85 } 86 } 87