Exemplo n.º 1
0
 void m_busCan_ErrorReceivedEvent(CAN sender, CANErrorReceivedEventArgs args)
 {
     //erreur
     erreur = IDerreur.ErrorReceived;
 }
Exemplo n.º 2
0
        public int envoyer(uint id, byte[] data=null, int nbData=0)
        {
            erreur = IDerreur.OK;

            // Tableau d'envoie de commande.
            CAN.Message[] commande = new CAN.Message[1];
            commande[0] = new CAN.Message();

            // ### Confection de la commande. ###

            // --- Définition de l'identifient de la commande
            commande[0].ArbID = id;

            // --- Définition du nombre de data dans la commande (Non obligatoir, par defaut à 0).
            commande[0].DLC = nbData;

            // ---
            commande[0].IsEID = false;
            commande[0].IsRTR = false;

            // --- Ajout des data de la commande.
            if (nbData != 0)
                for (int i=0; i < nbData; i++)
                    commande[0].Data[i] = data[i];

            // ### Commande confectioné ###

            // ### Envoie de la commande ###

            // --- lock de la commande à envoyer
            System.Threading.Monitor.Enter(mutex);

            // --- Boucle de d'envoi jusqu'à 3x si pas de réponse ACK ou si mal envoyé.
            // int i=0;
            // do{
            int nbMessageSent=m_busCan.PostMessages(commande, 0, 1);

            if (nbMessageSent == 1)
            {
                // ### Commande envoyé ###

                // Attente ACK - ACK = True; NACK(timer) = False
                if (!m_waitACK.WaitOne(10000, false))
                {
                    // Temps d'attente ACK (j'ai bien reçus) dépassé.
                    erreur = IDerreur.timoutACK;
                }
            }
            else
            {
                // ### Echec de l'envoi ###

                // Erreur - Fonctionnement du CAN.
                erreur = IDerreur.FatalErreurCAN;
            }
            // i++;
            // }while((erreur == IDerreur.timerACK) && (i=2));

            // --- unlock de la commande
            System.Threading.Monitor.Exit(mutex);

            return (int)erreur;
        }
Exemplo n.º 3
0
        public int isDone(int timeOutDONE, byte[] data=null, int nbData=0)
        {
            // Attente DONE - DONE = 0; Stop = 1; Timer
            returnWaitAny = WaitHandle.WaitAny(m_tabWaitDONE, timeOutDONE, false);
            switch (returnWaitAny)
            {
                case 0:
                    erreur = IDerreur.OK;
                    if (data != null && m_dataRecus[0].DLC != 0)
                    {
                        for (int i = 0; i<m_dataRecus[0].DLC;  i++)
                            data[i] = m_dataRecus[0].Data[i];
                        nbData = m_dataRecus[0].DLC;
                    }
                    break;
                case 1:
                    erreur = IDerreur.STOP;
                    break;
                case 2:
                    erreur = IDerreur.BLOCAGE;
                    break;
                default:
                    erreur = IDerreur.timoutDONE;
                    break;
            }

            return (int)erreur;
        }