m3m0r7/php-libusb

0.0.1 2024-03-15 15:36 UTC

This package is auto-updated.

Last update: 2024-09-15 16:36:41 UTC


README

这是什么?

此项目是对 libusb 进行 PHP 封装的。libusb是用C编写的,通过PHP FFI桥接到它。这是一个实验性项目

需求

  • PHP 8.3+
  • libusb

准备

macOS

  1. 如果您使用macOS,请通过brew安装libusb
$ brew install libusb
  1. 您将在这里获取动态库
/opt/homebrew/Cellar/libusb/<your libusb version>/lib/libusb-<your libusb version>.dylib
  1. 您将在这里获取头文件
/opt/homebrew/Cellar/libusb/<your libusb version>/include/libusb-<your libusb version>/libusb.h

Windows

待定

Ubuntu

待定

入门

快速开始

  1. 安装此库
$ composer require m3m0r7/php-libusb
  1. 编写以下快速入门代码并将其保存为 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(),
    );
}
  1. 运行 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)

从串行端口发送/接收数据包

  1. 编写以下代码并将其保存为 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();
  1. 运行 php test2.php 然后向设备发送数据包并从它接收。

如何测试

./vendor/bin/phpunit

许可

MIT