Пример #1
0
        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();
        }
Пример #2
0
 public bool ShouldAcceptLine(CAN.Message message)
 {
     for (int i = 0; i < ArbIds.Count; i++)
     {
         if (message.ArbId == ArbIds[i])
         {
             return(true);
         }
     }
     return(false);
 }
Пример #3
0
        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);
        }
Пример #4
0
 public CandumpLine()
 {
     Interface = "";
     Message   = new CAN.Message();
 }
Пример #5
0
 public VehicleSpyLine()
 {
     Interface = "";
     Message   = new CAN.Message();
 }
Пример #6
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;
        }
Пример #7
0
 public KvaserLine()
 {
     Interface = "";
     Message   = new CAN.Message();
 }
Пример #8
0
 public SavvyLine()
 {
     Interface = "";
     Message   = new CAN.Message();
 }