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 chrw 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 modpostać jest jednym z klawiszy modyfikujących, które masz na klawiaturze (Shift, Control, Alt ...), 0x00ponieważ 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.