Пример #1
0
class RemoteHemeLB(object):
    """
    Represent a remote HemeLB as a python object
    Steerable parameters become properties of the object:
    e.g. myheme.Latitude=50
    """

    def __init__(self, address, port, steering_id):
        self.address = address
        self.port = port
        self.steering_id = steering_id
        self.socket = PagedSocket(
            address=self.address,
            port=self.port,
            receive_length=3 * RemoteHemeLB.xdr_int_bytes,
            additional_receive_length_function=RemoteHemeLB._calculate_receive_length,
        )
        self.latitude = 0
        self.image = None
        for steered_parameter in self.steered_parameters:
            steered_parameter.initialise_in_instance(self, config["steered_parameter_defaults"][steered_parameter.name])

    xdr_int_bytes = 4
    xdr_double_bytes = 8

    def step(self):
        self.receive()
        self.send()

    def send(self):
        if any([par.changed(self) for par in self.steered_parameters]):
            vals = xdrlib.Packer()
            for par in self.steered_parameters:
                vals.pack_float(float(par.value(self)))
            self.socket.send(vals.get_buffer())

    @staticmethod
    def _calculate_receive_length(header):
        unpacker = xdrlib.Unpacker(header)
        width = unpacker.unpack_int()
        height = unpacker.unpack_int()
        frame = unpacker.unpack_int()
        return frame + 3 * RemoteHemeLB.xdr_double_bytes + 3 * RemoteHemeLB.xdr_int_bytes

    def receive(self):
        page = self.socket.receive()
        unpacker = xdrlib.Unpacker(page)
        self.width = unpacker.unpack_int()
        self.height = unpacker.unpack_int()
        self.frame = unpacker.unpack_int()
        self.image = Image(self.width, self.height, self.frame / Image.bytes_per_pixel, unpacker)
        self.time_step = unpacker.unpack_int()
        self.time = unpacker.unpack_double()
        unpacker.unpack_int()  # throw away cycle
        self.inlets = unpacker.unpack_int()
        self.mouse_pressure = unpacker.unpack_double()
        self.mouse_stress = unpacker.unpack_double()

    def __str__(self):
        return "HemeLB at %s: Step %s" % (self.address, self.time_step)
Пример #2
0
 def __init__(self, address, port, steering_id):
     self.address = address
     self.port = port
     self.steering_id = steering_id
     self.socket = PagedSocket(
         address=self.address,
         port=self.port,
         receive_length=3 * RemoteHemeLB.xdr_int_bytes,
         additional_receive_length_function=RemoteHemeLB.
         _calculate_receive_length)
     self.latitude = 0
     self.image = None
     for steered_parameter in self.steered_parameters:
         steered_parameter.initialise_in_instance(
             self,
             config['steered_parameter_defaults'][steered_parameter.name])
Пример #3
0
 def __init__(self, address, port, steering_id):
     self.address = address
     self.port = port
     self.steering_id = steering_id
     self.socket = PagedSocket(address=self.address,
         port=self.port,
         receive_length= 3 * RemoteHemeLB.xdr_int_bytes,
         additional_receive_length_function=RemoteHemeLB._calculate_receive_length)
     self.latitude = 0
     self.image = None
     for steered_parameter in self.steered_parameters:
         steered_parameter.initialise_in_instance(self, config['steered_parameter_defaults'][steered_parameter.name])
Пример #4
0
class RemoteHemeLB(object):
    """
    Represent a remote HemeLB as a python object
    Steerable parameters become properties of the object:
    e.g. myheme.Latitude=50
    """
    def __init__(self, address, port, steering_id):
        self.address = address
        self.port = port
        self.steering_id = steering_id
        self.socket = PagedSocket(
            address=self.address,
            port=self.port,
            receive_length=3 * RemoteHemeLB.xdr_int_bytes,
            additional_receive_length_function=RemoteHemeLB.
            _calculate_receive_length)
        self.latitude = 0
        self.image = None
        for steered_parameter in self.steered_parameters:
            steered_parameter.initialise_in_instance(
                self,
                config['steered_parameter_defaults'][steered_parameter.name])

    xdr_int_bytes = 4
    xdr_double_bytes = 8

    def step(self):
        self.receive()
        self.send()

    def send(self):
        if any([par.changed(self) for par in self.steered_parameters]):
            vals = xdrlib.Packer()
            for par in self.steered_parameters:
                vals.pack_float(float(par.value(self)))
            self.socket.send(vals.get_buffer())

    @staticmethod
    def _calculate_receive_length(header):
        unpacker = xdrlib.Unpacker(header)
        width = unpacker.unpack_int()
        height = unpacker.unpack_int()
        frame = unpacker.unpack_int()
        return frame + 3 * RemoteHemeLB.xdr_double_bytes + 3 * RemoteHemeLB.xdr_int_bytes

    def receive(self):
        page = self.socket.receive()
        unpacker = xdrlib.Unpacker(page)
        self.width = unpacker.unpack_int()
        self.height = unpacker.unpack_int()
        self.frame = unpacker.unpack_int()
        self.image = Image(self.width, self.height,
                           self.frame / Image.bytes_per_pixel, unpacker)
        self.time_step = unpacker.unpack_int()
        self.time = unpacker.unpack_double()
        unpacker.unpack_int()  # throw away cycle
        self.inlets = unpacker.unpack_int()
        self.mouse_pressure = unpacker.unpack_double()
        self.mouse_stress = unpacker.unpack_double()

    def __str__(self):
        return "HemeLB at %s: Step %s" % (self.address, self.time_step)