Czy możliwe jest zbudowanie urządzenia HID (takiego jak klawiatura) przy użyciu Arduino Uno?
Tak to jest! I jest to świetny tutorial jak to zrobić nad tutaj
Na razie mam wejścia na Arduino, które dają wyjścia na linii szeregowej. Jak mogę przekształcić moje obecne oprogramowanie w coś, co może zachowywać się jak klawiatura HID?
Jak pokazuje samouczek, musisz przekształcić kod oprogramowania układowego, więc zamiast drukować zdarzenia, tak naprawdę je wywołujesz. Co musisz zrobić, to dodać do kodu:
void triggerKey(uint8_t mod, uint8_t chr) {
uint8_t buf[8] = {mod, chr, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
// press key
Serial.write(buf, 8);
// emulate key press delay
delay(10);
buf[1] = 0x00;
// release key
Serial.write(buf, 8);
}
To, co tu robisz, to wysyłanie z głównych zdarzeń mikrokontrolera Arduino przez linię szeregową do mniejszego mikrokontrolera, który obsługuje komunikację USB. Ten mikrokontroler weźmie te „bufory” klawiszy i przeniesie je w miarę naciskania klawiszy USB HID na USB.
Uważaj, że kluczowy znak (tutaj chr
w kodzie) to tak naprawdę kod klucza wysyłany przez USB, który jest interpretowany przez sterownik USB HID, który następnie przekształca go w prawdziwy znak przy użyciu bieżącego układu skonfigurowanego dla klawiatury.
Ta mod
postać jest jednym z klawiszy modyfikujących, które masz na klawiaturze (Shift, Control, Alt ...), 0x00
ponieważ nie jest modyfikatorem.
- Czy mam napisać nowy sterownik urządzenia z oknem?
Nie, nie potrzebujesz! Dzięki aktualizacji DFU Twój arduino będzie widoczny w systemie Windows jako klawiatura USB.
- Czy mam utworzyć warstwę oprogramowania, która mogłaby pobierać moje dane szeregowe i pozwolić Windowsowi odczytać je jako dane wejściowe HID?
Nie musisz tego robić, a to z wielu powodów bardzo zły pomysł:
- Twoje rozwiązanie nie byłoby przenośne, dlatego musisz zhakować coś dla każdej platformy, z której możesz skorzystać,
- twoje rozwiązanie oznaczałoby dużo nowego kodu; im więcej kodu napiszesz, tym więcej błędów może się pojawić w twoim systemie,
- Twoje rozwiązanie byłoby naprawdę hackerskie, ponieważ zachowywałoby się jak sterownik urządzenia (tj. ziemia jądra ) pobierająca dane wejściowe z programu użytkownika (tj. ziemia użytkownika ) i prawdopodobnie nie działa, może być piekłem do debugowania i podatne na problemy związane z bezpieczeństwem. .. Jeśli to w ogóle możliwe!
Używam Uno, ale przyjrzę się temu, co opublikowałeś, ponieważ ostatnim razem, gdy rozważaliśmy aktualizację DFU, ale trochę boimy się cegiełek
W końcu masz obawy, w komentarzu, o zburzeniu twojego arduino. Uwierzcie mi i autorowi artykułu, że nie da się arduino zbudować flashowania oprogramowania układowego:
UWAGA: Nie ma możliwości „zamurowania” urządzenia przy użyciu tej metody. Oprogramowanie rozruchowe Arduino można zawsze zaktualizować przy użyciu protokołu DFU!
W przypadku, gdy coś naprawdę źle się dzieje, a w AVR (atmega8u2) pojawia się uszkodzenie bootloadera, nadal możesz go przeflashować za pomocą innego arduino lub
programatora atmel za pomocą 6 pinów obok wtyczki USB.
Na koniec wiedz, że jedynym sposobem na zmontowanie AVR, a więc także Arduino, jest granie bezpiecznikami i resetowanie bezpieczników programujących. I nawet wtedy możesz użyć
HVSP, aby zapisać swoje urządzenie, choć często mniejszym problemem jest po prostu wzięcie nowego układu.