Example #1
0
class LEDAClient(object):
	def __init__(self, host, port, log):
		self.host = host
		self.port = port
		self.log  = log
		#self.connect()
	def connect(self, timeout=10):
		self.log.write("Connecting to remote server %s:%i" \
			               % (self.host,self.port))
		self.sock = SimpleSocket(timeout=timeout)
		try:
			self.sock.connect(self.host, self.port)
		except SimpleSocket.timeout_error:
			self.log.write("All connections were refused", -2)
			self.sock = None
		except:
			self.log.write("Failed to connect. "+str(sys.exc_info()[1]), -2)
			self.sock = None
		else:
			self.log.write("Connection successful")
	def isConnected(self):
		return self.sock is not None
	def _sendmsg(self, msg, timeout="default"):
		if self.sock is None:
			self.log.write("send: Not connected (%s:%i)" % (self.host,self.port), -2)
			return None
		if len(msg) <= 256:
			self.log.write("Sending message "+msg, 4)
		else:
			self.log.write("Sending long message of length %i bytes"%(len(msg)), 4)
		try:
			self.sock.send(msg)
			ret = self.sock.receive(timeout=timeout)
		except:
			self.log.write("recv: Not connected (%s:%i)" % (self.host,self.port), -2)
			self.sock = None
			return None
		if len(ret) < 256:
			self.log.write("Received response "+ret, 4)
		else:
			self.log.write("Received long response of length %i bytes"%(len(ret)), 4)
		return ret
	def _sendcmd(self, cmd):
		ret = self._sendmsg(cmd)
		if ret is None:
			return None
		if ret == 'ok':
			return True
		else:
			self.log.write("Remote command failed", -2)
			raise Exception("Remote command failed")
Example #2
0
class LEDARemoteHeadNodeControl(object):
    def __init__(self, host, port, log=LEDALogger()):
        self.host = host
        self.port = port
        self.log = log
        self.connect()

    def connect(self):
        self.log.write("Connecting to remote headnode %s:%i" % (self.host, self.port))
        # TODO: See comment in leda_headnodecontrol.py
        self.sock = SimpleSocket(timeout=10)
        try:
            self.sock.connect(self.host, self.port)
        except SimpleSocket.timeout_error:
            self.log.write("All connections were refused", -2)
            self.sock = None
        except:
            self.log.write("Failed to connect. " + str(sys.exc_info()[1]), -2)
            self.sock = None
        else:
            self.log.write("Connection successful")

    def isConnected(self):
        return self.sock is not None

    def _sendmsg(self, msg):
        if self.sock is None:
            self.log.write("Not connected", -2)
            return None
        if len(msg) <= 256:
            self.log.write("Sending message " + msg, 4)
        else:
            self.log.write("Sending long message of length %i bytes" % (len(msg)), 4)
        try:
            self.sock.send(msg)
            ret = self.sock.receive()
        except:
            self.log.write("Not connected", -2)
            self.sock = None
            return None
        else:
            if len(ret) <= 256:
                self.log.write("Received response " + ret, 4)
            else:
                self.log.write("Received long response of length %i bytes" % (len(ret)), 4)
            return ret

    def _sendcmd(self, cmd):
        ret = self._sendmsg(cmd)
        if ret is None:
            return
        if ret != "ok":
            self.log.write("Remote command failed", -2)
            raise Exception("Remote command failed")

    def getStatus(self):
        self.log.write("Requesting status", 2)
        # if self.sock is None:
        # 	self.log.write("Not connected", -2)
        # 	return None
        encoded = self._sendmsg("status=1")
        if encoded is None:
            return None
            # print "json.loads('%s')" % encoded
        status = json.loads(encoded)
        return status

    def getADCImages(self):
        self.log.write("Requesting ADC images", 2)
        encoded = self._sendmsg("adc_images=1")
        if encoded is None:
            return None
            # print "json.loads('%s')" % encoded
        encoded_images = json.loads(encoded)
        # images = [Image.open(base64.standard_b64decode(im))
        # TODO: This isn't great. We return the raw binary data as a string.
        images = [[base64.standard_b64decode(adc_im) for adc_im in roach] for roach in encoded_images]
        # images = [base64.standard_b64decode(im)
        # 	          for im in encoded_images]
        return images

    def exit(self):
        self.log.write("Exiting", 2)
        self._sendcmd("exit=1")

    def configure(self):
        self.log.write("Configuring", 2)
        self._sendcmd("configure=1")

    def programRoaches(self):
        self.log.write("Programming roaches", 2)
        self._sendcmd("program_roaches=1")

    def createBuffers(self):
        self.log.write("Creating buffers", 2)
        self._sendcmd("create_buffers=1")

    def setTotalPowerRecording(self, ncycles):
        self.log.write("Setting total power recording param", 2)
        self._sendcmd("total_power=%i" % ncycles)

    def startObservation(self, mode="correlator", ra=None, dec=None):
        self.log.write("Starting observation", 2)
        if ra is not None and dec is not None:
            self._sendcmd("start=1&mode=%s&ra=%s&dec=%s" % (mode, ra, dec))
        else:
            self._sendcmd("start=1&mode=%s" % mode)

    def stopObservation(self):
        self.log.write("Stopping observation", 2)
        self._sendcmd("stop=1")

    def killObservation(self):
        self.log.write("Killing observation", 2)
        self._sendcmd("kill=1")

    def clearLogs(self):
        self.log.write("Clearing all logs", 2)
        self._sendcmd("clear_logs=1")

    def getVisMatrixImages(self):
        self.log.write("Requesting visibility matrix images", 2)
        encoded = self._sendmsg("vismatrix_images=1")
        if encoded is None:
            return None
        encoded_images = json.loads(encoded)
        # TODO: This isn't great. We return the raw binary data as a string.
        images = [base64.standard_b64decode(encoded_image) for encoded_image in encoded_images]
        return images
Example #3
0
import socket
import pygame, sys
import time
from SimpleSocket import SimpleSocket    

conn = SimpleSocket()
conn.connect("192.168.0.16", 5001)
conn.sock.setblocking(0)

pygame.init()
pygame.display.set_caption('Ev3 Keyboard Control')
size = [400, 400]
screen = pygame.display.set_mode(size)
clock = pygame.time.Clock()
 
while True:
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        # check if key is pressed
        # if you use event.key here it will give you error at runtime
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT   \
                   or event.key == pygame.K_UP:
                conn.sendMessage("stop\n")
                continue
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:             
                conn.sendMessage("turnleft\n")
Example #4
0
class LEDARemoteServerControl(object):
	def __init__(self, host, port, log=LEDALogger()):
		self.host = host
		self.port = port
		self.log  = log
		self.connect()
	def connect(self):
		self.log.write("Connecting to remote server %s:%i" \
			               % (self.host,self.port))
		#self._nstreams = None
		# TODO: This timeout must be long enough to cover long
		#         operations on the server. This is not a good
		#         way to do things; would probably be better to
		#         send an instant response and something like
		#         an asynchronous "I'll get back to you in N secs".
		self.sock = SimpleSocket(timeout=10)
		try:
			self.sock.connect(self.host, self.port)
		except SimpleSocket.timeout_error:
			self.log.write("All connections were refused", -2)
			self.sock = None
		except:
			self.log.write("Failed to connect. "+str(sys.exc_info()[1]), -2)
			self.sock = None
		else:
			self.log.write("Connection successful")
	def isConnected(self):
		return self.sock is not None
	def _sendmsg(self, msg):
		if self.sock is None:
			self.log.write("Not connected", -2)
			self.log.write("Reconnecting", 0)
			self.connect()
			return None
		if len(msg) <= 256:
			self.log.write("Sending message "+msg, 4)
		else:
			self.log.write("Sending long message of length %i bytes"%(len(msg)), 4)
		try:
			self.sock.send(msg)
			ret = self.sock.receive()
		except:
			self.log.write("Not connected", -2)
			self.sock = None
			self.log.write("Reconnecting", 0)
			self.connect()
			return None
		if len(ret) < 256:
			self.log.write("Received response "+ret, 4)
		else:
			self.log.write("Received long response of length %i bytes"%(len(ret)), 4)
		return ret
	def _sendcmd(self, cmd):
		ret = self._sendmsg(cmd)
		if ret is None:
			return
		if ret != 'ok':
			self.log.write("Remote command failed", -2)
			raise Exception("Remote command failed")
	def getStatus(self):
		self.log.write("Requesting server status", 2)
		if self.sock is None:
			self.log.write("Not connected", -2)
			self.log.write("Reconnecting", 0)
			self.connect()
			return None
		encoded = self._sendmsg("status=1")
		if encoded is None:
			return None
		status = json.loads(encoded)
		return status
	def createBuffers(self):
		self.log.write("Creating buffers", 2)
		self._sendcmd("create_buffers=1")
	def destroyBuffers(self):
		self.log.write("Destroying buffers", 2)
		self._sendcmd("destroy_buffers=1")
	def setTotalPowerRecording(self, ncycles):
		self.log.write("Setting total power recording param", 2)
		self._sendcmd("total_power=%i" % ncycles)
	def armPipeline(self, mode='correlator'):
		self.log.write("Arming pipeline in %s mode" % mode, 2)
		self._sendcmd("arm=1&mode=%s" % mode)
	def startPipeline(self, ra=None, dec=None):
		self.log.write("Starting pipeline", 2)
		if ra is not None and dec is not None:
			self._sendcmd("start=1&ra=%s&dec=%s" % (ra,dec))
		else:
			self._sendcmd("start=1")
	def killPipeline(self):
		self.log.write("Killing pipeline", 2)
		self._sendcmd("kill=1")
	def clearLogs(self):
		#self.log.write("Clearing all logs", 2)
		self._sendcmd("clear_logs=1")
	def getVisMatrixImages(self):
		self.log.write("Requesting visibility matrix images", 2)
		encoded = self._sendmsg("vismatrix_images=1")
		if encoded is None:
			return None
		encoded_images = json.loads(encoded)
		return encoded_images
	def exit(self):
		self.log.write("Requesting server control script to exit", 2)
		self._sendcmd("exit=1")