public void Start() { Debug.Assert(m_Started == false); if (!m_Started) { using (SerialPort serialPort = new SerialPort("COM" + m_SerialPortNumber.ToString())) { serialPort.Open(); serialPort.Close(); } m_SerialPort = Win32Com.OpenCOM(m_SerialPortNumber); if (m_SerialPort == (IntPtr)Win32Com.INVALID_HANDLE_VALUE) { throw new Exception("BillValidator : Не могу открыть порт"); } if (!Win32Com.InitCOM(m_SerialPort, S_COM9600, 300)) { throw new Exception("BillValidator : Не могу инициализировать порт"); } m_Protocol = new CCCRSProtocol(m_SerialPort); bool ret = m_Protocol.CmdPoll(m_PeriferalAddr); ret = m_Protocol.CmdReset(m_PeriferalAddr); ret = m_Protocol.CmdGetBillTable(m_PeriferalAddr); Debug.Assert(m_PollThread.IsAlive == false); m_PollThread.Start(); m_Started = true; } }
int SendCommand(Byte[] BufOut, ref Byte[] BufIn) { iRecievingError = RE_TIMEOUT; for (int iErrCount = 0; iErrCount < 1; iErrCount++) { iBytesToRecieve = 6; Win32Com.PurgeComm(m_SerialPort, Win32Com.PURGE_RXABORT | Win32Com.PURGE_TXABORT | Win32Com.PURGE_TXCLEAR | Win32Com.PURGE_RXCLEAR); if (BufOut[2] == 0) { Win32Com.Send(m_SerialPort, BufOut, ((UInt16)BufOut[4] << 8) + BufOut[5]); } else { Win32Com.Send(m_SerialPort, BufOut, BufOut[2]); } if ((BufOut[3] == ACK) || (BufOut[3] == NAK)) { return(iRecievingError = RE_NONE); } if (Win32Com.Recieve(m_SerialPort, out BufIn, iBytesToRecieve)) { if (BufIn[0] != SYNC) { iRecievingError = RE_SYNC; } else { int iLen = ((BufIn[2] != 0) ? BufIn[2] : (BufIn[5] + ((UInt16)BufIn[4] << 8))) - iBytesToRecieve; if (iLen > 0) { byte[] tmpBuf; byte[] tmpBufEx; //byte[] tmpBuf = new byte[BufIn.Length - iBytesToRecieve]; //Array.Copy(BufIn, iBytesToRecieve, tmpBuf, 0, tmpBuf.Length); if (Win32Com.Recieve(m_SerialPort, out tmpBuf, iLen)) { tmpBufEx = new byte[iBytesToRecieve + tmpBuf.Length]; Array.Copy(BufIn, 0, tmpBufEx, 0, iBytesToRecieve); Array.Copy(tmpBuf, 0, tmpBufEx, iBytesToRecieve, tmpBuf.Length); BufIn = tmpBufEx; iRecievingError = RE_NONE; break; } else { tmpBufEx = new byte[iBytesToRecieve + tmpBuf.Length]; Array.Copy(BufIn, 0, tmpBufEx, 0, iBytesToRecieve); Array.Copy(tmpBuf, 0, tmpBufEx, iBytesToRecieve, tmpBuf.Length); BufIn = tmpBufEx; iRecievingError = RE_DATA; Win32Com.PurgeComm(m_SerialPort, Win32Com.PURGE_RXABORT | Win32Com.PURGE_RXCLEAR); } } else { iRecievingError = RE_NONE; break; } } } } return(iRecievingError); }
private void Cleanup() { _StopThread(); Debug.Assert(m_SerialPort != null); Win32Com.CloseCOM(m_SerialPort); }