gousb
gousb 包试图将 libusb 库包装成 Go-like 绑定。
支持的平台包括:
- linux
- darwin
- windows
https://github.com/google/gousb 是 https://github.com/kylelemons/gousb 的 2.0 版。其 API 与 1.0 版本不向后兼容。截至 2017 年 7 月 13 日,2.0 API 被认为是稳定的,1.0 被弃用。
安装
依赖
Windows 环境下 gousb 依赖下面三个部分:
- GCC (base on MSYS2/MINGW)
- pkg-config
- libusb-1.0
MSYS2
官网地址:https://www.msys2.org/
发布地址:https://github.com/msys2/msys2-installer/releases
下载地址:https://github.com/msys2/msys2-installer/releases/download/2022-06-03/msys2-x86_64-20220603.exe
安装 MSYS2
请不要更改安装路径
立即运行
gcc
安装 gcc
在 MSYS2 中输入以下内容
pacman -S mingw-w64-x86_64-gcc
输入 y
同意安装
libusb
安装 libusb
在 MSYS2 中输入以下内容
pacman -S mingw-w64-x86_64-libusb
检查安装
输入以下内容,得到安装信息
pacman -Qs libusb
列出 libusb 包内容
pacman -Ql mingw-w64-x86_64-libusb
将 MSYS 的 MINGW 环境 C:\msys64\mingw64\bin
添加到环境变量
确定后,关闭 MSYS2 窗口,重新打开 MSYS2
pkg-config
安装 pkg-config
pacman -S mingw-w64-x86_64-pkg-config
测试 libusb 和 pkg-config 安装
打开 cmd 或 powershell,输入
pkg-config --cflags libusb-1.0
应得到
-IC:/msys64/mingw64/include/libusb-1.0
输入
pkg-config --libs libusb-1.0
应得到
-LC:/msys64/mingw64/lib -lusb-1.0
安装 gousb
go get -v github.com/google/gousb
基础测试代码
package main
import (
"fmt"
"log"
"github.com/google/gousb"
)
func main() {
// Initialize a new Context.
ctx := gousb.NewContext()
defer ctx.Close()
// Open any device with a given VID/PID using a convenience function.
dev, err := ctx.OpenDeviceWithVIDPID(0x046d, 0xc526)
if err != nil {
log.Fatalf("Could not open a device: %v", err)
}
defer dev.Close()
// Claim the default interface using a convenience function.
// The default interface is always #0 alt #0 in the currently active
// config.
intf, done, err := dev.DefaultInterface()
if err != nil {
log.Fatalf("%s.DefaultInterface(): %v", dev, err)
}
defer done()
// Open an OUT endpoint.
ep, err := intf.OutEndpoint(7)
if err != nil {
log.Fatalf("%s.OutEndpoint(7): %v", intf, err)
}
// Generate some data to write.
data := make([]byte, 5)
for i := range data {
data[i] = byte(i)
}
// Write data to the USB device.
numBytes, err := ep.Write(data)
if numBytes != 5 {
log.Fatalf("%s.Write([5]): only %d bytes written, returned error is %v", ep, numBytes, err)
}
fmt.Println("5 bytes successfully sent to the endpoint")
}