Beispiel #1
0
def save_diagram_screenshot(path, diagram, title):
    print("  screenshot        ", end='', flush=True)
    path.mkdirs()
    filename = path.file_path(title, ".png")
    diagram.save_screenshot_locally(filename, "PNG")
    with open(filename, 'rb') as f:
        print_check()
        return base64.b64encode(f.read()).decode()
def process_channel(path, channel, ports, settings):
    print("Channel {0}".format(channel.name), flush=True)
    if not settings.is_save_channels():
        print("  sweep             ", end='', flush=True)
        channel.sweep()
        print_check()
        return
    ch_name = channel.name
    path.cd_channel(ch_name)
    path.mkdirs()
    file_ext = ".s{0}p".format(len(ports))
    filename = path.file_path(ch_name, file_ext)
    print("  touchstone        ", end='', flush=True)
    channel.save_measurement_locally(filename, ports)
    print_check()
Beispiel #3
0
def process_prop_delay(diagram, title):
    data = OrderedDict()
    if is_prop_delay(title):
        print("  prop delay        ", end='', flush=True)
        value = delta_50pct(diagram)
        data["prop delay"] = value
        print_check()
        if limit_in_title(title):
            print("  prop delay limit  ", end='', flush=True)
            is_passed = eval_limits(title, value)
            if not is_passed:
                data['limits'] = "failed"
            elif 'limits' not in data:
                data['limits'] = "passed"
            print_check()
    return data
Beispiel #4
0
def process_vna(path, vna, settings):
    data = OrderedDict()
    if not settings.is_save_vna():
        return data

    path.cd_vna_screenshot()
    if not settings['save']['disable screenshots']:
        path.mkdirs()
        filename = path.file_path("screenshot", ".png")
        print("Screenshot          ", end='', flush=True)
        vna.save_screenshot_locally(filename, "PNG")
        print_check()
    if not settings['save']['disable global limit'] and vna.is_limits():
        print("Global limit        ", end='', flush=True)
        path.cd_vna_limits()
        path.mkdirs()
        if vna.passed:
            data["limits"] = "passed"
            touch(path.file_path("", "__PASSED__"))
        else:
            data["limits"] = "failed"
            touch(path.file_path("", "__FAILED__"))
        print_check()
    return data
Beispiel #5
0
def process_trace(path, trace, settings):
    data = OrderedDict()

    # Data (csv) files
    trc_name = trace.name
    path.cd_trace(trc_name)
    if not settings['save']['disable trace csv files']:
        print("    csv             ", end='', flush=True)
        path.mkdirs()
        filename = path.file_path(trc_name, '.csv')
        if trace.time_domain.on:
            data["time domain"] = True
            trace.save_data_locally(filename)
        else:
            trace.save_complex_data_locally(filename)
        print_check()


    # Limits
    if not settings['save']['disable per-test limits']:
        print("    limits          ", end='', flush=True)
        if trace.limits.on:
            if trace.limits.passed:
                data["limits"] = "passed"
            else:
                data["limits"] = "failed"
        print_check()

    # Markers
    if not settings['save']['disable markers']:
        print("    markers         ", end='', flush=True)
        markers_data = data['markers'] = OrderedDict()
        for i in trace.markers:
            m    = trace.marker(i)
            name = m.name
            marker_data = markers_data[name] = OrderedDict()
            x = OrderedDict()
            x['value'] = m.x
            x['units'] = str(trace.x_units())
            y = OrderedDict()
            y['value'] = m.y
            y['units'] = str(trace.y_units())
            marker_data['x'] = x
            marker_data['y'] = y
        print_check()
    return data
def measure(vna, serial_no, settings):
    data = OrderedDict()
    data['timestamp'] = timestamp()

    data['instrument'] = OrderedDict()
    data['instrument']['id string'] = vna.id_string()
    data['instrument']['options'] = vna.options_string()

    path = SavePath(settings['save']['directory'], serial_no,
                    not settings['save']['organize by file'])
    path.mkdirs()

    # Sweep, save touchstone
    channels = vna.channels
    for i in channels:
        channel = vna.channel(i)
        ports = get_ports(vna, channel)
        process_channel(path, channel, ports, settings)

    # VNA screenshot,
    # global pass/fail
    data.update(process_vna(path, vna, settings))

    # Diagram screenshots,
    # trace csv,
    # limits
    # markers,
    # other (skew, prop delay)
    if settings.is_save_diagrams() or settings.is_save_traces():
        data['diagrams'] = OrderedDict()
        diagrams = vna.diagrams
        for d in diagrams:
            diagram = vna.diagram(d)
            title = strip_limit_from_title(diagram.title)
            if title:
                print("Diagram {0}".format(title), flush=True)
            else:
                title = "Diagram {0}".format(diagram.index)
                print(title, flush=True)
            diagram_data = data['diagrams'][title] \
                         = process_diagram(path, diagram, settings)
            traces_data  = diagram_data['traces']  \
                         = OrderedDict()
            if settings.is_save_traces():
                for t in diagram.traces:
                    print("  Trace {0}".format(t), flush=True)
                    trace = diagram._vna.trace(t)
                    name = trace.name
                    traces_data[name] = process_trace(path, trace, settings)
            if not settings['save']['disable per-test limits']:
                diagram_limits_from_data(diagram_data)

    # Create summary
    if not settings['save']['disable html summary']:
        print("HTML                ", end='', flush=True)
        path.cd_summary()
        path.mkdirs()
        generate_html(path.file_path('summary', '.html'), serial_no, settings,
                      data)
        print_check()

    # Remove screenshot binary from data
    if not settings['save']['disable screenshots']:
        remove_screenshots(data)

    # Write data
    if not settings['save']['disable results json']:
        print("JSON                ", end='', flush=True)
        path.cd_json()
        path.mkdirs()
        with open(path.file_path('summary', '.json'), 'w') as f:
            json.dump(data, f)
        print_check()
    if settings['save']['enable project csv']:
        print("CSV                 ", end='', flush=True)
        filename = path.root_path / "cumulative.csv"
        filename = str(filename)
        generate_csv(filename, serial_no, data)
        print_check()

    return data