public USBConfiguration WithInterface(USBInterface iface)
        {
            if (interfaces.Count == byte.MaxValue)
            {
                throw new ConstructionException("The maximal number of interfaces reached");
            }

            interfaces.Add(iface);
            return(this);
        }
        public USBConfiguration WithInterface(USBClassCode classCode          = USBClassCode.NotSpecified,
                                              byte subClassCode               = 0,
                                              byte protocol                   = 0,
                                              string description              = null,
                                              Action <USBInterface> configure = null)
        {
            var newInterface = new USBInterface(device, (byte)interfaces.Count, classCode, subClassCode, protocol, description);

            configure?.Invoke(newInterface);
            return(WithInterface(newInterface));
        }