Exemple #1
0
        public void OnNext(string value)
        {
            var parsedLine = DolphinMbpWriteLine.ParseString(value);

            if (parsedLine?.WriteSize == 8)
            {
                uint flagNum = parsedLine.MemoryAddr - FLAGS_BASE_ADDRESS;

                // If the memory address is less than the flags base address, flagNum will overflow
                // so we only need to check flagNum < FLAGS_SIZE
                if (flagNum >= FLAGS_SIZE)
                {
                    return;
                }

                byte oldFlag = cachedFlags[flagNum];
                cachedFlags[flagNum] = (byte)parsedLine.Value;

                if (oldFlag != parsedLine.Value)
                {
                    var eventArgs = new SoALFlagChangedEventArgs {
                        FlagNumber = (int)flagNum,
                        OldValue   = oldFlag,
                        NewValue   = parsedLine.Value
                    };
                    OnChange?.Invoke(this, eventArgs);
                }
            }
        }
        public void OnNext(string value)
        {
            var parsedLine = DolphinMbpWriteLine.ParseString(value);

            if (parsedLine?.WriteSize == 32)
            {
                uint chunkOffset = (parsedLine.MemoryAddr - BITS_BASE_ADDRESS) / 4;

                // If the memory address is less than the flags base address, flagNum will overflow
                // so we only need to check flagNum < FLAGS_SIZE
                if (chunkOffset >= BITS_CHUNKS_COUNT)
                {
                    return;
                }

                uint oldChunk = cachedBitChunks[chunkOffset];
                uint newChunk = parsedLine.Value;
                cachedBitChunks[chunkOffset] = newChunk;

                List <int> changedBits = BitUtils.GetListOfBits((int)(oldChunk ^ newChunk));

                var eventArgs = new SoALBitChangedEventArgs
                {
                    ChunkNumber = (int)chunkOffset
                };

                foreach (int b in changedBits)
                {
                    eventArgs.ChunkBit   = b;
                    eventArgs.IsBeingSet = (newChunk & (1 << b)) != 0;

                    OnChange?.Invoke(this, eventArgs);
                }
            }
        }