# NanoVNASaver # # A python program to view and export Touchstone data from a NanoVNA # Copyright (C) 2019, 2020 Rune B. Broberg # Copyright (C) 2020 NanoVNA-Saver Authors # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import logging from time import sleep from typing import List import serial from NanoVNASaver.Hardware.VNA import VNA, Version logger = logging.getLogger(__name__) class AVNA(VNA): name = "AVNA" def __init__(self, app, serial_port): super().__init__(app, serial_port) self.version = Version(self.readVersion()) self.features.add("Customizable data points") def isValid(self): return True def getCalibration(self) -> str: logger.debug("Reading calibration info.") if not self.serial.is_open: return "Not connected." if self.app.serialLock.acquire(): try: data = "a" while data != "": data = self.serial.readline().decode('ascii') self.serial.write("cal\r".encode('ascii')) result = "" data = "" sleep(0.1) while "ch>" not in data: data = self.serial.readline().decode('ascii') result += data values = result.splitlines() return values[1] except serial.SerialException as exc: logger.exception("Exception while reading calibration info: %s", exc) finally: self.app.serialLock.release() return "Unknown" def readFrequencies(self) -> List[str]: return self.readValues("frequencies") def resetSweep(self, start: int, stop: int): self.writeSerial("sweep " + str(start) + " " + str(stop) + " " + str(self.datapoints)) self.writeSerial("resume") def readVersion(self): logger.debug("Reading version info.") if not self.serial.is_open: return if self.app.serialLock.acquire(): try: data = "a" while data != "": data = self.serial.readline().decode('ascii') self.serial.write("version\r".encode('ascii')) result = "" data = "" sleep(0.1) while "ch>" not in data: data = self.serial.readline().decode('ascii') result += data values = result.splitlines() logger.debug("Found version info: %s", values[1]) return values[1] except serial.SerialException as exc: logger.exception("Exception while reading firmware version: %s", exc) finally: self.app.serialLock.release() return def setSweep(self, start, stop): self.writeSerial("sweep " + str(start) + " " + str(stop) + " " + str(self.datapoints)) sleep(1)