summaryrefslogtreecommitdiff
path: root/api_layers/protocols/cml.py
diff options
context:
space:
mode:
Diffstat (limited to 'api_layers/protocols/cml.py')
-rw-r--r--api_layers/protocols/cml.py12
1 files changed, 8 insertions, 4 deletions
diff --git a/api_layers/protocols/cml.py b/api_layers/protocols/cml.py
index 67be0d5..6bc85f0 100644
--- a/api_layers/protocols/cml.py
+++ b/api_layers/protocols/cml.py
@@ -73,9 +73,10 @@ class CMLLayer(BaseProtocol):
frame = f"{cmd}\r".encode()
else:
frame = f"#{motor.address}{cmd}\r".encode()
- self._ser.write(frame)
- self._ser.flush()
- resp = self._ser.readline().decode(errors="replace").strip()
+ with self._io_lock:
+ self._ser.write(frame)
+ self._ser.flush()
+ resp = self._ser.readline().decode(errors="replace").strip()
return _parse_cml_response(resp)
def _poll(self) -> Dict[str, float]:
@@ -127,7 +128,10 @@ class CMLLayer(BaseProtocol):
frame = f"{cmd}{data}\r".encode()
else:
frame = f"#{motor.address}{cmd}{data}\r".encode()
- self._ser.write(frame)
+ with self._io_lock:
+ self._ser.write(frame)
+ self._ser.flush()
+ self._ser.readline() # discard echo-back so it doesn't desync the next poll read
return True
except Exception:
return False