Witam!!!
Co do sprzętowego USB to na stronie atmela jest dużo przykładów.
A jeżeli chodzi o kod to napewno trzeba zwiększyć rozmiar bufora w enpoincie.
Plik usbdrv.c
#if USB_CFG_HAVE_INTRIN_ENDPOINT /* endpoint descriptor for endpoint 1 */
7, /* sizeof(usbDescrEndpoint) */
USBDESCR_ENDPOINT, /* descriptor type = endpoint */
(char)0x81, /* IN endpoint number 1 */
0x03, /* attrib: Interrupt endpoint */
16, 0, /* maximum packet size */<< Tutaj zmieniamy z 8 na 16
USB_CFG_INTR_POLL_INTERVAL, /* in ms */
#endif
Jak również zwiększyć rozmiar buforu w programie.
Plik usbdrv.h
#define USB_BUFSIZE 19 /* PID, 8 bytes data, 2 bytes CRC */ << zmieniamy na 19
Te zmiany pozwoliły wysłać 11 bajtów, ale to jest raczej przykład jak robić nie należy.
W każdym bądź razie, jeżeli chcesz robić tak złożony projekt to proponuję zainteresować się m32u4 które są dostępne w seguro.
Jak podejmiesz decyzję to służę pomocą w uruchomieniu układu łącznie z udostępnieniem programu.
Jedyne co mogę napisać to wysyłanie danych wygląda mniej więcej tak
// Send report
Usb_write_byte(0x0f); //b0-b3 hat b4-b7 button1-4
Usb_write_byte(button_get(0)); //b0-b7 button 5-12
Usb_write_byte(button_get(1)); //b0-b6 button 13
Usb_write_byte(osX.wysylka[0]); //b0-b1 ven b2-b7 os x
Usb_write_byte(osX.wysylka[1]); //b0-b7 os x
Usb_write_byte(0); // os Z accelate
Usb_write_byte(0); // os Rz brake
Usb_write_byte(0); // os Y clatch
Usb_write_byte(0); //vendor
Usb_write_byte(0); //vendor
Usb_write_byte(0); //vendor
Usb_write_byte(a); //slider
Usb_write_byte(0); //vendor
Usb_write_byte(0); //vendor
Usb_write_byte(0); //vendor
Usb_write_byte(0); //slider
Usb_ack_in_ready(); // Send data over the USB
Każda linijka to kolejny bajt więc widać, że jest to w sumie banalne.
Jeszcze wystarczy wstępnie skonfigurować transmisję i usb z głowy.
Jak podejmiesz decyzję to będziemy myśleć dalej, ale powiem tyle że jak będziesz miał procek to zrobienie USB to jeden dzień a potem zajmujesz się resztą a z resztą przeczytaj tego arta >>
Link
Pozdrawiam!!!
Azonic_2006