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