Пример #1
0
        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;
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
 private void Cleanup()
 {
     _StopThread();
     Debug.Assert(m_SerialPort != null);
     Win32Com.CloseCOM(m_SerialPort);
 }