/// <summary> /// Construct C# Canpacket from a CanFestival message /// </summary> /// <param name="msg">A CanFestival message struct</param> public canpacket(DriverInstance.Message msg) { cob = msg.cob_id; len = msg.len; data = new byte[len]; byte[] temp = BitConverter.GetBytes(msg.data); Array.Copy(temp, data, msg.len); }
/// <summary> /// Send a Can packet on the bus /// </summary> /// <param name="p"></param> public void SendPacket(canpacket p) { DriverInstance.Message msg = p.ToMsg(); driver.cansend(msg); if (echo == true) { Driver_rxmessage(msg); } }
/// <summary> /// Convert to a CanFestival message /// </summary> /// <returns>CanFestival message</returns> public DriverInstance.Message ToMsg() { DriverInstance.Message msg = new DriverInstance.Message(); msg.cob_id = cob; msg.len = len; msg.rtr = 0; byte[] temp = new byte[8]; Array.Copy(data, temp, len); msg.data = BitConverter.ToUInt64(temp, 0); return(msg); }
/// <summary> /// Private worker thread to keep the rxmessage() function pumped /// </summary> private void rxthreadworker() { while (threadrun) { DriverInstance.Message rxmsg = canreceive(); if (rxmsg.len != 0) { if (rxmessage != null) { rxmessage(rxmsg); } } System.Threading.Thread.Sleep(1); } }
/// <summary> /// Recieved message callback handler /// </summary> /// <param name="msg">CanOpen message recieved from the bus</param> private void Driver_rxmessage(DriverInstance.Message msg) { packetqueue.Enqueue(new canpacket(msg)); }
/// <summary> /// Recieved message callback handler /// </summary> /// <param name="msg">CanOpen message recieved from the bus</param> private void Driver_rxmessage(DriverInstance.Message msg, bool bridge = false) { packetqueue.Enqueue(new canpacket(msg, bridge)); }