void m_busCan_ErrorReceivedEvent(CAN sender, CANErrorReceivedEventArgs args) { //erreur erreur = IDerreur.ErrorReceived; }
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; }
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; }