private static byte[] CreateSetMessage(int tuner, String name, String value, uint?lockkey) { var byteName = Encoding.UTF8.GetBytes(String.Format("/tuner{0}/{1}\0", tuner, name)); var byteValue = Encoding.UTF8.GetBytes(String.Format("{0}\0", value)); int messageLength = byteName.Length + byteValue.Length + 12; if (lockkey.HasValue) { messageLength += 6; } var message = new byte[messageLength]; int offset = InsertHeaderAndName(byteName, messageLength, message); bool flipEndian = BitConverter.IsLittleEndian; message[offset] = GetSetValue; offset++; message[offset] = Convert.ToByte(byteValue.Length); offset++; Buffer.BlockCopy(byteValue, 0, message, offset, byteValue.Length); offset += byteValue.Length; if (lockkey.HasValue) { message[offset] = GetSetLockkey; offset++; message[offset] = (byte)4; offset++; var lockKeyBytes = BitConverter.GetBytes(lockkey.Value); if (flipEndian) { Array.Reverse(lockKeyBytes); } Buffer.BlockCopy(lockKeyBytes, 0, message, offset, 4); offset += 4; } // calculate crc and insert at the end of the message var crcBytes = BitConverter.GetBytes(HdHomerunCrc.GetCrc32(message, messageLength - 4)); if (flipEndian) { Array.Reverse(crcBytes); } Buffer.BlockCopy(crcBytes, 0, message, offset, 4); return(message); }
private static byte[] CreateGetMessage(int tuner, string name) { var byteName = Encoding.UTF8.GetBytes(String.Format("/tuner{0}/{1}\0", tuner, name)); int messageLength = byteName.Length + 10; // 4 bytes for header + 4 bytes for crc + 2 bytes for tag name and length var message = new byte[messageLength]; int offset = InsertHeaderAndName(byteName, messageLength, message); bool flipEndian = BitConverter.IsLittleEndian; // calculate crc and insert at the end of the message var crcBytes = BitConverter.GetBytes(HdHomerunCrc.GetCrc32(message, messageLength - 4)); if (flipEndian) { Array.Reverse(crcBytes); } Buffer.BlockCopy(crcBytes, 0, message, offset, 4); return(message); }