public static LogConfigCommandResponse Parse(byte[] data)
        {
            var result = new LogConfigCommandResponse();

            result.CheckResponse(data);
            var status = data[8];

            result.IsError   = status != 0;
            result.Operation = (LogConfigOperation)data[4];
            result.Scope     = data[12];
            var numBits    = data[16] + (data[17] << 8);
            var maskLength = (numBits + 7) / 8;

            if (data.Length < (maskLength + 16))
            {
                throw new QcdmManagerException(Strings.QcdmInvalidResponseCommand);
            }

            var enabledLogs = new List <LogId>();

            for (var i = 0; i < numBits; ++i)
            {
                if (BitsUtils.GetBitAsBool(data, 20, i))
                {
                    var v = i + 0x1000;
                    enabledLogs.Add((LogId)v);
                }
            }
            result.EnabledLogs = enabledLogs.ToArray();
            return(result);
        }
        private static void ParseSetMask(LogConfigCommandResponse result, byte[] data)
        {
            result.Scope = data[12];
            var numBits    = data[16] + (data[17] << 8);
            var maskLength = (numBits + 7) / 8;

            if (data.Length < maskLength + 16)
            {
                //throw new QcdmManagerException(Strings.QcdmInvalidResponseCommand);
                return;
            }

            var scopeDelta  = result.Scope * 0x1000;
            var enabledLogs = new List <LogId>();

            for (var i = 0; i < numBits; ++i)
            {
                if (BitsUtils.GetBitAsBool(data, 20, i))
                {
                    var v = i + scopeDelta;
                    enabledLogs.Add((LogId)v);
                }
            }

            result.LogIds = enabledLogs.ToArray();
        }
        public static EventMaskSetCommandResponse Parse(byte[] data)
        {
            var result = new EventMaskSetCommandResponse();

            result.CheckResponse(data);
            var status = data[1];

            result.IsError = status != 0;
            if (!result.IsError)
            {
                var numBits    = data[4] + (data[5] << 8);
                var maskLength = (numBits + 7) / 8;
                if (data.Length < maskLength + 6)
                {
                    throw new QcdmManagerException(Strings.QcdmInvalidResponseCommand);
                }

                var enabledEvents = new List <EventId>();
                for (var i = 0; i < numBits; ++i)
                {
                    if (BitsUtils.GetBitAsBool(data, 6, i))
                    {
                        enabledEvents.Add((EventId)i);
                    }
                }

                result.EnabledEvents = enabledEvents.ToArray();
            }

            return(result);
        }