Beispiel #1
0
        public CCanAppli(Font font) //J'ai modifié le code en supprimant le Bitmap LCD du paramètre
        {
            //m_busCan=new GTM.GHIElectronics.CANDW(6);
            m_busCan = new ControllerAreaNetwork(ControllerAreaNetwork.Channel.One, ControllerAreaNetwork.Speed.Kbps250);
            m_font   = font;
            //    m_LCD = LCD;
            //
            m_tabWaitDONE = new WaitHandle[]
            {
                new AutoResetEvent(false),  //DONE
                new AutoResetEvent(false),  //STOPPED
                new AutoResetEvent(false)   //BLOCKED
            };

            m_waitACK = new WaitHandle[]
            {
                new AutoResetEvent(false),
                new AutoResetEvent(false),
            };


            m_msgRecu = new ControllerAreaNetwork.Message[10];
            for (int i = 0; i < 10; i++)
            {
                m_msgRecu[i] = new ControllerAreaNetwork.Message();
            }
            //  m_busCan.Initialize(GHI.IO.ControllerAreaNetwork.Speed.Kbps125, GHI.IO.ControllerAreaNetwork.Channel.One);
            //m_busCan.ErrorReceived += m_busCan_ErrorReceived;
            //    m_busCan.MessagesReceived += m_busCan_MessagesReceived;
            m_busCan.ErrorReceived    += m_busCan_ErrorReceived;
            m_busCan.MessageAvailable += m_busCan_MessageAvailable;
            m_busCan.Enabled           = true;

            // mutex = new Object();
        }
Beispiel #2
0
        private void Can_ErrorReceived(ControllerAreaNetwork sender, ControllerAreaNetwork.ErrorReceivedEventArgs e)
        {
            if (true) //(e.Error == ControllerAreaNetwork.Error.BusOff)
            {
                can.Reset();
            }
            switch (e.Error)
            {
            case ControllerAreaNetwork.Error.BusOff:
                OnError("BusOff");
                break;

            case ControllerAreaNetwork.Error.ErrorPassive:
                OnError("ErrorPassive");
                break;

            case ControllerAreaNetwork.Error.Overrun:
                OnError("Overrun");
                break;

            case ControllerAreaNetwork.Error.RXOver:
                OnError("RXOver");
                break;

            default:
                OnError("Unknown");
                break;
            }
        }
Beispiel #3
0
        protected CanNativeAdapter(CanNativeAdapterSettings settings, ControllerAreaNetwork.Timings timings = null)
            : base(settings)
        {
            switch (settings.Speed)
            {
            case CanAdapterSettings.CanSpeed.Kbps1000:
                can = new ControllerAreaNetwork(settings.CanPort, ControllerAreaNetwork.Speed.Kbps1000);
                break;

            case CanAdapterSettings.CanSpeed.Kbps500:
                can = new ControllerAreaNetwork(settings.CanPort, ControllerAreaNetwork.Speed.Kbps500);
                break;

            case CanAdapterSettings.CanSpeed.Kbps250:
                can = new ControllerAreaNetwork(settings.CanPort, ControllerAreaNetwork.Speed.Kbps250);
                break;

            case CanAdapterSettings.CanSpeed.Kbps125:
                can = new ControllerAreaNetwork(settings.CanPort, ControllerAreaNetwork.Speed.Kbps125);
                break;

            default:
                can = new ControllerAreaNetwork(settings.CanPort, timings ?? GetTimings(settings));
                break;
            }
            can.ErrorReceived    += Can_ErrorReceived;
            can.MessageAvailable += Can_MessageAvailable;
        }
Beispiel #4
0
        /// <summary>Initializes the CAN bus.</summary>
        /// <param name="timings">The desired bus timings.</param>
        /// <param name="channel">The CAN channel to use.</param>
        public void Initialize(ControllerAreaNetwork.Timings timings, ControllerAreaNetwork.Channel channel)
        {
            this.can = new ControllerAreaNetwork(channel, timings);

            this.can.MessageAvailable += this.OnCanMessagesAvailable;
            this.can.ErrorReceived    += this.OnCanErrorReceived;

            this.can.Enabled = true;
        }
Beispiel #5
0
        private void Can_MessageAvailable(ControllerAreaNetwork sender, ControllerAreaNetwork.MessageAvailableEventArgs e)
        {
            var messages = sender.ReadMessages();

            foreach (var message in messages)
            {
                OnMessageReceived(new CanMessage(message));
            }
        }
Beispiel #6
0
        /// <summary>Constructs a new instance.</summary>
        /// <param name="socketNumber">The socket that this module is plugged in to.</param>
        public CANDW(int socketNumber)
        {
            Socket socket = Socket.GetSocket(socketNumber, true, this, null);

            socket.EnsureTypeIsSupported('C', this);

            this.syncRoot     = new object();
            this.running      = false;
            this.sent         = 0;
            this.can          = null;
            this.workerThread = null;
        }
Beispiel #7
0
        void m_busCan_MessageAvailable(ControllerAreaNetwork sender, ControllerAreaNetwork.MessageAvailableEventArgs e)
        {
            m_msgRecu[0] = sender.ReadMessage();
            Debug.Print("CanId reçu" + m_msgRecu[0].ArbitrationId.ToString());

            AutoResetEvent evtDONE    = (AutoResetEvent)m_tabWaitDONE[0];
            AutoResetEvent evtSTOP    = (AutoResetEvent)m_tabWaitDONE[1];
            AutoResetEvent evtBLOCKED = (AutoResetEvent)m_tabWaitDONE[2];
            AutoResetEvent evtACK     = (AutoResetEvent)m_waitACK[0];
            AutoResetEvent evtACKSTOP = (AutoResetEvent)m_waitACK[1];

            // Etude de la commande reçue.

            if ((m_msgRecu[0].ArbitrationId != (uint)IDcommande.WStopACK) && (m_msgRecu[0].ArbitrationId != (uint)IDcommande.WStopDONE))
            {
                if (m_msgRecu[0].ArbitrationId == m_id + 1)
                {
                    evtACK.Set();
                }
                else if (m_msgRecu[0].ArbitrationId == m_id + 2)
                {
                    evtDONE.Set();
                }
            }

            switch (m_msgRecu[0].ArbitrationId)
            {
            case (uint)IDcommande.WStopACK:
                evtACKSTOP.Set();
                break;

            case (uint)IDcommande.WStopDONE:
                evtSTOP.Set();
                break;

            case (uint)IDcommande.WBeBlocked:
                evtBLOCKED.Set();
                break;
            }
        }
Beispiel #8
0
 void m_busCan_ErrorReceived(ControllerAreaNetwork sender, ControllerAreaNetwork.ErrorReceivedEventArgs e)
 {
     throw new NotImplementedException();
 }
Beispiel #9
0
 private void OnCanErrorReceived(ControllerAreaNetwork sender, ControllerAreaNetwork.ErrorReceivedEventArgs e)
 {
     this.OnErrorReceived(this, new ErrorReceivedEventArgs(e.Error));
 }
Beispiel #10
0
 private void OnCanMessagesAvailable(ControllerAreaNetwork sender, ControllerAreaNetwork.MessageAvailableEventArgs e)
 {
     this.OnMessagesReceived(this, new MessagesReceivedEventArgs(this.can.ReadMessages()));
 }