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; } }
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); }
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(); }