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.
Files changed (208) hide show
  1. quarchpy/_version.py +1 -1
  2. quarchpy/connection_specific/QPS/win-amd64/{License/argparse4j-license.txt → 3rdPartyLicenses/argparse4j-LICENSE.txt} +23 -25
  3. quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/com.sun.istack-license.html +59 -0
  4. quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/commons-io-LICENSE-2.0.txt +202 -0
  5. quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/controlsfx-license.txt +29 -0
  6. quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/jakarta.activation-license.html +59 -0
  7. quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/jakarta.xml.bind-api-license.html +59 -0
  8. quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/netty-LICENSE.txt +202 -0
  9. quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/netty-NOTICE.txt +239 -0
  10. quarchpy/connection_specific/QPS/win-amd64/InstallType.dat +1 -0
  11. quarchpy/connection_specific/QPS/win-amd64/app.jar +0 -0
  12. quarchpy/connection_specific/QPS/win-amd64/app.properties +6 -0
  13. quarchpy/connection_specific/QPS/win-amd64/license.txt +1 -0
  14. quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/com.sun.istack-license.html +59 -0
  15. quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/dorkbox-LICENSE.Apachev2 +218 -0
  16. quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/jSerialComm-LICENSE-APACHE-2.0 +202 -0
  17. quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/jSerialComm-LICENSE-LGPL-3.0 +165 -0
  18. quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/jakarta.activation-license.html +59 -0
  19. quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/jakarta.xml.bind-api-license.html +59 -0
  20. quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/javassist-License.html +381 -0
  21. quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/jmdns-LICENSE.txt +202 -0
  22. quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/jna-AL2.0 +177 -0
  23. quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/kotlin-stdlib-LICENSE-2.0.txt +202 -0
  24. quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/netty-LICENSE.txt +202 -0
  25. quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/netty-NOTICE.txt +239 -0
  26. quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/slf4j-LICENSE.txt +24 -0
  27. quarchpy/connection_specific/QPS/win-amd64/qis/3rdPartyLicenses/usb4java-LICENSE.md +20 -0
  28. quarchpy/connection_specific/QPS/win-amd64/qis/help.txt +50 -17
  29. quarchpy/connection_specific/QPS/win-amd64/qis/license.txt +1 -0
  30. quarchpy/connection_specific/QPS/win-amd64/qis/qis.jar +0 -0
  31. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/CInterface-2.3.jar +0 -0
  32. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/QuarchCommon-2.0.jar +0 -0
  33. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/{TorridonCommon-1.0.jar → TorridonCommon-1.1.jar} +0 -0
  34. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/jmdns-3.5.9.jar +0 -0
  35. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/usb4java-1.3.1.jar +0 -0
  36. quarchpy/connection_specific/QPS/win-amd64/qps-command-reference.html +104 -104
  37. quarchpy/connection_specific/QPS/win-amd64/qps.jar +0 -0
  38. quarchpy/connection_specific/QPS/win-amd64/qps_lib/JFXUtilities-1.0.jar +0 -0
  39. quarchpy/connection_specific/QPS/win-amd64/qps_lib/QuarchCommon-2.0.jar +0 -0
  40. quarchpy/connection_specific/QPS/win-amd64/qps_lib/commons-io-2.18.0.jar +0 -0
  41. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-base-21.0.6-linux-aarch64.jar +0 -0
  42. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-controls-21.0.6-linux-aarch64.jar +0 -0
  43. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-fxml-21.0.6-linux-aarch64.jar +0 -0
  44. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-graphics-21.0.6-linux-aarch64.jar +0 -0
  45. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-swing-21.0.6-linux-aarch64.jar +0 -0
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  55. 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
  56. 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
  57. 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
  58. 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
  59. 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
  60. 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
  61. quarchpy/connection_specific/QPS/win-amd64/qps_lib/qutils-1.0.jar +0 -0
  62. 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
  63. 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
  64. 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
  65. 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
  66. 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
  67. quarchpy/connection_specific/QPS/win-amd64/scriptCommands.txt +4 -4
  68. quarchpy/connection_specific/QPS/win-amd64/whats-new.txt +20 -12
  69. quarchpy/connection_specific/connection_QIS.py +1 -0
  70. quarchpy/debug/SystemTest.py +30 -15
  71. quarchpy/device/quarchQPS.py +93 -68
  72. quarchpy/docs/CHANGES.rst +8 -0
  73. quarchpy/docs/_build/doctrees/CHANGES.doctree +0 -0
  74. quarchpy/docs/_build/doctrees/environment.pickle +0 -0
  75. quarchpy/docs/_build/doctrees/source/changelog.doctree +0 -0
  76. quarchpy/docs/_build/doctrees/source/quarchpy.fio.doctree +0 -0
  77. quarchpy/docs/_build/html/CHANGES.html +145 -139
  78. quarchpy/docs/_build/html/_sources/CHANGES.rst.txt +7 -0
  79. quarchpy/docs/_build/html/genindex.html +8 -2
  80. quarchpy/docs/_build/html/index.html +71 -70
  81. quarchpy/docs/_build/html/objects.inv +0 -0
  82. quarchpy/docs/_build/html/searchindex.js +1 -1
  83. quarchpy/docs/_build/html/source/changelog.html +216 -209
  84. quarchpy/docs/_build/html/source/quarchpy.fio.html +64 -0
  85. quarchpy/docs/_build/html/source/quarchpy.html +3 -0
  86. quarchpy/fio/{test_performance_class.py → HIDEtest_performance_class.py} +1 -1
  87. quarchpy/fio_tests_file.fio +1 -0
  88. quarchpy/qis/qisFuncs.py +38 -41
  89. quarchpy/qps/qpsFuncs.py +7 -10
  90. quarchpy/tests/test_device/test_scanDevices.py +21 -0
  91. quarchpy/utilities/utils.py +64 -0
  92. {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dist-info}/METADATA +10 -2
  93. {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dist-info}/RECORD +99 -172
  94. {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dist-info}/WHEEL +1 -1
  95. quarchpy/.idea/.gitignore +0 -3
  96. quarchpy/.idea/inspectionProfiles/Project_Default.xml +0 -12
  97. quarchpy/.idea/inspectionProfiles/profiles_settings.xml +0 -6
  98. quarchpy/.idea/misc.xml +0 -7
  99. quarchpy/.idea/modules.xml +0 -8
  100. quarchpy/.idea/quarchpy.iml +0 -12
  101. quarchpy/.idea/workspace.xml +0 -75
  102. quarchpy/_version.py.bak +0 -1
  103. quarchpy/config_files/__pycache__/__init__.cpython-311.pyc +0 -0
  104. quarchpy/config_files/__pycache__/__init__.cpython-313.pyc +0 -0
  105. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-311.pyc +0 -0
  106. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-313.pyc +0 -0
  107. quarchpy/connection_specific/QPS/win-amd64/License/Netty-license.txt +0 -143
  108. quarchpy/connection_specific/QPS/win-amd64/License/controlsfx-license.txt +0 -26
  109. quarchpy/connection_specific/QPS/win-amd64/License/usb4java-license.txt +0 -167
  110. quarchpy/connection_specific/QPS/win-amd64/launchQPSJ21.bat +0 -4
  111. quarchpy/connection_specific/QPS/win-amd64/launchQPSJ21.sh +0 -4
  112. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-313.pyc +0 -0
  113. quarchpy/connection_specific/__pycache__/__init__.cpython-313.pyc +0 -0
  114. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-313.pyc +0 -0
  115. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-313.pyc +0 -0
  116. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-313.pyc +0 -0
  117. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-313.pyc +0 -0
  118. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-313.pyc +0 -0
  119. quarchpy/connection_specific/__pycache__/connection_Telnet.cpython-313.pyc +0 -0
  120. quarchpy/connection_specific/__pycache__/connection_USB.cpython-313.pyc +0 -0
  121. quarchpy/connection_specific/__pycache__/mDNS.cpython-313.pyc +0 -0
  122. quarchpy/connection_specific/connection_QPS.py.bak +0 -242
  123. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-313.pyc +0 -0
  124. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-313.pyc +0 -0
  125. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-313.pyc +0 -0
  126. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-313.pyc +0 -0
  127. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-313.pyc +0 -0
  128. quarchpy/connection_specific/serial/__pycache__/win32.cpython-313.pyc +0 -0
  129. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-313.pyc +0 -0
  130. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-313.pyc +0 -0
  131. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-313.pyc +0 -0
  132. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-313.pyc +0 -0
  133. quarchpy/debug/__pycache__/SystemTest.cpython-311.pyc +0 -0
  134. quarchpy/debug/__pycache__/SystemTest.cpython-313.pyc +0 -0
  135. quarchpy/debug/__pycache__/__init__.cpython-311.pyc +0 -0
  136. quarchpy/debug/__pycache__/__init__.cpython-313.pyc +0 -0
  137. quarchpy/debug/__pycache__/module_debug.cpython-311.pyc +0 -0
  138. quarchpy/debug/__pycache__/module_debug.cpython-313.pyc +0 -0
  139. quarchpy/debug/__pycache__/simple_terminal.cpython-311.pyc +0 -0
  140. quarchpy/debug/__pycache__/simple_terminal.cpython-313.pyc +0 -0
  141. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-311.pyc +0 -0
  142. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-313.pyc +0 -0
  143. quarchpy/debug/__pycache__/versionCompare.cpython-311.pyc +0 -0
  144. quarchpy/debug/__pycache__/versionCompare.cpython-313.pyc +0 -0
  145. quarchpy/device/__pycache__/__init__.cpython-311.pyc +0 -0
  146. quarchpy/device/__pycache__/__init__.cpython-313.pyc +0 -0
  147. quarchpy/device/__pycache__/device.cpython-311.pyc +0 -0
  148. quarchpy/device/__pycache__/device.cpython-313.pyc +0 -0
  149. quarchpy/device/__pycache__/quarchArray.cpython-311.pyc +0 -0
  150. quarchpy/device/__pycache__/quarchArray.cpython-313.pyc +0 -0
  151. quarchpy/device/__pycache__/quarchPPM.cpython-311.pyc +0 -0
  152. quarchpy/device/__pycache__/quarchPPM.cpython-313.pyc +0 -0
  153. quarchpy/device/__pycache__/quarchQPS.cpython-311.pyc +0 -0
  154. quarchpy/device/__pycache__/quarchQPS.cpython-313.pyc +0 -0
  155. quarchpy/device/__pycache__/scanDevices.cpython-311.pyc +0 -0
  156. quarchpy/device/__pycache__/scanDevices.cpython-313.pyc +0 -0
  157. quarchpy/device/quarchQPS.py.bak +0 -398
  158. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-311.pyc +0 -0
  159. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-313.pyc +0 -0
  160. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-311.pyc +0 -0
  161. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-313.pyc +0 -0
  162. quarchpy/disk_test/__pycache__/__init__.cpython-311.pyc +0 -0
  163. quarchpy/disk_test/__pycache__/__init__.cpython-313.pyc +0 -0
  164. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-311.pyc +0 -0
  165. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-313.pyc +0 -0
  166. quarchpy/docs/CHANGES.rst.bak +0 -430
  167. quarchpy/docs/_build/html/.buildinfo.bak +0 -4
  168. quarchpy/docs/_build/html/_static/github-banner.svg +0 -5
  169. quarchpy/fio/FIO_interface.py.bak +0 -317
  170. quarchpy/fio/__pycache__/FIO_interface.cpython-311.pyc +0 -0
  171. quarchpy/fio/__pycache__/FIO_interface.cpython-313.pyc +0 -0
  172. quarchpy/fio/__pycache__/__init__.cpython-311.pyc +0 -0
  173. quarchpy/fio/__pycache__/__init__.cpython-313.pyc +0 -0
  174. quarchpy/fio/__pycache__/fioDiskFinder.cpython-311.pyc +0 -0
  175. quarchpy/fio/__pycache__/fioDiskFinder.cpython-313.pyc +0 -0
  176. quarchpy/iometer/__pycache__/__init__.cpython-311.pyc +0 -0
  177. quarchpy/iometer/__pycache__/__init__.cpython-313.pyc +0 -0
  178. quarchpy/iometer/__pycache__/gen_iometer_template.cpython-311.pyc +0 -0
  179. quarchpy/iometer/__pycache__/gen_iometer_template.cpython-313.pyc +0 -0
  180. quarchpy/iometer/__pycache__/iometerFuncs.cpython-311.pyc +0 -0
  181. quarchpy/iometer/__pycache__/iometerFuncs.cpython-313.pyc +0 -0
  182. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-311.pyc +0 -0
  183. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-313.pyc +0 -0
  184. quarchpy/qis/__pycache__/__init__.cpython-311.pyc +0 -0
  185. quarchpy/qis/__pycache__/__init__.cpython-313.pyc +0 -0
  186. quarchpy/qis/__pycache__/qisFuncs.cpython-311.pyc +0 -0
  187. quarchpy/qis/__pycache__/qisFuncs.cpython-313.pyc +0 -0
  188. quarchpy/qps/__pycache__/__init__.cpython-311.pyc +0 -0
  189. quarchpy/qps/__pycache__/__init__.cpython-313.pyc +0 -0
  190. quarchpy/qps/__pycache__/qpsFuncs.cpython-311.pyc +0 -0
  191. quarchpy/qps/__pycache__/qpsFuncs.cpython-313.pyc +0 -0
  192. quarchpy/user_interface/__pycache__/__init__.cpython-311.pyc +0 -0
  193. quarchpy/user_interface/__pycache__/__init__.cpython-313.pyc +0 -0
  194. quarchpy/user_interface/__pycache__/user_interface.cpython-311.pyc +0 -0
  195. quarchpy/user_interface/__pycache__/user_interface.cpython-313.pyc +0 -0
  196. quarchpy/utilities/__pycache__/TestCenter.cpython-311.pyc +0 -0
  197. quarchpy/utilities/__pycache__/TestCenter.cpython-313.pyc +0 -0
  198. quarchpy/utilities/__pycache__/TimeValue.cpython-311.pyc +0 -0
  199. quarchpy/utilities/__pycache__/TimeValue.cpython-313.pyc +0 -0
  200. quarchpy/utilities/__pycache__/Version.cpython-311.pyc +0 -0
  201. quarchpy/utilities/__pycache__/Version.cpython-313.pyc +0 -0
  202. quarchpy/utilities/__pycache__/__init__.cpython-311.pyc +0 -0
  203. quarchpy/utilities/__pycache__/__init__.cpython-313.pyc +0 -0
  204. /quarchpy/connection_specific/QPS/win-amd64/{License → 3rdPartyLicenses}/Material-Icons-license.txt +0 -0
  205. /quarchpy/connection_specific/QPS/win-amd64/DeviceConfig/{QTL1995-02.XML → QTL1995-02.xml} +0 -0
  206. /quarchpy/connection_specific/QPS/win-amd64/DeviceConfig/{QTL1999-02.XML → QTL1999-02.xml} +0 -0
  207. /quarchpy/connection_specific/QPS/win-amd64/DeviceConfig/{QTL2312-01.XML → QTL2312-01.xml} +0 -0
  208. {quarchpy-2.2.7.dev1.dist-info → quarchpy-2.2.8.dist-info}/top_level.txt +0 -0
@@ -1,242 +0,0 @@
1
- import sys
2
- import socket
3
- import time
4
- import datetime
5
- import subprocess
6
- import os
7
- import random
8
- import logging
9
- import time
10
- import re
11
- from quarchpy.user_interface import user_interface
12
-
13
- class QpsInterface:
14
- def __init__(self, host='127.0.0.1', port=9822):
15
- self.host = host
16
- self.port = port
17
-
18
- self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
19
- self.client.settimeout(5)
20
- self.client.connect((host, port))
21
-
22
- self.client.settimeout(None)
23
- time.sleep(1)
24
- self.recv()
25
- time.sleep(1)
26
-
27
- # Not blocking qps socket so scripts can continue if no read - 22/06
28
- self.client.setblocking(False)
29
-
30
-
31
- def recv(self):
32
- try:
33
- if sys.hexversion >= 0x03000000:
34
- response = self.client.recv(4096)
35
- i = 0
36
- for b in response: # end buffer on first \0 character/value
37
- if b > 0:
38
- i += 1
39
- else:
40
- break;
41
-
42
- return response[:i].decode('utf-8', "ignore")
43
- else:
44
- return self.client.recv(4096)
45
- except Exception as e:
46
- # Catching socket timeout caused from non blocking socket
47
- return ""
48
-
49
-
50
- def send(self, data):
51
- if sys.hexversion >= 0x03000000:
52
- self.client.send( data.encode() )
53
- else:
54
- self.client.send( data )
55
-
56
- def sendCommand(self, cmd, timeout=20, expectedResponse=True ):
57
- cmd = cmd + "\r\n"
58
- logging.debug("Sending cmd to QPS: " + str(cmd))
59
- self.send(cmd)
60
-
61
- start = time.time()
62
- response = self.recv().strip()
63
- while response.rfind('\r\n>') == -1: # If true then the resposnse is large and multi packeted
64
- time.sleep(0.1)
65
- t_response = self.recv().strip()
66
- # Add current response to new response
67
- response += t_response
68
- # Keep reading from the socket if there's stuff that was retreived
69
- if len(str(t_response)) == 0:
70
- if time.time() - start > timeout:
71
- logging.warning("Command : " + str(cmd) + " Hit timeout during QPS read. timeout = " + str(timeout))
72
- break
73
-
74
- pos = response.rfind('\r\n>')
75
- if pos == -1:
76
- logging.warning("Did not retrieve trailing '\\r\\n>' from QPS read, returned full response so far")
77
- logging.warning("command : " + cmd.replace('\r\n', '\\r\\n'))
78
- logging.warning("returned : " + response.replace('\r\n', '\\r\\n'))
79
- pos = len(str(response))
80
- return response[:pos]
81
-
82
- def sendCmdVerbose(self, cmd, timeout=20):
83
- cmd = cmd + "\r\n"
84
- logging.debug("Sending cmd to QPS: "+str(cmd))
85
- self.send(cmd)
86
-
87
- start = time.time()
88
- response = self.recv().strip()
89
- while response.rfind('\r\n>') == -1: #If true then the resposnse is large and multi packeted
90
- time.sleep(0.1)
91
- t_response = self.recv().strip()
92
- # Add current response to new response
93
- response += t_response
94
- # Keep reading from the socket if there's stuff that was retreived
95
- if len(str(t_response)) == 0:
96
- if time.time() - start > timeout:
97
- logging.warning("Command : "+str(cmd)+ " Hit timeout during QPS read. timeout = " +str(timeout))
98
- break
99
-
100
- pos = response.rfind('\r\n>')
101
- if pos == -1:
102
- logging.warning("Did not retrieve trailing '\\r\\n>' from QPS read, returned full response so far")
103
- logging.warning("command : " + cmd.replace('\r\n','\\r\\n'))
104
- logging.warning("returned : " + response.replace('\r\n','\\r\\n'))
105
- pos = len(str(response))
106
- return response[:pos]
107
-
108
-
109
- def connect(self, targetDevice):
110
- cmd="$connect " + targetDevice
111
- retVal = self.sendCmdVerbose(cmd)
112
- time.sleep(0.3)
113
- return retVal
114
-
115
-
116
- def disconnect(self, targetDevice):
117
- self.sendCmdVerbose("$disconnect")
118
-
119
- def closeConnection(self, conString=None):
120
- if conString is None:
121
- return self.sendCmdVerbose("close")
122
- else:
123
- return self.sendCmdVerbose(conString+" close")
124
- def scanIP(self, ipAddress, sleep=10):
125
- """
126
- Triggers QPS to look at a specific IP address for a quarch module
127
-
128
- Parameters
129
- ----------
130
- QpsConnection : QpsInterface
131
- The interface to the instance of QPS you would like to use for the scan.
132
- ipAddress : str
133
- The IP address of the module you are looking for eg '192.168.123.123'
134
- sleep : int, optional
135
- This optional variable sleeps to allow the network to scan for the module before allowing new commands to be sent to QPS.
136
- """
137
- ipAddress = "TCP::" + ipAddress
138
-
139
- self.send("$scan " + ipAddress)
140
- # logging.debug("Starting QPS IP Address Lookup")
141
- time.sleep(
142
- sleep) # Time must be allowed for QPS to Scan. If another scan request is sent it will time out and throw an error.
143
-
144
- def get_list_details(self, sock=None):
145
- if sock == None:
146
- sock = self.sock
147
- devString = self.sendCmdVerbose("$module list details")
148
- #devString = self.sendAndReceiveText(sock, '$list details')
149
- devString = devString.replace('>', '')
150
- devString = devString.replace(r'\d+\) ', '')
151
- devString = devString.split('\r\n')
152
- devString = [x for x in devString if x] # remove empty elements
153
- return devString
154
-
155
- def getDeviceList(self, scan = True, ipAddress = None):
156
- deviceList = []
157
- scanWait = 2
158
- foundDevices = "1"
159
- foundDevices2 = "2"
160
- if scan:
161
- if ipAddress == None:
162
- devString = self.sendCmdVerbose('$scan')
163
- else:
164
- devString = self.sendCmdVerbose('$module scan tcp::' + ipAddress)
165
- time.sleep(scanWait)
166
- while foundDevices not in foundDevices2:
167
- foundDevices = self.sendCmdVerbose('$list')
168
- time.sleep(scanWait)
169
- foundDevices2 = self.sendCmdVerbose('$list')
170
- else:
171
- foundDevices = self.sendCmdVerbose('$list')
172
-
173
- response = self.sendCmdVerbose( "$list" )
174
-
175
- time.sleep(2)
176
-
177
- response2 = self.sendCmdVerbose( "$list" )
178
-
179
- while (response != response2):
180
- response = response2
181
- response2 = self.sendCmdVerbose( "$list" )
182
- time.sleep(1)
183
- if "no device" in response.lower() or "no module" in response.lower():
184
- return [response.strip()]
185
- #check if a response was received and the first char was a digit
186
- if( len(response) > 0 and response[0].isdigit ):
187
- sa = response.split()
188
- for s in sa:
189
- #checks for invalid chars
190
- if( ")" not in s and ">" not in s ):
191
- #append to list if conditions met
192
- deviceList.append( s )
193
-
194
- #return list of devices
195
- return deviceList
196
-
197
-
198
- def open_recording(self, file_path, cmdTimeout=5, pollInterval=3, startOpenTimout=5):
199
- """
200
-
201
- """
202
- #print("Open recording at file : \""+str(file_path)+"\"")
203
- notLoadingMessageStartTime=None
204
- loadingStarted=False
205
- message=""
206
-
207
- openResponse = self.sendCmdVerbose("$open recording qpsFile=\""+str(file_path)+"\"",timeout=cmdTimeout)
208
- print(openResponse)
209
- while(1):
210
- update=self.sendCmdVerbose("$progress check task=\"open recording\"",timeout=cmdTimeout)
211
- #print(update)
212
- m = re.search(r'\d+(\.\d+)?%', update)
213
- if m: # A percentage was found
214
- loadingStarted=True
215
- found = float(m.group(0)[:-1])
216
- user_interface.progressBar(found,100)
217
- if found > 99.9: # This will catch the case we have 99.9999% or 100% loaded. recording with less that 1mill records auto return 100%
218
- message = "Passed, Recording opened, loading detected and complete."
219
- break
220
- elif "Initialising main chart" in update:
221
- loadingStarted = True
222
- user_interface.progressBar(found, 100)
223
- elif "Chart window is open but no loading is in progress." in update:
224
- if loadingStarted == True:
225
- # Loading started and has now ended, so we can exit the loop.
226
- message="Passed, Recording opened, loading detected and complete."
227
- break
228
- else: # QPS has not started loading a recording.
229
- if notLoadingMessageStartTime == None:
230
- # Start a timer from now so that if loading doesn't take place between now and a timeout value,
231
- # we exit, stating that no loading started within the desired time.
232
- notLoadingMessageStartTime = time.time()
233
- elif time.time() - notLoadingMessageStartTime> startOpenTimout:
234
- message = "No detection that QPS started loading the recording within " + str(startOpenTimout) + "s."
235
- break
236
-
237
- time.sleep(pollInterval) #Sleep pollInterval time, so we are not hammering QPS for updates while its busy loading.
238
- time.sleep(1) #sleep outside the loop as there is a
239
- return message
240
-
241
-
242
-