123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Diagnostics;
- using System.IO.Ports;
- using System.Collections;
- using System.Threading;
- namespace IControls_FireManager
- {
-
-
-
- public class _Serial
- {
-
- public SerialPort serial = new SerialPort();
-
- public Queue RxQueue = new Queue();
-
- public Queue TxQueue = new Queue();
-
- public Object CS_TxQueue = new Object();
- public Object CS_RxQueue = new Object();
-
- public PortInfo MyPortInfo = PortInfo.Receiver1;
-
-
-
- public void RxQueue_ADD(byte[] Data)
- {
- lock (CS_RxQueue)
- {
- RxQueue.Enqueue(Data);
- }
- }
- public void TxQueue_ADD(byte[] Data)
- {
- lock (CS_TxQueue)
- {
- TxQueue.Enqueue(Data);
- }
- }
-
-
-
-
-
- public bool Serial_Create(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits, PortInfo info)
- {
- try
- {
- if (serial.IsOpen == true)
- serial.Close();
- MyPortInfo = info;
- serial = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
- serial.Open();
- serial.DataReceived += new SerialDataReceivedEventHandler(SerialPort_DataReceived);
- return true;
- }
- catch (Exception e)
- {
- _Event.DebugView_SendMessage_Write(MyPortInfo, serial.PortName + e.ToString());
- return false;
- }
- }
-
-
-
- public void Serial_Dispose()
- {
- serial.Close();
- }
-
-
-
-
- public int buffer_index = 0;
- public int buffer_max_size = 30;
-
- public byte[] tempbuf = new byte[30];
- public void buffer_cler()
- {
- for (int i = 0; i < buffer_max_size; i++)
- {
- tempbuf[i] = 0x00;
- }
- }
- public void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs evt)
- {
- SerialPort serial = (SerialPort)sender;
-
- byte[] raw_data = new byte[buffer_max_size];
-
- int ReadByte_Cnt = 0;
- try
- {
- if (serial.IsOpen)
- {
-
- ReadByte_Cnt = serial.Read(raw_data, 0, buffer_max_size);
- if (ReadByte_Cnt > buffer_max_size)
- ReadByte_Cnt = buffer_max_size;
- else if (ReadByte_Cnt <= 0)
- return;
-
-
- if (MyPortInfo == PortInfo.Emergency)
- {
-
- for (int i = 0; i < ReadByte_Cnt; i++)
- {
- if (raw_data[i] == 0x06 || raw_data[i] == 0x15)
- {
- Thread.Sleep(50);
- byte[] workbuf = new byte[1];
- workbuf[0] = raw_data[i];
- string log = "rx " + string.Format("{0:00} ", workbuf[0].ToString("X2"));
- _Event.DebugView_SendMessage_Write(MyPortInfo, log);
- RxQueue_ADD(workbuf);
-
- return;
- }
- }
- }
- else
- {
-
- for (int i = 0; i < ReadByte_Cnt; i++)
- {
- if (raw_data[i] == 0x02)
- {
-
- buffer_index = 0;
-
- tempbuf[buffer_index] = raw_data[i];
-
- buffer_index++;
- }
- else
- {
-
- if (buffer_index >= 1)
- tempbuf[buffer_index] = raw_data[i];
-
- if (buffer_index > 12)
- buffer_index = 0;
- else
- buffer_index++;
- }
- }
-
- if (buffer_index == 5
- && tempbuf[0] == 0x02
- && tempbuf[1] == 0x50
- && tempbuf[2] == 0x4F
- && tempbuf[3] == 0x4C
- && tempbuf[4] == 0x03)
- {
- byte[] workbuf = new byte[5];
- string log = "rx ";
- for (int i = 0; i < buffer_index; i++)
- {
- workbuf[i] = tempbuf[i];
- log = log + string.Format("{0:00} ", workbuf[i].ToString("X2"));
- }
- _Event.DebugView_SendMessage_Write(MyPortInfo, log);
- RxQueue_ADD(workbuf);
-
- buffer_index = 0;
- buffer_cler();
- return;
- }
- else if (buffer_index == 12)
- {
-
- int chksum = 0x00;
- for (int i = 0;i< 10;i++)
- chksum = chksum + tempbuf[i];
- chksum = chksum + tempbuf[11];
- chksum = (chksum % 16) + 0x30;
- if (chksum == tempbuf[10])
- {
- byte[] workbuf = new byte[12];
- string log = "rx ";
- for (int i = 0; i < buffer_index; i++)
- {
- workbuf[i] = tempbuf[i];
- log = log + string.Format("{0:00} ", workbuf[i].ToString("X2"));
- }
- _Event.DebugView_SendMessage_Write(MyPortInfo, log);
- RxQueue_ADD(workbuf);
- }
-
- buffer_index = 0;
- buffer_cler();
- }
- }
-
- }
- }
- catch (Exception e)
- {
- buffer_index = 0;
- _Event.DebugView_SendMessage_Write(MyPortInfo, serial.PortName + e.ToString());
- }
- }
-
-
-
- public void Serial_Transmit(byte[] data)
- {
- try
- {
- if (serial.IsOpen)
- {
- serial.Write(data, 0, data.Length);
- string log = "tx ";
- for (int i = 0; i < data.Length; i++)
- {
- log = log + string.Format("{0:00} ", data[i].ToString("X2"));
- }
- _Event.DebugView_SendMessage_Write(MyPortInfo, log);
- }
- }
- catch (Exception e)
- {
- _Event.DebugView_SendMessage_Write(MyPortInfo, serial.PortName + e.ToString());
- }
- }
- }
-
- }
|