Add new comm mode
This commit is contained in:
parent
30f7b32267
commit
32f1bd9ac6
|
@ -87,11 +87,16 @@ impl Launcher {
|
|||
|
||||
impl Launcher {
|
||||
pub fn open_device(&self, name: &str) -> HardwareResult<DynamicDevice> {
|
||||
let mut tmp = name.to_string();
|
||||
if tmp.contains(" API") {
|
||||
tmp = tmp.split(" API").next().unwrap().to_string();
|
||||
}
|
||||
println!("Opening '{}'", tmp);
|
||||
Ok(match self.curr_api_type {
|
||||
DeviceType::Passthru => DynamicDevice::Passthru(self.pt_scanner.open_device_by_name(name)?),
|
||||
DeviceType::Passthru => DynamicDevice::Passthru(self.pt_scanner.open_device_by_name(&tmp)?),
|
||||
#[cfg(unix)]
|
||||
DeviceType::SocketCan => DynamicDevice::SocketCAN(self.scan_scanner.open_device_by_name(name)?),
|
||||
DeviceType::Usb => DynamicDevice::Usb(self.usb_scanner.open_device_by_name(name)?),
|
||||
DeviceType::SocketCan => DynamicDevice::SocketCAN(self.scan_scanner.open_device_by_name(&tmp)?),
|
||||
DeviceType::Usb => DynamicDevice::Usb(self.usb_scanner.open_device_by_name(&tmp)?),
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -99,7 +104,13 @@ impl Launcher {
|
|||
return scanner
|
||||
.list_devices()
|
||||
.iter()
|
||||
.map(|x| (x.name.clone()))
|
||||
.map(|x| {
|
||||
let mut s = x.name.clone();
|
||||
if let Some(api) = &x.api_version {
|
||||
s.push_str(&format!(" API {}", api));
|
||||
}
|
||||
s
|
||||
})
|
||||
.collect();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,13 +43,14 @@ pub struct Nag52USB {
|
|||
is_running: Arc<AtomicBool>,
|
||||
tx_id: u32,
|
||||
rx_id: u32,
|
||||
legacy_tx_mode: bool
|
||||
}
|
||||
|
||||
unsafe impl Sync for Nag52USB {}
|
||||
unsafe impl Send for Nag52USB {}
|
||||
|
||||
impl Nag52USB {
|
||||
pub fn new(path: &str, info: PortInfo) -> HardwareResult<Self> {
|
||||
pub fn new(path: &str, info: PortInfo, legacy_tx_mode: bool) -> HardwareResult<Self> {
|
||||
let mut port = serial_rs::new_from_path(path, Some(SerialPortSettings::default()
|
||||
.baud(921600)
|
||||
.read_timeout(Some(100))
|
||||
|
@ -136,6 +137,7 @@ impl Nag52USB {
|
|||
rx_log: Some(read_rx_log),
|
||||
tx_id: 0,
|
||||
rx_id: 0,
|
||||
legacy_tx_mode
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -232,6 +234,7 @@ impl PayloadChannel for Nag52USB {
|
|||
// Just write buffer
|
||||
match self.port.as_mut() {
|
||||
Some(p) => {
|
||||
if self.legacy_tx_mode {
|
||||
let mut buf = String::with_capacity(buffer.len()*2 + 6);
|
||||
write!(buf, "#{:04X}", addr);
|
||||
for x in buffer {
|
||||
|
@ -239,6 +242,16 @@ impl PayloadChannel for Nag52USB {
|
|||
}
|
||||
write!(buf, "\n");
|
||||
p.write_all(buf.as_bytes()).map_err(|e| ChannelError::IOError(e))?;
|
||||
} else {
|
||||
let mut to_write = Vec::with_capacity(buffer.len()+4);
|
||||
let size: u16 = (buffer.len()+2) as u16;
|
||||
to_write.push((size >> 8) as u8);
|
||||
to_write.push((size & 0xFF) as u8);
|
||||
to_write.push((addr >> 8) as u8);
|
||||
to_write.push((addr & 0xFF) as u8);
|
||||
to_write.extend_from_slice(&buffer);
|
||||
p.write_all(&to_write)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
None => Err(ChannelError::InterfaceNotOpen),
|
||||
|
|
|
@ -13,8 +13,7 @@ pub struct Nag52UsbScanner {
|
|||
|
||||
impl Nag52UsbScanner {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
ports: match serial_rs::list_ports() {
|
||||
let mut tmp = match serial_rs::list_ports() {
|
||||
Ok(ports) => ports
|
||||
.iter()
|
||||
.map(|i| (HardwareInfo {
|
||||
|
@ -36,8 +35,14 @@ impl Nag52UsbScanner {
|
|||
}, i.clone()))
|
||||
.collect::<Vec<(HardwareInfo, PortInfo)>>(),
|
||||
Err(_) => Vec::new(),
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
let l: Vec<(HardwareInfo, PortInfo)> = tmp.clone().iter_mut().map(|mut x| {
|
||||
x.0.api_version = Some("Legacy".into());
|
||||
x.clone()
|
||||
}).collect();
|
||||
tmp.extend_from_slice(&l);
|
||||
Self {ports: tmp}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -51,7 +56,7 @@ impl ecu_diagnostics::hardware::HardwareScanner<Nag52USB> for Nag52UsbScanner {
|
|||
idx: usize,
|
||||
) -> ecu_diagnostics::hardware::HardwareResult<std::sync::Arc<std::sync::Mutex<Nag52USB>>> {
|
||||
match self.ports.get(idx) {
|
||||
Some((p, port)) => Ok(Arc::new(Mutex::new(Nag52USB::new(&p.name, port.clone())?))),
|
||||
Some((p, port)) => Ok(Arc::new(Mutex::new(Nag52USB::new(&p.name, port.clone(), false)?))),
|
||||
None => Err(HardwareError::DeviceNotFound),
|
||||
}
|
||||
}
|
||||
|
@ -61,7 +66,7 @@ impl ecu_diagnostics::hardware::HardwareScanner<Nag52USB> for Nag52UsbScanner {
|
|||
name: &str,
|
||||
) -> ecu_diagnostics::hardware::HardwareResult<std::sync::Arc<std::sync::Mutex<Nag52USB>>> {
|
||||
match self.ports.iter().find(|(i, p)| i.name == name) {
|
||||
Some((p, port)) => Ok(Arc::new(Mutex::new(Nag52USB::new(&p.name, port.clone())?))),
|
||||
Some((p, port)) => Ok(Arc::new(Mutex::new(Nag52USB::new(&p.name, port.clone(), p.api_version.is_none())?))),
|
||||
None => Err(HardwareError::DeviceNotFound),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue