All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.codecrete.usb.common.Configuration Maven / Gradle / Ivy

//
// Java Does USB
// Copyright (c) 2022 Manuel Bleichenbacher
// Licensed under MIT License
// https://opensource.org/licenses/MIT
//

package net.codecrete.usb.common;

import net.codecrete.usb.UsbInterface;

import java.util.ArrayList;
import java.util.List;

/**
 * Describes a device configuration.
 */
public class Configuration {
    private final List functionList;
    private final List interfaceList;
    private final int configurationValue;
    private final int configurationAttributes;
    private final int configurationMaxPower;

    public Configuration(int configValue, int attributes, int maxPower) {
        configurationValue = configValue;
        configurationAttributes = attributes;
        configurationMaxPower = maxPower;
        functionList = new ArrayList<>();
        interfaceList = new ArrayList<>();
    }

    public int configValue() {
        return configurationValue;
    }

    public int attributes() {
        return configurationAttributes;
    }

    public int maxPower() {
        return configurationMaxPower;
    }

    public List interfaces() {
        return interfaceList;
    }

    public List functions() {
        return functionList;
    }

    public void addInterface(UsbInterface intf) {
        interfaceList.add(intf);
    }

    public UsbInterfaceImpl findInterfaceByNumber(int number) {
        return (UsbInterfaceImpl) interfaceList.stream().filter(intf -> intf.getNumber() == number).findFirst().orElse(null);
    }

    public void addFunction(CompositeFunction function) {
        functionList.add(function);
    }

    public CompositeFunction findFunction(int interfaceNumber) {
        return functionList.stream().filter(f -> interfaceNumber >= f.firstInterfaceNumber() && interfaceNumber < f.firstInterfaceNumber() + f.numInterfaces()).findFirst().orElse(null);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy