public static byte[] GenerateFakeBytes(int time, ComponentMapping mapping) { byte[] startNoise = { 0xA, 0xB, 0xC, 0xFF, 0xFF }; byte[] startCode = { 0xFD, 0xFF, 0xFF, 0xFF, 0xFF }; byte[] endCode = { 0xFE, 0xFF, 0xFF, 0xFF, 0xFF }; byte[] endNoise = { 0x0D, 0x0E, 0x0F, 0xFF, 0xFF }; Random random = new Random(); byte[] timeValue = BitConverter.GetBytes(time); if (BitConverter.IsLittleEndian) { Array.Reverse(timeValue); } byte[] btime = new byte[1 + timeValue.Length]; btime[0] = 0xC9; Array.Copy(timeValue, 0, btime, 1, timeValue.Length); byte stateValue = (byte)random.Next(0, 9); byte[] bstate = { 0xC8, stateValue }; byte[] bauto = { 0xCA, (byte)random.Next(0, 1) }; List <byte[]> payload = new List <byte[]> { btime, bstate //bauto }; foreach (MeasuredComponent c in mapping.MeasuredComponents()) { byte[] sensor = new byte[1 + c.ByteSize]; byte[] value = new byte[0]; switch (c) { case PressureComponent pt: value = BitConverter.GetBytes((short)random.Next(400, 1900)); break; case TemperatureComponent tc: value = BitConverter.GetBytes((short)random.Next(short.MinValue, short.MaxValue)); break; case LoadComponent load: value = BitConverter.GetBytes((short)random.Next(0, 2124)); break; case LevelComponent tank: value = BitConverter.GetBytes((short)random.Next(0, (int)tank.Total + 1)); break; case ServoComponent servo: ushort randServoVal = (ushort)random.Next(0, ushort.MaxValue); value = BitConverter.GetBytes(randServoVal); break; case SimpleComponent simple: ushort randServoTargetVal = (ushort)random.Next(0, ushort.MaxValue); value = BitConverter.GetBytes(randServoTargetVal); break; case SolenoidComponent solenoid: value = BitConverter.GetBytes((short)random.Next(0, 2)); break; case VoltageComponent battery: value = BitConverter.GetBytes((ushort)random.Next(12, 14)); break; case StackHealthComponent stack: value = new [] { (byte)random.Next(0, 8) }; break; } if (BitConverter.IsLittleEndian) { Array.Reverse(value); } sensor[0] = c.BoardID; Array.Copy(value, 0, sensor, 1, value.Length); payload.Add(sensor); } ushort payloadLength = (ushort)payload.SelectMany((byte[] arg) => arg).ToArray().Length; byte[] header = new byte[4]; header[0] = 0; header[1] = 0; byte[] payloadLengthBytes = BitConverter.GetBytes(payloadLength); if (BitConverter.IsLittleEndian) { Array.Reverse(payloadLengthBytes); } Array.Copy(payloadLengthBytes, 0, header, 2, 2); payload.Insert(0, startNoise); payload.Insert(1, startCode); payload.Insert(2, header); payload.Add(endCode); payload.Add(endNoise); byte[] buffer = payload.SelectMany((byte[] arg) => arg).ToArray(); return(buffer); }