Skip to content

Commit f461723

Browse files
committed
Adde emergency stop handling for closed loop jhm
1 parent b36fcb7 commit f461723

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

src/ephys_link/back_end/platform_handler.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ def __init__(self, binding: BaseBinding, console: Console) -> None:
4747
# Store the console.
4848
self._console = console
4949

50+
# Emergency stop flag for closed-loop jackhammering.
51+
self._abort_closed_loop = False
52+
5053
# Define bindings based on platform type.
5154
self._bindings = binding
5255

@@ -230,6 +233,11 @@ async def set_inside_brain(self, request: SetInsideBrainRequest) -> BooleanState
230233
self._inside_brain.discard(request.manipulator_id)
231234
return BooleanStateResponse(state=request.inside)
232235

236+
# Stop closed loop jackhammer if abort flag is set(emergency button pressed)
237+
async def abort_jackhammer(self) -> None:
238+
"""Abort closed loop jackhammer."""
239+
self._abort_closed_loop = True
240+
233241
async def jackhammer(
234242
self,
235243
manipulator_id: str,
@@ -274,6 +282,20 @@ async def jackhammer(
274282
last_depth = start_depth
275283

276284
for i in range(max_iterations):
285+
# Check for abort
286+
if self._abort_closed_loop:
287+
self._abort_closed_loop = False
288+
final_pos = await self._bindings.get_position(manipulator_id)
289+
final_position = self._bindings.platform_space_to_unified_space(final_pos)
290+
total_delta_um = (final_pos.w - start_depth) * 1000
291+
return {
292+
"position": final_position,
293+
"error": "",
294+
"iterations_used": iterations_used,
295+
"stop_reason": "aborted",
296+
"advancement_um": total_delta_um,
297+
}
298+
277299
# Run single iteration
278300
await self._bindings.jackhammer(
279301
manipulator_id, axis, 1, phase1_steps, phase1_pulses, phase2_steps, phase2_pulses

src/ephys_link/back_end/server.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,11 @@ async def platform_event_handler(self, event: str, _: str, data: Any) -> str: #
275275
except JSONDecodeError:
276276
return self._malformed_request_response(event, data)
277277
return self._malformed_request_response(event, data)
278+
279+
case "abort_jackhammer":
280+
await self._platform_handler.abort_jackhammer()
281+
return dumps({"success": True})
282+
278283
case "stop":
279284
if data:
280285
return await self._platform_handler.stop(str(data)) # pyright: ignore[reportAny]

0 commit comments

Comments
 (0)