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)); }
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)); }
// 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)); } } }
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); }
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); }
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)); }