Использование USB из апплета в Linux (javax.usb) - PullRequest
0 голосов
/ 01 декабря 2011

Я пытаюсь получить доступ к USB-устройству из апплета в Linux. Я использовал пример кода из javax.usb для перечисления всех устройств. Код работает, когда я запускаю его из Eclipse (в средстве просмотра апплета), но показывает только один USB-концентратор и 0 устройств при использовании в браузере.

У меня был похожий результат с этим кодом до того, как я использовал его в апплете (1 концентратор, 0 устройств), когда разрешения на /dev/bus/usb/* не были установлены должным образом, поэтому я дал разрешения на чтение / запись всем (в /etc/udev/rules.d/) просто чтобы быть уверенным, но это все равно ничего не меняет в результатах. ( Редактировать : чтобы уточнить, приложение работало, но результаты апплета не изменились)

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE:="0666", GROUP:="usbusers"
SUBSYSTEM=="usb_device", MODE:="0666", GROUP:="usbusers"

Апплет подписан (и jsr80.jar, jsr80_ri.jar и jsr80_linux.jar также), есть .java.policy, предоставляющая все разрешения моему апплету в моей домашней папке, и все необходимые библиотеки найдены. Код выполняется, он просто не видит никаких USB-устройств (только при запуске из браузера, тот же код работает при запуске из Eclipse)

В html-файле:

<applet code="apples.TheApplet" archive="SignedApplet.jar,jsr80.jar,jsr80_linux.jar,jsr80_ri.jar" width=600 Height=400>

и код Java:

public class TheApplet extends Applet {
    public void init() {
        System.setSecurityManager(null);
        try {
            // Access the system USB services, and access to
            // the root
            // hub. Then traverse through the root hub.
            System.out.println( "********\nGoing to try to getUsbServices()");
            UsbServices services = UsbHostManager
                .getUsbServices();
            System.out.println( "********\nSuccess?");
            System.out.println( "********\nTry getRootUsbHub()");
            UsbHub rootHub = services.getRootUsbHub();
            System.out.println( "********\nSuccess?!");
            System.out.println( "********\nTry traverse(rootHub)");
            traverse(rootHub);
            System.out.println( "********\nSuccess.");
        } catch (Exception e1) {
            System.out.println( "********\n"
                    + e1.getMessage());
        }
    }

    public static void traverse(UsbDevice device) {
        if (device.isUsbHub()) {
            System.out.println( "********\nFound USB Hub, traversing...");
            // This is a USB Hub, traverse through the hub.
            List attachedDevices = ((UsbHub) device).getAttachedUsbDevices();
            System.out.println( "\t"+attachedDevices.size()+" attached devices");
            for (int i = 0; i < attachedDevices.size(); i++) {
                traverse((UsbDevice) attachedDevices.get(i));
            }
        } else {
            try {
                System.out.println( "********\n"
                        + "Device:\n\tManufacturerString:\t"
                        + device.getManufacturerString());
                device.getManufacturerString();
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println( "********\n" + e.getMessage());
            } 
        }
    }
}

У кого-нибудь есть идеи, как заставить это работать?

Редактировать Я добавляю пример вывода при запуске апплета из Eclipse:

...Scan3...
********
Hello!
********
Going to try to getUsbServices()
********
Success?
********
Try getRootUsbHub()
********
Success?!
********
Try traverse(rootHub)
********
Found USB Hub, traversing...
    5 attached devices
********
Found USB Hub, traversing...
    2 attached devices
********
Found USB Hub, traversing...
    1 attached devices
********
Device:
    ManufacturerString: HHP
********
Device:
    ManufacturerString: Qualcomm Incorporated
********
Found USB Hub, traversing...
    1 attached devices
********
Device:
    ManufacturerString: Logitech Inc.
********
Found USB Hub, traversing...
    0 attached devices
********
Found USB Hub, traversing...
    0 attached devices
********
Found USB Hub, traversing...
    0 attached devices
********
Success.

И тот же точный код, из браузера:

...Scan3...
********
Hello!
********
Going to try to getUsbServices()
********
Success?
********
Try getRootUsbHub()
********
Success?!
********
Try traverse(rootHub)
********
Found USB Hub, traversing...
    0 attached devices
********
Success.

Как видно, в браузере отображается 1 USB-концентратор и 0 устройств.

...