quarchpy 2.2.7.dev1__py2.py3-none-any.whl → 2.2.8__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- quarchpy/_version.py +1 -1
- quarchpy/connection_specific/QPS/win-amd64/{License/argparse4j-license.txt → 3rdPartyLicenses/argparse4j-LICENSE.txt} +23 -25
- quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/com.sun.istack-license.html +59 -0
- quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/commons-io-LICENSE-2.0.txt +202 -0
- quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/controlsfx-license.txt +29 -0
- quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/jakarta.activation-license.html +59 -0
- quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/jakarta.xml.bind-api-license.html +59 -0
- quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/netty-LICENSE.txt +202 -0
- quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/netty-NOTICE.txt +239 -0
- quarchpy/connection_specific/QPS/win-amd64/InstallType.dat +1 -0
- quarchpy/connection_specific/QPS/win-amd64/app.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/app.properties +6 -0
- quarchpy/connection_specific/QPS/win-amd64/license.txt +1 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/com.sun.istack-license.html +59 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/dorkbox-LICENSE.Apachev2 +218 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/jSerialComm-LICENSE-APACHE-2.0 +202 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/jSerialComm-LICENSE-LGPL-3.0 +165 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/jakarta.activation-license.html +59 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/jakarta.xml.bind-api-license.html +59 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/javassist-License.html +381 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/jmdns-LICENSE.txt +202 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/jna-AL2.0 +177 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/kotlin-stdlib-LICENSE-2.0.txt +202 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/netty-LICENSE.txt +202 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/netty-NOTICE.txt +239 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/slf4j-LICENSE.txt +24 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/usb4java-LICENSE.md +20 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/help.txt +50 -17
- quarchpy/connection_specific/QPS/win-amd64/qis/license.txt +1 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/qis.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/CInterface-2.3.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/QuarchCommon-2.0.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/{TorridonCommon-1.0.jar → TorridonCommon-1.1.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/jmdns-3.5.9.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/usb4java-1.3.1.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps-command-reference.html +104 -104
- quarchpy/connection_specific/QPS/win-amd64/qps.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/JFXUtilities-1.0.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/QuarchCommon-2.0.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/commons-io-2.18.0.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-base-21.0.6-linux-aarch64.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-controls-21.0.6-linux-aarch64.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-fxml-21.0.6-linux-aarch64.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-graphics-21.0.6-linux-aarch64.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-swing-21.0.6-linux-aarch64.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-base-21.0.5-linux.jar → javafx-base-21.0.6-linux.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-controls-21.0.5-linux.jar → javafx-controls-21.0.6-linux.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-fxml-21.0.5-linux.jar → javafx-fxml-21.0.6-linux.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-graphics-21.0.5-linux.jar → javafx-graphics-21.0.6-linux.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-swing-21.0.5-linux.jar → javafx-swing-21.0.6-linux.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/{mac-x64/javafx-base-21.0.5-mac.jar → mac-arm64/javafx-base-21.0.6-mac-aarch64.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-controls-21.0.5-mac-aarch64.jar → javafx-controls-21.0.6-mac-aarch64.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/{mac-x64/javafx-fxml-21.0.5-mac.jar → mac-arm64/javafx-fxml-21.0.6-mac-aarch64.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-graphics-21.0.5-mac-aarch64.jar → javafx-graphics-21.0.6-mac-aarch64.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/{mac-x64/javafx-swing-21.0.5-mac.jar → mac-arm64/javafx-swing-21.0.6-mac-aarch64.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/{mac-arm64/javafx-base-21.0.5-mac-aarch64.jar → mac-x64/javafx-base-21.0.6-mac.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-controls-21.0.5-mac.jar → javafx-controls-21.0.6-mac.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/{mac-arm64/javafx-fxml-21.0.5-mac-aarch64.jar → mac-x64/javafx-fxml-21.0.6-mac.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-graphics-21.0.5-mac.jar → javafx-graphics-21.0.6-mac.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/{mac-arm64/javafx-swing-21.0.5-mac-aarch64.jar → mac-x64/javafx-swing-21.0.6-mac.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/qutils-1.0.jar +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-base-21.0.5-win.jar → javafx-base-21.0.6-win.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-controls-21.0.5-win.jar → javafx-controls-21.0.6-win.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-fxml-21.0.5-win.jar → javafx-fxml-21.0.6-win.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-graphics-21.0.5-win.jar → javafx-graphics-21.0.6-win.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-swing-21.0.5-win.jar → javafx-swing-21.0.6-win.jar} +0 -0
- quarchpy/connection_specific/QPS/win-amd64/scriptCommands.txt +4 -4
- quarchpy/connection_specific/QPS/win-amd64/whats-new.txt +20 -12
- quarchpy/connection_specific/connection_QIS.py +1 -0
- quarchpy/debug/SystemTest.py +30 -15
- quarchpy/device/quarchQPS.py +93 -68
- quarchpy/docs/CHANGES.rst +8 -0
- quarchpy/docs/_build/doctrees/CHANGES.doctree +0 -0
- quarchpy/docs/_build/doctrees/environment.pickle +0 -0
- quarchpy/docs/_build/doctrees/source/changelog.doctree +0 -0
- quarchpy/docs/_build/doctrees/source/quarchpy.fio.doctree +0 -0
- quarchpy/docs/_build/html/CHANGES.html +145 -139
- quarchpy/docs/_build/html/_sources/CHANGES.rst.txt +7 -0
- quarchpy/docs/_build/html/genindex.html +8 -2
- quarchpy/docs/_build/html/index.html +71 -70
- quarchpy/docs/_build/html/objects.inv +0 -0
- quarchpy/docs/_build/html/searchindex.js +1 -1
- quarchpy/docs/_build/html/source/changelog.html +216 -209
- quarchpy/docs/_build/html/source/quarchpy.fio.html +64 -0
- quarchpy/docs/_build/html/source/quarchpy.html +3 -0
- quarchpy/fio/{test_performance_class.py → HIDEtest_performance_class.py} +1 -1
- quarchpy/fio_tests_file.fio +1 -0
- quarchpy/qis/qisFuncs.py +38 -41
- quarchpy/qps/qpsFuncs.py +7 -10
- quarchpy/tests/test_device/test_scanDevices.py +21 -0
- quarchpy/utilities/utils.py +64 -0
- {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dist-info}/METADATA +10 -2
- {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dist-info}/RECORD +99 -172
- {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dist-info}/WHEEL +1 -1
- quarchpy/.idea/.gitignore +0 -3
- quarchpy/.idea/inspectionProfiles/Project_Default.xml +0 -12
- quarchpy/.idea/inspectionProfiles/profiles_settings.xml +0 -6
- quarchpy/.idea/misc.xml +0 -7
- quarchpy/.idea/modules.xml +0 -8
- quarchpy/.idea/quarchpy.iml +0 -12
- quarchpy/.idea/workspace.xml +0 -75
- quarchpy/_version.py.bak +0 -1
- quarchpy/config_files/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/config_files/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/config_files/__pycache__/quarch_config_parser.cpython-311.pyc +0 -0
- quarchpy/config_files/__pycache__/quarch_config_parser.cpython-313.pyc +0 -0
- quarchpy/connection_specific/QPS/win-amd64/License/Netty-license.txt +0 -143
- quarchpy/connection_specific/QPS/win-amd64/License/controlsfx-license.txt +0 -26
- quarchpy/connection_specific/QPS/win-amd64/License/usb4java-license.txt +0 -167
- quarchpy/connection_specific/QPS/win-amd64/launchQPSJ21.bat +0 -4
- quarchpy/connection_specific/QPS/win-amd64/launchQPSJ21.sh +0 -4
- quarchpy/connection_specific/__pycache__/StreamChannels.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_QIS.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_QPS.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_ReST.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_Serial.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_TCP.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_Telnet.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/connection_USB.cpython-313.pyc +0 -0
- quarchpy/connection_specific/__pycache__/mDNS.cpython-313.pyc +0 -0
- quarchpy/connection_specific/connection_QPS.py.bak +0 -242
- quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/__pycache__/win32.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-313.pyc +0 -0
- quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-313.pyc +0 -0
- quarchpy/debug/__pycache__/SystemTest.cpython-311.pyc +0 -0
- quarchpy/debug/__pycache__/SystemTest.cpython-313.pyc +0 -0
- quarchpy/debug/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/debug/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/debug/__pycache__/module_debug.cpython-311.pyc +0 -0
- quarchpy/debug/__pycache__/module_debug.cpython-313.pyc +0 -0
- quarchpy/debug/__pycache__/simple_terminal.cpython-311.pyc +0 -0
- quarchpy/debug/__pycache__/simple_terminal.cpython-313.pyc +0 -0
- quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-311.pyc +0 -0
- quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-313.pyc +0 -0
- quarchpy/debug/__pycache__/versionCompare.cpython-311.pyc +0 -0
- quarchpy/debug/__pycache__/versionCompare.cpython-313.pyc +0 -0
- quarchpy/device/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/device/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/device/__pycache__/device.cpython-311.pyc +0 -0
- quarchpy/device/__pycache__/device.cpython-313.pyc +0 -0
- quarchpy/device/__pycache__/quarchArray.cpython-311.pyc +0 -0
- quarchpy/device/__pycache__/quarchArray.cpython-313.pyc +0 -0
- quarchpy/device/__pycache__/quarchPPM.cpython-311.pyc +0 -0
- quarchpy/device/__pycache__/quarchPPM.cpython-313.pyc +0 -0
- quarchpy/device/__pycache__/quarchQPS.cpython-311.pyc +0 -0
- quarchpy/device/__pycache__/quarchQPS.cpython-313.pyc +0 -0
- quarchpy/device/__pycache__/scanDevices.cpython-311.pyc +0 -0
- quarchpy/device/__pycache__/scanDevices.cpython-313.pyc +0 -0
- quarchpy/device/quarchQPS.py.bak +0 -398
- quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-311.pyc +0 -0
- quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-313.pyc +0 -0
- quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-311.pyc +0 -0
- quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-313.pyc +0 -0
- quarchpy/disk_test/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/disk_test/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-311.pyc +0 -0
- quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-313.pyc +0 -0
- quarchpy/docs/CHANGES.rst.bak +0 -430
- quarchpy/docs/_build/html/.buildinfo.bak +0 -4
- quarchpy/docs/_build/html/_static/github-banner.svg +0 -5
- quarchpy/fio/FIO_interface.py.bak +0 -317
- quarchpy/fio/__pycache__/FIO_interface.cpython-311.pyc +0 -0
- quarchpy/fio/__pycache__/FIO_interface.cpython-313.pyc +0 -0
- quarchpy/fio/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/fio/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/fio/__pycache__/fioDiskFinder.cpython-311.pyc +0 -0
- quarchpy/fio/__pycache__/fioDiskFinder.cpython-313.pyc +0 -0
- quarchpy/iometer/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/iometer/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/iometer/__pycache__/gen_iometer_template.cpython-311.pyc +0 -0
- quarchpy/iometer/__pycache__/gen_iometer_template.cpython-313.pyc +0 -0
- quarchpy/iometer/__pycache__/iometerFuncs.cpython-311.pyc +0 -0
- quarchpy/iometer/__pycache__/iometerFuncs.cpython-313.pyc +0 -0
- quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-311.pyc +0 -0
- quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-313.pyc +0 -0
- quarchpy/qis/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/qis/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/qis/__pycache__/qisFuncs.cpython-311.pyc +0 -0
- quarchpy/qis/__pycache__/qisFuncs.cpython-313.pyc +0 -0
- quarchpy/qps/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/qps/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/qps/__pycache__/qpsFuncs.cpython-311.pyc +0 -0
- quarchpy/qps/__pycache__/qpsFuncs.cpython-313.pyc +0 -0
- quarchpy/user_interface/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/user_interface/__pycache__/__init__.cpython-313.pyc +0 -0
- quarchpy/user_interface/__pycache__/user_interface.cpython-311.pyc +0 -0
- quarchpy/user_interface/__pycache__/user_interface.cpython-313.pyc +0 -0
- quarchpy/utilities/__pycache__/TestCenter.cpython-311.pyc +0 -0
- quarchpy/utilities/__pycache__/TestCenter.cpython-313.pyc +0 -0
- quarchpy/utilities/__pycache__/TimeValue.cpython-311.pyc +0 -0
- quarchpy/utilities/__pycache__/TimeValue.cpython-313.pyc +0 -0
- quarchpy/utilities/__pycache__/Version.cpython-311.pyc +0 -0
- quarchpy/utilities/__pycache__/Version.cpython-313.pyc +0 -0
- quarchpy/utilities/__pycache__/__init__.cpython-311.pyc +0 -0
- quarchpy/utilities/__pycache__/__init__.cpython-313.pyc +0 -0
- /quarchpy/connection_specific/QPS/win-amd64/{License → 3rdPartyLicenses}/Material-Icons-license.txt +0 -0
- /quarchpy/connection_specific/QPS/win-amd64/DeviceConfig/{QTL1995-02.XML → QTL1995-02.xml} +0 -0
- /quarchpy/connection_specific/QPS/win-amd64/DeviceConfig/{QTL1999-02.XML → QTL1999-02.xml} +0 -0
- /quarchpy/connection_specific/QPS/win-amd64/DeviceConfig/{QTL2312-01.XML → QTL2312-01.xml} +0 -0
- {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dist-info}/top_level.txt +0 -0
quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-fxml-21.0.6-linux-aarch64.jar
ADDED
Binary file
|
Binary file
|
quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-swing-21.0.6-linux-aarch64.jar
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -1,7 +1,7 @@
|
|
1
1
|
QPS Command Summary
|
2
2
|
Copyright (c) Quarch Ltd
|
3
|
-
QPS v1.
|
4
|
-
Generated:
|
3
|
+
QPS v1.46
|
4
|
+
Generated: 10 Apr 2025
|
5
5
|
|
6
6
|
|
7
7
|
*** Commands ***
|
@@ -390,7 +390,7 @@ Version: 2
|
|
390
390
|
See also: $qps hide
|
391
391
|
|
392
392
|
Command: $read
|
393
|
-
Description: Reads data between
|
393
|
+
Description: Reads data between a given start time and either end time or number of records
|
394
394
|
Version: 1
|
395
395
|
See also: $stream read
|
396
396
|
Arguments
|
@@ -1084,7 +1084,7 @@ $qps hide ~ Hides the QPS application
|
|
1084
1084
|
|
1085
1085
|
$qps show ~ Shows the QPS application
|
1086
1086
|
|
1087
|
-
$read ~ Reads data between
|
1087
|
+
$read ~ Reads data between a given start time and either end time or number of records
|
1088
1088
|
|
1089
1089
|
$save csv ~ Saves to CSV format
|
1090
1090
|
|
@@ -1,31 +1,39 @@
|
|
1
1
|
*** What's New In Quarch Power Studio ***
|
2
2
|
|
3
|
-
|
3
|
+
31st March 2025
|
4
4
|
|
5
|
-
QPS version 1.
|
6
|
-
QIS version 1.
|
5
|
+
QPS version 1.46
|
6
|
+
QIS version 1.48
|
7
7
|
|
8
8
|
|
9
9
|
|
10
10
|
*** New Features ***
|
11
11
|
|
12
|
-
|
12
|
+
Import of custom channel data for CSV via the GUI
|
13
13
|
|
14
|
-
|
14
|
+
Direct access to QIS terminal, recording folder and documentation
|
15
15
|
|
16
|
-
|
16
|
+
Auto check and download of USB driver on windows
|
17
17
|
|
18
|
-
|
18
|
+
Optional warning when QPS recordings exceed a set level
|
19
19
|
|
20
|
-
|
20
|
+
Java memory heap size can be set in preferences
|
21
21
|
|
22
|
-
|
22
|
+
Chart read optimisation speeds up performance when channels are not visible
|
23
|
+
|
24
|
+
Added synthetic AC channel option to show when data is invalid (outside SPEC calibration)
|
25
|
+
|
26
|
+
Added notification on connection screen if a device is locked by another process
|
27
|
+
|
28
|
+
Recordings are validated on load, clear warning given if anything is wrong
|
23
29
|
|
24
30
|
|
25
31
|
*** Major Fixes ***
|
26
32
|
|
27
|
-
Fixed
|
33
|
+
Fixed issue with QPS files not deleting
|
34
|
+
|
35
|
+
Fixed bug where channel ordering was not consistent
|
28
36
|
|
29
|
-
|
37
|
+
Fixed issue with synthetic channels enables not working
|
30
38
|
|
31
|
-
Fixed
|
39
|
+
Fixed issue with timeline corruption when expanded over multiple screens
|
quarchpy/debug/SystemTest.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
from quarchpy import *
|
2
2
|
from quarchpy.device import *
|
3
|
+
from quarchpy.connection_specific.jdk_j21_jres.fix_permissions import main as fix_permissions, find_java_permissions
|
3
4
|
try:
|
4
5
|
from importlib.metadata import distribution
|
5
6
|
except:
|
@@ -48,6 +49,11 @@ def test_system_info():
|
|
48
49
|
print(str(bytes(subprocess.check_output(['cat', '/etc/os-release'], stderr=subprocess.STDOUT)).decode()))
|
49
50
|
print("Platform Release: " + platform.release())
|
50
51
|
|
52
|
+
print("\nPYTHON\n------")
|
53
|
+
try:
|
54
|
+
print("Python Version: " + sys.version)
|
55
|
+
except:
|
56
|
+
print("Unable to detect Python version")
|
51
57
|
try:
|
52
58
|
print("Quarchpy Version: " + get_quarchpy_version())
|
53
59
|
except:
|
@@ -57,14 +63,8 @@ def test_system_info():
|
|
57
63
|
except Exception as e:
|
58
64
|
print(e)
|
59
65
|
print("Unable to detect Quarchpy location")
|
60
|
-
|
61
|
-
|
62
|
-
except:
|
63
|
-
print("Unable to detect Python version")
|
64
|
-
try:
|
65
|
-
print("QIS version number: " + get_QIS_version())
|
66
|
-
except:
|
67
|
-
print("Unable to detect QIS version")
|
66
|
+
|
67
|
+
print("\nJAVA\n----")
|
68
68
|
try:
|
69
69
|
javaVersion = bytes(subprocess.check_output(['java', '-version'], stderr=subprocess.STDOUT)).decode()
|
70
70
|
print("Java Version: " + str(javaVersion))
|
@@ -78,12 +78,17 @@ def test_system_info():
|
|
78
78
|
print("Unable to detect java location"
|
79
79
|
"If Java is not installed then QIS and QPS will NOT run")
|
80
80
|
try:
|
81
|
-
find_java_permissions()
|
81
|
+
execute_permissions, message=find_java_permissions()
|
82
|
+
print("Execute Permissions: ",execute_permissions, "\n",message)
|
82
83
|
except:
|
83
84
|
print("Unable to get j21 java permissions")
|
85
|
+
try:
|
86
|
+
print("\nQIS version number: " + get_QIS_version())
|
87
|
+
except Exception as e:
|
88
|
+
print("\nUnable to detect QIS version. Exception:" +str(e))
|
84
89
|
|
85
|
-
# Scan for all quarch devices on the system
|
86
90
|
|
91
|
+
# Scan for all quarch devices on the system
|
87
92
|
def QuarchSimpleIdentify(device1):
|
88
93
|
"""
|
89
94
|
Prints basic identification test data on the specified module, compatible with all Quarch devices
|
@@ -92,7 +97,7 @@ def QuarchSimpleIdentify(device1):
|
|
92
97
|
----------
|
93
98
|
device1: quarchDevice
|
94
99
|
Open connection to a quarch device
|
95
|
-
|
100
|
+
|
96
101
|
"""
|
97
102
|
# Print the module name
|
98
103
|
print("MODULE IDENTIFY TEST")
|
@@ -105,6 +110,7 @@ def QuarchSimpleIdentify(device1):
|
|
105
110
|
print("Module Identity Information: ")
|
106
111
|
print(device1.sendCommand("*idn?"))
|
107
112
|
|
113
|
+
|
108
114
|
def get_QIS_version():
|
109
115
|
"""
|
110
116
|
Returns the version of QIS. This is the version of QIS currenty running on the local system if one exists.
|
@@ -114,15 +120,20 @@ def get_QIS_version():
|
|
114
120
|
-------
|
115
121
|
version: str
|
116
122
|
String representation of the QIS version number
|
117
|
-
|
123
|
+
|
118
124
|
"""
|
119
125
|
|
120
126
|
qis_version = ""
|
121
127
|
my_close_qis = False
|
122
|
-
|
128
|
+
try:
|
129
|
+
qisRunning=isQisRunning()
|
130
|
+
except Exception as e:
|
131
|
+
print("Exception occurred while checking if qis was already running. Error:\n"+str(e))
|
132
|
+
|
133
|
+
if qisRunning == False:
|
123
134
|
my_close_qis = True
|
124
135
|
startLocalQis(headless=True)
|
125
|
-
|
136
|
+
|
126
137
|
myQis = qisInterface()
|
127
138
|
qis_version = myQis.sendAndReceiveCmd(cmd="$version")
|
128
139
|
if "No Target Device Specified" in qis_version:
|
@@ -131,6 +142,7 @@ def get_QIS_version():
|
|
131
142
|
myQis.sendAndReceiveCmd(cmd = "$shutdown")
|
132
143
|
return qis_version
|
133
144
|
|
145
|
+
|
134
146
|
def get_java_location():
|
135
147
|
"""
|
136
148
|
Returns the location of java.
|
@@ -148,14 +160,16 @@ def get_java_location():
|
|
148
160
|
location = "Unable to detect OS to check java version."
|
149
161
|
return location
|
150
162
|
|
163
|
+
|
151
164
|
def get_quarchpy_version():
|
152
165
|
try:
|
153
166
|
return __version__
|
154
167
|
except:
|
155
168
|
return "Unknown"
|
156
169
|
|
170
|
+
|
157
171
|
def fix_usb():
|
158
|
-
content_to_write = "SUBSYSTEM==\"usb\", ATTRS{idVendor}==\"16d0\", MODE=\"0666\"" \
|
172
|
+
content_to_write = "SUBSYSTEM==\"usb\", ATTRS{idVendor}==\"16d0\", MODE=\"0666\"\n" \
|
159
173
|
"SUBSYSTEM==\"usb_device\", ATTRS{idVendor}==\"16d0\", MODE=\"0666\""
|
160
174
|
|
161
175
|
if "centos" in str(platform.platform()).lower():
|
@@ -199,6 +213,7 @@ def main (args=None):
|
|
199
213
|
test_communication()
|
200
214
|
|
201
215
|
|
216
|
+
|
202
217
|
if __name__ == "__main__":
|
203
218
|
main([])
|
204
219
|
#find_java_permissions()
|
quarchpy/device/quarchQPS.py
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
from quarchpy.device import quarchDevice
|
2
2
|
from quarchpy.utilities.Version import Version
|
3
3
|
from quarchpy.user_interface.user_interface import requestDialog
|
4
|
+
from quarchpy.utilities.utils import check_stream_stopped_status, check_export_status
|
5
|
+
|
4
6
|
import os, time, datetime, sys, logging
|
5
7
|
|
6
8
|
if sys.version_info[0] < 3:
|
@@ -29,24 +31,24 @@ class quarchQPS(quarchDevice):
|
|
29
31
|
self.IP_address = quarchDevice.connectionObj.qps.host
|
30
32
|
self.port_number = quarchDevice.connectionObj.qps.port
|
31
33
|
|
32
|
-
def startStream(self, directory, unserInput=True):
|
34
|
+
def startStream(self, directory, unserInput=True, streamDuration=""):
|
33
35
|
"""
|
34
36
|
directory - str - desired stream dir
|
35
37
|
unserInput=True - if a failure occurs userInput=True allows user to rectify problem with user input. set to False if user interaction is not available (automating).
|
36
38
|
"""
|
37
39
|
#time.sleep(1) # TODO remove this sleep once script->QPS timeing issue resolved. This works fine in the meantime
|
38
|
-
return quarchStream(self.quarchDevice, directory, unserInput)
|
40
|
+
return quarchStream(self.quarchDevice, directory, unserInput, streamDuration)
|
39
41
|
|
40
42
|
|
41
43
|
class quarchStream:
|
42
|
-
def __init__(self, quarchQPS, directory, unserInput=True):
|
44
|
+
def __init__(self, quarchQPS, directory, unserInput=True, streamDuration=""):
|
43
45
|
self.connectionObj = quarchQPS.connectionObj
|
44
46
|
self.IP_address = quarchQPS.connectionObj.qps.host
|
45
47
|
self.port_number = quarchQPS.connectionObj.qps.port
|
46
48
|
self.ConString = quarchQPS.ConString
|
47
49
|
self.ConType = quarchQPS.ConType
|
48
|
-
time.sleep(1)
|
49
|
-
response = self.startQPSStream(directory)
|
50
|
+
# time.sleep(1) # TODO Nabil - Is this required?
|
51
|
+
response = self.startQPSStream(directory, streamDuration)
|
50
52
|
if not "fail:" in response.lower():
|
51
53
|
return
|
52
54
|
else:
|
@@ -55,18 +57,19 @@ class quarchStream:
|
|
55
57
|
else:
|
56
58
|
self.failCheck(response)
|
57
59
|
|
58
|
-
def startQPSStream(self, newDirectory):
|
59
|
-
'''STARTS the stream '''
|
60
|
-
|
60
|
+
def startQPSStream(self, newDirectory, streamDuration=""):
|
61
|
+
'''STARTS the QPS stream '''
|
62
|
+
# Set the stream duration if required.
|
63
|
+
response = self.connectionObj.qps.sendCmdVerbose("$start stream \"" + str(newDirectory) + "\" " + str(streamDuration))
|
61
64
|
if "Error" in response:
|
62
|
-
response = self.connectionObj.qps.sendCmdVerbose("$start stream " + str(newDirectory))
|
65
|
+
response = self.connectionObj.qps.sendCmdVerbose("$start stream " + str(newDirectory) + " " + streamDuration)
|
63
66
|
return response
|
64
67
|
|
65
68
|
def failCheck(self, response):
|
66
69
|
''' handles failed starting of stream that requires input from user to fix.'''
|
67
70
|
while "fail:" in response.lower():
|
68
71
|
if "Fail: Directory already exists" in response:
|
69
|
-
newDir = requestDialog(message=response+" Please enter a new file name:")
|
72
|
+
newDir = requestDialog(message=response + " Please enter a new file name:")
|
70
73
|
response = self.startQPSStream(newDir)
|
71
74
|
else: # If its a failure we don't know how to handle.
|
72
75
|
raise Exception(response)
|
@@ -112,7 +115,7 @@ class quarchStream:
|
|
112
115
|
|
113
116
|
return retVal
|
114
117
|
|
115
|
-
def stats_to_CSV(self, file_name=""):
|
118
|
+
def stats_to_CSV(self, file_name="", poll_till_complete=False, check_interval=0.5):
|
116
119
|
"""
|
117
120
|
Saves the statistics grid to a csv file
|
118
121
|
|
@@ -130,43 +133,50 @@ class quarchStream:
|
|
130
133
|
command_response = self.connectionObj.qps.sendCmdVerbose("$stats to csv \"" + file_name + "\"", timeout=60)
|
131
134
|
if command_response.startswith("Fail"):
|
132
135
|
raise Exception(command_response)
|
136
|
+
|
137
|
+
if poll_till_complete:
|
138
|
+
is_exporting = check_export_status(self.get_stats_export_status())
|
139
|
+
while is_exporting:
|
140
|
+
is_exporting = check_export_status(self.get_stats_export_status())
|
141
|
+
time.sleep(check_interval)
|
133
142
|
return command_response
|
134
143
|
|
135
144
|
def get_custom_stats_range(self, start_time, end_time):
|
136
145
|
"""
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
146
|
+
Returns the QPS statistics information over a specific time ignoring any set annotations.
|
147
|
+
|
148
|
+
Parameters
|
149
|
+
----------
|
150
|
+
start_time = : str
|
151
|
+
The time in seconds you would like the stats to start this can be in integer or string format.
|
152
|
+
or using the following format to specify daysDhours:minutes:seconds.milliseconds
|
153
|
+
xxxDxx:xx:xx.xxxx
|
154
|
+
end_time = : str
|
155
|
+
The time in seconds you would like the stats to stop this can be in integer or string format
|
156
|
+
or using the following format to specify daysDhours:minutes:seconds.milliseconds
|
157
|
+
xxxDxx:xx:xx.xxxx
|
158
|
+
Returns
|
159
|
+
-------
|
160
|
+
df = : dataframe
|
161
|
+
The response text from QPS. If successful "ok. Saving stats to : file_name" otherwise returns the exception thrown
|
153
162
|
"""
|
154
163
|
try:
|
155
164
|
import warnings
|
156
165
|
import pandas as pd
|
157
166
|
warnings.simplefilter(action='ignore', category=FutureWarning)
|
158
|
-
except:
|
167
|
+
except ImportError:
|
159
168
|
logging.warning("pandas not imported correctly")
|
169
|
+
|
160
170
|
command_response = self.connectionObj.qps.sendCmdVerbose(
|
161
171
|
"$get custom stats range " + str(start_time) + " " + str(end_time), timeout=60)
|
172
|
+
|
162
173
|
if command_response.startswith("Fail"):
|
163
174
|
raise Exception(command_response)
|
164
175
|
test_data = StringIO(command_response)
|
176
|
+
|
165
177
|
try:
|
166
178
|
pd.set_option('display.max_columns', None)
|
167
179
|
pd.set_option('display.width', 1024)
|
168
|
-
# df = pd.read_csv(test_data, sep=",", header=[0,1])
|
169
|
-
# pandas.read_csv() replaced error_bad_lines with on_bad_lines from v1.3.0
|
170
180
|
if Version.is_v1_ge_v2(pd.__version__, "1.3.0"):
|
171
181
|
df = pd.read_csv(test_data, sep=",", header=[0, 1], on_bad_lines="skip")
|
172
182
|
else:
|
@@ -187,9 +197,9 @@ class quarchStream:
|
|
187
197
|
|
188
198
|
def getStreamState(self):
|
189
199
|
"""
|
190
|
-
|
200
|
+
Asks QPS for the stream status.
|
191
201
|
QPS stream state != Module stream state.
|
192
|
-
This is different from "rec stream?" cmd to the module as it will return "streaming" when the module is
|
202
|
+
This is different from "rec stream?" cmd to the module as it will return "streaming" when the module is no longer streaming but QPS is still receiveing stream data from the module.
|
193
203
|
ei the module has stopped streaming but is emptying the stream buffer.
|
194
204
|
"""
|
195
205
|
command_response = self.connectionObj.qps.sendCmdVerbose("$stream state")
|
@@ -197,9 +207,8 @@ class quarchStream:
|
|
197
207
|
raise Exception(command_response)
|
198
208
|
return (command_response)
|
199
209
|
|
200
|
-
|
201
210
|
def addAnnotation(self, title, annotationTime=0, extraText="", yPos="", titleColor="", annotationColor="",
|
202
|
-
annotationType="", timeFormat="unix"):
|
211
|
+
annotationType="", annotationGroup="", timeFormat="unix"):
|
203
212
|
"""
|
204
213
|
Adds a custom annotation to stream with given parameters.
|
205
214
|
|
@@ -230,14 +239,15 @@ class quarchStream:
|
|
230
239
|
annotationType = annotationType.lower()
|
231
240
|
annotationTime = str(annotationTime)
|
232
241
|
|
233
|
-
if
|
234
|
-
timeFormat="elapsed"
|
235
|
-
if annotationTime.startswith(
|
236
|
-
|
242
|
+
if annotationTime[0].isalpha() or annotationTime[-1].isalpha():
|
243
|
+
timeFormat = "elapsed"
|
244
|
+
if annotationTime.startswith(
|
245
|
+
"e"): #Old format allowed e to be used to pass elapsed time in seconds "e2" -> 2s + elapsed
|
246
|
+
annotationTime = annotationTime[1:] + "s"
|
237
247
|
|
238
|
-
elif annotationTime=="0":
|
239
|
-
annotationTime=current_milli_time()
|
240
|
-
timeFormat="unix"
|
248
|
+
elif annotationTime == "0":
|
249
|
+
annotationTime = current_milli_time()
|
250
|
+
timeFormat = "unix"
|
241
251
|
|
242
252
|
if annotationType == "" or annotationType == "annotation":
|
243
253
|
annotationType = "annotate"
|
@@ -249,24 +259,23 @@ class quarchStream:
|
|
249
259
|
# return retString
|
250
260
|
|
251
261
|
title = title.replace("\n", "\\n")
|
252
|
-
cmd="$stream annotation add "+" time="+str(annotationTime)+ " text=\""+title+"\""
|
253
|
-
if extraText!="":
|
262
|
+
cmd = "$stream annotation add " + " time=" + str(annotationTime) + " text=\"" + title + "\""
|
263
|
+
if extraText != "":
|
254
264
|
extraText = extraText.replace("\n", "\\n")
|
255
|
-
cmd+=" extraText=\"" +str(extraText)+"\""
|
256
|
-
if yPos!= "":
|
257
|
-
cmd+=" yPos="+str(yPos)
|
258
|
-
if type!="":
|
259
|
-
cmd+=" type="+ str(annotationType)
|
260
|
-
if annotationColor!="":
|
261
|
-
cmd+=" colour="+str(annotationColor)
|
262
|
-
if titleColor!="":
|
263
|
-
cmd+=" textColour="+str(titleColor)
|
264
|
-
if timeFormat!="":
|
265
|
-
cmd+=" timeFormat="+str(timeFormat)
|
265
|
+
cmd += " extraText=\"" + str(extraText) + "\""
|
266
|
+
if yPos != "":
|
267
|
+
cmd += " yPos=" + str(yPos)
|
268
|
+
if type != "":
|
269
|
+
cmd += " type=" + str(annotationType)
|
270
|
+
if annotationColor != "":
|
271
|
+
cmd += " colour=" + str(annotationColor)
|
272
|
+
if titleColor != "":
|
273
|
+
cmd += " textColour=" + str(titleColor)
|
274
|
+
if timeFormat != "":
|
275
|
+
cmd += " timeFormat=" + str(timeFormat)
|
266
276
|
|
267
277
|
return self.connectionObj.qps.sendCmdVerbose(cmd)
|
268
278
|
|
269
|
-
|
270
279
|
def addComment(self, title, commentTime=0, extraText="", yPos="", titleColor="", commentColor="", annotationType="",
|
271
280
|
annotationGroup="", timeFormat="unix"):
|
272
281
|
# Comments are just annotations that do not affect the statistics grid.
|
@@ -277,7 +286,8 @@ class quarchStream:
|
|
277
286
|
titleColor=titleColor, annotationColor=commentColor, annotationType=annotationType,
|
278
287
|
annotationGroup=annotationGroup, timeFormat=timeFormat)
|
279
288
|
|
280
|
-
def saveCSV(self, filePath, linesPerFile=None, cr=None, delimiter=None, timeout=60
|
289
|
+
def saveCSV(self, filePath, linesPerFile=None, cr=None, delimiter=None, timeout=60, pollTillComplete=False,
|
290
|
+
checkInterval=0.5):
|
281
291
|
"""
|
282
292
|
Saves the stream to csv file at specified location
|
283
293
|
|
@@ -311,6 +321,12 @@ class quarchStream:
|
|
311
321
|
if delimiter != None:
|
312
322
|
args += " -s" + delimiter
|
313
323
|
|
324
|
+
if pollTillComplete:
|
325
|
+
is_exporting = check_export_status(self.get_stream_export_status())
|
326
|
+
while is_exporting:
|
327
|
+
is_exporting = check_export_status(self.get_stream_export_status())
|
328
|
+
time.sleep(checkInterval)
|
329
|
+
|
314
330
|
# , filePath, linesPerFile, cr, delimiter
|
315
331
|
return self.connectionObj.qps.sendCmdVerbose("$save csv \"" + filePath + "\" " + args, timeout=timeout)
|
316
332
|
|
@@ -336,17 +352,22 @@ class quarchStream:
|
|
336
352
|
def channels(self):
|
337
353
|
return self.connectionObj.qps.sendCmdVerbose("$channels").splitlines()
|
338
354
|
|
339
|
-
def stopStream(self):
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
while "running" in streamState:
|
346
|
-
logging.debug("Stream buffer still emptying: " + streamState)
|
347
|
-
time.sleep(checkInterval)
|
355
|
+
def stopStream(self, pollTillComplete=False, checkInterval=0.5):
|
356
|
+
# Stop the stream
|
357
|
+
response = self.connectionObj.qps.sendCmdVerbose("$stop stream")
|
358
|
+
# Poll till stream has completed if required
|
359
|
+
if pollTillComplete:
|
360
|
+
# Get the current stream status
|
348
361
|
streamState = self.getStreamState().lower()
|
349
|
-
|
362
|
+
# Verify the stream stopped correctly
|
363
|
+
response = check_stream_stopped_status(streamState)
|
364
|
+
while "running" in streamState:
|
365
|
+
logging.debug("Stream buffer still emptying: " + streamState)
|
366
|
+
streamState = self.getStreamState().lower()
|
367
|
+
response = check_stream_stopped_status(streamState)
|
368
|
+
time.sleep(checkInterval)
|
369
|
+
|
370
|
+
return response
|
350
371
|
|
351
372
|
def hideAllDefaultChannels(self):
|
352
373
|
|
@@ -386,8 +407,12 @@ class quarchStream:
|
|
386
407
|
dataPointTime = qpsNowStr()
|
387
408
|
else:
|
388
409
|
dataPointTime = int(dataPointTime)
|
389
|
-
logging.warning("$stream data add " + channelName + " " + groupName + " " + str(dataPointTime) + " " + str(
|
390
|
-
dataValue) + " " + timeFormat)
|
391
410
|
self.connectionObj.qps.sendCmdVerbose(
|
392
411
|
"$stream data add " + channelName + " " + groupName + " " + str(dataPointTime) + " " + str(
|
393
412
|
dataValue) + " " + timeFormat)
|
413
|
+
|
414
|
+
def get_stream_export_status(self):
|
415
|
+
return self.connectionObj.qps.sendCmdVerbose("$stream export status")
|
416
|
+
|
417
|
+
def get_stats_export_status(self):
|
418
|
+
return self.connectionObj.qps.sendCmdVerbose("$stream stats export status")
|
quarchpy/docs/CHANGES.rst
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|