microscrap/ftdi
Composer 安装命令:
composer require microscrap/ftdi
包简介
libFTDI Bindings for The PHP FTDI Extension
关键字:
README 文档
README
PHP helper library that wraps the ftdi extension with global functions and enums. Each helper delegates to Ftdi\FTDI.
This project provides direct bindings to libftdi1 through helper-style globals.
Highlights
- C-ish global helper API (
ftdi_usb_open,ftdi_read_data, etc.) - Support for serial-only devices (for example FT232RL) and MPSSE-capable devices (for example FT232H)
- USB open/read/write/flush/reset operations
- EEPROM read/write/decode/build operations
- Async transfer submission and completion
Requirements
- PHP 8.3+
- ext-ftdi ^0.4.0 - install from php-io-extensions/ftdi
- Runtime dependency of ext-ftdi:
- Debian/Ubuntu/Raspberry Pi OS:
libftdi1-2(dev package for builds:libftdi1-dev) - macOS:
brew install libftdi
- Debian/Ubuntu/Raspberry Pi OS:
Installation
Confirm ext-ftdi is loaded before using this package:
php -m | grep ftdi
Install the helper package:
composer require microscrap/ftdi
Composer autoloads src/Helpers/ftdi.php, registering global helpers when installed.
Usage
FTDI bindings are exposed as global helper functions (ftdi_new, ftdi_usb_open, etc). Helpers are only defined when a function name is not already taken (function_exists guard), matching the style used in other microscrap binding packages.
Optional enums are available under:
Microscrap\Bindings\FTDI\Enums\FtdiVendorIdMicroscrap\Bindings\FTDI\Enums\FtdiProductId
<?php $ftdi = ftdi_new(); if ($ftdi->handle < 0) { throw new RuntimeException('ftdi_new failed'); } ftdi_init($ftdi); // FT232RL defaults: vendor 0x0403, product 0x6001 if (ftdi_usb_open($ftdi, 0x0403, 0x6001) !== 0) { throw new RuntimeException(ftdi_get_error_string($ftdi)); } ftdi_set_baudrate($ftdi, 115200); ftdi_set_line_property($ftdi, 8, 1, 0); // 8N1 ftdi_write_data($ftdi, "hello\n", 6); $response = ftdi_read_data($ftdi, 256); ftdi_usb_close($ftdi); ftdi_deinit($ftdi); ftdi_free($ftdi);
Constants and enum values follow libftdi1 conventions. Define them in PHP or load them from your platform headers.
Global Helper API
ftdi_new(): Ftdi\FTDIContext
Allocates a new libftdi1 context (ftdi_new). Check $ctx->handle >= 0 before use.
ftdi_init(Ftdi\FTDIContext $ftdi): int
Initialises an allocated context (ftdi_init). Returns 0 on success.
ftdi_deinit(Ftdi\FTDIContext $ftdi): void
Deinitialises the context (ftdi_deinit) without freeing it.
ftdi_free(Ftdi\FTDIContext $ftdi): void
Frees the context (ftdi_free). Do not use it afterward.
ftdi_usb_open(Ftdi\FTDIContext $ftdi, int $vendor, int $product): int
Opens the first device matching vendor/product (ftdi_usb_open). Returns 0 on success.
ftdi_usb_close(Ftdi\FTDIContext $ftdi): int
Closes the open USB connection (ftdi_usb_close).
ftdi_set_baudrate(Ftdi\FTDIContext $ftdi, int $baudrate): int
Sets UART baud rate (ftdi_set_baudrate).
ftdi_set_line_property(Ftdi\FTDIContext $ftdi, int $bits, int $sbit, int $parity): int
Sets line framing (ftdi_set_line_property).
ftdi_write_data(Ftdi\FTDIContext $ftdi, string $data, int $size): int
Writes up to $size bytes (ftdi_write_data).
ftdi_read_data(Ftdi\FTDIContext $ftdi, int $size): string
Reads up to $size bytes (ftdi_read_data).
ftdi_set_bitmode(Ftdi\FTDIContext $ftdi, int $bitmask, int $mode): int
Enables/disables bitbang or MPSSE mode (ftdi_set_bitmode).
ftdi_get_error_string(Ftdi\FTDIContext $ftdi): string
Returns the last libftdi1 error string (ftdi_get_error_string).
Quick reference
| Helper | Signature |
|---|---|
ftdi_new |
ftdi_new(): Ftdi\FTDIContext |
ftdi_init |
ftdi_init(Ftdi\FTDIContext $ftdi): int |
ftdi_set_interface |
ftdi_set_interface(Ftdi\FTDIContext $ftdi, int $iface): int |
ftdi_deinit |
ftdi_deinit(Ftdi\FTDIContext $ftdi): void |
ftdi_free |
ftdi_free(Ftdi\FTDIContext $ftdi): void |
ftdi_set_usb_dev |
ftdi_set_usb_dev(Ftdi\FTDIContext $ftdi, int $usbDevHandle): void |
ftdi_get_library_version |
ftdi_get_library_version(): Ftdi\FTDIVersionInfo |
ftdi_usb_find_all |
ftdi_usb_find_all(Ftdi\FTDIContext $ftdi, int $vendor, int $product): array |
ftdi_list_free |
ftdi_list_free(int $listHandle): void |
ftdi_list_free2 |
ftdi_list_free2(int $listHandle): void |
ftdi_usb_get_strings |
ftdi_usb_get_strings(Ftdi\FTDIContext $ftdi, int $devHandle): array |
ftdi_usb_get_strings2 |
ftdi_usb_get_strings2(Ftdi\FTDIContext $ftdi, int $devHandle): array |
ftdi_usb_open_dev |
ftdi_usb_open_dev(Ftdi\FTDIContext $ftdi, int $devHandle): int |
ftdi_usb_open |
ftdi_usb_open(Ftdi\FTDIContext $ftdi, int $vendor, int $product): int |
ftdi_usb_open_desc |
ftdi_usb_open_desc(Ftdi\FTDIContext $ftdi, int $vendor, int $product, string $description, string $serial): int |
ftdi_usb_open_desc_index |
ftdi_usb_open_desc_index(Ftdi\FTDIContext $ftdi, int $vendor, int $product, string $description, string $serial, int $index): int |
ftdi_usb_open_bus_addr |
ftdi_usb_open_bus_addr(Ftdi\FTDIContext $ftdi, int $bus, int $addr): int |
ftdi_usb_open_string |
ftdi_usb_open_string(Ftdi\FTDIContext $ftdi, string $description): int |
ftdi_usb_close |
ftdi_usb_close(Ftdi\FTDIContext $ftdi): int |
ftdi_usb_reset |
ftdi_usb_reset(Ftdi\FTDIContext $ftdi): int |
ftdi_tci_flush |
ftdi_tci_flush(Ftdi\FTDIContext $ftdi): int |
ftdi_tco_flush |
ftdi_tco_flush(Ftdi\FTDIContext $ftdi): int |
ftdi_tcio_flush |
ftdi_tcio_flush(Ftdi\FTDIContext $ftdi): int |
ftdi_usb_purge_rx_buffer |
ftdi_usb_purge_rx_buffer(Ftdi\FTDIContext $ftdi): int |
ftdi_usb_purge_tx_buffer |
ftdi_usb_purge_tx_buffer(Ftdi\FTDIContext $ftdi): int |
ftdi_usb_purge_buffers |
ftdi_usb_purge_buffers(Ftdi\FTDIContext $ftdi): int |
ftdi_convert_baudrate_ut_export |
ftdi_convert_baudrate_ut_export(int $baudrate, Ftdi\FTDIContext $ftdi): array |
ftdi_set_baudrate |
ftdi_set_baudrate(Ftdi\FTDIContext $ftdi, int $baudrate): int |
ftdi_set_line_property |
ftdi_set_line_property(Ftdi\FTDIContext $ftdi, int $bits, int $sbit, int $parity): int |
ftdi_set_line_property2 |
ftdi_set_line_property2(Ftdi\FTDIContext $ftdi, int $bits, int $sbit, int $parity, int $breakType): int |
ftdi_write_data |
ftdi_write_data(Ftdi\FTDIContext $ftdi, string $data, int $size): int |
ftdi_write_data_submit |
ftdi_write_data_submit(Ftdi\FTDIContext $ftdi, string $data, int $size): Ftdi\FTDITransferControl |
ftdi_read_data_submit |
ftdi_read_data_submit(Ftdi\FTDIContext $ftdi, int $size): Ftdi\FTDITransferControl |
ftdi_transfer_data_done |
ftdi_transfer_data_done(Ftdi\FTDITransferControl $tc): int |
ftdi_transfer_data_cancel |
ftdi_transfer_data_cancel(Ftdi\FTDITransferControl $tc): void |
ftdi_write_data_set_chunksize |
ftdi_write_data_set_chunksize(Ftdi\FTDIContext $ftdi, int $chunksize): int |
ftdi_write_data_get_chunksize |
ftdi_write_data_get_chunksize(Ftdi\FTDIContext $ftdi): int |
ftdi_read_data |
ftdi_read_data(Ftdi\FTDIContext $ftdi, int $size): string |
ftdi_read_data_set_chunksize |
ftdi_read_data_set_chunksize(Ftdi\FTDIContext $ftdi, int $chunksize): int |
ftdi_read_data_get_chunksize |
ftdi_read_data_get_chunksize(Ftdi\FTDIContext $ftdi): int |
ftdi_set_bitmode |
ftdi_set_bitmode(Ftdi\FTDIContext $ftdi, int $bitmask, int $mode): int |
ftdi_disable_bitbang |
ftdi_disable_bitbang(Ftdi\FTDIContext $ftdi): int |
ftdi_read_pins |
ftdi_read_pins(Ftdi\FTDIContext $ftdi): int |
ftdi_set_latency_timer |
ftdi_set_latency_timer(Ftdi\FTDIContext $ftdi, int $latency): int |
ftdi_set_timeouts |
ftdi_set_timeouts(Ftdi\FTDIContext $ftdi, int $readTimeout, int $writeTimeout): void |
ftdi_get_latency_timer |
ftdi_get_latency_timer(Ftdi\FTDIContext $ftdi): int |
ftdi_poll_modem_status |
ftdi_poll_modem_status(Ftdi\FTDIContext $ftdi): int |
ftdi_setflowctrl |
ftdi_setflowctrl(Ftdi\FTDIContext $ftdi, int $flowctrl): int |
ftdi_setflowctrl_xonxoff |
ftdi_setflowctrl_xonxoff(Ftdi\FTDIContext $ftdi, int $xon, int $xoff): int |
ftdi_setdtr |
ftdi_setdtr(Ftdi\FTDIContext $ftdi, int $state): int |
ftdi_setrts |
ftdi_setrts(Ftdi\FTDIContext $ftdi, int $state): int |
ftdi_setdtr_rts |
ftdi_setdtr_rts(Ftdi\FTDIContext $ftdi, int $dtr, int $rts): int |
ftdi_set_event_char |
ftdi_set_event_char(Ftdi\FTDIContext $ftdi, int $eventch, int $enable): int |
ftdi_set_error_char |
ftdi_set_error_char(Ftdi\FTDIContext $ftdi, int $errorch, int $enable): int |
ftdi_get_eeprom |
ftdi_get_eeprom(Ftdi\FTDIContext $ftdi): Ftdi\FTDIEeprom |
ftdi_eeprom_initdefaults |
ftdi_eeprom_initdefaults(Ftdi\FTDIContext $ftdi, string $manufacturer, string $product, string $serial): int |
ftdi_eeprom_set_strings |
ftdi_eeprom_set_strings(Ftdi\FTDIContext $ftdi, string $manufacturer, string $product, string $serial): int |
ftdi_eeprom_get_strings |
ftdi_eeprom_get_strings(Ftdi\FTDIContext $ftdi): array |
set_ft232h_cbus |
set_ft232h_cbus(Ftdi\FTDIEeprom $eeprom): string |
ftdi_eeprom_build |
ftdi_eeprom_build(Ftdi\FTDIContext $ftdi): int |
ftdi_eeprom_decode |
ftdi_eeprom_decode(Ftdi\FTDIContext $ftdi, int $verbose): int |
ftdi_get_eeprom_value |
ftdi_get_eeprom_value(Ftdi\FTDIContext $ftdi, int $valueName): int |
ftdi_set_eeprom_value |
ftdi_set_eeprom_value(Ftdi\FTDIContext $ftdi, int $valueName, int $value): int |
ftdi_get_eeprom_buf |
ftdi_get_eeprom_buf(Ftdi\FTDIContext $ftdi, int $size): string |
ftdi_set_eeprom_buf |
ftdi_set_eeprom_buf(Ftdi\FTDIContext $ftdi, string $buf): int |
ftdi_set_eeprom_user_data |
ftdi_set_eeprom_user_data(Ftdi\FTDIContext $ftdi, string $buf): int |
ftdi_read_eeprom_location |
ftdi_read_eeprom_location(Ftdi\FTDIContext $ftdi, int $addr): int |
ftdi_read_eeprom |
ftdi_read_eeprom(Ftdi\FTDIContext $ftdi): int |
ftdi_read_chip_id |
ftdi_read_chip_id(Ftdi\FTDIContext $ftdi, ?int &$chip_id): int |
ftdi_write_eeprom_location |
ftdi_write_eeprom_location(Ftdi\FTDIContext $ftdi, int $addr, int $val): int |
ftdi_write_eeprom |
ftdi_write_eeprom(Ftdi\FTDIContext $ftdi): int |
ftdi_erase_eeprom |
ftdi_erase_eeprom(Ftdi\FTDIContext $ftdi): int |
ftdi_get_error_string |
ftdi_get_error_string(Ftdi\FTDIContext $ftdi): string |
License
MIT. See LICENSE.
microscrap/ftdi 适用场景与选型建议
microscrap/ftdi 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 9 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 05 月 21 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「framework」 「scrapyard-io」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 microscrap/ftdi 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 microscrap/ftdi 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 microscrap/ftdi 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
PHP Framework HLEB2 is the foundation of the web application. Provides ease of development and application performance.
High-performance, opinionated PHP 8 web framework with O(1) routing, parallel async MySQL, type-safe asset bridge, and React-island frontend
Drive Barometric Pressure sensors from Bosch Sensortec over I2C with PHP
Drive VEML7000 lux sensors over I2C with PHP
Drive BH1750 ALS sensors over I2C with PHP
The skeleton application for the Geoffrey agent framework.
统计信息
- 总下载量: 9
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 9
- 依赖项目数: 2
- 推荐数: 1
其他信息
- 授权协议: MIT
- 更新时间: 2026-05-21