示例#1
0
        private void CanInterface_CapturePacketEvent(object sender, CanMessageEventArgs e)
        {
            if (FilterHeadString != "")
            {
                int pos = FilterHeads.IndexOf(e.msgInfo.DevPosition);
                if (pos < 0)
                {
                    return;
                }
            }

            if (FilterMsgIdString != "")
            {
                int pos = FilterMessageIds.IndexOf(e.msgInfo.MsgId);
                if (pos < 0)
                {
                    return;
                }
            }

            ListViewItem item = new ListViewItem();

            item.Tag  = e.msgInfo;
            item.Text = e.msgInfo.ID.ToString("X");
            item.SubItems.Add(e.msgInfo.GetDataString());
            item.SubItems.Add(e.msgInfo.DevPosition.ToString());
            item.SubItems.Add(e.msgInfo.MsgType.ToString());
            item.SubItems.Add(e.msgInfo.MsgId.ToString());
            item.SubItems.Add(Hyrel.ProcessCanMessage(e.msgInfo.DevPosition, e.msgInfo.MsgId, e.msgInfo.data));

            if (listView1.InvokeRequired)
            {
                listView1.Invoke((MethodInvoker) delegate()
                {
                    listView1.Items.Add(item);
                    listView1.Items[listView1.Items.Count - 1].EnsureVisible();
                });
            }
            else
            {
                listView1.Items.Add(item);
                listView1.Items[listView1.Items.Count - 1].EnsureVisible();
            }
        }
        unsafe public void CaptureCanPacketCallback(CANInterface ifc)
        {
            while (!IsDispose)
            {
                if (!IsCapturing)
                {
                    continue;
                }
                UInt32 res = new UInt32();
                res = VCI_Receive(USB_CAN2, 0, Channel, ref CanReceivedrecobj[0], MAX_RECEVIEDPACKETS, 100);
                for (UInt32 i = 0; i < res; i++)
                {
                    if (CanReceivedrecobj[i].RemoteFlag == 1)
                    {
                        continue;
                    }
                    if (CanReceivedrecobj[i].ExternFlag != 1)
                    {
                        continue;
                    }
                    byte           len = (byte)CanReceivedrecobj[i].DataLen;
                    CANMESSAGEINFO msg = new CANMESSAGEINFO();
                    msg.DataLen = len;
                    fixed(VCI_CAN_OBJ *recobj = &CanReceivedrecobj[i])
                    {
                        msg.ID = recobj->ID;
                        for (int k = 0; k < len; k++)
                        {
                            msg.data[k] = recobj->Data[k];
                        }
                    }

                    CanMessageEventArgs e = new CanMessageEventArgs();
                    e.msgInfo = msg;

                    CapturePacketEvent?.Invoke(ifc, e);
                    break;
                }
                Thread.Sleep(100);
            }
        }