Newsgroup: it.comp.programmare.win32
Titolo: Driver USB generici

Mi sapete cortesemente dire dove trovare informazioni su come comunicare 
attraverso una porta USB utilizzando i driver generici di Windows?
Programmo in C++, usando il MS Visual C++ oppure il DevC++/gcc.
grazie in anticipo.
Emiliano

Programmo in C++, usando il MS Visual C++ oppure il DevC++/gcc.
Non capisco cosa intendi per "driver generici di Windows", ogni
driver per la porta USB, scritto dalla Microsoft o da altri, e'
specifico per una periferica, e solo per quella.

 ha scritto nel messaggio 
news:7iml12p4migi6p4d8...@4ax.com...


 pc una chiavetta (pen drive) USB.
quando attacchi la chiavetta i drivers che vengono caricati sono quelli
della chiavetta...
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Programmo in C++, usando il MS Visual C++ oppure il DevC++/gcc.
Io ho usato libusb e mi sono trovato molto bene.
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
		-<! $>cd /pub	$>more beer !>-

 -- 
Grazie mille, provo a vedere. 


Allora mi devo scusare anche per la mia ignoranza ;-)
Sto infatti cercando di iniziare ad informarmi sull'argomento.
Non mi spiego perň una cosa: come mai Windows (da XP in poi, per quanto ne 
so)
riconosce automaticamente tutte le chiavette USB che collego?
Non posso, almeno a priori, credere che XP abbia "in pancia" tutti i drivers 
di tutti i costruttori.
La mia domanda originale sarebbe stata da porre in questa forma: ipotizziamo 
per un secondo
che io sia in grado di costruirmi un dispositivo hardware munito di 
controller USB e di scriverne
il firmware relativo e di voler scrivere il software per comunicare (inviare 
e ricevere dati) con
questo, esiste un driver di Windows che si presti allo scopo?
Il tutto ovviamente utilizzando scrivere delle procedure firmware e 
utilizzare componenti hardware
secondo date specifiche.
Grazie mille

 questo, esiste un driver di Windows che si presti allo scopo?
si distinguono due casi:
1) hai seguito le specifiche standard e i drivers di Windows sono in grado
già di per se' di interagire con la periferica; non devi scrivere
nessunissimo software, la tua chiavetta è un'unità logica valida ed
Esplora Risorse ti permette di gestirne i files;
2) ti sei inventato una periferica tutta nuova con specifiche tue: devi
scrivere il (o i) driver(s) e fornirlo/i su un CD assieme alla chiavetta
quando distribuisci il tuo prodotto; se i tuoi drivers li hai mandati
anche a Microsoft per tutte le sue accertazioni (quality labs, ecc.)
allora i tuoi drivers verranno certificati come "designed for" e verranno
messi a disposizione su Windows Update (e forse anche in future release
del CD di installazione di Windows), così quando l'utente attaccherà la
chiavetta all'hub, Windows farà il suo probing e cercherà i drivers da te
scritti che staranno su Windows Update o sul CD che tu hai distribuito
assieme alla chiavetta.


 Esplora Risorse ti permette di gestirne i files;
Esprimendomi male, questo volevo chiedere: dove si trovano le specifiche 
standard?
Posto che ne esistano.
Grazie ancora per la disponibilità.

 ha scritto nel messaggio 
news:slrne1lfq...@braveheart.cowo.net...


 Posto che ne esistano.
ah: BBOOHH... ^_^
veramente non saprei, non mi sono mai interessato cosě direttamente di
hardware, perň considera che se le chiavette USB sono come gli hard disk
allora ci vanno di mezzo anche i DMA...
ma sinceramente non credo che tu voglia conoscere le specifiche hardware
da rispettare per progettare un "volume", diciamo cosě (ranges di memoria,
interrupt e interrupt request lines, ranges di I/O... non credo sia questo
che ti interessa); mi sa che non ho lasciato bene intendere il significato
di "specifiche".
ricordando vagamente quello che chiedevi nel messaggio iniziale, per
scrivere dati direttamente su una port USB devi fare quello che penso
faccia la libusb che ti č stata consigliata: apri la porta come uno
pseudo-file (non ricordo come), ci scrivi con WriteFile e ci leggi con
ReadFile; poi la chiude con CloseHandle. :-)


 di "specifiche".
ah no frena: come non detto; se scrivi su una porta USB *direttamente*
(WriteFile/ReadFile) allora è chiaro che devi anche conoscere il
protocollo (le specifiche) usato dalla chiavetta; in altre parole ciò che
viene riconosciuto altrimenti dal driver della chiavetta.
le specifiche dell'hardware della chiavetta? be', se sei fortunato e non
sono chiuse (cioè segreto aziendale di chi produce la chiavetta in
questione) allora prova a cercarle con Google, io purtroppo non so dirti
dove potresti trovare gli standard (posto che esistano).


 
No.
Non puoi accedere alla porta USB in questo modo.
libusb funziona perche' gli sviluppatori hanno scritto un driver apposito.
Saluti  Manlio Perillo

 libusb funziona perche' gli sviluppatori hanno scritto un driver apposito.
veramente io ho detto che si poteva accedere cosě perché avevo un esempio
scritto in Visual Basic 6 che lo faceva...
ti posto il codice per aprire l'handle alla porta; se mi dai un indirizzo
email valido (opportunamente mascherato con tutti i NOSPAM e i
QUESTOTOGLILO che ti pare :P) ti passo lo zip con tutto l'esempio; qui ti
ho scritto solo la funzione OpenUSBDevice.
ciao
Public Function OpenUSBdevice(NameOfDevice$, ManufactOfDevice$, _
                                VIDOfDevice, PIDOfDevice, DIDOfDevice, _
                                SerNumOfDevice$) As Boolean
    ' Locals
    Dim HidGuid As Guid
    Dim Success As Boolean
    Dim Opened As Boolean
    Dim Buffer(256) As Byte
    Dim DeviceInterfaceData As Device_Interface_Data
    Dim FunctionClassDeviceData As Device_Interface_Detail
    Dim SA As Security_Attributes
    ' First, get the HID class identifier
    Call HidD_GetHidGuid(HidGuid.Data(0))
    ' Get a handle for the Plug and Play node, request currently active
HID devices
    PnPHandle& = SetupDiGetClassDevs(HidGuid.Data(0), 0, 0, &H12)
    If (PnPHandle& = -1) Then ErrorExit ("Could not attach to PnP node")
    HidEntry& = 0
    Opened = False
    ' Length of data structure in bytes.
    DeviceInterfaceData.cbsize = 28
    ' Look through the table of HID devices
    Do While SetupDiEnumDeviceInterfaces(PnPHandle&, 0, HidGuid.Data(0),
HidEntry&, DeviceInterfaceData.cbsize)
        ' There is a device here, get it's name
        FunctionClassDeviceData.cbsize = 5
        Success = SetupDiGetDeviceInterfaceDetail(PnPHandle&,
DeviceInterfaceData.cbsize, _
                FunctionClassDeviceData.cbsize,
UBound(FunctionClassDeviceData.DataPath), BytesReturned&, 0)
        If (Success = 0) Then ErrorExit ("Could not get the name of this
HID device")
        ' Convert returned C string to Visual Basic String
        hidname$ = ""
        i& = 0
        Do While FunctionClassDeviceData.DataPath(i&) <> 0
            hidname$ = hidname$ &
Chr$(FunctionClassDeviceData.DataPath(i&))
            i& = i& + 1
        Loop
        ' Can now open this HID device
        HidHandle& = CreateFile(hidname$, &HC0000000, 3, SA, 3, 0, 0)
        If (HidHandle <> -1) Then
            'ErrorExit ("Could not open HID device")
            ' Get Product String
            If HidD_GetProductString(HidHandle&, AddressFor(Buffer(0)),
UBound(Buffer)) Then
                DeviceName$ = ""
                i& = 0
                Do While Buffer(i&) <> 0
                    DeviceName$ = DeviceName$ & Chr$(Buffer(i&))
                    i& = i& + 2
                Loop
            End If
            ' Get Manuf String
            If HidD_GetManufacturerString(HidHandle&,
AddressFor(Buffer(0)), UBound(Buffer)) Then
                DeviceManufact$ = ""
                i& = 0
                Do While Buffer(i&) <> 0
                    DeviceManufact$ = DeviceManufact$ & Chr$(Buffer(i&))
                    i& = i& + 2
                Loop
            End If
            ' Get VID, PID, DID
            If HidD_GetAttributes(HidHandle&, Attr) Then
                DeviceVID = Attr.VendorID(1)
                DeviceVID = (DeviceVID * 256 + Attr.VendorID(0))
                DevicePID = Attr.ProductID(1)
                DevicePID = (DevicePID * 256 + Attr.ProductID(0))
                DeviceDID = Attr.VersionNumber(1)
                DeviceDID = (DeviceDID * 256 + Attr.VersionNumber(0))
            End If
            ' Get Serial String
            If HidD_GetSerialNumberString(HidHandle&,
AddressFor(Buffer(0)), UBound(Buffer)) Then
                DeviceSerNum$ = ""
                i& = 0
                Do While Buffer(i&) <> 0
                    DeviceSerNum$ = DeviceSerNum$ & Chr$(Buffer(i&))
                    i& = i& + 2
                Loop
            End If
            ' Don't allow all nulls
            If (NameOfDevice$ = "") And _
               (ManufactOfDevice$ = "") And _
               (VIDOfDevice = 0) And _
               (PIDOfDevice = 0) And _
               (DIDOfDevice = 0) And _
               (SerNumOfDevice$ = "") Then
               Opened = False
            Else
               Opened = True
            End If
            ' Open via Product String?
            If (NameOfDevice$ <> "") And _
               (StrComp(DeviceName$, NameOfDevice$) <> 0) Then
                    Opened = False
            End If
            ' Open via Manufacturer String?
            If (ManufactOfDevice$ <> "") And _
               (StrComp(DeviceManufact$, ManufactOfDevice$) <> 0) Then
                    Opened = False
            End If
            ' Open via VID?
            If (VIDOfDevice <> 0) And _
               (DeviceVID <> VIDOfDevice) Then
                    Opened = False
            End If
            ' Open via PID?
            If (PIDOfDevice <> 0) And _
               (DevicePID <> PIDOfDevice) Then
                    Opened = False
            End If
            ' Open via DID?
            If (DIDOfDevice <> 0) And _
               (DeviceDID <> DIDOfDevice) Then
                    Opened = False
            End If
            If (Opened = False) Then Call CloseHandle(HidHandle&) ' Was
not OUR HID device
        End If
        HidEntry& = HidEntry& + 1 ' Check next entry
        ' This was our device, stop searching
        If (Opened = True) Then Exit Do
    Loop 'SetupDiEnumDeviceInterfaces returns FALSE when there are no more
entries
    SetupDiDestroyDeviceInfoList (PnPHandle&)
    OpenUSBdevice = Opened
End Function


 secondo date specifiche.
Tu vuoi mandare dei comandi USB? Usa libusb. Vuoi un esempio che gestisce un
player mp3 con protocollo proprietario? 
http://yex.sourceforge.net
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! I Never Wanted To Be What They Told Me To Be
	Fulfill My Fate Then I'll Be Free >!- Blind Guardian - Mordred's Song

Grazie ancora per la "dritta",
ho scaricato libusb e sembra proprio essere quello che fa al caso mio.
Sto studiandone l'utilizzo.

 
Ma questo hidname che nome e'?
Nella documentazione di CreateFile non parla di porte USB.
Saluti e grazie  Manlio Perillo

 Nella documentazione di CreateFile non parla di porte USB.
io penso che quell'affare funzioni... sinceramente non ho voglia di
approfondire :P comunque MSDN parla di Communication Resources...


 
Vero, ma fa riferimento solo alle porte seriali.
Comunque, se e quando mi servira' accedere a porte'USB usero' senz'altro
libusb.


 Saluti e grazie  Manlio Perillo
prego, ciao.


 
Vero, ma e' tutta l'API di Windows che e', IMHO, assurdamente complessa.
Per farti un esempio, non solo per programmazione a basso livello, io
uso Windows da molti anni ormai.
Ho da poco messo Linux Debian e tutto e' molto piu' *logico*.
Non ho mai capito perche' la Microsoft si e' allontanata tanto dal
modello Unix.
Saluti  Manlio Perillo

Ciao,anch'io mi sto occuppando della gestione di un USB/HID,sono
interessato al tuo codice zippato in VB6
Puoi gentilmente inviarmene una copia?
Grazie
Ciao
-- 
Questo articolo e` stato inviato dal sito web 
http://www.nonsolonews.it

Manlio Perillo ha scritto:

Ciao,qualcuno ha un esempio di utilizzo delle librerie
USB/HID in Visual Basic 6 ,grazie


USB/HID in Visual Basic 6 ,grazie
Qui c'e' di tutto: 
http://www.lvr.com/usb.htm
Attento a non perderti! ;)