مثيل 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 kernel، وتدعم كلاً من أجهزة USB وBluetooth HID. يتطلب إصدار kernel 2.6.39 على الأقل للإنشاء. بالإضافة إلى ذلك، فإنه سيتواصل فقط مع الأجهزة التي لها عقد hidraw مرتبطة بها. لن تعمل لوحات المفاتيح وأجهزة الماوس وبعض الأجهزة الأخرى المدرجة في القائمة السوداء بسبب وجود عقد hidraw. لحسن الحظ، بالنسبة لجميع استخدامات hidraw تقريبًا، لا يمثل هذا مشكلة.
libusb/hid.c
):تستخدم هذه الواجهة الخلفية libusb-1.0 للاتصال مباشرة بجهاز USB. بالطبع لن تعمل هذه الواجهة الخلفية مع أجهزة البلوتوث.
يأتي HIDAPI أيضًا مع واجهة المستخدم الرسومية للاختبار. واجهة المستخدم الرسومية للاختبار عبارة عن منصة مشتركة وتستخدم مجموعة أدوات Fox http://www.fox-toolkit.org. سيتم البناء على كل منصة تدعمها HIDAPI. ونظرًا لأنها تعتمد على مكتبة تابعة لجهة خارجية، فإن بنائها يعد أمرًا اختياريًا ولكنه مفيد عند تصحيح أخطاء الأجهزة.
ملحوظة: اختبار واجهة المستخدم الرسومية المستندة إلى Fox Toolkit لم يتم تطويره أو دعمه بشكل نشط من قبل فريق HIDAPI. يتم الاحتفاظ بها كقطعة أثرية تاريخية. قد يعمل حتى في وقت ما أو على بعض الأنظمة الأساسية، لكنه لن يحصل على أي ميزات جديدة أو إصلاحات للأخطاء.
لا يتم توفير تعليمات تثبيت Fox-Toolkit على كل نظام أساسي. تأكد من استخدام Fox-Toolkit v1.6 إذا اخترت استخدامه.
إذا كنت تريد تجربة جهاز HID الخاص بك قبل البدء في أي تطوير باستخدام HIDAPI وكان استخدام تطبيق واجهة المستخدم الرسومية (GUI) ليس خيارًا بالنسبة لك، فيمكنك تجربة hidapitester
.
يحتوي هذا التطبيق على واجهة وحدة تحكم لمعظم الميزات التي تدعمها مكتبة HIDAPI.
توفر واجهة برمجة التطبيقات وظائف 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 للحصول على التفاصيل.