3个版本
0.1.2 | 2022年1月17日 |
---|---|
0.1.1 | 2021年11月2日 |
0.1.0 | 2021年11月2日 |
#655 在 嵌入式开发
52KB
1K SLoC
ITLA-rs
ITLA-rs
是一个库,通过串行接口以非阻塞方式控制ITLA(微激光)。
有关ITLA的详细信息,请参阅https://www.oiforum.com/wp-content/uploads/2019/01/OIF-ITLA-MSA-01.3.pdf。
该库使用嵌入式-hal,因此可以在微控制器以及Linux系统上使用。
目前,仅实现了PPCL200上的厂商特定寄存器。如果您想添加更多寄存器,可以发送合并请求。
示例
以下是该库使用示例。 n_reset
、n_dis
和 n_ms
是 OutputPin
,可以是物理的或模拟的(如果您不想控制这些线)。 serial
需要实现来自 嵌入式-hal
的 Read
和 Write
。
let mut laser = Laser::new(n_reset, n_dis, n_ms, srq, serial).unwrap();
laser.enable().unwrap();
laser.send(itla::registers::Status::read()); // This only starts the command
let out = nb::block!(laser.step()).unwrap(); // You need to poll it until completion
// You can either call `nb::block!` to wait in a busy loop, or wait for interrupts on your microcontroller
let value: u16 = out.val(); // Get output value
当激光器返回“命令挂起”响应时,库将等待该命令完成。默认情况下,它将忙等并等待完成,但您可以选择添加延迟并/或限制重试次数,可以使用带有闭包作为最后一个参数的 new_with_handler_between_retries
构造函数。这将在每个待处理命令请求之间调用。当您想终止时,可以返回 AfterRequest::Exit
。
let mut laser = Laser::new_with_handler_between_retries(n_reset, n_dis, n_ms, srq, serial, Some(|retry_nb| {
cortex_m::asm::delay(10_000_000 * retry_nb);
if retry_nb > 200 {
AfterRequest::Exit
} else {
AfterRequest::Continue
}
})).unwrap();
许可证
根据GNU通用公共许可证,版本3.0或更高版本许可(https://www.gnu.org/licenses/lgpl-3.0.en.html)
贡献
除非您明确说明,否则您有意提交以包含在作品中的任何贡献,根据LGPL-3.0许可证定义,应按上述方式许可,不附加任何其他条款或条件。
依赖关系
~1.2–1.8MB
~37K SLoC