อินสแตนซ์ CI | สถานะ |
---|---|
Linux/macOS/Windows (master) | |
Windows (master) | |
BSD, last build (branch/PR) | |
Coverity Scan (last) |
HIDAPI เป็นไลบรารีหลายแพลตฟอร์มที่อนุญาตให้แอปพลิเคชันเชื่อมต่อกับอุปกรณ์ USB และ Bluetooth HID-Class บน Windows, Linux, FreeBSD และ macOS HIDAPI สามารถสร้างเป็นไลบรารีที่ใช้ร่วมกัน ( .so
, .dll
หรือ .dylib
) หรือสามารถฝังลงในแอปพลิเคชันเป้าหมายได้โดยตรงโดยการเพิ่มไฟล์ ต้นฉบับเดียว (ต่อแพลตฟอร์ม) และส่วนหัวเดียว
ดูหมายเหตุเกี่ยวกับการฝังลงในระบบบิลด์ของคุณ โดยตรง
ห้องสมุด HIDAPI ได้รับการพัฒนาโดย Alan Ott (signal11)
มันถูกย้ายไปที่ libusb/hidapi เมื่อวันที่ 4 มิถุนายน 2019 เพื่อรวมการแก้ไขข้อบกพร่องที่สำคัญและพัฒนาห้องสมุดต่อไป
hid.dll
) บน Linux สามารถใช้แบ็คเอนด์ hidraw หรือ libusb ได้ มีข้อดีข้อเสียอยู่บ้าง และฟังก์ชันการทำงานที่รองรับจะแตกต่างออกไปเล็กน้อย ทั้งสองถูกสร้างขึ้นโดยค่าเริ่มต้น ขึ้นอยู่กับแอปพลิเคชันที่ลิงก์กับ hidapi เพื่อเลือกแบ็กเอนด์ในเวลาลิงก์โดยลิงก์ไปที่ libhidapi-libusb
หรือ libhidapi-hidraw
โปรดทราบว่าคุณจะต้องติดตั้งไฟล์กฎ udev พร้อมกับแอปพลิเคชันของคุณสำหรับผู้ใช้ที่ไม่มีสิทธิ์จึงจะสามารถเข้าถึงอุปกรณ์ HID ด้วย hidapi โปรดดูตัวอย่างไฟล์ 69-hid.rules ในไดเร็กทอรี udev
linux/hid.c
):แบ็กเอนด์นี้ใช้อินเทอร์เฟซ hidraw ในเคอร์เนล Linux และรองรับทั้งอุปกรณ์ USB และ Bluetooth HID ต้องใช้เวอร์ชันเคอร์เนลอย่างน้อย 2.6.39 ในการสร้าง นอกจากนี้ มันจะสื่อสารกับอุปกรณ์ที่มีโหนด hidraw เชื่อมโยงอยู่เท่านั้น คีย์บอร์ด เมาส์ และอุปกรณ์อื่นๆ บางอย่างที่ถูกขึ้นบัญชีดำจากการมีโหนด hidraw จะไม่ทำงาน โชคดีที่สำหรับการใช้งาน hidraw เกือบทั้งหมด นี่ไม่ใช่ปัญหา
libusb/hid.c
):แบ็กเอนด์นี้ใช้ libusb-1.0 เพื่อสื่อสารโดยตรงกับอุปกรณ์ USB แน่นอนว่าแบ็คเอนด์นี้จะใช้ไม่ได้กับอุปกรณ์บลูทูธ
HIDAPI ยังมาพร้อมกับ Test GUI GUI ทดสอบเป็นแบบข้ามแพลตฟอร์มและใช้ Fox Toolkit http://www.fox-toolkit.org มันจะสร้างบนทุกแพลตฟอร์มที่ HIDAPI รองรับ เนื่องจากต้องใช้ไลบรารีของบุคคลที่สาม การสร้างจึงเป็นทางเลือก แต่จะมีประโยชน์เมื่อทำการดีบักฮาร์ดแวร์
หมายเหตุ: ทดสอบ GUI ที่ใช้ Fox Toolkit ไม่ได้รับการพัฒนาหรือสนับสนุนโดยทีม HIDAPI มันถูกเก็บไว้เป็นสิ่งประดิษฐ์ทางประวัติศาสตร์ มันอาจจะใช้งานได้บางครั้งหรือบนบางแพลตฟอร์ม แต่จะไม่ได้รับฟีเจอร์ใหม่หรือการแก้ไขข้อบกพร่องใด ๆ
ไม่มีคำแนะนำในการติดตั้ง Fox-Toolkit บนแต่ละแพลตฟอร์ม ตรวจสอบให้แน่ใจว่าใช้ Fox-Toolkit v1.6 หากคุณเลือกใช้
หากคุณต้องการทดลองใช้อุปกรณ์ HID ของคุณก่อนเริ่มการพัฒนาใดๆ ด้วย HIDAPI และการใช้แอป GUI ไม่ใช่ตัวเลือกสำหรับคุณ คุณอาจลองใช้ hidapitester
แอปนี้มีอินเทอร์เฟซคอนโซลสำหรับฟีเจอร์ส่วนใหญ่ที่รองรับโดยไลบรารี HIDAPI
API มีฟังก์ชัน HID ที่ใช้บ่อยที่สุด รวมถึงการส่งและรับรายงานอินพุต เอาต์พุต และฟีเจอร์ โปรแกรมตัวอย่างซึ่งสื่อสารกับตัวอย่าง Microchip USB Generic HID เวอร์ชันที่ถูกแฮ็กอย่างหนักมีลักษณะดังนี้ (โดยนำการตรวจสอบข้อผิดพลาดออกเพื่อความง่าย):
คำเตือน: เรียกใช้เฉพาะโค้ดที่คุณเข้าใจ และเฉพาะเมื่อสอดคล้องกับข้อมูลจำเพาะของอุปกรณ์เท่านั้น การเขียนข้อมูล ( hid_write
) แบบสุ่มไปยังอุปกรณ์ HID ของคุณอาจทำให้ข้อมูลเสียหายได้
#include // printf
#include // wchar_t
#include
#define MAX_STR 255
int main ( int argc , char * argv [])
{
int res ;
unsigned char buf [ 65 ];
wchar_t wstr [ MAX_STR ];
hid_device * handle ;
int i ;
// Initialize the hidapi library
res = hid_init ();
// Open the device using the VID, PID,
// and optionally the Serial number.
handle = hid_open ( 0x4d8 , 0x3f , NULL );
if (! handle ) {
printf ( "Unable to open devicen" );
hid_exit ();
return 1 ;
}
// Read the Manufacturer String
res = hid_get_manufacturer_string ( handle , wstr , MAX_STR );
printf ( "Manufacturer String: %lsn" , wstr );
// Read the Product String
res = hid_get_product_string ( handle , wstr , MAX_STR );
printf ( "Product String: %lsn" , wstr );
// Read the Serial Number String
res = hid_get_serial_number_string ( handle , wstr , MAX_STR );
printf ( "Serial Number String: (%d) %lsn" , wstr [ 0 ], wstr );
// Read Indexed String 1
res = hid_get_indexed_string ( handle , 1 , wstr , MAX_STR );
printf ( "Indexed String 1: %lsn" , wstr );
// Toggle LED (cmd 0x80). The first byte is the report number (0x0).
buf [ 0 ] = 0x0 ;
buf [ 1 ] = 0x80 ;
res = hid_write ( handle , buf , 65 );
// Request state (cmd 0x81). The first byte is the report number (0x0).
buf [ 0 ] = 0x0 ;
buf [ 1 ] = 0x81 ;
res = hid_write ( handle , buf , 65 );
// Read requested state
res = hid_read ( handle , buf , 65 );
// Print out the returned buffer.
for ( i = 0 ; i < 4 ; i ++ )
printf ( "buf[%d]: %dn" , i , buf [ i ]);
// Close the device
hid_close ( handle );
// Finalize the hidapi library
res = hid_exit ();
return 0 ;
}
คุณยังสามารถใช้ hidtest/test.c เป็นจุดเริ่มต้นสำหรับแอปพลิเคชันของคุณได้
HIDAPI อาจถูกใช้โดยหนึ่งในสามใบอนุญาตตามที่ระบุไว้ใน LICENSE.txt
หากคุณต้องการสร้างแอปพลิเคชันของคุณเองที่ใช้อุปกรณ์ HID ที่มี HIDAPI คุณจะต้องได้รับแพ็คเกจการพัฒนา HIDAPI
ขึ้นอยู่กับสภาพแวดล้อมการพัฒนาของคุณ HIDAPI น่าจะมาจากผู้จัดการแพ็คเกจของคุณ
ตัวอย่างเช่นบน Ubuntu HIDAPI มีให้บริการผ่าน APT:
sudo apt install libhidapi-dev
ชื่อแพ็คเกจ HIDAPI สำหรับระบบ/ตัวจัดการแพ็คเกจอื่นอาจแตกต่างกัน ตรวจสอบเอกสาร/รายการแพ็คเกจของผู้จัดการแพ็คเกจของคุณ
ตรวจสอบ BUILD.md เพื่อดูรายละเอียด