Witam. Postanowiłem zbudować kolejny gamepad na mikrokontrolerze atmega, tym razem miałby on posiadać 10 przycisków.
Ze strony http://www.raphnet.net/electronique/usb_game12/index_en.php pobrałem więc kod źródłowy 8 przyciskowego gamepada i zacząłem go przerabiać po swojemu.
Najważniejsze zmiany jakich dokonałem to
W pliku Twelve.c:
Dodałem jeden bajt danych do tablicy przechowującej binarne wartości przycisków poprzez zwiększenie wartości report_size.
Dodałem pinD aby móc odczytać z nich przyciski (pulupy były podpięte w innej części kodu)
Oraz dopasowałem wartości poszczególnych pinow by aktywowały odpowiednie przyciski (w tym 2 dodatkowe) w windowsie.
W pliku snes_describtor.c zmieniłem wszystkie wartości odnoszące się do ośmiu przycisków na 10 lub więcej.
Po tych zmianach i wielu innych nieudanych próbach , gamepad teoretycznie działa, nie wiem jednak jakim cudem. Najdziwniejsze jest to, że w descriptorach kod kompiluje się przy dowolnych wartościach, ale dla 10 przycisków urządzenie usb działa w systemie tylko z wartością 11 w linijce REPORT_SIZE (przy ośmiu przyciskach było to 8 w innym projekcie przy 13 jest tam 13)
Krzyżyk działa jeszcze dziwniej. Współrzędna x jest odczytywana prawidłowo z pierwszej pozycji tablicy z użyciem 8 bitów. pozycja y jest odczytywana z 4 bitów umieszczonych w dwóch kolejnych pozycjach tablict po 2 bity (co daje tylko 16 pozycji kursora w pionie) z pominięciem 6 bitów w drugiej pozycji tablicy. Przyciski są odczytywane z pozostałych bitów bez zakłóceń.
W sumie gamepad działał by prawidłowo, gdyż nie używam sterowania analogowego, ale nie rozumiem tego zachowania i nie daje mi to spokoju.
Wczoraj siedziałem do 3:00 nad ranem i chyba tylko sprawdzałem żywotność pamięci flash mikrokontrolera :] Ale to niestety mój limit znajomości c+
W załączniku pełny kod moich wypocin.
Ze strony http://www.raphnet.net/electronique/usb_game12/index_en.php pobrałem więc kod źródłowy 8 przyciskowego gamepada i zacząłem go przerabiać po swojemu.
Najważniejsze zmiany jakich dokonałem to
W pliku Twelve.c:
Dodałem jeden bajt danych do tablicy przechowującej binarne wartości przycisków poprzez zwiększenie wartości report_size.
Dodałem pinD aby móc odczytać z nich przyciski (pulupy były podpięte w innej części kodu)
Oraz dopasowałem wartości poszczególnych pinow by aktywowały odpowiednie przyciski (w tym 2 dodatkowe) w windowsie.
Kod: text
W pliku snes_describtor.c zmieniłem wszystkie wartości odnoszące się do ośmiu przycisków na 10 lub więcej.
Kod: text
Po tych zmianach i wielu innych nieudanych próbach , gamepad teoretycznie działa, nie wiem jednak jakim cudem. Najdziwniejsze jest to, że w descriptorach kod kompiluje się przy dowolnych wartościach, ale dla 10 przycisków urządzenie usb działa w systemie tylko z wartością 11 w linijce REPORT_SIZE (przy ośmiu przyciskach było to 8 w innym projekcie przy 13 jest tam 13)
Krzyżyk działa jeszcze dziwniej. Współrzędna x jest odczytywana prawidłowo z pierwszej pozycji tablicy z użyciem 8 bitów. pozycja y jest odczytywana z 4 bitów umieszczonych w dwóch kolejnych pozycjach tablict po 2 bity (co daje tylko 16 pozycji kursora w pionie) z pominięciem 6 bitów w drugiej pozycji tablicy. Przyciski są odczytywane z pozostałych bitów bez zakłóceń.
W sumie gamepad działał by prawidłowo, gdyż nie używam sterowania analogowego, ale nie rozumiem tego zachowania i nie daje mi to spokoju.
Wczoraj siedziałem do 3:00 nad ranem i chyba tylko sprawdzałem żywotność pamięci flash mikrokontrolera :] Ale to niestety mój limit znajomości c+
W załączniku pełny kod moich wypocin.