Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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;
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }