Чи можливо побудувати пристрій HID (наприклад, клавіатуру) за допомогою Arduino uno?
Так! І тут є чудовий підручник, як це зробити тут
На даний момент у мене є кнопкові входи на Arduino, що дають виходи на послідовному рядку. Отже, як я можу перетворити свою поточну прошивку на щось, що може вести себе як клавіатура HID?
Як показує підручник, вам потрібно перетворити код вбудованого програмного забезпечення, щоб замість того, щоб друкувати події, ви насправді викликали події. Що потрібно зробити, це додати до вашого коду:
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);
}
Що ви тут робите, це надсилання з вашого основного події мікроконтролера Arduino через послідовну лінію на менший мікроконтролер, який обробляє USB-зв’язок. Цей мікроконтролер візьме ці ключові «буфери» і передасть їх у вигляді клавіш USB HID Keyboard, що натискає на USB.
Будьте уважні, що ключовий символ ( chr
у коді тут) - це фактично код клавіш, надісланий через USB, який інтерпретується вашим драйвером USB HID, який потім переводить його в реальний символ, використовуючи поточний макет, який ви налаштували для вашої клавіатури.
mod
Персонаж один з клавіш - модифікаторів у вас є на клавіатурі (Shift, Control, Alt ...), 0x00
не будучи НЕ модифікатором.
- Чи потрібно написати новий драйвер пристрою вікон?
Ні, вам не потрібно! З оновленням DFU ваш ардуїно Windows буде сприйматися як USB клавіатура.
- Чи повинен я створити програмний шар, який міг би приймати мої послідовні дані та матимуть Windows читати їх як вхід HID?
Вам це не потрібно робити, і це насправді дуже погана ідея з багатьох причин:
- ваше рішення не буде портативним, і тому вам потрібно буде щось зламати для кожної платформи, яку ви можете використовувати,
- ваше рішення означало б багато нового коду; чим більше запису коду, тим більше помилок, ймовірно, у вашій системі,
- ваше рішення було б справді хакерським, оскільки воно поводитиметься як драйвер пристрою (тобто земля ядра ), що приймає дані від користувацької програми (тобто, земля користувача ), і, швидше за все, не спрацює, буде пекло налагодження і схильне до проблем безпеки. .. Якщо це навіть можливо зробити!
Я використовую Uno, але я перегляну те, що ви опублікували, тому що минулого разу ми розглядали оновлення DFU, але нас ніби бояться не робити речі
Нарешті, у коментарі у вас виникають занепокоєння з приводу того, щоб придушити ардуїно. Будь ласка, повірте мені та автору статті, що ви не можете цеглити свій ардуїно, роблячи спалах мікропрограми:
ПРИМІТКА. Немає шансів "пришвидшити" пристрій за допомогою цього методу. Прошивку завантажувача Arduino завжди можна оновити за допомогою протоколу DFU!
Якщо щось стає не так, і ви отримаєте пошкодження завантажувача у маленькому AVR (atmega8u2), ви все одно можете переробити це за допомогою іншого ардуїно або
програмувача atmel, використовуючи 6 штифтів поруч із роз'ємом USB.
Зрештою, знайте, що єдиний спосіб замурувати AVR, таким чином, і Arduino - це грати з запобіжниками та скидати програмувальні запобіжники. І навіть тоді ви можете використовувати
HVSP, щоб зберегти свій пристрій, хоча часто брати новий чіп часто буває менше.