Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }