Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 public void CreateDefaultState()
 {
     Axes    = new Axes();
     Buttons = new Buttons();
     DPads   = new DPads();
 }