#laser #embedded-hal #read-write #ppcl

无std itla

ITLA(微激光)非阻塞控制库,使用嵌入式-hal

3个版本

0.1.2 2022年1月17日
0.1.1 2021年11月2日
0.1.0 2021年11月2日

#655嵌入式开发

LGPL-3.0-or-later

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_resetn_disn_msOutputPin,可以是物理的或模拟的(如果您不想控制这些线)。 serial 需要实现来自 嵌入式-halReadWrite

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