Ejemplo n.º 1
0
        protected FunctionServiceResult ProcessReadRegisters(Sample[] samples, PacketType?packetType)
        {
            //Get the raw bytes
            var messageBytes = samples
                               .Select(s => s.Value)
                               .ToArray();

            //We'll assume that this is a response
            byte numberOfBytes = messageBytes[2];

            //Get the number of registers
            var numberOfRegisters = numberOfBytes / 2;

            //Get the registers themselves
            var registers = GetRegisters(messageBytes, numberOfRegisters, 3);

            //Create the visual factory
            Func <Visual> visualFactory = () =>
            {
                var viewModel = new RegistersViewModel(registers);

                return(new RegistersView()
                {
                    DataContext = viewModel
                });
            };

            var summary = $"{numberOfRegisters} registers.";

            return(new FunctionServiceResult(summary, visualFactory, packetType));
        }
Ejemplo n.º 2
0
 public void Attach(IDebuggable target)
 {
     _dataContext = new RegistersViewModel(target, this);
     _dataContext.Attach();
     Bind();
     _binding.DataContext = _dataContext;
 }
Ejemplo n.º 3
0
        public PacketBase Generate(RegistersViewModel registersViewModel)
        {
            var registersPacket = new RegistersPacket
            {
                ProgramCounter = registersViewModel.ProgramCounter,
                StackPointer   = registersViewModel.StackPointer,
                Accumulator    = registersViewModel.Accumulator,
                XIndex         = registersViewModel.IndexRegisterX,
                YIndex         = registersViewModel.IndexRegisterY,
                Flags          = registersViewModel.Flags
            };

            registersPacket.RecalculateChecksum();

            return(registersPacket);
        }
Ejemplo n.º 4
0
        private FunctionServiceResult ProcessWriteRegisters(Sample[] samples)
        {
            // http://www.simplymodbus.ca/FC16.htm

            //Get the raw bytes
            var messageBytes = samples
                               .Select(s => s.Value)
                               .ToArray();

            var dataAddress       = EndianBitConverter.Big.ToUInt16(messageBytes, 2);
            var numberOfRegisters = EndianBitConverter.Big.ToUInt16(messageBytes, 4);

            var bytesToFollow = messageBytes[6];

            if (bytesToFollow != numberOfRegisters * 2)
            {
                return
                    (new FunctionServiceResult(
                         $"The bytes to follow {bytesToFollow} does not match the number of registers {numberOfRegisters}."));
            }

            var registers = GetRegisters(messageBytes, numberOfRegisters, 7);

            Func <Visual> visualFactory = () =>
            {
                var viewModel = new RegistersViewModel(registers.ToArray(), dataAddress);

                return(new RegistersView()
                {
                    DataContext = viewModel
                });
            };

            var summary = $"Write {numberOfRegisters} registers starting at register {dataAddress}";

            return(new FunctionServiceResult(summary, visualFactory, PacketType.Request));
        }