From 8be336309a6585980b37e5e192cb6c8bdfb24e43 Mon Sep 17 00:00:00 2001 From: Sebastian Kuzminsky Date: Thu, 23 Apr 2026 09:56:37 -0600 Subject: [PATCH] add a way to send Sync from bus_manager and cli --- zencan-cli/src/bin/zencan-cli.rs | 4 ++++ zencan-cli/src/command.rs | 8 ++++++++ zencan-client/src/bus_manager/bus_manager.rs | 8 +++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/zencan-cli/src/bin/zencan-cli.rs b/zencan-cli/src/bin/zencan-cli.rs index da71bdf..476d2a3 100644 --- a/zencan-cli/src/bin/zencan-cli.rs +++ b/zencan-cli/src/bin/zencan-cli.rs @@ -476,6 +476,10 @@ async fn run_command(cmd: Commands, manager: &m Err(e) => println!("Error reading PDO config: {e}"), } } + Commands::Sync(args) => { + manager.sync(args.count).await; + println!("SYNC sent"); + } } } diff --git a/zencan-cli/src/command.rs b/zencan-cli/src/command.rs index 9653345..ea980f3 100644 --- a/zencan-cli/src/command.rs +++ b/zencan-cli/src/command.rs @@ -30,6 +30,8 @@ pub enum Commands { /// LSS commands #[command(subcommand)] Lss(LssCommands), + /// Send a SYNC packet + Sync(SyncArgs), } #[derive(Debug, Args)] @@ -94,6 +96,12 @@ pub struct SaveObjectsArgs { pub node_id: u8, } +#[derive(Debug, Args)] +pub struct SyncArgs { + /// The optional count value (0-255). When omitted, sends a SYNC with zero data length. + pub count: Option, +} + /// Specifies a node to apply an NMT command #[derive(Debug, Clone, Copy, PartialEq)] pub enum NmtNodeArg { diff --git a/zencan-client/src/bus_manager/bus_manager.rs b/zencan-client/src/bus_manager/bus_manager.rs index 372a3d4..4ac4213 100644 --- a/zencan-client/src/bus_manager/bus_manager.rs +++ b/zencan-client/src/bus_manager/bus_manager.rs @@ -9,7 +9,7 @@ use zencan_common::constants::object_ids::{ RPDO_COMM_BASE, RPDO_MAP_BASE, TPDO_COMM_BASE, TPDO_MAP_BASE, }; use zencan_common::lss::{LssIdentity, LssState}; -use zencan_common::messages::{NmtCommand, NmtCommandSpecifier, ZencanMessage}; +use zencan_common::messages::{NmtCommand, NmtCommandSpecifier, SyncObject, ZencanMessage}; use zencan_common::nmt::NmtState; use zencan_common::node_id::ConfiguredNodeId; use zencan_common::sdo::AbortCode; @@ -549,6 +549,12 @@ impl BusManager { self.send_nmt_cmd(NmtCommandSpecifier::Stop, node).await } + /// Send a SYNC packet on the bus + pub async fn sync(&mut self, count: Option) { + let sync_obj = SyncObject::new(count); + self.sender.send(sync_obj.into()).await.ok(); + } + async fn send_nmt_cmd(&mut self, cmd: NmtCommandSpecifier, node: u8) { let message = NmtCommand { cs: cmd, node }; self.sender.send(message.into()).await.ok();