Exemplo n.º 1
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    loop = asyncio.get_event_loop()
    atexit.register(loop.close)

    writer = DBWriter(args.baseurl_db, args.user_db, args.password_db,
                      args.database, args.table)
    writer.start()
    atexit_register_coroutine(writer.stop)

    log = Log(writer)

    server = Logger()
    rpc_server = Server({"schedule_logger": server}, builtin_terminate=True)
    loop.run_until_complete(
        rpc_server.start(common_args.bind_address_from_args(args),
                         args.port_control))
    atexit_register_coroutine(rpc_server.stop)

    reader = MasterReader(args.server_master, args.port_master,
                          args.retry_master, log)
    reader.start()
    atexit_register_coroutine(reader.stop)

    loop.run_until_complete(rpc_server.wait_terminate())
Exemplo n.º 2
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    if os.name == "nt":
        asyncio.set_event_loop(asyncio.ProactorEventLoop())
    loop = asyncio.get_event_loop()

    if args.simulation:
        from .sim import NewFocus8742Sim
        dev = loop.run_until_complete(NewFocus8742Sim.connect())
    elif args.tcp:
        from .tcp import NewFocus8742TCP
        dev = loop.run_until_complete(NewFocus8742TCP.connect(args.tcp))
    else:
        from .usb import NewFocus8742USB
        dev = loop.run_until_complete(NewFocus8742USB.connect())

    try:
        simple_server_loop({"newfocus8742": dev},
                           common_args.bind_address_from_args(args), args.port)
    except KeyboardInterrupt:
        pass
    finally:
        dev.close()
Exemplo n.º 3
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    try:
        signal_handler = SignalHandler()
        signal_handler.setup()
        try:
            get_logs_task = asyncio.ensure_future(
                get_logs_sim(args.core_addr) if args.simulation else get_logs(args.core_addr))
            try:
                server = Server({"corelog": PingTarget()}, None, True)
                loop.run_until_complete(server.start(common_args.bind_address_from_args(args), args.port))
                try:
                    _, pending = loop.run_until_complete(asyncio.wait(
                        [signal_handler.wait_terminate(),
                         server.wait_terminate(),
                         get_logs_task],
                        return_when=asyncio.FIRST_COMPLETED))
                    for task in pending:
                        task.cancel()
                finally:
                    loop.run_until_complete(server.stop())
            finally:
                pass
        finally:
            signal_handler.teardown()
    finally:
        loop.close()
Exemplo n.º 4
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    if (not args.print_decoded and args.write_vcd is None
            and args.write_dump is None):
        print("No action selected, use -p, -w and/or -d. See -h for help.")
        sys.exit(1)

    device_mgr = DeviceManager(DeviceDB(args.device_db))
    if args.read_dump:
        with open(args.read_dump, "rb") as f:
            dump = f.read()
    else:
        core_addr = device_mgr.get_desc("core")["arguments"]["host"]
        dump = get_analyzer_dump(core_addr)
    decoded_dump = decode_dump(dump)
    if args.print_decoded:
        print("Log channel:", decoded_dump.log_channel)
        print("DDS one-hot:", decoded_dump.dds_onehot_sel)
        for message in decoded_dump.messages:
            print(message)
    if args.write_vcd:
        with open(args.write_vcd, "w") as f:
            decoded_dump_to_vcd(f,
                                device_mgr.get_device_db(),
                                decoded_dump,
                                uniform_interval=args.vcd_uniform_interval)
    if args.write_dump:
        with open(args.write_dump, "wb") as f:
            f.write(dump)
Exemplo n.º 5
0
def run(with_file=False):
    args = get_argparser(with_file).parse_args()
    common_args.init_logger_from_args(args)

    device_mgr = DeviceManager(DeviceDB(args.device_db),
                               virtual_devices={
                                   "scheduler": DummyScheduler(),
                                   "ccb": DummyCCB()
                               })
    dataset_db = DatasetDB(args.dataset_db)
    dataset_mgr = DatasetManager(dataset_db)

    try:
        exp_inst = _build_experiment(device_mgr, dataset_mgr, args)
        exp_inst.prepare()
        exp_inst.run()
        exp_inst.analyze()
    except CompileError as error:
        return
    except Exception as exn:
        if hasattr(exn, "artiq_core_exception"):
            print(exn.artiq_core_exception, file=sys.stderr)
        raise exn
    finally:
        device_mgr.close_devices()

    if args.hdf5 is not None:
        with h5py.File(args.hdf5, "w") as f:
            dataset_mgr.write_hdf5(f)
    else:
        for k, v in sorted(dataset_mgr.local.items(), key=itemgetter(0)):
            print("{}: {}".format(k, v))
    dataset_db.save()
Exemplo n.º 6
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    atexit.register(loop.close)
    signal_handler = SignalHandler()
    signal_handler.setup()
    atexit.register(signal_handler.teardown)

    writer = DBWriter(args.baseurl_db,
                      args.user_db, args.password_db,
                      args.database, args.table)
    writer.start()
    atexit_register_coroutine(writer.stop)

    filter = Filter(args.pattern_file)
    rpc_server = Server({"influxdb_filter": filter}, builtin_terminate=True)
    loop.run_until_complete(rpc_server.start(common_args.bind_address_from_args(args),
                                             args.port_control))
    atexit_register_coroutine(rpc_server.stop)

    reader = MasterReader(args.server_master, args.port_master,
                          args.retry_master, filter._filter, writer)
    reader.start()
    atexit_register_coroutine(reader.stop)

    _, pending = loop.run_until_complete(asyncio.wait(
        [signal_handler.wait_terminate(), rpc_server.wait_terminate()],
        return_when=asyncio.FIRST_COMPLETED))
    for task in pending:
        task.cancel()
Exemplo n.º 7
0
def main():
    args = get_argparser().parse_args()
    init_logger_from_args(args)

    try:
        channel = "ch{}".format(int(args.channel))
    except ValueError:
        if args.channel in ["T", "p"]:
            channel = args.channel
        else:
            raise Exception("Invalid channel: {}".format(args.channel))

    rpc_host = args.server if args.rpc_host == "" else args.rpc_host

    plot_symbol = args.plot_symbol if args.plot_symbol != "" else None
    wcm = WavemeterChannelMonitor(host=args.server, channel=channel, port=args.port, rpc_host=rpc_host,
                                  rpc_port=args.rpc_port, rpc_target=args.rpc_target, title=args.title,
                                  window_width=args.width, window_x=args.x, window_y=args.y,
                                  enable_stripchart=not args.no_plot, stripchart_height=args.plot_height,
                                  stripchart_num_points=args.plot_numpoints, plot_freq=not args.plot_wl,
                                  plot_offset=args.plot_offset,
                                  plot_pen=pyqtgraph.mkPen(color=args.plot_color, width=args.plot_width),
                                  plot_symbol=plot_symbol, plot_bgr=args.plot_bgr,
                                  enable_lcd=not args.no_lcd, lcd_height=args.number_height,
                                  lcd_ndigits=args.number_digits, lcd_freq=args.lcd_freq,
                                  enable_interferograms=args.interferograms,
                                  interferogram_update_interval=args.iplot_interval,
                                  show_interferogram_update_control=args.if_update_control,
                                  if0_pen=pyqtgraph.mkPen(color=args.iplot_color, width=args.iplot_width),
                                  if1_pen=pyqtgraph.mkPen(color=args.iplot_color2, width=args.iplot_width2),
                                  interferogram_bgr=args.iplot_bgr, interferogram_height=args.iplot_height,
                                  interferogram_exposure_control=args.if_exp_control)
    wcm.run()
Exemplo n.º 8
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    if args.device is None:
        print("You need to supply a -d/--device "
              "argument. Use --help for more information.")
        sys.exit(1)

    async def run():
        async with RPCClient(NetworkConnection(args.device, loop=loop)) as dev:
            server = Server({"laser": dev}, None, True)
            await server.start(common_args.bind_address_from_args(args), args.port)
            try:
                await server.wait_terminate()
            finally:
                await server.stop()

    loop = asyncio.get_event_loop()
    try:
        loop.run_until_complete(run())
    except KeyboardInterrupt:
        pass
    finally:
        loop.close()
Exemplo n.º 9
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    if args.device is None:
        print("You need to supply a -d/--device "
              "argument. Use --help for more information.")
        sys.exit(1)

    loop = asyncio.get_event_loop()

    async def run():
        with await Wavemeter.connect(args.device,
                                     port=args.device_port,
                                     loop=loop) as dev:
            # only wavemeter
            # logger.debug("connected, version %s", await dev.get_version())
            server = Server({"wavemeter": dev}, None, True)
            await server.start(common_args.bind_address_from_args(args),
                               args.port)
            try:
                await server.wait_terminate()
            finally:
                await server.stop()

    try:
        loop.run_until_complete(run())
    except KeyboardInterrupt:
        pass
    finally:
        loop.close()
Exemplo n.º 10
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    loop = asyncio.get_event_loop()
    try:
        get_logs_task = asyncio.ensure_future(
            get_logs_sim(args.core_addr) if args.
            simulation else get_logs(args.core_addr))
        try:
            server = Server({"corelog": PingTarget()}, None, True)
            loop.run_until_complete(
                server.start(common_args.bind_address_from_args(args),
                             args.port))
            try:
                loop.run_until_complete(server.wait_terminate())
            finally:
                loop.run_until_complete(server.stop())
        finally:
            get_logs_task.cancel()
            try:
                loop.run_until_complete(get_logs_task)
            except asyncio.CancelledError:
                pass
    finally:
        loop.close()
Exemplo n.º 11
0
def main():
    args = get_argparser().parse_args()
    init_logger_from_args(args)

    next_poll_time = time.monotonic()
    while True:
        time.sleep(max(0, next_poll_time - time.monotonic()))
        next_poll_time += args.poll_time

        measurements = []
        for server in args.server:
            try:
                client = RPCClient(server, 3251, timeout=args.timeout)
                lasers = client.get_laser_db()
                for laser in lasers:
                    meas = client.get_freq(laser,
                                           age=args.poll_time,
                                           priority=3,
                                           get_osa_trace=False,
                                           blocking=True,
                                           mute=False,
                                           offset_mode=False)
                    status, freq, _ = meas

                    if status != WLMMeasurementStatus.OKAY:
                        logger.info("{}: measurement error")
                        continue

                    f_ref = lasers[laser]["f_ref"]
                    delta = freq - lasers[laser]["f_ref"]
                    measurements.append({
                        "measurement": laser,
                        "fields": {
                            "freq": freq,
                            "f_ref": f_ref,
                            "detuning": delta
                        }
                    })
                    logger.info("{}: freq {} THz, f_ref {} THz, "
                                "detuning {} MHz".format(
                                    laser, freq, f_ref, delta))
            except OSError:
                logger.warning("Error querying server {}".format(server))
            finally:
                client.close_rpc()
        if not measurements:
            continue

        try:
            influx = influxdb.InfluxDBClient(host=args.host_db,
                                             database=args.database,
                                             username=args.user_db,
                                             password=args.password_db)

            influx.write_points(measurements)
        finally:
            influx.close()
Exemplo n.º 12
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)
    if args.simulation:
        lda = Ldasim()
    else:
        lda = Lda(args.device, args.product)
    try:
        simple_server_loop({"lda": lda},
                           common_args.bind_address_from_args(args), args.port)
    finally:
        lda.close()
Exemplo n.º 13
0
    def __init__(self):

        self.args = args = get_argparser().parse_args()
        init_logger_from_args(args)

        if args.log_to_file:
            log_file = pkg_resources.resource_filename("wand", "log.txt")
            fh = logging.FileHandler(log_file, mode="wt")
            fh.setLevel(logger.getEffectiveLevel())
            logger.addHandler(fh)
            logging.getLogger("qasync").addHandler(fh)
            sys.excepthook = lambda exc_type, exc_value, exc_traceback: \
                logger.exception("".join(
                    traceback.format_exception(exc_type,
                                               exc_value,
                                               exc_traceback)))

        self.config = load_config(args, "_gui")

        self.laser_db = {}
        self.freq_db = {}
        self.osa_db = {}
        self.subscribers = {}

        self.qapp = QtWidgets.QApplication(["WAnD"])
        self.loop = QEventLoop(self.qapp)
        asyncio.set_event_loop(self.loop)
        atexit.register(self.loop.close)

        # set program icon
        icon = QtGui.QIcon()
        icon.addFile(pkg_resources.resource_filename("wand", "wand.svg"))
        self.qapp.setWindowIcon(icon)

        # create main window
        self.win = MainWindow()
        self.area = dock.DockArea()
        self.win.setCentralWidget(self.area)
        self.win.setWindowTitle("Super-duper Python Wavemeter Viewer!")

        # populate GUI
        self.laser_displays = {}
        for row in self.config["layout"]:
            prev = None
            pos = 'bottom'
            for display_name in row:
                display = LaserDisplay(display_name, self)
                self.laser_displays.update({display.laser: display})
                self.area.addDock(display.dock, position=pos, relativeTo=prev)
                pos = 'right'
                prev = display.dock
Exemplo n.º 14
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    cam = Cam(args.device)
    if args.exposure:
        cam.set_exposure(float(args.exposure))

    try:
        logger.info("Camera open. Serving...")
        simple_server_loop({"camera": cam},
                           common_args.bind_address_from_args(args), args.port)
    finally:
        cam.close()
Exemplo n.º 15
0
def main():
    args = get_argparser().parse_args()
    init_logger_from_args(args)
    channels = []
    for ch in args.channel:
        try:
            channels.append(int(ch))
        except ValueError:
            if ch in ["T", "p"]:
                channels.append(ch)
    wau = WavemeterArtiqUpdater(channels=channels, host_artiq=args.artiq_server, port_artiq=args.artiq_port,
                                host_wavemeter_pub=args.wavemeter_server, port_wavemeter_pub=args.wavemeter_port,
                                dataset_name_prefix=args.dataset)
    wau.run()
Exemplo n.º 16
0
    def __init__(self, args):
        self.args = args

        common_args.init_logger_from_args(args)

        # TODO: Consider exposing Context in Root.
        context = Context(self.set_dataset)
        super().__init__(SubscriberRoot(args.prefix, context), context)

        # Try ensuring a sensible window size on startup (i.e. large enough to show a
        # plot in.
        # FIXME: This doesn't seem to work when used with ARTIQ applet embedding. See if
        # call_later() works around that, or whether this needs to be fixed in ARTIQ.
        self.resize(600, 600)
        self.setWindowTitle("ndscan plot")
Exemplo n.º 17
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    if not args.serialPort:
        print("You need to specify -s")
        sys.exit(1)

    psu = PSU(args.serialPort)

    try:
        logger.info("DP700 open. Serving...")
        simple_server_loop({"DP700": psu},
                           common_args.bind_address_from_args(args), args.port)
    finally:
        psu.close()
Exemplo n.º 18
0
def main():
    args = get_argparser().parse_args()
    init_logger_from_args(args)
    if args.lock_current:
        client = WavemeterPIClientTopticaEthernetCurrent(
            host=args.server,
            port=args.port,
            channel=args.channel,
            dlc_address=args.dlc_address,
            laser_id=args.laser,
            output_offset=args.current_center,
            output_span=args.current_span,
            setpoint=args.setpoint,
            cp=args.cp,
            ci=args.ci,
            integrator_timeout=args.integrator_timeout,
            integrator_cutoff=args.integrator_cutoff,
            output_sensitivity=args.output_sensitivity,
            startup_locked=args.startup_locked)
    else:
        client = WavemeterPIClientTopticaEthernetPZT(
            host=args.server,
            port=args.port,
            channel=args.channel,
            dlc_address=args.dlc_address,
            laser_id=args.laser,
            output_offset=args.pzt_center,
            output_span=args.pzt_span,
            setpoint=args.setpoint,
            cp=args.cp,
            ci=args.ci,
            integrator_timeout=args.integrator_timeout,
            integrator_cutoff=args.integrator_cutoff,
            output_sensitivity=args.output_sensitivity,
            current_center=args.current_center,
            current_span=args.current_span,
            startup_locked=args.startup_locked)

    pub = Publisher(
        {"lock_client_{}".format(args.channel): client.status_notifier})

    asyncio.get_event_loop().run_until_complete(
        pub.start(bind_address_from_args(args), args.port_pub))
    simple_server_loop({"lock_client_{}".format(args.channel): client},
                       bind_address_from_args(args), args.port_rpc)
    client.close_subscriber()
    client.close_dlc_connection()
Exemplo n.º 19
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    if args.device is None:
        ddb = DeviceDB(args.device_db)
        core_addr = ddb.get("core", resolve_alias=True)["arguments"]["host"]
    else:
        core_addr = args.device
    mgmt = CommMgmt(core_addr)

    if args.tool == "log":
        if args.action == "set_level":
            mgmt.set_log_level(args.level)
        if args.action == "set_uart_level":
            mgmt.set_uart_log_level(args.level)
        if args.action == "clear":
            mgmt.clear_log()
        if args.action == None:
            print(mgmt.get_log(), end="")

    if args.tool == "config":
        if args.action == "read":
            value = mgmt.config_read(args.key)
            if not value:
                print("Key {} does not exist".format(args.key))
            else:
                print(value)
        if args.action == "write":
            for key, value in args.string:
                mgmt.config_write(key, value.encode("utf-8"))
            for key, filename in args.file:
                with open(filename, "rb") as fi:
                    mgmt.config_write(key, fi.read())
        if args.action == "remove":
            for key in args.key:
                mgmt.config_remove(key)
        if args.action == "erase":
            mgmt.config_erase()

    if args.tool == "reboot":
        mgmt.reboot()

    if args.tool == "debug":
        if args.action == "allocator":
            mgmt.debug_allocator()
Exemplo n.º 20
0
def main():
    args = get_argparser().parse_args()
    init_logger_from_args(args)

    wlr = WavemeterRemote(host=args.server,
                          rpc_target=args.rpc_target,
                          rpc_port=args.rpc_port,
                          notifier_port=args.pub_port,
                          title=args.title,
                          window_x=args.x,
                          window_y=args.y,
                          cal_channel=args.cal_channel,
                          cal_wl=args.cal_wl,
                          cal_threshold=args.cal_threshold,
                          cal_interval=args.cal_interval,
                          cal_retry_interval=args.cal_retry_interval,
                          start_autocal=args.start_autocal)
    wlr.run()
Exemplo n.º 21
0
def main():
    args = get_argparser().parse_args()
    init_logger_from_args(args)
    if args.aux_output:
        client = WavemeterPIClientRedLabPlusAuxOut(
            host=args.server,
            port=args.port,
            channel=args.channel,
            board_num=args.board,
            channel_id=args.id,
            board_num_aux=args.board2,
            channel_id_aux=args.id2,
            setpoint=args.setpoint,
            cp=args.cp,
            ci=args.ci,
            integrator_timeout=args.integrator_timeout,
            integrator_cutoff=args.integrator_cutoff,
            output_sensitivity=args.output_sensitivity,
            output_offset=args.output_offset,
            startup_locked=args.startup_locked)
    else:
        client = WavemeterPIClientRedLab(
            host=args.server,
            port=args.port,
            channel=args.channel,
            board_num=args.board,
            channel_id=args.id,
            setpoint=args.setpoint,
            cp=args.cp,
            ci=args.ci,
            integrator_timeout=args.integrator_timeout,
            integrator_cutoff=args.integrator_cutoff,
            output_sensitivity=args.output_sensitivity,
            output_offset=args.output_offset,
            startup_locked=args.startup_locked)
    pub = Publisher(
        {"lock_client_{}".format(args.channel): client.status_notifier})

    asyncio.get_event_loop().run_until_complete(
        pub.start(bind_address_from_args(args), args.port_pub))
    simple_server_loop({"lock_client_{}".format(args.channel): client},
                       bind_address_from_args(args), args.port_rpc)
    client.close_subscriber()
Exemplo n.º 22
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    if os.name == "nt":
        asyncio.set_event_loop(asyncio.ProactorEventLoop())

    if not args.simulation and args.device is None:
        print("You need to specify either --simulation or -d/--device "
              "argument. Use --help for more information.")
        sys.exit(1)

    dev = Novatech409B(args.device if not args.simulation else None)
    asyncio.get_event_loop().run_until_complete(dev.setup())
    try:
        simple_server_loop(
            {"novatech409b": dev}, common_args.bind_address_from_args(args), args.port)
    finally:
        dev.close()
Exemplo n.º 23
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    bind_address = common_args.bind_address_from_args(args)

    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    try:
        signal_handler = SignalHandler()
        signal_handler.setup()
        try:
            monitor_mux = MonitorMux()
            comm_moninj = CommMonInj(monitor_mux.monitor_cb,
                                     monitor_mux.injection_status_cb,
                                     monitor_mux.disconnect_cb)
            monitor_mux.comm_moninj = comm_moninj
            loop.run_until_complete(comm_moninj.connect(args.core_addr))
            try:
                proxy_server = ProxyServer(monitor_mux)
                loop.run_until_complete(proxy_server.start(bind_address, args.port_proxy))
                try:
                    server = Server({"moninj_proxy": PingTarget()}, None, True)
                    loop.run_until_complete(server.start(bind_address, args.port_control))
                    try:
                        _, pending = loop.run_until_complete(asyncio.wait(
                            [signal_handler.wait_terminate(),
                             server.wait_terminate(),
                             comm_moninj.wait_terminate()],
                            return_when=asyncio.FIRST_COMPLETED))
                        for task in pending:
                            task.cancel()
                    finally:
                        loop.run_until_complete(server.stop())
                finally:
                    loop.run_until_complete(proxy_server.stop())
            finally:
                loop.run_until_complete(comm_moninj.close())
        finally:
            signal_handler.teardown()
    finally:
        loop.close()
Exemplo n.º 24
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    if not args.simulation and args.device is None:
        print("You need to specify either --simulation or -d/--device "
              "argument. Use --help for more information.")
        sys.exit(1)

    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    try:
        product = args.product.lower()
        if args.simulation:
            if product == "tdc001":
                dev = TdcSim()
            elif product == "tpz001":
                dev = TpzSim()
            else:
                print("Invalid product string (-P/--product), "
                      "choose from tdc001 or tpz001")
                sys.exit(1)
        else:
            if product == "tdc001":
                dev = Tdc(args.device)
            elif product == "tpz001":
                dev = Tpz(args.device)
                loop.run_until_complete(dev.get_tpz_io_settings())
            else:
                print("Invalid product string (-P/--product), "
                      "choose from tdc001 or tpz001")
                sys.exit(1)

        try:
            simple_server_loop({product: dev},
                               common_args.bind_address_from_args(args), args.port,
                               loop=loop)
        finally:
            dev.close()
    finally:
        loop.close()
Exemplo n.º 25
0
def main():
    args = get_argparser().parse_args()
    init_logger_from_args(args)
    if args.file == "":
        if GUI_available:
            wlcg = WavemeterLoggingClientGUI(host=args.server, port=args.port)
            wlcg.run()
        else:
            logger.error("No filename specified and no GUI available - exiting")
            return
    else:
        wlc = WavemeterLoggingClient(host=args.server, port=args.port)
        channels = []
        for ch in args.channel:
            try:
                channels.append(int(ch))
            except ValueError:
                if ch in ["T", "p"]:
                    channels.append(ch)
        wlc.log(channels, float(args.interval), args.file, args.append)
        wlc.wm_server.close_rpc()
Exemplo n.º 26
0
def main():
    args = get_argparser().parse_args()
    channels = []
    for ch in args.channel:
        try:
            channels.append(int(ch))
        except ValueError:
            pass
    init_logger_from_args(args)
    simple_server_loop(
        {
            "wavemeter_server":
            WavemeterServer(channels=channels,
                            num_hw_channels=args.nchannels,
                            get_temperature=args.T,
                            get_pressure=args.p,
                            skip_threshold_nm=args.skip_thr,
                            install_callback=args.callback,
                            start_publisher=args.start_pub,
                            publisher_host=bind_address_from_args(args),
                            publisher_port=args.port_pub)
        }, bind_address_from_args(args), args.port_rpc)
Exemplo n.º 27
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    device_mgr = DeviceManager(DeviceDB(args.device_db))
    dataset_mgr = DatasetManager(DatasetDB(args.dataset_db))

    try:
        module = file_import(args.file, prefix="artiq_run_")
        exp = get_experiment(module, args.class_name)
        arguments = parse_arguments(args.arguments)
        argument_mgr = ProcessArgumentManager(arguments)
        exp_inst = exp((device_mgr, dataset_mgr, argument_mgr, {}))

        if not hasattr(exp.run, "artiq_embedded"):
            raise ValueError("Experiment entry point must be a kernel")
        core_name = exp.run.artiq_embedded.core_name
        core = getattr(exp_inst, core_name)

        object_map, kernel_library, _, _ = \
            core.compile(exp.run, [exp_inst], {},
                         attribute_writeback=False, print_as_rpc=False)
    except CompileError as error:
        return
    finally:
        device_mgr.close_devices()

    if object_map.has_rpc():
        raise ValueError("Experiment must not use RPC")

    output = args.output
    if output is None:
        basename, ext = os.path.splitext(args.file)
        output = "{}.elf".format(basename)

    with open(output, "wb") as f:
        f.write(kernel_library)
Exemplo n.º 28
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    config = {
        "kasli": {
            "programmer":
            partial(ProgrammerXC7,
                    board="kasli",
                    proxy="bscan_spi_xc7a100t.bit"),
            "gateware": ("spi0", 0x000000),
            "bootloader": ("spi0", 0x400000),
            "storage": ("spi0", 0x440000),
            "firmware": ("spi0", 0x450000),
        },
        "sayma": {
            "programmer": ProgrammerAMCRTM,
            "gateware": ("spi0", 0x000000),
            "bootloader": ("spi1", 0x000000),
            "storage": ("spi1", 0x040000),
            "firmware": ("spi1", 0x050000),
            "rtm_gateware": ("spi1", 0x200000),
        },
        "kc705": {
            "programmer":
            partial(ProgrammerXC7,
                    board="kc705",
                    proxy="bscan_spi_xc7k325t.bit"),
            "def_variant":
            "nist_clock",
            "gateware": ("spi0", 0x000000),
            "bootloader": ("spi0", 0xaf0000),
            "storage": ("spi0", 0xb30000),
            "firmware": ("spi0", 0xb40000),
        },
    }[args.target]

    bin_dir = args.dir
    if bin_dir is None:
        bin_dir = os.path.join(artiq_dir, "board-support")

    needs_artifacts = not args.action or any(
        action in args.action for action in [
            "gateware", "rtm_gateware", "bootloader", "firmware", "load",
            "rtm_load"
        ])
    variant = args.variant
    if needs_artifacts and variant is None:
        variants = []
        if args.srcbuild:
            for entry in os.scandir(bin_dir):
                if entry.is_dir():
                    variants.append(entry.name)
        else:
            prefix = args.target + "-"
            for entry in os.scandir(bin_dir):
                if entry.is_dir() and entry.name.startswith(prefix):
                    variants.append(entry.name[len(prefix):])
        if args.target == "sayma":
            try:
                variants.remove("rtm")
            except ValueError:
                pass
        if len(variants) == 0:
            raise FileNotFoundError(
                "no variants found, did you install a board binary package?")
        elif len(variants) == 1:
            variant = variants[0]
        else:
            raise ValueError(
                "more than one variant found for selected board, specify -V. "
                "Found variants: {}".format(" ".join(sorted(variants))))
    if needs_artifacts:
        if args.srcbuild:
            variant_dir = variant
        else:
            variant_dir = args.target + "-" + variant
        if args.target == "sayma":
            if args.srcbuild:
                rtm_variant_dir = "rtm"
            else:
                rtm_variant_dir = "sayma-rtm"

    if not args.action:
        if args.target == "sayma" and variant != "simplesatellite" and variant != "master":
            args.action = "gateware rtm_gateware bootloader firmware start".split(
            )
        else:
            args.action = "gateware bootloader firmware start".split()

    if args.host is None:
        client = LocalClient()
    else:
        client = SSHClient(args.host, args.jump)

    if args.target == "sayma" and args.no_rtm_jtag:
        programmer_cls = ProgrammerAMC
    else:
        programmer_cls = config["programmer"]
    programmer = programmer_cls(client, preinit_script=args.preinit_command)

    def artifact_path(this_variant_dir, *path_filename):
        if args.srcbuild:
            # source tree - use path elements to locate file
            return os.path.join(bin_dir, this_variant_dir, *path_filename)
        else:
            # flat tree - all files in the same directory, discard path elements
            *_, filename = path_filename
            return os.path.join(bin_dir, this_variant_dir, filename)

    def convert_gateware(bit_filename, header=False):
        bin_handle, bin_filename = tempfile.mkstemp(
            prefix="artiq_", suffix="_" + os.path.basename(bit_filename))
        with open(bit_filename, "rb") as bit_file, \
                open(bin_handle, "wb") as bin_file:
            if header:
                bin_file.write(b"\x00" * 8)
            bit2bin(bit_file, bin_file)
            if header:
                magic = 0x5352544d  # "SRTM", see sayma_rtm target
                length = bin_file.tell() - 8
                bin_file.seek(0)
                bin_file.write(magic.to_bytes(4, byteorder="big"))
                bin_file.write(length.to_bytes(4, byteorder="big"))
        atexit.register(lambda: os.unlink(bin_filename))
        return bin_filename

    for action in args.action:
        if action == "gateware":
            gateware_bin = convert_gateware(
                artifact_path(variant_dir, "gateware", "top.bit"))
            programmer.write_binary(*config["gateware"], gateware_bin)
        elif action == "rtm_gateware":
            rtm_gateware_bin = convert_gateware(artifact_path(
                rtm_variant_dir, "gateware", "top.bit"),
                                                header=True)
            programmer.write_binary(*config["rtm_gateware"], rtm_gateware_bin)
        elif action == "bootloader":
            bootloader_bin = artifact_path(variant_dir, "software",
                                           "bootloader", "bootloader.bin")
            programmer.write_binary(*config["bootloader"], bootloader_bin)
        elif action == "storage":
            storage_img = args.storage
            programmer.write_binary(*config["storage"], storage_img)
        elif action == "firmware":
            if variant.endswith("satellite"):
                firmware = "satman"
            else:
                firmware = "runtime"

            firmware_fbi = artifact_path(variant_dir, "software", firmware,
                                         firmware + ".fbi")
            programmer.write_binary(*config["firmware"], firmware_fbi)
        elif action == "load":
            if args.target == "sayma":
                gateware_bit = artifact_path(variant_dir, "gateware",
                                             "top.bit")
                programmer.load(gateware_bit, 1)
            else:
                gateware_bit = artifact_path(variant_dir, "gateware",
                                             "top.bit")
                programmer.load(gateware_bit, 0)
        elif action == "rtm_load":
            rtm_gateware_bit = artifact_path(rtm_variant_dir, "gateware",
                                             "top.bit")
            programmer.load(rtm_gateware_bit, 0)
        elif action == "start":
            programmer.start()
        elif action == "erase":
            if args.target == "sayma" or args.target == "metlino":
                programmer.erase_flash("spi0")
                programmer.erase_flash("spi1")
            else:
                programmer.erase_flash("spi0")
        else:
            raise ValueError("invalid action", action)

    if args.dry_run:
        print("\n".join(programmer.script()))
    else:
        programmer.run()
Exemplo n.º 29
0
def main():

    args = get_argparser().parse_args()
    init_logger_from_args(args)

    servers = {
        idx: {
            "host": ip,
            "notify": 3250,
            "control": 3251
        }
        for idx, ip in enumerate(args.server)}

    while True:

        measurements = []

        for _, server in servers.items():
            try:
                client = RPCClient(server["host"], server["control"])
                lasers = client.get_laser_db()
                for laser in lasers:
                    meas = client.get_freq(laser,
                                           age=args.poll_time,
                                           priority=3,
                                           get_osa_trace=False,
                                           blocking=True,
                                           mute=False,
                                           offset_mode=False)
                    status, freq, _ = meas

                    if status != WLMMeasurementStatus.OKAY:
                        logger.info("{}: measurement error")
                        continue

                    f_ref = lasers[laser]["f_ref"]
                    delta = freq - lasers[laser]["f_ref"]
                    measurements.append({
                        "measurement": laser,
                        "fields": {
                            "freq": freq,
                            "f_ref": f_ref,
                            "detuning": delta
                        }
                    })
                    logger.info("{}: freq {} THz, f_ref {} THz, "
                                "detuning {} MHz".format(laser,
                                                         freq,
                                                         f_ref,
                                                         delta))
            except OSError:
                logger.warning("Error querying server {}".format(server))
            finally:
                client.close_rpc()

        if measurements == []:
            time.sleep(args.poll_time)
            continue

        try:
            influx = influxdb.InfluxDBClient(
                host="10.255.6.4",
                database=args.database,
                username="******",
                password="******")

            influx.write_points(measurements)
        finally:
            influx.close()
        time.sleep(args.poll_time)
Exemplo n.º 30
0
def main():
    args = get_argparser().parse_args()
    common_args.init_logger_from_args(args)

    if args.device is None:
        ddb = DeviceDB(args.device_db)
        core_addr = ddb.get("core", resolve_alias=True)["arguments"]["host"]
    else:
        core_addr = args.device
    mgmt = CommMgmt(core_addr)

    if args.tool == "log":
        if args.action == "set_level":
            mgmt.set_log_level(args.level)
        if args.action == "set_uart_level":
            mgmt.set_uart_log_level(args.level)
        if args.action == "clear":
            mgmt.clear_log()
        if args.action == None:
            print(mgmt.get_log(), end="")

    if args.tool == "config":
        if args.action == "read":
            value = mgmt.config_read(args.key)
            if not value:
                print("Key {} does not exist".format(args.key))
            else:
                print(value)
        if args.action == "write":
            for key, value in args.string:
                mgmt.config_write(key, value.encode("utf-8"))
            for key, filename in args.file:
                with open(filename, "rb") as fi:
                    mgmt.config_write(key, fi.read())
        if args.action == "remove":
            for key in args.key:
                mgmt.config_remove(key)
        if args.action == "erase":
            mgmt.config_erase()

    if args.tool == "reboot":
        mgmt.reboot()

    if args.tool == "hotswap":
        mgmt.hotswap(args.image.read())

    if args.tool == "profile":
        if args.action == "start":
            mgmt.start_profiler(args.interval, args.hits_size, args.edges_size)
        elif args.action == "stop":
            mgmt.stop_profiler()
        elif args.action == "save":
            hits, edges = mgmt.get_profile()
            writer = CallgrindWriter(args.output, args.firmware, "or1k-linux",
                                     args.compression, args.demangle)
            writer.header()
            for addr, count in hits.items():
                writer.hit(addr, count)
            for (caller, callee), count in edges.items():
                writer.edge(caller, callee, count)

    if args.tool == "debug":
        if args.action == "allocator":
            mgmt.debug_allocator()