Skip to content

Commit 18fee8a

Browse files
authored
add in Config knobs for moonraker/usb (#157)
``` [machines.neptune] type = "Moonraker" endpoint = "http://myprinter.local" variant = "ElegooNeptune4" slicer.type = "Prusa" slicer.config = "/some/path/to/prusa/config.ini" nozzle_diameter = 0.2 loaded_filament_idx = 0 [[machines.neptune.filaments]] material.type = "pla" ```
1 parent eaaa3cb commit 18fee8a

File tree

6 files changed

+57
-30
lines changed

6 files changed

+57
-30
lines changed

src/bin/machine-api/config/moonraker.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,12 @@ impl Config {
3131
key.clone(),
3232
RwLock::new(Machine::new(
3333
moonraker::Client::new(
34-
&config.endpoint.clone(),
34+
&config,
3535
MachineMakeModel {
3636
manufacturer,
3737
model,
3838
serial: None,
3939
},
40-
config.variant.get_max_part_volume(),
4140
)?,
4241
slicer,
4342
)),

src/lib.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ use serde::{Deserialize, Serialize};
4343
pub use slicer::AnySlicer;
4444
pub use sync::SharedMachine;
4545
pub use traits::{
46-
BuildOptions, Control, FdmHardwareConfiguration, FilamentMaterial, GcodeControl, GcodeSlicer, GcodeTemporaryFile,
47-
HardwareConfiguration, MachineInfo, MachineMakeModel, MachineState, MachineType, SlicerConfiguration,
48-
SuspendControl, TemperatureSensor, TemperatureSensorReading, TemperatureSensors, ThreeMfControl, ThreeMfSlicer,
49-
ThreeMfTemporaryFile,
46+
BuildOptions, Control, FdmHardwareConfiguration, Filament, FilamentMaterial, GcodeControl, GcodeSlicer,
47+
GcodeTemporaryFile, HardwareConfiguration, MachineInfo, MachineMakeModel, MachineState, MachineType,
48+
SlicerConfiguration, SuspendControl, TemperatureSensor, TemperatureSensorReading, TemperatureSensors,
49+
ThreeMfControl, ThreeMfSlicer, ThreeMfTemporaryFile,
5050
};
5151

5252
/// A specific file containing a design to be manufactured.

src/moonraker/control.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ use moonraker::InfoResponse;
55

66
use super::Client;
77
use crate::{
8-
traits::Filament, Control as ControlTrait, FdmHardwareConfiguration, FilamentMaterial,
9-
GcodeControl as GcodeControlTrait, GcodeTemporaryFile, HardwareConfiguration, MachineInfo as MachineInfoTrait,
10-
MachineMakeModel, MachineState, MachineType, SuspendControl as SuspendControlTrait, Volume,
8+
Control as ControlTrait, FdmHardwareConfiguration, GcodeControl as GcodeControlTrait, GcodeTemporaryFile,
9+
HardwareConfiguration, MachineInfo as MachineInfoTrait, MachineMakeModel, MachineState, MachineType,
10+
SuspendControl as SuspendControlTrait, Volume,
1111
};
1212

1313
/// Information about the connected Moonraker-based printer.
@@ -91,14 +91,13 @@ impl ControlTrait for Client {
9191
}
9292

9393
async fn hardware_configuration(&self) -> Result<HardwareConfiguration> {
94+
let config = self.get_config();
95+
9496
Ok(HardwareConfiguration::Fdm {
9597
config: FdmHardwareConfiguration {
96-
filaments: vec![Filament {
97-
material: FilamentMaterial::Pla,
98-
..Default::default()
99-
}],
100-
nozzle_diameter: 0.4,
101-
loaded_filament_idx: None,
98+
filaments: config.filaments.clone(),
99+
nozzle_diameter: config.nozzle_diameter,
100+
loaded_filament_idx: config.loaded_filament_idx,
102101
},
103102
})
104103
}

src/moonraker/mod.rs

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,23 @@ use serde::{Deserialize, Serialize};
1111
pub use temperature::TemperatureSensors;
1212
pub use variants::MoonrakerVariant;
1313

14-
use crate::{slicer, MachineMakeModel, Volume};
14+
use crate::{slicer, Filament, MachineMakeModel, Volume};
1515

1616
/// Configuration information for a Moonraker-based endpoint.
1717
#[derive(Clone, Debug, Serialize, Deserialize)]
1818
pub struct Config {
1919
/// Slicer to use with this printer
2020
pub slicer: slicer::Config,
2121

22+
/// Extrusion hotend nozzle's diameter.
23+
pub nozzle_diameter: f64,
24+
25+
/// Available filaments.
26+
pub filaments: Vec<Filament>,
27+
28+
/// Currently loaded filament, if possible to determine.
29+
pub loaded_filament_idx: Option<usize>,
30+
2231
/// Specific make/model of Moonraker-based printer.
2332
pub variant: MoonrakerVariant,
2433

@@ -32,21 +41,29 @@ pub struct Client {
3241
client: MoonrakerClient,
3342
make_model: MachineMakeModel,
3443
volume: Option<Volume>,
44+
45+
config: Config,
3546
}
3647

3748
impl Client {
3849
/// Create a new Moonraker based machine. The `base_url` will be
3950
/// passed through to [moonraker::Client].
40-
pub fn new(base_url: &str, make_model: MachineMakeModel, volume: Option<Volume>) -> Result<Self> {
51+
pub fn new(config: &Config, make_model: MachineMakeModel) -> Result<Self> {
4152
Ok(Self {
4253
make_model,
43-
volume,
44-
client: MoonrakerClient::new(base_url)?,
54+
volume: config.variant.get_max_part_volume(),
55+
client: MoonrakerClient::new(&config.endpoint)?,
56+
config: config.clone(),
4557
})
4658
}
4759

4860
/// Return the underling [MoonrakerClient].
4961
pub fn get_client(&self) -> &MoonrakerClient {
5062
&self.client
5163
}
64+
65+
/// Return the underling [Config]
66+
pub(crate) fn get_config(&self) -> &Config {
67+
&self.config
68+
}
5269
}

src/usb/control.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,30 @@ use tokio::{
77
};
88
use tokio_serial::SerialStream;
99

10+
use super::Config;
1011
use crate::{
11-
gcode::Client, traits::Filament, Control as ControlTrait, FdmHardwareConfiguration, FilamentMaterial,
12-
GcodeControl as GcodeControlTrait, GcodeTemporaryFile, HardwareConfiguration, MachineInfo as MachineInfoTrait,
13-
MachineMakeModel, MachineState, MachineType, Volume,
12+
gcode::Client, Control as ControlTrait, FdmHardwareConfiguration, GcodeControl as GcodeControlTrait,
13+
GcodeTemporaryFile, HardwareConfiguration, MachineInfo as MachineInfoTrait, MachineMakeModel, MachineState,
14+
MachineType, Volume,
1415
};
1516

1617
/// Handle to a USB based gcode 3D printer.
1718
#[derive(Clone)]
1819
pub struct Usb {
1920
client: Arc<Mutex<Client<WriteHalf<SerialStream>, ReadHalf<SerialStream>>>>,
2021
machine_info: UsbMachineInfo,
22+
config: Config,
2123
}
2224

2325
impl Usb {
2426
/// Create a new USB-based gcode Machine.
25-
pub fn new(stream: SerialStream, machine_info: UsbMachineInfo) -> Self {
27+
pub fn new(stream: SerialStream, machine_info: UsbMachineInfo, config: Config) -> Self {
2628
let (reader, writer) = tokio::io::split(stream);
2729

2830
Self {
2931
client: Arc::new(Mutex::new(Client::new(writer, reader))),
3032
machine_info,
33+
config,
3134
}
3235
}
3336

@@ -147,14 +150,13 @@ impl ControlTrait for Usb {
147150
}
148151

149152
async fn hardware_configuration(&self) -> Result<HardwareConfiguration> {
153+
let config = &self.config;
154+
150155
Ok(HardwareConfiguration::Fdm {
151156
config: FdmHardwareConfiguration {
152-
filaments: vec![Filament {
153-
material: FilamentMaterial::Pla,
154-
..Default::default()
155-
}],
156-
nozzle_diameter: 0.4,
157-
loaded_filament_idx: None,
157+
filaments: config.filaments.clone(),
158+
nozzle_diameter: config.nozzle_diameter,
159+
loaded_filament_idx: config.loaded_filament_idx,
158160
},
159161
})
160162
}

src/usb/discover.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use tokio::sync::RwLock;
66
use tokio_serial::{SerialPortBuilderExt, SerialPortType};
77

88
use super::UsbVariant;
9-
use crate::{slicer, usb, Discover, Machine, MachineMakeModel};
9+
use crate::{slicer, usb, Discover, Filament, Machine, MachineMakeModel};
1010

1111
/// Configuration block for a USB based device.
1212
#[derive(Clone, Debug, Deserialize, Serialize)]
@@ -29,6 +29,15 @@ pub struct Config {
2929

3030
/// USB Product ID (pid) to scan for. None will match any USB device.
3131
pub product_id: Option<u16>,
32+
33+
/// Extrusion hotend nozzle's diameter.
34+
pub nozzle_diameter: f64,
35+
36+
/// Available filaments.
37+
pub filaments: Vec<Filament>,
38+
39+
/// Currently loaded filament, if possible to determine.
40+
pub loaded_filament_idx: Option<usize>,
3241
}
3342

3443
impl Config {
@@ -214,6 +223,7 @@ impl Discover for UsbDiscovery {
214223
port_name.clone(),
215224
baud,
216225
),
226+
config.clone(),
217227
),
218228
slicer,
219229
)),

0 commit comments

Comments
 (0)