<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>net.codecrete.usb</groupId>
    <artifactId>java-does-usb</artifactId>
    <version>1.2.1</version>

    <properties>
        <maven.compiler.source>23</maven.compiler.source>
        <maven.compiler.target>23</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <sonatype-central-publishing.version>0.8.0</sonatype-central-publishing.version>
    </properties>

    <packaging>jar</packaging>

    <name>Java Does USB</name>
    <url>https://github.com/manuelbl/JavaDoesUSB</url>
    <description>Access USB devices from Java without additional libraries</description>
    <licenses>
        <license>
            <name>MIT License</name>
            <url>https://opensource.org/licenses/MIT</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
    <developers>
        <developer>
            <name>Manuel Bleichenbacher</name>
            <email>manuel.bleichenbacher@gmail.com</email>
            <url>https://github.com/manuelbl</url>
        </developer>
    </developers>

    <scm>
        <connection>scm:git:https://github.com/manuelbl/JavaDoesUSB.git</connection>
        <developerConnection>scm:git:https://github.com/manuelbl/JavaDoesUSB.git</developerConnection>
        <url>https://github.com/manuelbl/JavaDoesUSB</url>
    </scm>

    <build>
        <plugins>
            <plugin>
                <groupId>net.codecrete.windows-api</groupId>
                <artifactId>windowsapi-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>windows-api</goal>
                        </goals>
                        <configuration>
                            <functions>
                                <function>CLSIDFromString</function>
                                <function>CreateFileW</function>
                                <function>CreateIoCompletionPort</function>
                                <function>CreateWindowExW</function>
                                <function>DefWindowProcW</function>
                                <function>DeviceIoControl</function>
                                <function>FormatMessageW</function>
                                <function>GetMessageW</function>
                                <function>GetModuleHandleW</function>
                                <function>GetQueuedCompletionStatus</function>
                                <function>LocalFree</function>
                                <function>RegCloseKey</function>
                                <function>RegQueryValueExW</function>
                                <function>RegisterClassExW</function>
                                <function>RegisterDeviceNotificationW</function>
                                <function>SetupDiCreateDeviceInfoList</function>
                                <function>SetupDiDeleteDeviceInterfaceData</function>
                                <function>SetupDiDestroyDeviceInfoList</function>
                                <function>SetupDiEnumDeviceInfo</function>
                                <function>SetupDiEnumDeviceInterfaces</function>
                                <function>SetupDiGetClassDevsW</function>
                                <function>SetupDiGetDeviceInterfaceDetailW</function>
                                <function>SetupDiGetDevicePropertyW</function>
                                <function>SetupDiOpenDevRegKey</function>
                                <function>SetupDiOpenDeviceInfoW</function>
                                <function>SetupDiOpenDeviceInterfaceW</function>
                                <function>WinUsb_AbortPipe</function>
                                <function>WinUsb_Free</function>
                                <function>WinUsb_GetAssociatedInterface</function>
                                <function>WinUsb_Initialize</function>
                                <function>WinUsb_ReadPipe</function>
                                <function>WinUsb_ResetPipe</function>
                                <function>WinUsb_SetCurrentAlternateSetting</function>
                                <function>WinUsb_SetPipePolicy</function>
                                <function>WinUsb_WritePipe</function>
                            </functions>
                            <structs>
                                <struct>DEV_BROADCAST_DEVICEINTERFACE_W</struct>
                                <struct>DEV_BROADCAST_HDR</struct>
                                <struct>USB_DESCRIPTOR_REQUEST</struct>
                                <struct>USB_NODE_CONNECTION_INFORMATION_EX</struct>
                            </structs>
                            <enumerations>
                                <enumeration>DEV_BROADCAST_HDR_DEVICE_TYPE</enumeration>
                                <enumeration>FORMAT_MESSAGE_OPTIONS</enumeration>
                                <enumeration>GENERIC_ACCESS_RIGHTS</enumeration>
                                <enumeration>REG_SAM_FLAGS</enumeration>
                                <enumeration>SETUP_DI_PROPERTY_CHANGE_SCOPE</enumeration>
                            </enumerations>
                            <constants>
                                <constant>DBT_DEVICEARRIVAL</constant>
                                <constant>DBT_DEVICEREMOVECOMPLETE</constant>
                                <constant>DEVPKEY_Device_Address</constant>
                                <constant>DEVPKEY_Device_Children</constant>
                                <constant>DEVPKEY_Device_HardwareIds</constant>
                                <constant>DEVPKEY_Device_InstanceId</constant>
                                <constant>DEVPKEY_Device_Parent</constant>
                                <constant>DEVPKEY_Device_Service</constant>
                                <constant>DIREG_DEV</constant>
                                <constant>GUID_DEVINTERFACE_USB_DEVICE</constant>
                                <constant>GUID_DEVINTERFACE_USB_HUB</constant>
                                <constant>HWND_MESSAGE</constant>
                                <constant>INFINITE</constant>
                                <constant>IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION</constant>
                                <constant>IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX</constant>
                                <constant>STATUS_UNSUCCESSFUL</constant>
                                <constant>USB_REQUEST_GET_DESCRIPTOR</constant>
                                <constant>WM_DEVICECHANGE</constant>
                            </constants>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.12.1</version>
                <configuration>
                    <release>23</release>
                    <source>23</source>
                    <target>23</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.2.5</version>
                <configuration>
                    <argLine>--enable-native-access=ALL-UNNAMED</argLine>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.6.3</version>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <release>23</release>
                    <javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
                    <excludePackageNames>net.codecrete.usb.linux.gen.*:net.codecrete.usb.macos.gen.*:windows.*:system</excludePackageNames>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-gpg-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.3.0</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.sonatype.central</groupId>
                <artifactId>central-publishing-maven-plugin</artifactId>
                <version>${sonatype-central-publishing.version}</version>
                <extensions>true</extensions>
                <configuration>
                    <publishingServerId>central</publishingServerId>
                    <autoPublish>true</autoPublish>
                </configuration>
            </plugin>
        </plugins>

        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>net.codecrete.windows-api</groupId>
                    <artifactId>windowsapi-maven-plugin</artifactId>
                    <version>0.8.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.jetbrains</groupId>
            <artifactId>annotations</artifactId>
            <version>24.1.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.10.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>3.25.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.tinylog</groupId>
            <artifactId>tinylog-impl</artifactId>
            <version>2.7.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.tinylog</groupId>
            <artifactId>jsl-tinylog</artifactId>
            <version>2.7.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>
