use crate::hwa;
#[cfg(feature = "with-motion")]
use printhor_hwa_common::{DeferEvent, DeferType};
#[allow(unused)]
#[allow(unreachable_patterns)]
#[embassy_executor::task(pool_size=1)]
pub async fn defer_task(
mut processor: hwa::GCodeProcessor,
) -> ! {
hwa::debug!("defer_task started");
let mut num_homes = 0u8;
let mut num_linear = 0u8;
let mut num_rapid = 0u8;
let mut num_dwell = 0u8;
#[cfg(feature = "with-hotend")]
let mut num_hotend = 0u8;
#[cfg(feature = "with-hotbed")]
let mut num_hotbed = 0u8;
loop {
match processor.motion_planner.defer_channel.receive().await {
DeferEvent::Homing(DeferType::AwaitRequested) => {
num_homes += 1;
}
DeferEvent::Homing(DeferType::Completed) => {
if num_homes > 0 {
num_homes -= 1;
processor.write("ok; G28 completed (@defer_task)\n").await;
}
}
DeferEvent::Dwell(DeferType::AwaitRequested) => {
num_dwell += 1;
}
DeferEvent::Dwell(DeferType::Completed) => {
if num_dwell > 0 {
num_dwell -= 1;
processor.write("ok; G4 completed (@defer_task)\n").await;
}
}
DeferEvent::LinearMove(DeferType::AwaitRequested) => {
num_linear += 1;
}
DeferEvent::LinearMove(DeferType::Completed) => {
if num_linear > 0 {
num_linear -= 1;
}
}
DeferEvent::RapidMove(DeferType::AwaitRequested) => {
num_rapid += 1;
}
DeferEvent::RapidMove(DeferType::Completed) => {
if num_rapid > 0 {
num_rapid -= 1;
}
}
#[cfg(feature = "with-hotend")]
DeferEvent::HotendTemperature(DeferType::AwaitRequested) => {
num_hotend += 1;
}
#[cfg(feature = "with-hotend")]
DeferEvent::HotendTemperature(DeferType::Completed) => {
if num_hotend > 0 {
num_hotend -= 1;
processor.write("ok; M109 completed (@defer_task)\n").await;
}
}
#[cfg(feature = "with-hotbed")]
DeferEvent::HotbedTemperature(DeferType::AwaitRequested) => {
num_hotbed += 1;
}
#[cfg(feature = "with-hotbed")]
DeferEvent::HotbedTemperature(DeferType::Completed) => {
if num_hotbed > 0 {
num_hotbed -= 1;
processor.write("ok; M190 completed (@defer_task)\n").await;
}
}
}
}
}