public byte[] GetStateUpdateMessage() { byte[] message; MessageHeader msgHeader = new MessageHeader() { Type = MessageHeader.MessageType.Input }; MemoryStream stream = new MemoryStream(); using (BinaryWriter writer = new BinaryWriter(stream)) { writer.Write((byte)msgHeader.Type); writer.Write(msgHeader.Length); ReadOnlySpan <ushort> axes = Axes.GetUpdatedValues(); if (axes != null) { writer.Write((byte)UsageId.Axis); writer.Write(Axes.ArrayMap); writer.Write(MemoryMarshal.Cast <ushort, byte>(axes)); } ReadOnlySpan <ushort> buttons = Buttons.GetUpdatedValues(); if (buttons != null) { writer.Write((byte)UsageId.Button); writer.Write(Buttons.ArrayMap); writer.Write(MemoryMarshal.Cast <ushort, byte>(buttons)); } ReadOnlySpan <byte> dpads = DPads.GetUpdatedValues(); if (dpads != null) { writer.Write((byte)UsageId.DPad); writer.Write(DPads.ArrayMap); writer.Write(dpads); } message = stream.ToArray(); } if (message.Length > MessageLengthMax) { throw new ArgumentException(Resources.ErrorMessageLengthMax); } else if (message.Length < 3) { return(null); } // We change the MessageHeader.Length to the MessageLength; message[1] = (byte)(message.Length - MessageHeaderLength); CreateDefaultState(); return(message); }
public void CreateDefaultState() { Axes = new Axes(); Buttons = new Buttons(); DPads = new DPads(); }