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)); }
public void Attach(IDebuggable target) { _dataContext = new RegistersViewModel(target, this); _dataContext.Attach(); Bind(); _binding.DataContext = _dataContext; }
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); }
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)); }