public CCanAppli() { // Initialisation du CAN. UInt32 bitRate = (UInt32)((8 - 1) << 20) | (UInt32)((15 - 1) << 16) | (UInt32)((12 - 1) << 0); //Channel1 m_busCan = new CAN(CAN.Channel.Channel_1, bitRate, 100); // m_tabWaitDONE = new WaitHandle[] { new AutoResetEvent(false), new AutoResetEvent(false), new AutoResetEvent(false) }; m_waitACK = new AutoResetEvent(false); // Tableau de data reçu. m_dataRecus[0] = new CAN.Message(); // Initialisation de l'evenement permetant de detecter une erreur CAN. m_busCan.ErrorReceivedEvent += new CANErrorReceivedEventHandler(m_busCan_ErrorReceivedEvent); // Initialisation de l'evenement permetant de detecter une reponse. m_busCan.DataReceivedEvent += new CANDataReceivedEventHandler(m_busCan_DataReceivedEvent); mutex = new Object(); }
public bool ShouldAcceptLine(CAN.Message message) { for (int i = 0; i < ArbIds.Count; i++) { if (message.ArbId == ArbIds[i]) { return(true); } } return(false); }
public static CAN.Message ParseCandumpMessage(string messageString) { var ret = new CAN.Message(); // Parse id first var arbIdMatcher = Regex.Match(messageString, @" ([A-Fa-f0-9]{3})#"); // We could extract the arb id if (arbIdMatcher.Groups.Count == 2) { // extract the arb id var arbIdString = arbIdMatcher.Groups[1].Value; // parse the arb id var candidateArbId = uint.Parse(arbIdString, System.Globalization.NumberStyles.HexNumber); ret.ArbId = candidateArbId; } else { return(null); } // Now handle data (only 8 byte packets at the moment) var rawDataMatcher = Regex.Match(messageString, @"#([A-Fa-f0-9]*)"); // We could extract the raw data if (rawDataMatcher.Groups.Count == 2) { // extract the raw data var rawDataString = rawDataMatcher.Groups[1].Value; // parse the raw data var candidateRawData = Utils.StringToByteArrayFastest(rawDataString); ret.RawData = candidateRawData; } return(ret); }
public CandumpLine() { Interface = ""; Message = new CAN.Message(); }
public VehicleSpyLine() { Interface = ""; Message = new CAN.Message(); }
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 KvaserLine() { Interface = ""; Message = new CAN.Message(); }
public SavvyLine() { Interface = ""; Message = new CAN.Message(); }