-
Notifications
You must be signed in to change notification settings - Fork 0
/
SerialBuffer.cs
128 lines (111 loc) · 3.16 KB
/
SerialBuffer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO.Ports;
using System.Reflection;
namespace MT_MDM
{
public enum SerialBufferEventType
{
Data = 1,
Disconenct = 2,
}
public class SerialBufferEventArgs
{
public byte sbVal;
public SerialBufferEventType sbType;
internal SerialBufferEventArgs(SerialBufferEventType type, Byte val)
{
sbVal = val;
sbType = type;
}
public SerialBufferEventType Type
{
get { return sbType; }
}
public Byte Value
{
get { return sbVal; }
}
}
public class SerialBuffer
{
//public delegate void SerialBufferEventHandler(object source, EventArgs e);
public event EventHandler<SerialBufferEventArgs> SerialData;
private SerialPort port = new SerialPort();
private static Queue<byte> _serialBuffer = new Queue<byte>();
private static object syncObj = new object();
public byte temp = 0;
public SerialBuffer()
{
port.DataReceived += new SerialDataReceivedEventHandler(SerialDataReceived);
}
private void SerialDataReceived(object sender, SerialDataReceivedEventArgs e)
{
while (port.BytesToRead != 0)
{
var data = port.ReadByte();
OnSerialDataRdy((byte)data);
}
}
public bool Connect(int Baud, string portName)
{
bool ok = true;
port.BaudRate = Baud;
port.PortName = portName;
port.Parity = Parity.None;
port.StopBits = (StopBits) 1;
port.DataBits = 8;
try
{
port.Open();
}
catch
{
ok = false;
}
return ok;
}
public void Send(byte val)
{
port.Write(new Byte[]{val},0,1);
}
//public void AddData(byte val)
//{
// lock(syncObj) {
// _serialBuffer.Enqueue(val);
// temp = val;
// }
// OnSerialDataRdy(val);
//}
//public static uint GetData()
//{
// uint result = 0;
// lock (syncObj)
// {
// if (_serialBuffer.Count > 0)
// result= _serialBuffer.Dequeue();
// else
// result = 0x100;
// }
// return result;
//}
protected virtual void OnSerialDataRdy(Byte val)
{
if(SerialData != null)
SerialData(this, new SerialBufferEventArgs(SerialBufferEventType.Data, val));
}
//public int BufferSize()
//{
// return _serialBuffer.Count;
//}
}
//public class SerialIn
//{
// public static void OnSerialBufRdy(object source, EventArgs e)
// {
// //Ymodem.serialDataRdy = true;
// // Debug.WriteLine("SerialIn Event, Buffer {0} ", (char)SerialBuffer.temp);
// }
//}
}