- Made the HRPT axis base itself on V3 of the pmacAxis - Improved and added utils programs
55 lines
1.5 KiB
Python
Executable File
55 lines
1.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Usage: macmaster.py macmasterhost port
|
|
Listen for commands to send and returns reponse
|
|
until exit has been typed
|
|
|
|
Mark Koennecke, March 2023
|
|
"""
|
|
|
|
import socket
|
|
import struct
|
|
|
|
|
|
class MasterMACS():
|
|
def __init__(self, host, port):
|
|
self._socke = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
self._socke.connect((host, int(port)))
|
|
|
|
def send(self, command):
|
|
buf = struct.pack('BBBB', 0x05, len(command) + 4, 0, 0x19)
|
|
buf += bytes(command, 'utf-8')
|
|
buf += struct.pack('BB', 0x0D, 0x03)
|
|
self._socke.send(buf)
|
|
|
|
def receive(self):
|
|
buf = self._socke.recv(35, socket.MSG_WAITALL)
|
|
if len(buf) < 35:
|
|
raise EOFException('Master MACS returned only %d bytes, 35 expected' % len(buf))
|
|
idx = buf.find(0x0D)
|
|
ackbyte = buf[idx-1]
|
|
if ackbyte == 0x06:
|
|
ack = 'ACK'
|
|
elif ackbyte == 0x15:
|
|
ack = 'NAK',
|
|
else:
|
|
ack = 'NO'
|
|
reply = buf[4:idx-1].decode('utf-8')
|
|
return ack, reply
|
|
|
|
if __name__ == "__main__":
|
|
from sys import argv, exit, stdin
|
|
if len(argv) < 3:
|
|
print('Usage:\n\tmacmaster.py machost macport')
|
|
exit(1)
|
|
mac = MasterMACS(argv[1], argv[2])
|
|
while(True):
|
|
# import pdb; pdb.set_trace()
|
|
line = stdin.readline()
|
|
if line.find('exit') >= 0:
|
|
exit(0)
|
|
mac.send(line.strip())
|
|
ack, reply = mac.receive()
|
|
print('%s, %s' %(ack, reply))
|
|
|