@@ -36,10 +36,15 @@ class AMUManager(QtCore.QObject):
3636 bool , name = "amu-toggled"
3737 )
3838
39+ pre_gate_changed : typing .ClassVar [QtCore .pyqtSignal ] = QtCore .pyqtSignal (
40+ int , bool , name = "pre-gate-changed"
41+ )
42+
3943 def __init__ (self , parent : QtCore .QObject | None = None ) -> None :
4044 super ().__init__ (parent )
4145 self ._amu_state = False
4246 self ._mmu_state : MMUState | None = None
47+ self ._pre_gate_sensors : dict [int , bool ] = {}
4348 self .__setup_configfile ()
4449
4550 def __setup_configfile (self ) -> None :
@@ -107,6 +112,9 @@ def get_state(self) -> MMUState | None:
107112 """
108113 return self ._mmu_state
109114
115+ def get_pre_gate_sensors (self ) -> dict [int , bool ]:
116+ return dict (self ._pre_gate_sensors )
117+
110118 def is_amu_active (self ) -> bool :
111119 """Returns whether AMU includes are currently uncommented in printer.cfg"""
112120 return self ._amu_state
@@ -171,7 +179,6 @@ def load_gate(self, gate: int) -> None:
171179
172180 def unload (self ) -> None :
173181 """Unload the currently loaded filament by sending MMU_UNLOAD."""
174- ...
175182 self .run_gcode_signal .emit ("MMU_UNLOAD" )
176183
177184 def eject_gate (self , gate : int ) -> None :
@@ -188,7 +195,7 @@ def eject_all_gates(self, num_gates: int) -> None:
188195 Args:
189196 num_gates: Total number of gates(from MMUState.num_gates)
190197 """
191- cmd = "\n " .join (f"MMU_EJECT GATE={ i } " for i in range (num_gates ))
198+ cmd : str = "\n " .join (f"MMU_EJECT GATE={ i } " for i in range (num_gates ))
192199 self .run_gcode_signal .emit (cmd )
193200
194201 def select_tool (self , tool : int ) -> None :
@@ -199,6 +206,18 @@ def select_tool(self, tool: int) -> None:
199206 """
200207 self .run_gcode_signal .emit (f"MMU_CHANGE_TOOL TOOL={ tool } " )
201208
209+ def on_pre_gate_update (self , values : dict , name : str ) -> None :
210+ if not name .startswith ("Mmu Pre Gate " ):
211+ return
212+ try :
213+ gate = int (name .removeprefix ("Mmu Pre Gate " ))
214+ except ValueError :
215+ logger .error ("Failed to parse Pre-Gate: %s" , name )
216+ return
217+ detected = bool (values .get ("filament_detected" , False ))
218+ self ._pre_gate_sensors [gate ] = detected
219+ self .pre_gate_changed .emit (gate , detected )
220+
202221 def update_mmu_state (self , data : dict , name : str = "" ) -> None :
203222 """Receive an MMU status dict from Moonraker and update internal state.
204223
@@ -216,7 +235,7 @@ def update_mmu_state(self, data: dict, name: str = "") -> None:
216235 self ._mmu_state = self ._mmu_state .apply_diff (data )
217236 self .mmu_state_changed .emit (self ._mmu_state )
218237
219-
220- if __name__ == "__main__" :
221- manager = AMUManager ()
222- print ( manager . toggle_amu_system ( True ))
238+ def on_klippy_state ( self , state : str ) -> None :
239+ """React to changes in klippy states"""
240+ if state . lower () != "ready" :
241+ self . _mmu_state = None
0 commit comments