Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: m-labs/artiq
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 34a9c8c12d3e
Choose a base ref
...
head repository: m-labs/artiq
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: dee844510c52
Choose a head ref
  • 2 commits
  • 3 files changed
  • 1 contributor

Commits on Aug 15, 2015

  1. Copy the full SHA
    0be0b19 View commit details
  2. Copy the full SHA
    dee8445 View commit details
Showing with 48 additions and 3 deletions.
  1. +18 −0 artiq/coredevice/comm_tcp.py
  2. +20 −1 artiq/gui/displays.py
  3. +10 −2 artiq/gui/results.py
18 changes: 18 additions & 0 deletions artiq/coredevice/comm_tcp.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,29 @@
import logging
import socket
import sys

from artiq.coredevice.comm_generic import CommGeneric


logger = logging.getLogger(__name__)


def set_keepalive(sock, after_idle, interval, max_fails):
if sys.platform.startswith("linux"):
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, after_idle)
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, interval)
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, max_fails)
elif sys.platform.startswith("win") or sys.platform.startswith("cygwin"):
# setting max_fails is not supported, typically ends up being 5 or 10
# depending on Windows version
sock.ioctl(socket.SIO_KEEPALIVE_VALS,
(1, after_idle*1000, interval*1000))
else:
logger.warning("TCP keepalive not supported on platform '%s', ignored",
sys.platform)


class Comm(CommGeneric):
def __init__(self, dmgr, host, port=1381):
self.host = host
@@ -16,6 +33,7 @@ def open(self):
if hasattr(self, "socket"):
return
self.socket = socket.create_connection((self.host, self.port))
set_keepalive(self.socket, 3, 2, 3)
logger.debug("connected to host %s on port %d", self.host, self.port)
self.write(b"ARTIQ coredev\n")

21 changes: 20 additions & 1 deletion artiq/gui/displays.py
Original file line number Diff line number Diff line change
@@ -94,6 +94,12 @@ def update_data(self, data):
n = "---"
self.number.display(n)

def save_state(self):
return None

def restore_state(self, state):
pass


class XYDisplaySettings(_SimpleSettings):
_window_title = "XY plot"
@@ -155,6 +161,12 @@ def update_data(self, data):
if fit is not None:
self.plot.plot(x, fit)

def save_state(self):
return self.plot.saveState()

def restore_state(self, state):
self.plot.restoreState(state)


class HistogramDisplaySettings(_SimpleSettings):
_window_title = "Histogram"
@@ -191,7 +203,14 @@ def update_data(self, data):

if y and len(x) == len(y) + 1:
self.plot.clear()
self.plot.plot(x, y, stepMode=True, fillLevel=0, brush=(0, 0, 255, 150))
self.plot.plot(x, y, stepMode=True, fillLevel=0,
brush=(0, 0, 255, 150))

def save_state(self):
return self.plot.saveState()

def restore_state(self, state):
self.plot.restoreState(state)


display_types = OrderedDict([
12 changes: 10 additions & 2 deletions artiq/gui/results.py
Original file line number Diff line number Diff line change
@@ -120,20 +120,28 @@ def on_close():
dsp.sigClosed.connect(on_close)
self.dock_area.addDock(dsp)
self.dock_area.floatDock(dsp)
return dsp

def save_state(self):
r = dict()
for name, display in self.displays.items():
r[name] = {
"ty": _get_display_type_name(type(display)),
"settings": display.settings
"settings": display.settings,
"state": display.save_state()
}
return r

def restore_state(self, state):
for name, desc in state.items():
try:
self.create_display(desc["ty"], None, name, desc["settings"])
dsp = self.create_display(desc["ty"], None, name,
desc["settings"])
except:
logger.warning("Failed to create display '%s'", name,
exc_info=True)
try:
dsp.restore_state(desc["state"])
except:
logger.warning("Failed to restore display state of '%s'",
name, exc_info=True)