protected override ushort Read(Stm32Command command, ushort data, bool dataAvailable) { if (_disposed) { throw new ObjectDisposedException(Strings.Message_3); } Span <byte> writeBuffer; Span <byte> readBuffer = new byte[2]; if (dataAvailable) { writeBuffer = new byte[3]; Unsafe.As <byte, Stm32Command>(ref writeBuffer[0]) = command; Unsafe.As <byte, ushort>(ref writeBuffer[1]) = data; } else { writeBuffer = new byte[1]; Unsafe.As <byte, Stm32Command>(ref writeBuffer[0]) = command; } _gpioExpander.WriteRead(writeBuffer, readBuffer); return(MemoryMarshal.Read <ushort>(readBuffer)); }
protected override void Write(Stm32Command command, ushort data, bool dataAvailable) { if (_disposed) { throw new ObjectDisposedException(Strings.Message_3); } Span <byte> writeBuffer; if (dataAvailable) { writeBuffer = new byte[3]; Unsafe.As <byte, Stm32Command>(ref writeBuffer[0]) = command; Unsafe.As <byte, ushort>(ref writeBuffer[1]) = data; } else { writeBuffer = new byte[1]; Unsafe.As <byte, Stm32Command>(ref writeBuffer[0]) = command; } _gpioExpander.Write(writeBuffer); }
protected override ushort Read(Stm32Command command, ushort data, bool dataAvailable) { if (dataAvailable) { _gpioExpander.WriteAddressWord(Unsafe.As <Stm32Command, byte>(ref command), data); return(_gpioExpander.ReadAddressWord(Unsafe.As <Stm32Command, byte>(ref command))); } return(_gpioExpander.ReadAddressWord(Unsafe.As <Stm32Command, byte>(ref command))); }
protected override void Write(Stm32Command command, ushort data, bool dataAvailable) { if (dataAvailable) { _gpioExpander.WriteAddressWord(Unsafe.As <Stm32Command, byte>(ref command), data); } else { _gpioExpander.Write(Unsafe.As <Stm32Command, byte>(ref command)); } }