เป็นไปได้ไหมที่จะสร้างอุปกรณ์ 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
ตัวละครที่เป็นหนึ่งในคีย์ตัวปรับแต่งที่คุณมีในแป้นพิมพ์ (กะ Control, Alt ... ), 0x00
เป็นตัวปรับแต่งไม่มี
- ฉันจะเขียนไดรเวอร์อุปกรณ์หน้าต่างใหม่ได้หรือไม่
ไม่คุณไม่ต้องการ! ด้วยการอัปเกรด DFU หน้าต่างของคุณจะถูกมองว่าเป็นแป้นพิมพ์ USB จากหน้าต่าง arduino
- ฉันจะสร้างเลเยอร์ซอฟต์แวร์ที่สามารถใช้ข้อมูลอนุกรมของฉันและให้ windows อ่านเป็นอินพุต HID ได้หรือไม่
คุณไม่จำเป็นต้องทำเช่นนั้นและจริง ๆ แล้วมันเป็นความคิดที่แย่มากด้วยเหตุผลหลายประการ:
- โซลูชันของคุณจะไม่สามารถพกพาได้ดังนั้นคุณต้องแฮ็คบางอย่างสำหรับทุกแพลตฟอร์มที่คุณใช้
- วิธีการแก้ปัญหาของคุณจะหมายถึงรหัสใหม่จำนวนมาก ยิ่งเขียนโค้ดได้มากเท่าไหร่ก็ยิ่งมีข้อบกพร่องมากขึ้นในระบบของคุณ
- วิธีการแก้ปัญหาของคุณจะแฮ็คจริงๆเพราะมันจะทำหน้าที่เป็นไดรเวอร์อุปกรณ์ (เช่นเคอร์เนลที่ดิน ) รับข้อมูลจากโปรแกรมผู้ใช้ (เช่นผู้ใช้ที่ดิน ) และมีแนวโน้มที่จะไม่ทำงานเป็นนรกที่จะดีบั๊กและมีแนวโน้มสำหรับปัญหาด้านความปลอดภัย .. ถ้าเป็นไปได้ที่จะทำ!
ฉันใช้ Uno แต่ฉันจะดูสิ่งที่คุณโพสต์เพราะครั้งล่าสุดที่เราพิจารณาการอัปเดต DFU แต่เรากลัวสิ่งที่ก่ออิฐ
ในที่สุดคุณก็มีความกังวลเกี่ยวกับการปิดกั้น aarduino ของคุณ โปรดเชื่อฉันและผู้เขียนของบทความที่คุณไม่สามารถอิฐของคุณ Arduino ทำเฟิร์มแวร์แฟลช:
หมายเหตุ: ไม่มีโอกาสที่ 'การก่ออิฐ' กับอุปกรณ์โดยใช้วิธีนี้ เฟิร์มแวร์ bootloader Arduino สามารถอัปเดตได้ตลอดเวลาโดยใช้โปรโตคอล DFU!
ในกรณีที่มีบางอย่างผิดพลาดมากและคุณได้รับความเสียหายจาก bootloader ใน AVR ตัวเล็ก ๆ (atmega8u2) คุณยังสามารถ reflash โดยใช้ arduino อื่นหรือ
โปรแกรมเมอร์ atmelโดยใช้ 6 พินถัดจากปลั๊ก USB
ในท้ายที่สุดรู้ว่าวิธีเดียวที่จะสร้าง AVR แบบ AVR ได้เช่นกันคือการเล่นกับฟิวส์และรีเซ็ตฟิวส์แบบโปรแกรม และถึงตอนนั้นคุณอาจใช้
HVSPเพื่อบันทึกอุปกรณ์ของคุณแม้ว่ามันจะเป็นปัญหาน้อยกว่าที่จะเพียงแค่ใช้ชิปใหม่