Pozyskanie PID/VID i friendly name

0

Witam

Moje nowe zadanie to "pogadanie" z urządzeniem przyłączonym do COM. Oczywiscie w Java i używam do tego java comm api.

Pogadanie działa ok ale chciałem zrobić konfiguratora, który umożliwiałby użytkownikowi wybór portu (COM 1/COM2) na którym ma takie a takie urządznei podłaczone.

Problem jest że o ile w przypadku gadania z urzadzeniami na USB (HID) jestem w stanie pozyskac jego PID/VID i friendly name (co użytkownikowi o wiele ułatwia pożądany wybór urzadzenia) o tyle COM/LPT przy uzyciu java comm chyba takiej opcji nie ma (do USB wykorzystuje winapi i JNA).

Czy ktoś podążał już tą drogą? Czy java comm naprawde nie ma takiej opcji i jedynym rozwiązaniem jest pogrzebanie poprzez JNA w winapi?

0

Polecam bibliotekę RXTXcomm, ma identyczne api i nie wymaga (w windowsach) pliku win32com.dll. Fragment mojego programu (wypełnianie ComboBoxa nazwami portów):

        Enumeration porty=CommPortIdentifier.getPortIdentifiers();
        while (porty.hasMoreElements())
        {
            CommPortIdentifier cpi=(CommPortIdentifier)porty.nextElement();
            if (cpi.getPortType()==CommPortIdentifier.PORT_SERIAL)
            {
                map.put(cpi.getName(),cpi);
                cb.addItem(cpi.getName());
            }
        }

P.S. Dość dużo gadałem z urządzeniem (drukarka Posnet) przez port szeregowy.

0

W sumie to niewiele da się skrócić, bo zostają nieszczęsne rzutowania.

Przykładowy kod:

        Enumeration enumeration = Collections.enumeration(Arrays.asList(1, 2, 3));
        for (Integer i : Collections.list((Enumeration<Integer>) enumeration)) {
            System.out.println(i);
        }

Ale i tak moim zdaniem czytelniejsze.

0

hmm...mój kod jest podobny...i podobnie niedoskonały. Sama informacja czy to jest COM 1 czy 2 czy LPT jest ok ale to za mało.

Potrzebuję wiedziec co tam jest na tym porcie - dokładnie by mi odpowiadało info jakie jest w panelu sterowania w kategorii COM/LPT.

RXTX mi nic nie pomoze - przerobiłem to i generalnie API-interfejs jest to samo co w java com tylko implementacja inna.

A ja potrzebuje PID/VID i nazwę:)

0

Ciężko mi powiedzieć skąd się bierze to co jest w panelu sterowania, ale na pewno nie bierze się z portu ani z urządzenia. Porty RS232 i LPT to dość proste magistrale, tam nie ma żadnych PIDów czy VIDów, po prostu wysyłasz i odbierasz odpowiednie bity/bajty danych.

0

Moźe i proste ale jakoś ten magiczny panel sterowania magicznie posiada te rzeczy które ja chce:)

0

No ale magiczny panel posiada tę informację zapewne z jakiegoś sterownika a to już pachnie mocno zabawą z JNA.

0

Ano właśnie - tak jak w pierwszym poscie napisałem - jeszcze skońćze z JNA. Powiem jeszcze że te urządzenie jednak się różni od zwykłego na COM. Jest to na USB czytnik - moze pracować w trybie VCP - virtual com port emulation. I wtedy mi z HID wskakuje na COM.

Ale czuję że faktycznie bedzie trzeba poszperac w jakieś dll winapi.

0

Nie wiem czy to nie będzie gorsze niż grzebanie w JNA, ale być może alternatywą jest sprawdzenie w rejestrze. Problem taki, że domyślnie Windows zapamiętuje w rejestrze raz wetknięte USB chyba na stałe.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.