Detect serial port path automatically

This commit is contained in:
Frederik Menke 2023-11-20 22:22:44 +01:00
parent 594a31d983
commit 8d74ff0942
3 changed files with 19 additions and 4 deletions

View file

@ -1,6 +1,6 @@
use crate::gamepad::Gamepad; use crate::gamepad::Gamepad;
use crate::printer::gcode::{G0Command, G91Command}; use crate::printer::gcode::{G0Command, G91Command};
use crate::printer::{GcodeCommand, Printer}; use crate::printer::{Printer};
use euclid::{vec3, Vector3D}; use euclid::{vec3, Vector3D};
use futures::never::Never; use futures::never::Never;
use std::sync::Arc; use std::sync::Arc;

View file

@ -5,7 +5,9 @@ use red::gamepad;
use red::jogger; use red::jogger;
use red::printer::gcode::*; use red::printer::gcode::*;
use red::printer::Printer; use red::printer::Printer;
use std::path::Path;
use std::time::Duration; use std::time::Duration;
use tokio_serial::SerialPortInfo;
const DEFAULT_TTY: &str = "/dev/ttyUSB0"; const DEFAULT_TTY: &str = "/dev/ttyUSB0";
const I2C_ADDRESS_EXTENDER: u8 = 25; const I2C_ADDRESS_EXTENDER: u8 = 25;
@ -35,9 +37,22 @@ const I2C_REGISTER_SPINDLE_SPEED: u8 = 0;
#[tokio::main] #[tokio::main]
async fn main() -> Never { async fn main() -> Never {
println!("Entering App"); println!("Entering App");
let serial_ports = tokio_serial::available_ports()
.expect("Could not list serial ports")
.into_iter()
.filter(|port| port.port_name.contains("ttyUSB"))
.collect::<Vec<SerialPortInfo>>();
let port = match serial_ports.len() {
1 => serial_ports.to_owned().pop().unwrap(),
0 => panic!("No USB serial port found! Is the green board disconnected or turned off?"),
_ => panic!("There are multiple USB serial ports and we have no way to check which one is the Marlin board!")
};
let port_path = Path::new("/dev").join(Path::new(&port.port_name).file_name().unwrap());
println!("Found serial port: {:?}", &port_path);
let gamepad = gamepad::Gamepad::new().await.unwrap(); let gamepad = gamepad::Gamepad::new().await.unwrap();
let printer = Printer::connect("/dev/ttyUSB2").await.unwrap(); let printer = Printer::connect(&port_path.as_os_str().to_string_lossy())
// TODO: Make printer do relative movements .await
.unwrap();
jogger::jog(gamepad, printer).await jogger::jog(gamepad, printer).await
} }

View file

@ -14,7 +14,7 @@ use tokio_util::codec::{Decoder, Encoder};
pub use gcode::{GcodeCommand, GcodeReply}; pub use gcode::{GcodeCommand, GcodeReply};
use crate::printer::gcode::{G91Command, M997Command}; use crate::printer::gcode::G91Command;
use self::gcode::GcodeReplyError; use self::gcode::GcodeReplyError;