Example #1
0
        private void ReceiveThreadHandler()
        {
            TPCANMsg       msg;
            TPCANTimestamp timestamp;
            TPCANStatus    result;

            try
            {
                while (m_open)
                {
                    var status = PCANBasic.GetStatus(m_handle);
                    if ((status & TPCANStatus.PCAN_ERROR_QRCVEMPTY) == 0) // If NOT empty
                    {
                        result = PCANBasic.Read(m_handle, out msg, out timestamp);
                        if (this.UpdateStatusFromOperation(result) == TPCANStatus.PCAN_ERROR_OK)
                        {
                            System.Diagnostics.Debug.WriteLine("CAN In: " + msg.ID.ToString());
                            this.PutReceivedInQueue(new PCANMessage(msg, timestamp));
                        }
                    }
                    else
                    {
                        Thread.Sleep(5);
                    }
                }
            }
            finally
            {
                m_receiverThread = null;
            }
        }
Example #2
0
        private byte[] SSPC_Ctrl(byte[] msg, bool msginProg)
        {
            TPCANStatus stsResult;

            CANMsgWrite                    = new TPCANMsg();
            CANMsgWrite.LEN                = 8;
            CANMsgWrite.DATA               = new byte[8];
            CANMsgWrite.MSGTYPE            = TPCANMessageType.PCAN_MESSAGE_EXTENDED;
            CANMsgWrite.ID                 = ID1;
            CANMsgWrite.DATA               = msg;
            TPCANTimestamp.micros          = 185;
            TPCANTimestamp.millis          = 158903185;
            TPCANTimestamp.millis_overflow = 0;

            byte[] inComingData = new byte[8];

            stsResult = PCANBasic.GetStatus(m_PcanHandle);


            stsResult = PCANBasic.Write(m_PcanHandle, ref CANMsgWrite);

            if (stsResult != TPCANStatus.PCAN_ERROR_OK)
            {
                MessageBox.Show(Convert.ToString(stsResult));
            }
            else
            {
                System.Threading.Thread.Sleep(10);
                stsResult = PCANBasic.Read(m_PcanHandle, out CANMsgRead, out TPCANTimestamp);
                if (stsResult != TPCANStatus.PCAN_ERROR_OK)
                {
                    MessageBox.Show(Convert.ToString(stsResult));
                }
                else
                {
                    stsResult = PCANBasic.Read(m_PcanHandle, out CANMsgRead, out TPCANTimestamp);

                    for (int i = 0; i < CANMsgRead.LEN; i++)
                    {
                        inComingData[i] = CANMsgRead.DATA[i];
                    }
                }
            }
            return(inComingData);
        }
Example #3
0
        public PeakCan(int p_peak_id, TPCANBaudrate p_baud_rate = TPCANBaudrate.PCAN_BAUD_1M)
        {
            TPCANStatus status;
            uint        condition;
            uint        device_id;

            foreach (TPCANHandle channel in USB_CHANNELS)
            {
                status = PCANBasic.GetValue(channel, TPCANParameter.PCAN_CHANNEL_CONDITION, out condition, sizeof(UInt32));
                if (status == TPCANStatus.PCAN_ERROR_OK && (condition & PCANBasic.PCAN_CHANNEL_AVAILABLE) == PCANBasic.PCAN_CHANNEL_AVAILABLE)
                {
                    status = PCANBasic.Initialize(channel, p_baud_rate);
                    if (status == TPCANStatus.PCAN_ERROR_OK)
                    {
                        status = PCANBasic.GetValue(channel, TPCANParameter.PCAN_DEVICE_NUMBER, out device_id, sizeof(UInt32));
                        if (status == TPCANStatus.PCAN_ERROR_OK && device_id == p_peak_id)
                        {
                            m_sock = channel;
                        }

                        PCANBasic.Uninitialize(channel);
                    }
                }
            }

            if (m_sock == 0)
            {
                throw new Exception($"PEAK CAN USB adapt with id 0x{p_peak_id:X} not found");
            }
            else
            {
                status = PCANBasic.Initialize(m_sock, p_baud_rate);

                if (status != TPCANStatus.PCAN_ERROR_OK)
                {
                    throw new Exception($"Error initializing CAN with id 0x{p_peak_id:X}");
                }

                status = PCANBasic.Reset(m_sock);
                if (status != TPCANStatus.PCAN_ERROR_OK)
                {
                    throw new Exception(GetFormatedError(status));
                }

                uint numeric_buffer = PCANBasic.PCAN_PARAMETER_ON;
                status = PCANBasic.SetValue(m_sock, TPCANParameter.PCAN_RECEIVE_EVENT, ref numeric_buffer, sizeof(UInt32));

                if (status != TPCANStatus.PCAN_ERROR_OK)
                {
                    throw new Exception(GetFormatedError(status));
                }

                status = PCANBasic.GetStatus(m_sock);
                if (status != TPCANStatus.PCAN_ERROR_OK)
                {
                    throw new Exception(GetFormatedError(status));
                }
            }

            m_queue_rx = new BlockingCollection <TPCANMsg>();
            m_queue_tx = new BlockingCollection <TPCANMsg>();

            m_thread_stop            = false;
            m_thread_rx              = new Thread(new ThreadStart(ReadRawFrame));
            m_thread_rx.IsBackground = true;
            m_thread_rx.Start();

            m_thread_tx = new Thread(new ThreadStart(WriteRawFrame));
            m_thread_tx.IsBackground = true;
            m_thread_tx.Start();
        }