private void ReadInfoRecord(RawNodeData log, BinaryReader reader) { InfoData infoData = new InfoData(); infoData.Time = CreateDate(reader.ReadUInt32()); infoData.TimeMs = reader.ReadUInt32(); infoData.BatteryVoltage = reader.ReadUInt16(); infoData.SampleDuration = reader.ReadUInt16(); log.Infos.Add(infoData); }
public async Task <RawNodeData> Load(IStorageFile file) { RawNodeData log = new RawNodeData(); log.LogStart = DateTime.UtcNow; using (Stream logStream = await file.OpenStreamForReadAsync()) { using (BinaryReader reader = new BinaryReader(logStream)) { ReadData(log, reader); } } return(log); }
private void ReadHeader(RawNodeData log, BinaryReader reader) { byte[] marker = reader.ReadBytes(2); if (marker[0] != 76) // 76 -> L { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "Ungültiger Marker ({0}).", marker[0])); } log.Verison = marker[1]; log.NodeId = reader.ReadByte(); uint seconds = reader.ReadUInt32(); DateTime startTime = CreateDate(seconds); log.LogStart = startTime; }
private void ReadCallRecordV1(RawNodeData log, BinaryReader reader) { RawCall rawCall = new RawCall(); rawCall.Duration = reader.ReadUInt32(); rawCall.StartTimeMs = reader.ReadUInt32(); rawCall.ClippedSamples = reader.ReadUInt16(); // Ignore Max Power reader.ReadUInt16(); rawCall.MissedSamples = reader.ReadUInt16(); rawCall.FftData = ReadUInt16Array(reader, 256); log.Calls.Add(rawCall); }
private void ReadCallRecordV2(RawNodeData log, BinaryReader reader) { RawCall rawCall = new RawCall(); rawCall.Duration = reader.ReadUInt32(); rawCall.StartTimeMs = reader.ReadUInt32(); rawCall.ClippedSamples = reader.ReadUInt16(); rawCall.MissedSamples = reader.ReadUInt16(); int powerDataLength = reader.ReadUInt16(); rawCall.PowerData = reader.ReadBytes(powerDataLength); rawCall.FftData = ReadUInt16Array(reader, 256); log.Calls.Add(rawCall); }
private void ReadData(RawNodeData log, BinaryReader reader) { RecordTypes recordType = GetNextRecordType(reader); if (recordType != RecordTypes.Header) { throw new InvalidOperationException("No Header found in Log File!"); } ReadHeader(log, reader); while (reader.BaseStream.Position < reader.BaseStream.Length) { recordType = GetNextRecordType(reader); switch (recordType) { case RecordTypes.None: break; case RecordTypes.Call: if (log.Verison == 1) { ReadCallRecordV1(log, reader); } else { ReadCallRecordV2(log, reader); } break; case RecordTypes.Info: ReadInfoRecord(log, reader); break; case RecordTypes.Header: break; default: throw new ArgumentOutOfRangeException(); } } }
public void Analyze(BatProject project, BatNode node, RawNodeData rawNodeData) { BatNodeData nodeData = node.NodeData; node.IsDirty = true; node.NodeId = rawNodeData.NodeId; node.LogStart = rawNodeData.LogStart; nodeData.Calls.Clear(); List <RawCall> rawCallsToMerge = new List <RawCall>(); BatCall currentCallData = new BatCall(); nodeData.Calls.Add(currentCallData); uint endCallTime = 0; foreach (RawCall call in rawNodeData.Calls) { if (endCallTime + 50 >= call.StartTimeMs || rawCallsToMerge.Count == 0) { rawCallsToMerge.Add(call); } else { nodeData.Calls.Add(Merge(rawCallsToMerge)); rawCallsToMerge.Clear(); } endCallTime = call.EndTimeMs; } if (rawCallsToMerge.Count > 0) { nodeData.Calls.Add(Merge(rawCallsToMerge)); } }
private async Task AnalyzeNode(BatProject project, BatNode node, IStorageFile rawDataFile) { RawNodeData rawData = await _batNodeLogReader.Load(rawDataFile); _logAnalyzer.Analyze(project, node, rawData); }