protected override async Task <AcquisitionActionResult> StartRecordCore(StartRecordParameter parameters, AcquisitionActionResult result) { result = await base.StartRecordCore(parameters, result).ConfigureAwait(false); if (!result.IsSuccessful) { return(result); } switch (this.AcquisitionMode) { case DistanceAcquisitionMode.Time: this.RegisterObserver( this.DataSource .Sample(this.SavingInterval) .Buffer(this.SavingInterval, 1) .Select(buffer => buffer.Count > 0 ? buffer[0] : new SpeedData { CurrentSpeed = -1, SpeedSource = SpeedActiveMode.None }) .Subscribe(data => AddEventJournalEntry(CreateEjxJournalEntry(data))), AcquisitionStep.StopRecord); break; case DistanceAcquisitionMode.Distance: this.RegisterObserver(this.DataSource .Where(data => data.CurrentDistance != null) .DistinctUntilChanged() // only for new values .Subscribe(data => AddEventJournalEntry(CreateEjxJournalEntry(data))), AcquisitionStep.StopRecord); break; default: throw new NotSupportedException(string.Format("Acquisition mode '{0}' is not supported.", this.AcquisitionMode)); } return(result); }
protected async override Task <AcquisitionActionResult> StartRecordCore(StartRecordParameter parameters, AcquisitionActionResult result) { result = await base.StartRecordCore(parameters, result).ConfigureAwait(false); if (!result.IsSuccessful) { return(result); } _roadEventSequence = 0; // we stop recording at UninitializeReocrd, not StopRecord // to allow operators to add comments before they validate the acquisition this.RegisterObserver( this.DataSource.Subscribe( data => { if (data.IsJournalised) { AddEventJournalEntry(CreateEjxJournalEntry(data)); } }), AcquisitionStep.UninitializeRecord); return(result); }
private async Task <AcquisitionActionResult> InternalStartRecord(StartRecordParameter parameters, AcquisitionActionResult result) { // delayed start if (this.DeviceDistanceFromStartTriggerPoint > 0 && this.IsDependencyOperational <IDistanceAgent>()) { await AgentBroker.Instance.ObserveAny <IDistanceAgent, DistanceData>("DataSource").Where(data => data.AbsoluteDistance >= this.DeviceDistanceFromStartTriggerPoint).Take(1).ToTask().ConfigureAwait(false); } result = await StartRecordCore(parameters, result).ConfigureAwait(false); return(result); }
protected async override Task <AcquisitionActionResult> StartRecordCore(StartRecordParameter parameters, AcquisitionActionResult result) { result = await base.StartRecordCore(parameters, result).ConfigureAwait(false); if (!result.IsSuccessful) { return(result); } this.RegisterObserver( this.DataSource .Where((data, i) => i % this.LogGap == 0) .Subscribe(data => LogGpsData(data)), AcquisitionStep.StopRecord); return(result); }
protected virtual Task <AcquisitionActionResult> StartRecordCore(StartRecordParameter parameters, AcquisitionActionResult result) { return(Task.FromResult(result)); }
public Task <AcquisitionActionResult> StartRecord(StartRecordParameter parameters) { return(MakeStateTransition(AcquisitionStep.StartRecord, this.Provider.StartRecord, parameters, InternalStartRecord)); }