def ui_run(self): if not self._ui: self._ui = SpadicControlUI(self.control) self._ui.run()
class SpadicControlClient: """Client for the RF/SR/DLM parts of the SpadicServer.""" def __init__(self, server_address, port_base=None, reset=False, load=None, ui=False): self.rf_client = SpadicRFClient() self.sr_client = SpadicSRClient() self.dlm_client = SpadicDLMClient() # nested function generators! def gen_write_gen(client): def write_gen(name, addr): def write(value): client.write_registers({name: value}) return write return write_gen def gen_read_gen(client): def read_gen(name, addr): def read(): return client.read_registers([name])[name] return read return read_gen self.rf_client.connect(server_address, port_base) self.sr_client.connect(server_address, port_base) self.dlm_client.connect(server_address, port_base) # Create registerfile and shiftregister representations providing # the appropriate read and write methods. # The "use_cache" argument is set to False, because other clients can # modify the register configuration without our knowledge, so we # have to really read and write a register every time and cannot # rely on our last known values. self._registerfile = SpadicRegisterFile( gen_write_gen(self.rf_client), gen_read_gen(self.rf_client), use_cache=False) # The shiftregister actually behaves like the registerfile here, # we only have to override the default register map using SPADIC_SR. # format: {name: (address, size), ...}, (address not used here) sr_map = {name: (0, len(bits)) for (name, bits) in SPADIC_SR.iteritems()} self._shiftregister = SpadicRegisterFile( gen_write_gen(self.sr_client), gen_read_gen(self.sr_client), register_map=sr_map, use_cache=False) # this is exactly like in main.Spadic self.control = SpadicController(self._registerfile, self._shiftregister, reset, load) # controller user interface self._ui = None if ui: self.ui_run() def ui_run(self): if not self._ui: self._ui = SpadicControlUI(self.control) self._ui.run() def send_dlm(self, value): self.dlm_client.send_dlm(value) def __enter__(self): return self def __exit__(self, *args, **kwargs): self.rf_client.__exit__(*args, **kwargs) self.sr_client.__exit__(*args, **kwargs) self.dlm_client.__exit__(*args, **kwargs)
class SpadicControlClient: """Client for the RF/SR/DLM parts of the SpadicServer.""" def __init__(self, server_address, port_base=None, reset=False, load=None, ui=False): self.rf_client = SpadicRFClient() self.sr_client = SpadicSRClient() self.dlm_client = SpadicDLMClient() # nested function generators! def gen_write_gen(client): def write_gen(name, addr): def write(value): client.write_registers({name: value}) return write return write_gen def gen_read_gen(client): def read_gen(name, addr): def read(): return client.read_registers([name])[name] return read return read_gen self.rf_client.connect(server_address, port_base) self.sr_client.connect(server_address, port_base) self.dlm_client.connect(server_address, port_base) # Create registerfile and shiftregister representations providing # the appropriate read and write methods. # The "use_cache" argument is set to False, because other clients can # modify the register configuration without our knowledge, so we # have to really read and write a register every time and cannot # rely on our last known values. self._registerfile = SpadicRegisterFile(gen_write_gen(self.rf_client), gen_read_gen(self.rf_client), use_cache=False) # The shiftregister actually behaves like the registerfile here, # we only have to override the default register map using SPADIC_SR. # format: {name: (address, size), ...}, (address not used here) sr_map = { name: (0, len(bits)) for (name, bits) in SPADIC_SR.iteritems() } self._shiftregister = SpadicRegisterFile(gen_write_gen(self.sr_client), gen_read_gen(self.sr_client), register_map=sr_map, use_cache=False) # this is exactly like in main.Spadic self.control = SpadicController(self._registerfile, self._shiftregister, reset, load) # controller user interface self._ui = None if ui: self.ui_run() def ui_run(self): if not self._ui: self._ui = SpadicControlUI(self.control) self._ui.run() def send_dlm(self, value): self.dlm_client.send_dlm(value) def __enter__(self): return self def __exit__(self, *args, **kwargs): self.rf_client.__exit__(*args, **kwargs) self.sr_client.__exit__(*args, **kwargs) self.dlm_client.__exit__(*args, **kwargs)