public static CANData waitMessage(CANData msg, int timeout) { CANData cdGet = null; //向驱动管理器注册一个回调函数 Action <CANData> actFun = new Action <CANData>( (CANData cd) => { if (cd.Equals(msg)) { cdGet = cd; } } ); DriverManager.PushCANDataProcessor(actFun); long tickTimeout = DateTime.Now.Ticks + timeout * 10000; while (DateTime.Now.Ticks < tickTimeout) { if (cdGet != null) { DriverManager.PopCANDataProcessor(); return(cdGet); } else { Application.DoEvents(); Thread.Sleep(1); } } DriverManager.PopCANDataProcessor(); throw new TimeoutException("Waiting on CAN time out!"); }
public NativeCAN() { handle = FRC_CAN_Reader_Native_Create(); readThread = new Thread(() => { var eventHandle = FRC_CAN_Reader_Native_GetEventHandle(handle); while (true) { int dataLen = 0; if (WPI_WaitForObjectTimeout(eventHandle, 1, &dataLen) != 0) { dataLen = 0; CANData *messages = FRC_CAN_Reader_Native_ReadMessages(handle, &dataLen); if (messages == null) { continue; } for (int i = 0; i < dataLen; i++) { CANData data = messages[i]; ulong ulongData = Unsafe.ReadUnaligned <ulong>(data.data); CANMessageReceived?.Invoke((uint)data.id, ulongData, data.length, (uint)data.timestamp); } } } }); readThread.IsBackground = true; readThread.Name = "CAN Managed Reader"; readThread.Start(); }
public static bool SendData(CANData cd) { cd.ActionTime = DateTime.Now; bool TxResult = Driver.SendData(cd); TxForm.appendData(cd); return(TxResult); }
public static void transmitData(int ID, int[] Data) { try { sendData(CANData.getNewJS(ID, Data)); } catch (Exception e) { JavascriptIDE.add(e); Logger.logError(e); } }
public void appendData(CANData cd) { ctvr.Dispatcher.Invoke(new Action(() => { ctvr.appendData(cd); })); mlt.Dispatcher.Invoke(new Action(() => { mlt.addItem(cd.ToString()); })); lbAllCount.Text = string.Format("总数量:{0}条 ", ctvr.Data.Count); }
public static CANData GetData() { CANData cd = cdriver.GetQueue().Dequeue(); foreach (Action <CANData> processor in messageProcessorQueue) { processor(cd); } return(cd); }
void rxThread() { while (true) { if (DriverManager.IsInitialized) { int dataSize = DriverManager.Driver.GetQueue().Count; if (dataSize > 0) { try { for (int i = 0; i < dataSize; i++) { CANData cd = DriverManager.GetData(); ctvr.Dispatcher.Invoke(new Action(() => { ctvr.appendData(cd); })); mlt.Dispatcher.Invoke(new Action(() => { mlt.addItem(cd.ToString()); })); rxTime.Enqueue(cd.ActionTime); } } catch { return; } } } DateTime histLimit = DateTime.Now - new TimeSpan(0, 0, 3); while (rxTime.Count > 0) { if (rxTime.Dequeue() >= histLimit) { break; } } if (rxTime.Count > 0) { long dt = rxTime.Last().Ticks - rxTime.First().Ticks; double dtms = dt / 10000.0 / 1000.0; if (dt == 0) { lbSpeed.Text = "传输速度:- fps"; } else { lbSpeed.Text = string.Format("传输速度:{0} fps", (long)(rxTime.Count / dtms)); } } else { lbSpeed.Text = "传输速度:0 fps"; } lbAllCount.Text = string.Format("总数量:{0}条 ", ctvr.Data.Count); Thread.Sleep(50);//20Hz刷新率 } }
public void appendData(CANData cd) { dataQueue.Enqueue(cd); if (treeData.ContainsKey(cd.ID)) { //刷新内容 treeData[cd.ID].Header = cd.ToString(); } else { //新增节点 treeData.Add(cd.ID, new TreeViewItem() { Foreground = canView.Foreground }); treeData[cd.ID].Header = cd.ToString(); canView.Items.Add(treeData[cd.ID]); } string appendText; if (lastTick.ContainsKey(cd.ID)) { appendText = string.Format(" Dt:{0}ms", (cd.ActionTime.Ticks - lastTick[cd.ID]) / 10000.0); lastTick[cd.ID] = cd.ActionTime.Ticks; } else { appendText = " Dt:--ms"; lastTick.Add(cd.ID, cd.ActionTime.Ticks); } treeData[cd.ID].Header += appendText; treeData[cd.ID].Tag = cd; if (CANDecoder.ContainsKey(cd.ID)) //可以解析 { bool isExpand = false; foreach (CANSignal cSignal in CANDecoder[cd.ID].Keys) { TreeViewItem tn = CANDecoder[cd.ID][cSignal]; if (NOT_ADDED.Equals(tn.Header.ToString())) { treeData[cd.ID].Items.Add(tn); isExpand = true; } tn.Header = string.Format("{0}:{1}-->{2}", cSignal.Name, cSignal.BytesToInt(cd.GetData()), cSignal.DecodeCANMessage(cd.GetData()).ToString()); tn.Foreground = canView.Foreground; } if (isExpand) { treeData[cd.ID].ExpandSubtree(); } } }
public static void transmitData(CANData cd) { try { DriverManager.SendData(cd); } catch (NullReferenceException nullex) { JavascriptIDE.add("可能尚未初始化CAN收发器,去初始化一下!"); Logger.logError(nullex); } catch (Exception e) { JavascriptIDE.add(e); Logger.logError(e); } }
public override bool SendData(CANData cdin) { CAN_OBJ co = new CAN_OBJ(); co.data = cdin.GetData(); co.ID = (uint)cdin.ID; co.DataLen = (byte)cdin.getDataLen(); co.SendType = 1; co.ExternFlag = 0x01; co.RemoteFlag = 0x00; lock (this) { return(ECANDLL.Transmit(deviceType, useDeviceIndex, useCANIndex, ref co, 1) == ECANStatus.STATUS_OK); } }
public override bool SendData(CANData data) { VCI_CAN_OBJ co = new VCI_CAN_OBJ(); co.Data = data.GetData(); co.ID = (uint)data.ID; co.DataLen = (byte)data.getDataLen(); co.SendType = 1; co.ExternFlag = 0x01; co.RemoteFlag = 0x00; lock (this) { uint sendResult = iTekAnalyst2API.VCI_Transmit(devideType, useDeviceIndex, useCANIndex, ref co, 1); return(sendResult != 0); } }
public TransmitThread(CANData cd, int cycleTime) { sd.data = cd; sd.cycle = cycleTime; }
public static TransmitThread newSendThread(CANData cd, int cycleTime) { print("Warning: 'newSendThread' is obsoleted.\nUse 'newTransmitThread' instead."); return(new TransmitThread(cd, cycleTime)); }
public static TransmitThread newTransmitThread(CANData cd, int cycleTime) { return(new TransmitThread(cd, cycleTime)); }
public abstract bool SendData(CANData data);
protected void Push(CANData cd) { RXQueue.Enqueue(cd); PushedCount++; }
public void appendRX(CANData cd) { ctvr.appendData(cd); }
public static void sendData(CANData cd) { print("Warning: 'sendData' is obsoleted.\nUse 'transmitData' instead."); transmitData(cd); }
public static CANData getNewCANData(int ID, int[] Data) { return(CANData.getNewJS(ID, Data)); }