Newsgroup: it.comp.java
Titolo: Java USB

Salve, conoscete qualche libreria per poter comunicare con device USB in 
Java sotto il sistema operativo windows ?
grazie...

 grazie...
Ci sarebbero le Java Comm APi, ma Sun non le supporta piu' per windows, 
quindi utilizzerei le api rxtx 
www.rxtx.org
,  un device USB in genere 
viene visto dal so come una porta com.
-- 
Dr. Ugo Gagliardelli, Modena, Italy
Spaccamaroni andate a cagare/Spammers not welcome


sono interessato anche se ci fosse qualche progetto open source al quale 
partecipare...se qualcuno ne conosce...

 Java sotto il sistema operativo windows ?
Cio' che esiste e' tutto basato sul porting di libusb per windows.
Funzionano anche in Linux e Mac (perlomeno libusb4j)
http://kenai.com/projects/libusb4j
Basato su JNA, sono l'owner del progetto su kenai ma in realta' non ho 
fatto altro che prendere un progetto morto col permesso dell'autore, 
fixare un paio di bug e metterlo su kenai.
Non lo sto sviluppando, metto a posto solo i bug che mi segnalano e se mi 
mandano una patch....c'e' da dire che non e' che ci sia molto da fare 
anche perche' il porting di libusb e' abbastanza statico.
http://libusbjava.sourceforge.net/wp/
Questo invece usa JNI...in un modo abbastanza curioso, istanzia e popola 
gli oggetti Java da C....codice francamente illeggibile ma funziona.


grazie per i link li guaderò al + presto

On 11/12/2010 11:29 PM, hybris wrote:

Grazie per i link.
Quello che devo realizzare è un piccolo programma che minitori la porta 
USB per rilevare, per motivi di sicurezza, quando vengono prelevati dai 
dati tramite dispositivo USB( pen, stick, hard-disk esterni...). Più in 
particolare deve rilevare quando viene inserito un device e i movimenti 
fatti su tale dispositivo, ad es. è stato copiato il file tal dei 
tali.... Magari memorizzando queste cose poi in un qualche modo, ad es. 
su file di log.
Quale delle due librerie è più appropriata ? Funzionano anche su windows ?
grazie

 ?
direi nessuna delle due.
con quelle apri la porta e invii/ricevi dati.
tu vuoi intercettare il traffico di altri. mi sa che devi spezzarti la 
schiena con qualche libreria di windows ma non me ne intendo.
le librerie funzionano su linux/windows e mac (per mac libusb4j 
sicuramente mentre bisogna verificare libusbjava) previa installazione di 
libusb


Grazie e approfitto della tua gentilezza...
Ti vorrei chiedere come si fa, con Java, a chiamare funzioni delle 
libreri di windows, ma credo sia più opportuno chiedere se conosci 
qualche link che lo spieghi in maniera semplice.
Inoltre non mi è chiara la procedura d'installazione della libreria.
La libreria è un semplice file .dll, giusto ? per installarla è 
sufficiente copiarla in una deirectory tipo C:\windows\system32 ?
Visto che sei l'onwer del progetto libusb4j, magari conosci se esiste 
qualche progetto open source rigurado quello che devo realizzare ?
Mi piacerebbe partecipare e se possibile fornire una qualche estensione 
di utilità comune.
grazie ancora

 qualche progetto open source rigurado quello che devo realizzare ? 
purtroppo no. tra l'altro mi sembra una cosa molto particolare.

 purtroppo no. tra l'altro mi sembra una cosa molto particolare.
Si, diciamo che è un software per la sicurezza: contro il furto di dati 
aziendali.
Ho visto che esistono già dei programmi, come USBCopyNotify, ma sono 
proprietari e bisogna pagare una licenza. Mi piacerebbe realizzare un 
programmino mio che in futuro possa estendere. Quindi con che linguaggio 
lo realizzeresti ? C ? C# ? Python ?


Pensavo che per quello che voglio realizzare potrei semplicemente andare 
a vedere a polling se vengono aggiunti device al sistema operativo (es. 
H:/ aggiunto con l'inserimento di una nuova penna).
Perï¿œ, non volendo realizzare la gestione a polling, si potrebbe in 
qualche modo agganciarsi all'evento lanciato dal sistema operativo in 
relazione alla creazione di un nuovo device ?
Cerco di spiegarmi meglio: all'inserimento di una chiavetta USB o 
simile, il driver dell'interfaccia USB chiamerï¿œ una funzione del sistema 
operativo (credo) o lancerï¿œ un evento. ï¿œ possibile registrarsi presso 
qualche funzione del sistema operativo per essere avvisati quando tale 
evento avviene ? In questo modo eviterei la gestione a polling che 
spreca risorse inutilmente.
Altra domanda (scusate la lunghezza): volendo metter mano ai driver, ï¿œ 
possibile ? come si fa ? dove sono ? in che linguaggio sono scritti ?
Ad esempio se volessi vedere come ï¿œ fatto il driver del disco, come faccio ?

 lo realizzeresti ? C ? C# ? Python ?
eh ma non lo so.... dipende....intanto dovresti capire che api di windows 
dovrai andare ad usare

il 12.11.2010 20.01, Scrive tolebora 62529024:

Per quanto sappia, rxtx lo e'.



Ok. Consente di fare sniffing del traffico USB ?
Ad esempio: "è stato rilevato il nuovo dispositivo XXX", oppure
"è stata copiata la directory YYY nella chiavetta USB XXX"...

 YYY nella chiavetta USB XXX"...
rxtx non gestisce l'usb

il 15.11.2010 11.34, Scrive tolebora 62529024:

Non credo proprio. Il sistema operativo ti mette a disposizione una 
porta com solo quando un device si attiva sul bus, solo in seguito puoi 
allocarti la porta com.



ecco mi sembrava ed infatti non capivo il consiglio di utilizzare rxtx...

 allocarti la porta com.
Ecco, io in qualche modo (che non conosco assolutamente), vorrei creare 
un programma Java che appena messo in esecuzione, si registri presso il 
sistema operativo (non so se sia possibile) per essere avvisato quando 
viene attaccato un nuovo device o cmq uno già conosciuto.
Successivamente sempre il mio programma dovrebbe essere avvisato anche 
in merito ad ogni trasferimento da e verso la chiavetta USB (o chi per lei).
È possibile ?

 ï¿œ possibile ?
Probabilmente sarï¿œ anche possibile, io non so come.
Immagino che occorra utilizzare delle funzioni del sistema operativo, 
quindi via JNI, ma non so quali.
Non so neanche se ci siano delle lib Java gia' disponibili.
Hai visto quante cose non so?
:-)


 :-)
Siamo in 2...ma mi sei stato d'aiuto, grazie!
Visto che ci sono ti chiedo un parere.
Fare un'applicazione java che a polling (diciamo ogni secondo) vada a 
vedere se ci sono nuove unità e solo in tal caso controlli anche il 
contenuto aggiunto (sempre a polling), credi sia pesante ? nel senso: 
rallenta le altre applicazioni ?

il 15.11.2010 14.49, Scrive tolebora 62529024:

Secondo me si', ovviamente non so quanto.
Penso pero' che ci sia modo per sfruttare un evento del so, senza fare 
dei polling per forza.



Ciao telebora, non so se la mia risposta è appropriata, ma se vuoi fare 
un programma così in java vedi se puoi registrare l' applicazione come 
servizio, il quale deve intercettare gli interrupt di sistema per la 
scrittura/lettura da disco, quindi hai necessita delle api di sistema 
per questa cosa, comunqeu se non ricordo male le rxtx riconoscono l' usb 
o almeo le porte usb, ma per sapere se è stato aggiunto o meno un device 
alla porta devi intercettare l' evento che fa registrare tale device al SO.
Comunque i driver sono scritti prevelantemente in C, ma spero per te, 
che tu conosca bene il mondo hardware, scriverne uno non è semplice e 
credo che nel tuo caso non servirebbe.