Beispiel #1
0
        private async Task <bool> SendFrame(byte[] frame)
        {
            if (!_isConnected)
            {
                return(await Task.FromResult(false));
            }
            else
            {
                if (_analyzerChar != null)
                {
                    _responseFrame = null;
                    byte[] frameToSend = new byte[8 + frame.Length];

                    // Imposto l'header
                    Encoding.ASCII.GetBytes(_frameMarker).CopyTo(frameToSend, 0);

                    // Imposto il frame da inviare
                    frame.CopyTo(frameToSend, 4);

                    // Calcolo e imposto il crc
                    UInt32 crc = Crc32_STM.CalculateFromBuffer(frameToSend, frameToSend.Length - 4);
                    ArrConverter.SetBufferFromUInt32(crc, frameToSend, frameToSend.Length - 4);

                    await _analyzerChar.WriteAsync(frameToSend);
                }
                else
                {
                    return(await Task.FromResult(false));
                }
            }
            return(await Task.FromResult(true));
        }
Beispiel #2
0
        private async Task <bool> SendCommandWithBuffer(UInt32 command, byte[] buff)
        {
            if (!_isConnected)
            {
                return(await Task.FromResult(false));
            }
            else
            {
                if (_analyzerChar != null)
                {
                    byte[] frame = new byte[4 + buff.Length];

                    // Copio il codice del comando
                    ArrConverter.SetBufferFromUInt32(command, frame, 0);
                    buff.CopyTo(frame, 4);

                    await SendFrame(frame);
                }
                else
                {
                    return(await Task.FromResult(false));
                }
            }
            return(await Task.FromResult(true));
        }
Beispiel #3
0
        // Invia il frame di start della comunicazione
        // indicando la lunghezza del frame successivo
        // compresi la dimensione dell'header e del CRC finale
        private async Task <bool> SendReceiveInitCommand(UInt32 nextLength)
        {
            if (!_isConnected)
            {
                return(await Task.FromResult(false));
            }
            else
            {
                try
                {
                    if (_analyzerChar != null)
                    {
                        byte[] frame = new byte[4];

                        // Copio la lunghezza del messaggio da inviare successivamente
                        ArrConverter.SetBufferFromUInt32(nextLength, frame, 0);

                        await SendFrame(frame);
                        await ReceiveFrame();

                        return(await Task.FromResult(true));
                    }
                    else
                    {
                        return(await Task.FromResult(false));
                    }
                }
                catch (Exception e)
                {
                    return(await Task.FromResult(false));
                }
            }
        }
Beispiel #4
0
        public async Task <List <int> > GetSpyFileSizes(SpyFileType type)
        {
            var fileSizes = new List <int>();

            UInt32 getNumCommand;
            UInt32 getFileSizeCommand;

            if (type == SpyFileType.FileTypeCAN1)
            {
                getNumCommand      = 0x00000003;
                getFileSizeCommand = 0x00000009;
            }
            else if (type == SpyFileType.FileTypeCAN2)
            {
                getNumCommand      = 0x00000004;
                getFileSizeCommand = 0x0000000A;
            }
            else if (type == SpyFileType.FileTypeK)
            {
                getNumCommand      = 0x00000005;
                getFileSizeCommand = 0x0000000B;
            }
            else
            {
                throw new Exception("FileType not implemented!");
            }

            var getNumResponse = await SendReceiveCommand(getNumCommand);

            var filesNum = getNumResponse.responseData;

            for (UInt32 fileIndex = 0; fileIndex < filesNum; fileIndex++)
            {
                var fileIndexBuf = new byte[4];
                ArrConverter.SetBufferFromUInt32(fileIndex, fileIndexBuf, 0);

                var getFileSizeResponse = await SendReceiveCommand(getFileSizeCommand, fileIndexBuf);

                UInt32 fileSize = getFileSizeResponse.responseData;
                fileSizes.Add((int)fileSize);
            }

            return(fileSizes);
        }
Beispiel #5
0
        public async Task <List <string> > GetSpyFileNames(SpyFileType type)
        {
            var fileNames = new List <string>();

            UInt32 getNumCommand;
            UInt32 getFileNameCommand;

            if (type == SpyFileType.FileTypeCAN1)
            {
                getNumCommand      = 0x00000003;
                getFileNameCommand = 0x00000006;
            }
            else if (type == SpyFileType.FileTypeCAN2)
            {
                getNumCommand      = 0x00000004;
                getFileNameCommand = 0x00000007;
            }
            else if (type == SpyFileType.FileTypeK)
            {
                getNumCommand      = 0x00000005;
                getFileNameCommand = 0x00000008;
            }
            else
            {
                throw new Exception("FileType not implemented!");
            }

            var getNumResponse = await SendReceiveCommand(getNumCommand);

            var filesNum = getNumResponse.responseData;

            for (UInt32 fileIndex = 0; fileIndex < filesNum; fileIndex++)
            {
                var fileIndexBuf = new byte[4];
                ArrConverter.SetBufferFromUInt32(fileIndex, fileIndexBuf, 0);

                var getFileNameResponse = await SendReceiveCommand(getFileNameCommand, fileIndexBuf);

                var fileName = Encoding.ASCII.GetString(getFileNameResponse.responseBuff);
                fileNames.Add(fileName);
            }

            return(fileNames);
        }
Beispiel #6
0
        public async Task <bool> SetCANParametersAsync(SpyType type, CANSpyParameters param)
        {
            const UInt32 setParamCAN1Spy = 0x00010003;
            const UInt32 setParamCAN2Spy = 0x00020003;

            byte[] paramData = new byte[CANSpyParameters.ParamSize];
            ArrConverter.SetBufferFromUInt32((UInt32)param.BitTiming, paramData, 0);
            ArrConverter.SetBufferFromUInt32((UInt32)param.FrameFormat, paramData, 4);

            if (param.ErrorReception)
            {
                ArrConverter.SetBufferFromUInt32((UInt32)1, paramData, 8);
            }
            else
            {
                ArrConverter.SetBufferFromUInt32((UInt32)0, paramData, 8);
            }

            if (param.ApplyMask)
            {
                ArrConverter.SetBufferFromUInt32((UInt32)1, paramData, 12);
            }
            else
            {
                ArrConverter.SetBufferFromUInt32((UInt32)0, paramData, 12);
            }

            ArrConverter.SetBufferFromUInt32((UInt32)param.Mask, paramData, 16);
            ArrConverter.SetBufferFromUInt32((UInt32)param.ID, paramData, 20);

            if (type == SpyType.CANSpyOne)
            {
                await SendReceiveCommand(setParamCAN1Spy, paramData);
            }
            else if (type == SpyType.CANSpyTwo)
            {
                await SendReceiveCommand(setParamCAN2Spy, paramData);
            }

            return(await Task.FromResult(true));
        }