CI實例 | 地位 |
---|---|
Linux/macOS/Windows (master) | |
Windows (master) | |
BSD, last build (branch/PR) | |
Coverity Scan (last) |
HIDAPI 是一個多平台庫,可讓應用程式與 Windows、Linux、FreeBSD 和 macOS 上的 USB 和藍牙 HID 類別裝置進行互動。 HIDAPI 可以建置為共用程式庫( .so
、 .dll
或.dylib
),也可以透過新增單一原始檔(每個平台)和單一標頭直接嵌入到目標應用程式中。
請參閱有關直接嵌入到建置系統中的備註。
HIDAPI 函式庫最初由 Alan Ott (signal11) 開發。
它於 2019 年 6 月 4 日轉移到 libusb/hidapi,以合併重要的錯誤修復並繼續庫的開發。
hid.dll
)在 Linux 上,可以使用 hidraw 或 libusb 後端。存在權衡,並且支援的功能略有不同。兩者都是預設建置的。由連結到 hidapi 的應用程式在連結時透過連結到libhidapi-libusb
或libhidapi-hidraw
來選擇後端。
請注意,您需要在應用程式中安裝 udev 規則文件,以便非特權使用者能夠使用 hidapi 存取 HID 裝置。有關範例,請參閱udev
目錄中的 69-hid.rules 檔案。
linux/hid.c
):此後端使用Linux核心中的hidraw接口,並支援USB和藍牙HID設備。建構它需要至少 2.6.39 的核心版本。此外,它只會與具有關聯的 hidraw 節點的裝置進行通訊。因具有 hidraw 節點而被列入黑名單的鍵盤、滑鼠和其他一些裝置將無法運作。幸運的是,對於 hidraw 的幾乎所有用途來說,這都不是問題。
libusb/hid.c
):此後端使用 libusb-1.0 直接與 USB 設備通訊。此後端當然不適用於藍牙裝置。
HIDAPI 還附帶一個測試 GUI。測試 GUI 是跨平台的,並使用 Fox Toolkit http://www.fox-toolkit.org。它將建構在 HIDAPI 支援的每個平台上。由於它依賴第三方庫,因此構建它是可選的,但在調試硬體時非常有用。
注意:HIDAPI 團隊並未積極開發或支援基於 Fox Toolkit 的測試 GUI。它被保存下來作為歷史文物。它甚至可能有時或在某些平台上工作,但它不會獲得任何新功能或錯誤修復。
未提供在每個平台上安裝 Fox-Toolkit 的說明。如果您選擇使用 Fox-Toolkit v1.6,請確保使用它。
如果您想在開始使用 HIDAPI 進行任何開發之前先嘗試 HID 設備,並且使用 GUI 應用程式不適合您,您可以嘗試hidapitester
。
該應用程式有一個控制台介面,可實現 HIDAPI 庫支援的大部分功能。
API 提供最常用的 HID 功能,包括傳送和接收輸入、輸出和功能報告。與 Microchip USB Generic HID 範例的嚴重破解版本進行通訊的範例程式如下所示(為簡單起見,刪除了錯誤檢查):
警告:僅運行您理解的程式碼,並且僅當它符合設備規範時。向 HID 裝置隨機寫入資料 ( hid_write
) 可能會破壞它們。
#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 以了解詳細資訊。