using System; using System.Collections.Generic; using System.Text; namespace DirectUSB.VirtualPackets { public class VirtualPacket { #region Declarations private int _type; private byte[] _data; #endregion #region Constructors / Teardown public VirtualPacket(int type) { _type = type; } public VirtualPacket(int type, byte[] data) { _type = type; _data = data; } #endregion #region Public Properties public int Type { get { return _type; } } public byte[] Data { get { return _data; } internal set { _data = value; } } #endregion #region Public Methods public List RawPackets(int packetSize) { var ret = new List(); var totalData = new byte[6 + _data.Length]; totalData[0] = (byte)((_data.Length & 0xFF000000) >> 24); totalData[1] = (byte)((_data.Length & 0x00FF0000) >> 16); totalData[2] = (byte)((_data.Length & 0x0000FF00) >> 8); totalData[3] = (byte)((_data.Length & 0x000000FF) >> 0); totalData[4] = (byte)(_type >> 8); totalData[5] = (byte)(_type & 0xFF); for (int i = 0; i < _data.Length; i++) totalData[i + 6] = _data[i]; var rawData = new byte[packetSize]; int count = 0; int start = 0; int index = 0; while (count < totalData.Length) { rawData[index] = totalData[count]; index++; count++; if (index >= packetSize) { //Time to split off into a new raw packet byte packetType; if (count < totalData.Length) packetType = 0x03; else packetType = 0x04; ret.Add(new RawPackets.RawPacket(packetType, rawData)); //Reset stuff start = count; index = 0; } } if (index > 0 && index < packetSize) { var finalData = new byte[index]; for (int i = 0; i < index; i++) finalData[i] = totalData[start+i]; ret.Add(new RawPackets.RawPacket(0x04, finalData)); } return ret; } #endregion } }