6 个版本

3.0.0-rc2 2024年8月13日
3.0.0-rc0 2024年8月12日
2.0.0-rc32024年6月11日
1.0.0-rc42024年5月31日
0.2.2 2024年3月30日

#171 in 硬件支持

Download history 494/week @ 2024-04-23 229/week @ 2024-04-30 220/week @ 2024-05-07 28/week @ 2024-05-14 160/week @ 2024-05-21 317/week @ 2024-05-28 270/week @ 2024-06-04 293/week @ 2024-06-11 111/week @ 2024-07-02 8/week @ 2024-07-23 90/week @ 2024-08-06

每月 98 次下载

GPL-3.0 许可证

8MB
7.5K SLoC

Rust 6.5K SLoC // 0.0% comments C 563 SLoC // 0.0% comments INI 382 SLoC C++ 377 SLoC // 0.0% comments

包含 (Windows DLL, 650KB) ZlgCloud.dll, (Windows DLL, 525KB) ZlgCloud.dll, (ELF 库, 425KB) library/linux/x86_64/libusb-1.0.so, (ELF 库, 380KB) library/linux/x86_64/libusbcanfd800u.so, (Windows DLL, 285KB) CANFDNET.dll, (Windows DLL, 300KB) CANWIFI_TCP.dll 等等.

如何使用

use can_type_rs::frame::Frame;
use can_type_rs::identifier::Id;
use zlgcan_common::can::{CanChlCfgExt, CanChlCfgFactory, ZCanChlMode, ZCanChlType, CanMessage};
use zlgcan_common::device::ZCanDeviceType;
use zlgcan_common::error::ZCanError;
use zlgcan_driver::driver::{ZCanDriver, ZDevice};

#[test]
fn main() -> anyhow::Result<()> {
    let dev_type = ZCanDeviceType::ZCAN_USBCANFD_200U;
    let dev_idx = 0;

    // Create driver instance
    let mut driver = ZCanDriver::new(dev_type as u32, dev_idx, None)?;

    // Open device
    driver.open()?;

    // Get device info and assert some information
    let dev_info = driver.device_info()?;
    assert_eq!(dev_info.can_channels(), 2);
    assert_eq!(dev_info.canfd(), true);

    // Create channel configuration factory
    let factory = CanChlCfgFactory::new()?;
    let ch1_cfg = factory.new_can_chl_cfg(dev_type as u32, ZCanChlType::CANFD_ISO as u8, ZCanChlMode::Normal as u8, 500_000,
                                          CanChlCfgExt::new(None, Some(1_000_000), None, None, None, None))?;
    let ch2_cfg = factory.new_can_chl_cfg(dev_type as u32, ZCanChlType::CANFD_ISO as u8, ZCanChlMode::Normal as u8, 500_000,
                                          CanChlCfgExt::new(None, Some(1_000_000), None, None, None, None))?;
    let cfg = vec![ch1_cfg, ch2_cfg];

    // intialize channels
    driver.init_can_chl(cfg)?;

    // Create CANFD frame
    let mut msg = CanMessage::new(
        Id::from_bits(0x7df, false), [0x01, 0x02, 0x03, 0x04, 0x05].as_slice()
    )
        .ok_or(ZCanError::Other("invalid data length".to_string()))?;
    msg.set_can_fd(true);
    let frames = vec![msg];

    // Transmit frame
    let ret = driver.transmit_canfd(0, frames)?;
    assert_eq!(ret, 1);

    driver.close();

    Ok(())
}

如何测试

  • 进入 driver/tests 文件夹。根据您的设备类型选择测试文件。
  • 如果设备的通道数少于2
    • 连接另一个CAN设备与您的设备通道以进行监控。
    • 然后运行所选的测试用例。
    • 当从监控设备收到帧时,则通过监控设备发送帧。
    • 当测试用例退出而没有任何panic时,则表示通过。
  • 如果设备的通道数不是2
    • 连接通道0和1。
    • 然后运行所选的测试用例。
    • 当测试用例退出而没有任何panic时,则表示通过。
  • 所有测试用例都将输出发送和接收的调试信息。

测试设备列表(包括 windowslinux

  • USBCAN1(包括办公设备和衍生设备)
  • USBCAN2(仅衍生设备)
  • USBCANFD-200U
  • USBCANFD-400U(不支持通道3和4)

许可证

  • GNU LESSER GENERAL PUBLIC LICENSE V3

依赖项