m3m0r7 / php-libusb
0.0.1
2024-03-15 15:36 UTC
Requires
- symfony/process: ^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.51
- phpunit/phpunit: ^11.0
- rector/rector: ^1.0
- squizlabs/php_codesniffer: ^3.9
README
这是什么?
此项目是对 libusb 进行 PHP 封装的。libusb是用C编写的,通过PHP FFI桥接到它。这是一个实验性项目。
需求
- PHP 8.3+
- libusb
准备
macOS
- 如果您使用macOS,请通过brew安装libusb
$ brew install libusb
- 您将在这里获取动态库
/opt/homebrew/Cellar/libusb/<your libusb version>/lib/libusb-<your libusb version>.dylib
- 您将在这里获取头文件
/opt/homebrew/Cellar/libusb/<your libusb version>/include/libusb-<your libusb version>/libusb.h
Windows
待定
Ubuntu
待定
入门
快速开始
- 安装此库
$ composer require m3m0r7/php-libusb
- 编写以下快速入门代码并将其保存为
test.php
<?php require __DIR__ . '/vendor/autoload.php'; $libusb = new \Libusb\Libusb( new \Libusb\LibusbHandle( new \Libusb\Connector\Libusb1_0( new \Libusb\Loader\FileLoader( // Set libusb header file here: '/path/to/libusb.h', // Set libusb library // Replace "so" to "dylib" if you use macOS: '/path/to/libusb-1.0.so', ), ) ), ); /** * @var \Libusb\Device\DeviceInterface $device */ foreach ($libusb->devices() as $device) { printf( "%s (serial: %s)\n", $device->descriptor()->product(), $device->descriptor()->serialNumber(), ); }
- 运行
php test.php以获取设备列表
$ php test.php
USB Single Serial (serial: XXX)
YubiKey OTP+FIDO+CCID (serial: XXX)
USB2.0 Hub (serial: XXX)
USB3.1 Hub (serial: XXX)
4-Port USB 2.0 Hub (serial: XXX)
Logitech StreamCam (serial: XXX)
从串行端口发送/接收数据包
- 编写以下代码并将其保存为
test2.php
<?php require __DIR__ . '/vendor/autoload.php'; $libusb = new \Libusb\Libusb( new \Libusb\LibusbHandle( new \Libusb\Connector\Libusb1_0( new \Libusb\Loader\FileLoader( // Set libusb header file here: '/path/to/libusb.h', // Set libusb library // Replace "so" to "dylib" if you use macOS: '/path/to/libusb-1.0.so', ), ) ), ); /** * @var \Libusb\Device\DeviceInterface $device */ [$device] = $libusb->devices( // Specify vendor id is here 0x0101, // Specify product id is here 0xabab, ); $device // Set configuration ->setConfiguration(1) // Set claim interface ->setClaimInterface(0); // Create bulk transfer endpoint $bulkTransfer = $device->bulkTransferEndpoints(); // Send packet $bulkTransfer ->send( (string) new \Libusb\Stream\Packet([0x01, 0x02, 0x03, 0x04]), ); // Received packet $received = $bulkTransfer ->receive();
- 运行
php test2.php然后向设备发送数据包并从它接收。
如何测试
./vendor/bin/phpunit
许可
MIT