/* void m_busCan_MessagesReceived(CANDW sender, CANDW.MessagesReceivedEventArgs e) // bus Can va receptionner le message * { * int count = e.MessageCount; * * for(int i=0;i<count;i++) * m_msgRecu[i] = e.Messages[i]; * * 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çus. * for (int i = 0; i < count; i++) * { * if ((m_msgRecu[i].ArbitrationId != (uint)IDcommande.WStopACK) && (m_msgRecu[i].ArbitrationId != (uint)IDcommande.WStopDONE)) * if (m_msgRecu[i].ArbitrationId == m_id + 1) * evtACK.Set(); * else if (m_msgRecu[i].ArbitrationId == m_id + 2) * evtDONE.Set(); * * switch (m_msgRecu[i].ArbitrationId) * { * case (uint)IDcommande.WStopACK: * evtACKSTOP.Set(); * break; * case (uint)IDcommande.WStopDONE: * evtSTOP.Set(); * break; * case (uint)IDcommande.WBeBlocked: * evtBLOCKED.Set(); * break; * } * } * * }*/ public idErreur isDone(int timeOutDONE, byte[] data = null, int nbData = 0) { idErreur retour = idErreur.OK; // Attente DONE - DONE = 0; Stop = 1; Timer returnWaitAny = WaitHandle.WaitAny(m_tabWaitDONE, timeOutDONE, false); switch (returnWaitAny) { case 0: retour = idErreur.OK; if (m_msgRecu[0].Length != 0) { for (int i = 0; i < m_msgRecu[0].Length; i++) { data[i] = m_msgRecu[0].Data[i]; } nbData = m_msgRecu[0].Length; } break; case 1: retour = idErreur.STOPPED; break; case 2: retour = idErreur.BLOCKED; break; default: retour = idErreur.timoutDONE; break; } return(retour); }
public idErreur envoyer(uint id, byte[] data = null, int nbData = 0) { idErreur retour = idErreur.FatalErreurCAN; m_id = id; // Tableau d'envoie de commande. ControllerAreaNetwork.Message[] commande; commande = new ControllerAreaNetwork.Message[1]; commande[0] = new ControllerAreaNetwork.Message(); //construction de la trame commande[0].ArbitrationId = id; commande[0].Length = nbData; commande[0].IsExtendedId = false; commande[0].IsRemoteTransmissionRequest = false; if (nbData != 0) { for (int i = 0; i < nbData; i++) { commande[0].Data[i] = data[i]; } } // --- lock de la commande à envoyer //System.Threading.Monitor.Enter(mutex); m_busCan.SendMessages(commande); Debug.Print("CanId Envoye" + commande[0].ArbitrationId.ToString()); // ### Commande envoyé ### returnWaitAny = WaitHandle.WaitAny(m_waitACK, 500, false); switch (returnWaitAny) { case 0: retour = idErreur.OK; break; case 1: retour = idErreur.ACKSTOP; break; default: retour = idErreur.timoutACK; break; } // --- unlock de la commande //System.Threading.Monitor.Exit(mutex); return(retour); }