1use crate::{canopen::RxMessage, sdo_client::SdoClient, transmitter::TxPacket};
2use std::{collections::HashMap, sync::Arc};
3use tokio::sync::{broadcast, mpsc, Mutex};
4
5pub const SEND_TIMOUT: u64 = 20;
7
8#[derive(Debug, Default, Clone)]
10pub struct CanOpenInfo {
11 pub rx_bits: usize,
13 pub transmitter_socket: bool,
15 pub receiver_socket: bool,
17}
18
19#[derive(Debug, Clone, PartialEq, Eq)]
21pub struct Connection {
22 pub can_name: String,
24 pub bitrate: Option<u32>,
26}
27
28pub struct CanOpenInterface {
30 pub connection: Arc<Mutex<Connection>>,
32 pub tx: mpsc::Sender<TxPacket>,
34 pub rx: broadcast::Receiver<RxMessage>,
36 pub sdo_clients: HashMap<u8, Arc<Mutex<SdoClient>>>,
38 pub info: Arc<Mutex<CanOpenInfo>>,
40 pub(crate) close: Arc<Mutex<bool>>,
42}
43
44impl CanOpenInterface {
45 pub fn get_sdo_client(&self, node_id: u8) -> Option<Arc<Mutex<SdoClient>>> {
62 let v = self.sdo_clients.get(&node_id)?;
63 Some(v.clone())
64 }
65
66 pub async fn close() {}
67}
68
69impl Clone for CanOpenInterface {
70 fn clone(&self) -> Self {
72 Self {
73 connection: self.connection.clone(),
74 tx: self.tx.clone(),
75 rx: self.rx.resubscribe(),
76 sdo_clients: self.sdo_clients.clone(),
77 info: self.info.clone(),
78 close: self.close.clone(),
79 }
80 }
81}