using System; using System.Collections.Generic; using System.Text; namespace DirectUSB.VirtualPackets { public class VariableRequestPacket : VirtualPacket { #region Constructors / Teardown public VariableRequestPacket(string variableName, List requestedAttributes, List specifiedAttributes) : base(0x000C) { int specifiedAttributesSize = 0; foreach (var attrib in specifiedAttributes) specifiedAttributesSize += attrib.Data.Length; int totalSize = 2 + variableName.Length + 6 + 2 + (requestedAttributes.Count * 2) + 2 + (specifiedAttributes.Count * 4) + (specifiedAttributesSize); var data = new byte[totalSize]; int index = 2; data[0] = (byte)((variableName.Length >> 8) & 0xFF); data[1] = (byte)(variableName.Length & 0xFF); for (int i = 0; i < variableName.Length; i++) data[index + i] = (byte)variableName[i]; index += variableName.Length; data[index + 0] = 0x00; data[index + 1] = 0x01; data[index + 2] = 0xFF; data[index + 3] = 0xFF; data[index + 4] = 0xFF; data[index + 5] = 0xFF; index += 6; data[index + 0] = (byte)(requestedAttributes.Count >> 8); data[index + 1] = (byte)(requestedAttributes.Count & 0xFF); index += 2; for (int i = 0; i < requestedAttributes.Count; i++) { data[index + 0] = (byte)((short)requestedAttributes[i] >> 8); data[index + 1] = (byte)((short)requestedAttributes[i] & 0xFF); index += 2; } data[index + 0] = (byte)(specifiedAttributes.Count >> 8); data[index + 1] = (byte)(specifiedAttributes.Count & 0xFF); index += 2; for (int i = 0; i < specifiedAttributes.Count; i++) { data[index + 0] = (byte)((short)specifiedAttributes[i].Type >> 8); data[index + 1] = (byte)((short)specifiedAttributes[i].Type & 0xFF); data[index + 2] = (byte)((short)specifiedAttributes[i].Data.Length >> 8); data[index + 3] = (byte)((short)specifiedAttributes[i].Data.Length & 0xFF); for (int j = 0; j < specifiedAttributes[i].Data.Length; j++) data[index + 4 + j] = specifiedAttributes[i].Data[j]; index += 4 + specifiedAttributes[i].Data.Length; } Data = data; } #endregion } }