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)); }
public CANSpyViewModel(int line) { if (line == 1) { Title = "CAN Line 1"; } else { Title = "CAN Line 2"; } bitTimings = new List <int>(); bitTimings.Add(50000); bitTimings.Add(100000); bitTimings.Add(125000); bitTimings.Add(200000); bitTimings.Add(250000); bitTimings.Add(400000); bitTimings.Add(500000); bitTimings.Add(1000000); selectedBitTiming = 50000; samplingPoints = new List <double>(); samplingPoints.Add(75.00); samplingPoints.Add(87.50); selectedSamplingPoint = 75.00; frameFormats = new List <string>(); FrameFormats.Add(frameFormat11Bit); FrameFormats.Add(frameFormat29Bit); selectedFrameFormat = frameFormat11Bit; enableErrorReception = true; applyMask = false; lineNumber = line; isSpying = false; requestBufferTimer = new Timer(5000); requestBufferTimer.Elapsed += UpdateMonitorBuffer; requestBufferTimer.AutoReset = true; requestBufferTimer.Enabled = false; MonitorBuffer = new List <CANSpyMessage>(); StartCommand = new Command(async() => { try { var param = new CANSpyParameters(); param.BitTiming = SelectedBitTiming; //param.SamplingPoint = SelectedSamplingPoint; if (selectedFrameFormat == frameFormat11Bit) { param.FrameFormat = CANSpyParameters.SimpleFrameFormat; } else { param.FrameFormat = CANSpyParameters.LongFrameFormat; } param.ErrorReception = EnableErrorReception; param.ApplyMask = ApplyMask; param.Mask = Convert.ToUInt32(Mask, 16); param.ID = Convert.ToUInt32(ID, 16); if (lineNumber == 1) { await AnalyzerDevice.SetCANParametersAsync(Services.SpyType.CANSpyOne, param); await AnalyzerDevice.StartSpyAsync(Services.SpyType.CANSpyOne); } else if (lineNumber == 2) { await AnalyzerDevice.SetCANParametersAsync(Services.SpyType.CANSpyTwo, param); await AnalyzerDevice.StartSpyAsync(Services.SpyType.CANSpyTwo); } Device.BeginInvokeOnMainThread(() => { IsSpying = true; }); requestBufferTimer.Enabled = true; } catch (Exception ex) { MessagingCenter.Send <CANSpyViewModel, string>(this, "StartError", ex.Message); } }); StopCommand = new Command(async() => { try { if (lineNumber == 1) { await AnalyzerDevice.StopSpyAsync(Services.SpyType.CANSpyOne); } else if (lineNumber == 2) { await AnalyzerDevice.StopSpyAsync(Services.SpyType.CANSpyTwo); } Device.BeginInvokeOnMainThread(() => { IsSpying = false; }); requestBufferTimer.Enabled = false; } catch (Exception ex) { MessagingCenter.Send <CANSpyViewModel, string>(this, "StopError", ex.Message); } }); }