/// <summary>
 /// Sends a CAN frame across the bridge
 /// </summary>
 /// <param name="frame">The CAN frame to send.</param>
 public override int Send(CANFrame frame)
 {
     try
     {
         return(mRxSocket.SendTo(frame.WireFormatArray, mTxEndPoint));
     }
     catch
     {
         CNXLog.Debug(frame.MailboxId.ToString("X"));
         return(0);
     }
 }
        /// <summary>
        /// Event firing method.
        /// </summary>
        /// <param name="frame">The CAN frame just received.</param>
        //protected virtual void OnRaiseFrameReceivedEvent(FrameReceivedEventArgs frameEvent)
        //{
        //    // copy the event handler to avoid mid process subscribe/un-subscribe
        //    EventHandler<FrameReceivedEventArgs> handler = RaiseFrameReceivedEvent;

        //    // Check if there are any Subscribers
        //    if (handler != null)
        //        // Call the Event
        //        handler(this, frameEvent);
        //}

        private void ReceiveFrames()
        {
            byte[]   buffer = new byte[13];
            EndPoint ep     = mRxEndPoint;
            CANFrame frame  = new CANFrame();

            while (mKeepReceiving)
            {
                try
                {
                    if (mRxSocket.ReceiveFrom(buffer, ref ep) > 0)
                    {
                        CNXLog.Debug(BitConverter.ToString(buffer));
                        // populate a CAN frame
                        frame.WireFormatArray = buffer;
                        CNXLog.Debug(BitConverter.ToString(frame.Data));
                        CNXLog.Debug(frame.MailboxId.ToString("X"));
                        OnRaiseFrameReceivedEvent(new FrameReceivedEventArgs(frame));
                    }
                }
                catch (SocketException se)
                {
                    // may be OK to continue.
                    CNXLog.WarnFormat("ReceiveFrames {0}.", se.Message);
                }
                catch (Exception e)
                {
                    // stuffed.
                    mKeepReceiving = false;
                    CNXLog.ErrorFormat("ReceiveFrames {0}.", e.Message);
                    break;
                }
            }

            mRxSocket.Close();
        }