summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSerguey Parkhomovsky <xindigo@gmail.com>2026-03-19 17:40:46 -0700
committerSerguey Parkhomovsky <xindigo@gmail.com>2026-03-19 17:40:46 -0700
commitc9dd306e8661d17443d8fe69d857750f25ac8942 (patch)
tree14fe74b5fe39b6eed5779958f2a4211fe659cabd /src
parent5fcb3009524f415d56e97edbb33f6c57635a51bb (diff)
Fill more fields
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs60
1 files changed, 52 insertions, 8 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 4891b42..e36a847 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -8,12 +8,32 @@ pub enum PrintStatus {
Printing,
Paused,
Finished,
+ Stopped,
+ Error,
+ Attention,
+ Busy,
}
#[derive(Debug, Default, Serialize, Clone)]
pub struct PrinterState {
- pub bed_temp: f32,
pub status: PrintStatus,
+ pub bed_temp: f32,
+ pub target_bed_temp: f32,
+ pub nozzle_temp: f32,
+ pub target_nozzle_temp: f32,
+ pub axis_x: f32,
+ pub axis_y: f32,
+ pub axis_z: f32,
+ pub flow: u32,
+ pub speed: u32,
+ pub fan_hotend: u32,
+ pub fan_print: u32,
+ pub progress: f32,
+ pub time_remaining: u32,
+ pub time_printing: u32,
+ pub layer_num: u32,
+ pub total_layer_num: u32,
+ pub print_speed: Option<String>,
}
#[derive(Debug, Deserialize)]
@@ -41,7 +61,6 @@ enum BambuState {
#[derive(Debug, Deserialize)]
struct PrusaJob {
- id: u32,
progress: f32,
time_remaining: u32,
time_printing: u32,
@@ -122,23 +141,48 @@ pub fn extract_status_from_prusa(status: &PrusaStatus, state: &mut PrinterState)
PrusaState::Printing => PrintStatus::Printing,
PrusaState::Paused => PrintStatus::Paused,
PrusaState::Finished => PrintStatus::Finished,
- _ => PrintStatus::Unknown,
+ PrusaState::Stopped => PrintStatus::Stopped,
+ PrusaState::Error => PrintStatus::Error,
+ PrusaState::Attention => PrintStatus::Attention,
+ PrusaState::Busy => PrintStatus::Busy,
};
- state.bed_temp = status.printer.temp_bed;
+ let p = &status.printer;
+ state.bed_temp = p.temp_bed;
+ state.target_bed_temp = p.target_bed;
+ state.nozzle_temp = p.temp_nozzle;
+ state.target_nozzle_temp = p.target_nozzle;
+ state.axis_x = p.axis_x;
+ state.axis_y = p.axis_y;
+ state.axis_z = p.axis_z;
+ state.flow = p.flow;
+ state.speed = p.speed;
+ state.fan_hotend = p.fan_hotend;
+ state.fan_print = p.fan_print;
+ if let Some(job) = &status.job {
+ state.progress = job.progress;
+ state.time_remaining = job.time_remaining;
+ state.time_printing = job.time_printing;
+ }
}
pub fn extract_status_from_bambu(status: &BambuStatus, state: &mut PrinterState) {
if let Some(print) = &status.print {
- if let Some(bed_temper) = print.bed_temper {
- state.bed_temp = bed_temper;
- }
+ if let Some(v) = print.bed_temper { state.bed_temp = v; }
+ if let Some(v) = print.bed_target_temper { state.target_bed_temp = v; }
+ if let Some(v) = print.nozzle_temper { state.nozzle_temp = v; }
+ if let Some(v) = print.nozzle_target_temper { state.target_nozzle_temp = v; }
+ if let Some(v) = print.mc_percent { state.progress = v as f32; }
+ if let Some(v) = print.mc_remaining_time { state.time_remaining = v; }
+ if let Some(v) = print.layer_num { state.layer_num = v; }
+ if let Some(v) = print.total_layer_num { state.total_layer_num = v; }
+ if let Some(v) = &print.print_speed { state.print_speed = Some(v.clone()); }
if let Some(gcode_state) = &print.gcode_state {
state.status = match gcode_state {
BambuState::Idle => PrintStatus::Idle,
BambuState::Running => PrintStatus::Printing,
BambuState::Pause => PrintStatus::Paused,
BambuState::Finish => PrintStatus::Finished,
- _ => PrintStatus::Unknown,
+ BambuState::Failed => PrintStatus::Error,
};
}
}