Ciao

Avrei bisogno di un po di aiuto per un progetto che sto sviluppando, ovvero la realizzazione di un controller HID per del software che ho su pc.
Ho comprato la board UNO dato che avendo l'ATmega8U2 riprogrammabile è possibile, da quello che ho capito, far riconoscere il tutto come dispositivo HID.
Pensavo, per farlo di utilizzare il firmware LUFA presente su:
http://www.fourwalledcubicle.com/LUFA.phpNell'attesa che mi arrivi la board sto cercando di capire un po come funziona il tutto. Vi descrivo brevemente le "specifiche" di progetto:
---- LATO PC ----
Il software usa un file xml di configurazione in cui viene specificato a quale bit, byte, word, ecc... associare un comando che verrà poi letto dal programma, ad esempio:
<button bit="0x08" name="PLAY" />
Facendo delle prove con il Wiimote e il pad Play Station 2 (gli unici dispositivi HID che avevo in casa tastiera a parte) e usando il programma HID Trace ottengo una cosa del tipo:

Quindi in questo caso quando cambia il bit 8 della prima riga da 0 a 1 (nella foto è già a 1) al programma verrà inviato il comando "PLAY".
Ovviamente per i pulsanti basta un bit, se devo leggere valori analogici il comando verrà associato ad 1 o 2 byte che contengono il valore letto.
es:
<slider word="2" name="VOLUME" />
---- LATO ARDUINO ----
A questo punto io devo poter inviare al pc una "matrice di bit" come quella che vedete in foto, giusto?
Da quello che ho capito in un dispositivo HID vi sono dei blocchi di memoria di grandezza (definita a scelta?) in cui vengono scritti dei valori.
Ogni volta che cambia anche solo un bit il tutto viene inviato al pc
Your firmware writes in a small block of memory (usually located in the HID chipset) bits and bytes corresponding to the state of your device (positions of sliders, state of buttons, etc).
When something changes in this memory block, the HID chipset will signal the computer to read it.
Then, as soon as the software on the computer is ready, it will read the memory block and react to the changes found within.
(it means that a slider can change several times while the computer is busy, the computer will read only the current position when it has time to do so).
The whole memory block is transmitted to the computer every times, even if only one bit changed.
But the memory blocks are small enough (usually 32 or 16 bytes), that the bandwidth used is not much more than sending a 4 bytes MIDI message.
In real-life situations, the extra 12 or 28 bytes per message are ridiculously small compared to the bandwidth of USB 1.0.
Mi pare di capire quindi che tali blocchi di memoria siano nell'ATmega8U2, giusto?
Come faccio però da Arduino a riempire questa "memoria" del chip 8u2?
Esempi:
- Premo il pulsante A e devo di conseguenza settare a 1 il bit 0x07 in modo che il pc sia accorga della pressione.
- Ruoto il trimmer, devo quindi assegnare il nuovo valore letto (supponiamo sia a 16 bit anche se poi sarà solo 10) dal bit 0x10 al bit 0x1F
Come si fa a fare tutto questo?

Un aiuto sarebbe veramente molto molto gradito perchè per quanto stia leggendo capisco poco smiley-sad