Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-01-2006, 12:21   #1
homer87
Member
 
Iscritto dal: Oct 2005
Messaggi: 263
Driver in linux

Avrei intenzioni (sempre conscio delle mie modeste capacità) di creare un driver per il pinguino di questa periferica:

http://www.adstech.com/products/USBA...p?pid=USBAV701

Magari avreste un volume in cui sono indicati i passaggi e le librerie indicate da utilizzare nel pingux?

Le specifiche visto che non sono fornite -.- sto cercando di fare un reverse dei driver proprietari... Se riesco a cavare un ragno dal buco...

Consigli please???
homer87 è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2006, 13:09   #2
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Qui c'è un libro gratuito in pdf che spiega le basi. http://lwn.net/Kernel/LDD3/ Per il resto non posso che augurarti un bel in bocca al lupo.

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2006, 13:15   #3
homer87
Member
 
Iscritto dal: Oct 2005
Messaggi: 263
Ok, ti ringrazio!!!
homer87 è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2006, 10:34   #4
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Ti consiglio prima di esercitarti con il protocollo del paperweight (ammesso che riesci a farne reverse engeenering), puoi farlo in userspace tramite le libusb. E' molto più semplice che farlo nel kernel.

Se poi nel frattempo riesco a trovare tempo e voglia per completare il mio bridge user space -> char device (che tengo nel cassetto da tempo immemore), puoi realizzare il driver completamente in userspace.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2006, 14:58   #5
homer87
Member
 
Iscritto dal: Oct 2005
Messaggi: 263
Ok ti ringrazio, io intanto vedo se riesco a ricavare qualcosa con il reverse.
Se mi potresti consigliare qualche dritta anche per quest'utimo, (anche perchè sui driver non ho esperienza, ad esempio i decompilatori come funzionerebbero???) te ne sarei infinitamente grato.
homer87 è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2006, 15:34   #6
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Non tentare di decompilare il driver, è una follia. Invece, dovrebbe esserci in giro qualche tool per sniffare il traffico usb, per windows.
Ti avverto, è un lavoraccio.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 10-01-2006, 17:05   #7
homer87
Member
 
Iscritto dal: Oct 2005
Messaggi: 263
Allora, oggi ho avuto un po' di tempo e ho fatto un po' di sniffing....

In 2356 pacchetti solo all'avvio e quindi (in conseguenti 23 mega di log da polparmi) sono riuscito a rilevare dei pacchetti che dovrebbero essere abbastanza importanti, e li ho classificati in questo modo:

I pacchetti di inizializzazione:
2266 in totale.
Ma che si possono riassiumere in 5 pacchetti fondamentali:
Quote:
Seq: 6 Dir : in down End Point : n/a Time: 0.469 Function:GET_DESCRIPTOR_FROM_DEVICE Data: /*Campo Vuoto */ Result: /* Campo Vuoto */
URB Header (length: 80)
SequenceNumber: 6
Function: 000b (GET_DESCRIPTOR_FROM_DEVICE)

------------------------------------------------------------

Seq: 6 Dir : in up End Point : n/a Time: 0.469 Function:CONTROL_TRANSFER Data: 04 03 Result: 0x00000000

URB Header (length: 80)
SequenceNumber: 6
Function: 0008 (CONTROL_TRANSFER)
PipeHandle: 834d3480

SetupPacket:
0000: 80 06 00 03 09 04 02 00
bmRequestType: 80
DIR: Device-To-Host
TYPE: Standard
RECIPIENT: Device
bRequest: 06
GET_DESCRIPTOR
Descriptor Type: 0x0003
STRING


TransferBuffer: 0x00000002 (2) length
0000: 04 03

------------------------------------------------------------

Seq: 8 Dir : ??? up End Point : n/a Time: 0.594 Function:SELECT_CONFIGURATION Data: /*Campo vuoto */Result: 0x00000000


URB Header (length: 120)
SequenceNumber: 8
Function: 0000 (SELECT_CONFIGURATION)
Configuration Descriptor:
bLength: 9 (0x09)
bDescriptorType: 2 (0x02)
wTotalLength: 46 (0x002e)
bNumInterfaces: 1 (0x01)
bConfigurationValue: 1 (0x01)
iConfiguration: 0 (0x00)
bmAttributes: 192 (0xc0)
0x80: Bus Powered
0x40: Self Powered
MaxPower: 50 (0x32)
(in 2 mA units, therefore 100 mA power consumption)

Number of interfaces: 1
Interface[0]:
Length: 0x0060
InterfaceNumber: 0x00
AlternateSetting: 0x00
Class = 0xff
SubClass = 0x00
Protocol = 0x00
InterfaceHandle = 0x83409130
NumberOfPipes = 0x00000004
Pipe[0]:
MaximumPacketSize = 0x0200
EndpointAddress = 0x02
Interval = 0x00
PipeType = 0x02
UsbdPipeTypeBulk
PipeHandle = 0x8340914c
MaxTransferSize = 0x00001000
PipeFlags = 0x00
Pipe[1]:
MaximumPacketSize = 0x0200
EndpointAddress = 0x04
Interval = 0x00
PipeType = 0x02
UsbdPipeTypeBulk
PipeHandle = 0x8340916c
MaxTransferSize = 0x00001000
PipeFlags = 0x00
Pipe[2]:
MaximumPacketSize = 0x0200
EndpointAddress = 0x86
Interval = 0x00
PipeType = 0x02
UsbdPipeTypeBulk
PipeHandle = 0x8340918c
MaxTransferSize = 0x00001000
PipeFlags = 0x00
Pipe[3]:
MaximumPacketSize = 0x0200
EndpointAddress = 0x88
Interval = 0x00
PipeType = 0x02
UsbdPipeTypeBulk
PipeHandle = 0x834091ac
MaxTransferSize = 0x00001000
PipeFlags = 0x00

-----------------------------------------------------------
Seq: 9 Dir : out down End Point : 0x00 Time: 0.594 Function:VENDOR_DEVICE Data: 01 Result: /*Campo vuoto */

URB Header (length: 80)
SequenceNumber: 9
Function: 0017 (VENDOR_DEVICE)
PipeHandle: 00000000

SetupPacket:
0000: 00 a0 00 e6 00 00 00 00
bmRequestType: 00
DIR: Host-To-Device
TYPE: Standard
RECIPIENT: Device
bRequest: a0
unknown!


TransferBuffer: 0x00000001 (1) length
0000: 01

-----------------------------------------------------------
Seq: 9 Dir : out up End Point : n/a Time: 0.594 Function:CONTROL_TRANSFER Data: - Result:0x00000000]



URB Header (length: 80)
SequenceNumber: 9
Function: 0008 (CONTROL_TRANSFER)
PipeHandle: 834d3480

SetupPacket:
0000: 40 a0 00 e6 00 00 01 00
bmRequestType: 40
DIR: Host-To-Device
TYPE: Vendor
RECIPIENT: Device
bRequest: a0


No TransferBuffer
L'unica differenza con il trasferimento dati vero e proprio riguarda questo pacchetto:

Quote:
Seq: 3127 Dir : in down End Point : 0x86 Time: 2726.092Function:BULK_OR_INTERRUPT_TRANSFER Data: - Result: /*Campo Vuoto*/

URB Header (length: 72)
SequenceNumber: 3127
Function: 0009 (BULK_OR_INTERRUPT_TRANSFER)
TransferFlags: 0x00000003

No TransferBuffer

-----------------------------------------------------------
Qui avviene il trasferimento dati vero e proprio:

Seq: 3127 Dir : in up End Point : 0x86 Time: 2726.198Function:BULK_OR_INTERRUPT_TRANSFER Data: 00 00 ba 01 00 44 51 7e - Result:0x00000000


URB Header (length: 72)
SequenceNumber: 3127
Function: 0009 (BULK_OR_INTERRUPT_TRANSFER)
TransferFlags: 0x00000003

TransferBuffer: 0x00001000 (4096) length
0000: 00 00 ba 01 00 44 51 7e 01 5c 89 01 f8 c3 00 00
0010: e0 01 ec 07 00 80 ae 00 15 46 ea c9 93 58 cc 44
0020: b8 21 40 19 89 04 7b 00 2f 03 90 ff 62 68 c9 e0
0030: e0 ff 12 3d ea a4 10 06 61 01 11 5f a5 f2 fc 80
0040: 46 e1 f3 2c 54 40 9c 75 48 04 ce 8c d1 3c 32 34
0050: 19 44 06 40 1f 07 20 ff c5 d0 52 ce f3 87 99 07
0060: c3 9d 73 d8 39 35 60 8c 2d 8c af d4 0a ce 8d 0f
0070: c7 71 85 87 42 73 ee 3b 29 3b 91 ab 98 04 ee 71
0080: 36 a5 16 ca 19 aa 34 38 fc ff 9f 0c 03 ff ff 7f
0090: 00 9d 8f 0d ac 0e 6c f0 18 00 00 1c 61 06 98 0b
00a0: fd 03 8b 85 cd 1c be b8 80 b7 c1 3d 5c 44 a0 40
00b0: b7 16 c7 1f 9c ab 1e e1 04 59 e0 48 39 e6 39 6c
00c0: 44 e8 37 68 fc 7f d4 01 f5 01 5e 0c 4f 10 4e 1c
00d0: 85 65 80 8e 59 3f 3f 18 00 9f 06 7a 94 99 74 b1...

Scusate per la lunghezza del post, ma a quanto ho (tentato) di capire, all'inizio fa solo dei controlli sulla connessione(velocità ecc..) e sul dispositivo (spento acceso, modello e produttore) ma quali azz di dati bisogna tenere in seria considerazione??
homer87 è offline   Rispondi citando il messaggio o parte di esso
Old 10-01-2006, 17:30   #8
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quelle "function" sono l'incapsulamento standard e le funzioni di controllo e configurazione di base del protocollo usb; niente di misterioso. Nota che già capire come funziona il rpotocollo usb è complicato. Tu sai benissimo come funziona, vero?


Quote:
Scusate per la lunghezza del post, ma a quanto ho (tentato) di capire, all'inizio fa solo dei controlli sulla connessione(velocità ecc..) e sul dispositivo (spento acceso, modello e produttore) ma quali azz di dati bisogna tenere in seria considerazione??
Una volta imparato a masticare i princìpi del protocollo usb -- hai presente quelle interminabili sequenze di byte scritte in esadecimale, senza alcun significato apparente?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 10-01-2006, 19:11   #9
homer87
Member
 
Iscritto dal: Oct 2005
Messaggi: 263
Quote:
Originariamente inviato da ilsensine
Quelle "function" sono l'incapsulamento standard e le funzioni di controllo e configurazione di base del protocollo usb; niente di misterioso. Nota che già capire come funziona il rpotocollo usb è complicato.
Appunto io mi riferivo proprio a quelle. Sono da considerarsi universali o valide solo sui S.O. win? Se utilizzo la libusb una buona parte del lavoro non dovrebbe essere già fatto??

Quote:
Originariamente inviato da ilsensine
Tu sai benissimo come funziona, vero?
Sapessi, come lo vorrei sapere!!!

Quote:
Originariamente inviato da ilsensine
Una volta imparato a masticare i princìpi del protocollo usb -- hai presente quelle interminabili sequenze di byte scritte in esadecimale, senza alcun significato apparente?
Quote:
TransferBuffer: 0x00001000 (4096) length
0000: 00 00 ba 01 00 44 51 7e 01 5c 89 01 f8 c3 00 00
0010: e0 01 ec 07 00 80 ae 00 15 46 ea c9 93 58 cc 44
0020: b8 21 40 19 89 04 7b 00 2f 03 90 ff 62 68 c9 e0
0030: e0 ff 12 3d ea a4 10 06 61 01 11 5f a5 f2 fc 80
0040: 46 e1 f3 2c 54 40 9c 75 48 04 ce 8c d1 3c 32 34
0050: 19 44 06 40 1f 07 20 ff c5 d0 52 ce f3 87 99 07
0060: c3 9d 73 d8 39 35 60 8c 2d 8c af d4 0a ce 8d 0f
0070: c7 71 85 87 42 73 ee 3b 29 3b 91 ab 98 04 ee 71
0080: 36 a5 16 ca 19 aa 34 38 fc ff 9f 0c 03 ff ff 7f
0090: 00 9d 8f 0d ac 0e 6c f0 18 00 00 1c 61 06 98 0b
00a0: fd 03 8b 85 cd 1c be b8 80 b7 c1 3d 5c 44 a0 40
00b0: b7 16 c7 1f 9c ab 1e e1 04 59 e0 48 39 e6 39 6c
00c0: 44 e8 37 68 fc 7f d4 01 f5 01 5e 0c 4f 10 4e 1c
00d0: 85 65 80 8e 59 3f 3f 18 00 9f 06 7a 94 99 74 b1...
Ti riferisci a queste?
Ma questi sono i dati che vengono trasferiti durante la trasmissione (o almeno credo).
Io infatti ho abbreviato tutto (ho messo i tre puntini) altrimenti usciva qualcosa di enorme.

Secondo me, per implementare qualcosa e nella funzione "SELECT_CONFIGURATION" che dovremmo dare una bella occhiata, casomai vedo mi meglio il protocolla usb e poi ti faccio sapere.

Inoltre Leggendomi qualche guida su qualche sito son riuscito a capire che per implementare una semplice "function" come la definisci tu in downstream è possibile utilizzare la funzione usb_control_msg della libusb ma non ho idea che valori metterci -_- .

Tu qualche hai info sul protocollo usb o altro?

Ah quante domande, vado a magnà qualcosa!!!

Ultima modifica di homer87 : 10-01-2006 alle 19:14.
homer87 è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2006, 10:54   #10
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Ti dico quel poco che so sul protocollo.

I device usb sono organizzati secondo gerarchie, questo forse lo sai. La gestione dell'albero dei dispositivi è demandata all'hardware e ai driver dei bridge; non devi occuparti di questi dettagli. Le libusb ti consentono di "sfogliare" l'albero alla ricerca del device che ti interessa.

Un device è destritto da alcune informazioni standard, quali il vendorId:deviceId, la classe, ecc. Esistono classi standard di device, quali "usb mass storage" oppure "usb serial converter". Queste classi utilizzano lo stesso protocollo (o con piccole variazioni), quindi puoi gestire tutti i device di una classe con lo stesso driver. Il tuo dispositivo probabilmente utilizza un protocollo proprietario.

La comunicazione con un device passa tramite diversi "pipe" logici di comunicazione. Puoi pensare a un singolo pipe come a un canale seriale, monodirezionale. Ogni pipe è detto anche "endpoint" (ep). Gli ep (tranne lo 0, v. sotto) sono in genere configurabili dal driver; il tuo controllo è (fortunatamente!) in genere abbastanza limitato, puoi al massimo selezionare un tipo di configurazione oppure una alternativa.
Oltre che dalla direzione (in oppure out), un ep è descritto dalla dimensione in byte dei singoli pacchetti, e dal tipo:
- canale di controllo
E' generalmente associato convenzionalmente all'ep0. Serve per inviare comandi di configurazione al device. Alcuni comandi sono standard nel protocollo usb; altri possono essere specifici del vendor.
- canale interrupt
Canale ad alta priorità per trasferire piccole quantità di dati. Serve in genere per comunicare eventi importanti.
- canale bulk
Pipe di comunicazione affidabile per i dati. Viene usato ad es. dagli storage device per trasmettere o ricevere i dati dei settori. Il canale bulk viene usato quando i dati da trasmettere non devono essere persi.
- canale isochronous (iso)
Simile al canale bulk, ma senza l'affidabilità. Viene utilizzato quando i dati da trasmettere possono essere persi se la banda non è sufficiente (ad es. webcam, o dispositivi di acquisizione in genere). Puoi fare una analogia tra il canale bulk e un socket tcp, e tra il canale iso e un socket udp, per renderti una idea.

Un device definisce un certo numero di ep, tipicamente 6-8. Consente, come ho accennato, di scegliere anche configurazioni alternative. Queste informazioni possono essere consultate tra le caratteristiche del dispositivo, tramite le libusb.

Quindi, per iniziare, ti consiglio di sniffare il traffico iniziale con il dispositivo, che probabilmente passa per il canale di controllo, e cercare di capire cosa viene fatto.

Ti consiglio inoltre di fare un pò di pratica con le libusb, in rete trovi un pò di codice di esempio. Utilizza la versione devel in cvs, in quanto non credo che quella ufficiale gestisca i canali interrupt. Per gestire il canale iso, nel caso il tuo device lo usi, potrebbe essere necessaria una patch esterna.
E iscriviti alla loro mailing list, possono aiutarti
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 11-01-2006, 19:35   #11
homer87
Member
 
Iscritto dal: Oct 2005
Messaggi: 263
Quote:
Originariamente inviato da ilsensine
Il tuo dispositivo probabilmente utilizza un protocollo proprietario.
Si infatti, il driver non è WDM ma può essere utilizzato solo con la loro applicazione o VideoStudio opprtunamente modificato.

Ok grazie mille delle informazioni, vedrò ciò che riesco a fare.
homer87 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Le tute spaziali AxEMU di Axiom Space pe...
Dongfeng sfida la NATO: navi dalla Cina ...
5G Standalone per il mondo marittimo: Er...
Nova Lake-S: configurazioni fino a 52 co...
Baxi presenta la pompa di calore Alya E ...
PC ASUS e Acer vietati in Germania: il t...
Stellantis rilancia il diesel in Europa:...
Truffa per utenti Trezor e Ledger: lette...
Wi-Fi 7 conveniente: FRITZ! lancia 4630,...
La Formula 1 dei robot tagliaerba miglio...
Il nuovo gioco del creatore di God of Wa...
Grok arriva sulle Tesla in Europa: l'int...
Assassin's Creed IV: Black Flag Remake p...
Il padre di God of War attacca Sons...
È operativo il primo computer qua...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 02:44.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v