7 个版本
0.3.1 | 2021 年 5 月 12 日 |
---|---|
0.3.0 | 2021 年 4 月 14 日 |
0.2.1 | 2021 年 3 月 26 日 |
0.1.4 | 2020 年 11 月 18 日 |
#415 在 硬件支持 中
38 每月下载量
1MB
28K SLoC
pico-sdk
为 Pico Technology 示波器驱动程序提供非官方的 Rust 绑定和包装
这是一个元 crate,重新导出多个子 crate 的功能。这些子 crate 提供了常见的、高性能的、高级 API,隐藏了多个 Pico 驱动程序之间的差异。
子 crate
-
常见的枚举、结构体和特质。pico-common
-
为每个 Pico 示波器驱动程序提供动态加载的不安全绑定。 此 crate 包含不安全代码。pico-sys-dynamic
-
实现pico-driver
PicoDriver
特质的常见、安全的包装。 此 crate 包含不安全代码。 -
在任意平台上下载缺少的驱动程序。pico-download
-
在pico-device
PicoDriver
特质之上提供设备抽象。检测可用通道和有效范围。 -
跨驱动程序设备枚举。通过 USB 厂商 ID 检测设备,仅加载所需的驱动程序。pico-enumeration
-
在pico-streaming
PicoDevice
之上实现连续的无间隙流。
先决条件
在 Linux 上,pico-enumeration
需要 libudev-dev
被安装。
测试
一些测试打开并从设备流式传输数据,如果设备不可用(例如在 CI 中运行时),这些测试将失败。要运行这些测试,请确保也运行了忽略的测试
cargo测试 ----已忽略
示例
有许多示例演示了如何使用包装器
cargo运行 --示例streaming_cli
显示一个交互式命令行界面,允许选择设备、通道配置和采样率。一旦开始捕获,流速率将显示,并显示通道值。
cargo运行 --示例enumerate
尝试枚举设备,并从缓存位置未找到的驱动程序下载。
cargo运行 --示例open<driver> <serial>
加载指定的驱动程序并尝试打开可选指定的设备串行。
用法示例
以 PicoDevice
的形式打开和配置特定的 ps2000 设备
use std::sync::Arc;
use pico_sdk::prelude::*;
let driver = Driver::PS2000.try_load()?;
let device = PicoDevice::try_open(&driver, Some("ABC/123"))?;
枚举所有必需的 Pico 示波器驱动程序,配置返回的第一个设备并从它那里流式传输无缝数据
use std::sync::Arc;
use pico_sdk::prelude::*;
let enumerator = DeviceEnumerator::new();
// Enumerate, ignore all failures and get the first device
let enum_device = enumerator
.enumerate()
.into_iter()
.flatten()
.next()
.expect("No device found");
let device = enum_device.open()?;
// Get a streaming device
let stream_device = device.into_streaming_device();
// Enable and configure 2 channels
stream_device.enable_channel(PicoChannel::A, PicoRange::X1_PROBE_2V, PicoCoupling::DC);
stream_device.enable_channel(PicoChannel::B, PicoRange::X1_PROBE_1V, PicoCoupling::AC);
struct StdoutHandler;
impl NewDataHandler for StdoutHandler {
fn handle_event(&self, event: &StreamingEvent) {
println!("Sample count: {}", event.length);
}
}
// When handler goes out of scope, the subscription is dropped
let handler = Arc::new(StdoutHandler);
// Subscribe to streaming events
stream_device.new_data.subscribe(handler.clone());
// Start streaming with 1k sample rate
stream_device.start(1_000)?;
枚举所有必需的 Pico 示波器驱动程序。如果找到设备但没有匹配的驱动程序,尝试下载缺少的驱动程序并再次枚举
use pico_sdk::prelude::*;
let enumerator = DeviceEnumerator::with_resolution(cache_resolution());
loop {
let results = enumerator.enumerate();
println!("{:#?}", results);
let missing_drivers = results.missing_drivers();
if !missing_drivers.is_empty() {
download_drivers_to_cache(&missing_drivers)?;
} else {
break;
}
}
许可:MIT
依赖项
~9–21MB
~397K SLoC