quarchpy 2.2.4__py2.py3-none-any.whl → 2.2.6__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 (289) hide show
  1. quarchpy/_version.py +1 -1
  2. quarchpy/_version.py.bak +1 -0
  3. quarchpy/config_files/__pycache__/__init__.cpython-311.pyc +0 -0
  4. quarchpy/config_files/__pycache__/__init__.cpython-313.pyc +0 -0
  5. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-311.pyc +0 -0
  6. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-313.pyc +0 -0
  7. quarchpy/connection_specific/QPS/win-amd64/app.jar +0 -0
  8. quarchpy/connection_specific/QPS/win-amd64/qis/README.txt +2 -2
  9. quarchpy/connection_specific/QPS/win-amd64/qis/help.txt +2 -2
  10. quarchpy/connection_specific/QPS/win-amd64/qis/qis.jar +0 -0
  11. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/{CInterface-2.2.jar → CInterface-2.3.jar} +0 -0
  12. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/QuarchCommon-2.0.jar +0 -0
  13. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/TorridonCommon-1.0.jar +0 -0
  14. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/jmdns-3.6.0.jar +0 -0
  15. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/usb4java-1.3.1.jar +0 -0
  16. quarchpy/connection_specific/QPS/win-amd64/qps-command-reference.html +331 -0
  17. quarchpy/connection_specific/QPS/win-amd64/qps_lib/JFXUtilities-1.0.jar +0 -0
  18. quarchpy/connection_specific/QPS/win-amd64/qps_lib/QuarchCommon-2.0.jar +0 -0
  19. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-base-21.0.4-linux.jar → javafx-base-21.0.5-linux.jar} +0 -0
  20. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-controls-21.0.4-linux.jar → javafx-controls-21.0.5-linux.jar} +0 -0
  21. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-fxml-21.0.4-linux.jar → javafx-fxml-21.0.5-linux.jar} +0 -0
  22. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-graphics-21.0.4-linux.jar → javafx-graphics-21.0.5-linux.jar} +0 -0
  23. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/{javafx-swing-21.0.4-linux.jar → javafx-swing-21.0.5-linux.jar} +0 -0
  24. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-base-21.0.4-mac-aarch64.jar → javafx-base-21.0.5-mac-aarch64.jar} +0 -0
  25. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-controls-21.0.4-mac-aarch64.jar → javafx-controls-21.0.5-mac-aarch64.jar} +0 -0
  26. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-fxml-21.0.4-mac-aarch64.jar → javafx-fxml-21.0.5-mac-aarch64.jar} +0 -0
  27. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-graphics-21.0.4-mac-aarch64.jar → javafx-graphics-21.0.5-mac-aarch64.jar} +0 -0
  28. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/{javafx-swing-21.0.4-mac-aarch64.jar → javafx-swing-21.0.5-mac-aarch64.jar} +0 -0
  29. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-base-21.0.4-mac.jar → javafx-base-21.0.5-mac.jar} +0 -0
  30. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-controls-21.0.4-mac.jar → javafx-controls-21.0.5-mac.jar} +0 -0
  31. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-fxml-21.0.4-mac.jar → javafx-fxml-21.0.5-mac.jar} +0 -0
  32. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-graphics-21.0.4-mac.jar → javafx-graphics-21.0.5-mac.jar} +0 -0
  33. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/{javafx-swing-21.0.4-mac.jar → javafx-swing-21.0.5-mac.jar} +0 -0
  34. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-base-21.0.4-win.jar → javafx-base-21.0.5-win.jar} +0 -0
  35. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-controls-21.0.4-win.jar → javafx-controls-21.0.5-win.jar} +0 -0
  36. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-fxml-21.0.4-win.jar → javafx-fxml-21.0.5-win.jar} +0 -0
  37. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-graphics-21.0.4-win.jar → javafx-graphics-21.0.5-win.jar} +0 -0
  38. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/{javafx-swing-21.0.4-win.jar → javafx-swing-21.0.5-win.jar} +0 -0
  39. quarchpy/connection_specific/QPS/win-amd64/resources/profiles/3_PHASE_PAM_AC_DEFAULT.rcf +2 -2
  40. quarchpy/connection_specific/QPS/win-amd64/resources/profiles/3_PHASE_PAM_AC_FULL.rcf +5 -56
  41. quarchpy/connection_specific/QPS/win-amd64/resources/profiles/PAM_EXAMPLE_CONFIG.rcf +1 -1
  42. quarchpy/connection_specific/QPS/win-amd64/scriptCommands.txt +59 -3
  43. quarchpy/connection_specific/QPS/win-amd64/whats-new.txt +12 -20
  44. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-313.pyc +0 -0
  45. quarchpy/connection_specific/__pycache__/__init__.cpython-313.pyc +0 -0
  46. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-313.pyc +0 -0
  47. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-313.pyc +0 -0
  48. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-313.pyc +0 -0
  49. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-313.pyc +0 -0
  50. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-313.pyc +0 -0
  51. quarchpy/connection_specific/__pycache__/connection_Telnet.cpython-313.pyc +0 -0
  52. quarchpy/connection_specific/__pycache__/connection_USB.cpython-313.pyc +0 -0
  53. quarchpy/connection_specific/__pycache__/mDNS.cpython-313.pyc +0 -0
  54. quarchpy/connection_specific/connection_QPS.py +11 -7
  55. quarchpy/connection_specific/connection_QPS.py.bak +242 -0
  56. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-313.pyc +0 -0
  57. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-313.pyc +0 -0
  58. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-313.pyc +0 -0
  59. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-313.pyc +0 -0
  60. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-313.pyc +0 -0
  61. quarchpy/connection_specific/serial/__pycache__/win32.cpython-313.pyc +0 -0
  62. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-313.pyc +0 -0
  63. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-313.pyc +0 -0
  64. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-313.pyc +0 -0
  65. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-313.pyc +0 -0
  66. quarchpy/debug/__pycache__/SystemTest.cpython-311.pyc +0 -0
  67. quarchpy/debug/__pycache__/SystemTest.cpython-313.pyc +0 -0
  68. quarchpy/debug/__pycache__/__init__.cpython-311.pyc +0 -0
  69. quarchpy/debug/__pycache__/__init__.cpython-313.pyc +0 -0
  70. quarchpy/debug/__pycache__/module_debug.cpython-311.pyc +0 -0
  71. quarchpy/debug/__pycache__/module_debug.cpython-313.pyc +0 -0
  72. quarchpy/debug/__pycache__/simple_terminal.cpython-311.pyc +0 -0
  73. quarchpy/debug/__pycache__/simple_terminal.cpython-313.pyc +0 -0
  74. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-311.pyc +0 -0
  75. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-313.pyc +0 -0
  76. quarchpy/debug/__pycache__/versionCompare.cpython-311.pyc +0 -0
  77. quarchpy/debug/__pycache__/versionCompare.cpython-313.pyc +0 -0
  78. quarchpy/device/__pycache__/__init__.cpython-311.pyc +0 -0
  79. quarchpy/device/__pycache__/__init__.cpython-313.pyc +0 -0
  80. quarchpy/device/__pycache__/device.cpython-311.pyc +0 -0
  81. quarchpy/device/__pycache__/device.cpython-313.pyc +0 -0
  82. quarchpy/device/__pycache__/quarchArray.cpython-311.pyc +0 -0
  83. quarchpy/device/__pycache__/quarchArray.cpython-313.pyc +0 -0
  84. quarchpy/device/__pycache__/quarchPPM.cpython-311.pyc +0 -0
  85. quarchpy/device/__pycache__/quarchPPM.cpython-313.pyc +0 -0
  86. quarchpy/device/__pycache__/quarchQPS.cpython-311.pyc +0 -0
  87. quarchpy/device/__pycache__/quarchQPS.cpython-313.pyc +0 -0
  88. quarchpy/device/__pycache__/scanDevices.cpython-311.pyc +0 -0
  89. quarchpy/device/__pycache__/scanDevices.cpython-313.pyc +0 -0
  90. quarchpy/device/quarchQPS.py.bak +398 -0
  91. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-311.pyc +0 -0
  92. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-313.pyc +0 -0
  93. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-311.pyc +0 -0
  94. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-313.pyc +0 -0
  95. quarchpy/disk_test/__pycache__/__init__.cpython-311.pyc +0 -0
  96. quarchpy/disk_test/__pycache__/__init__.cpython-313.pyc +0 -0
  97. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-311.pyc +0 -0
  98. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-313.pyc +0 -0
  99. quarchpy/docs/CHANGES.rst +15 -1
  100. quarchpy/docs/CHANGES.rst.bak +430 -0
  101. quarchpy/docs/_build/doctrees/CHANGES.doctree +0 -0
  102. quarchpy/docs/_build/doctrees/environment.pickle +0 -0
  103. quarchpy/docs/_build/doctrees/index.doctree +0 -0
  104. quarchpy/docs/_build/doctrees/readme.doctree +0 -0
  105. quarchpy/docs/_build/doctrees/source/changelog.doctree +0 -0
  106. quarchpy/docs/_build/doctrees/source/licenses.doctree +0 -0
  107. quarchpy/docs/_build/doctrees/source/modules.doctree +0 -0
  108. quarchpy/docs/_build/doctrees/source/quarchpy.calibration.doctree +0 -0
  109. quarchpy/docs/_build/doctrees/source/quarchpy.config_files.doctree +0 -0
  110. quarchpy/docs/_build/doctrees/source/quarchpy.connection_specific.doctree +0 -0
  111. quarchpy/docs/_build/doctrees/source/quarchpy.debug.doctree +0 -0
  112. quarchpy/docs/_build/doctrees/source/quarchpy.device.doctree +0 -0
  113. quarchpy/docs/_build/doctrees/source/quarchpy.disk_test.doctree +0 -0
  114. quarchpy/docs/_build/doctrees/source/quarchpy.doctree +0 -0
  115. quarchpy/docs/_build/doctrees/source/quarchpy.fio.doctree +0 -0
  116. quarchpy/docs/_build/doctrees/source/quarchpy.iometer.doctree +0 -0
  117. quarchpy/docs/_build/doctrees/source/quarchpy.qis.doctree +0 -0
  118. quarchpy/docs/_build/doctrees/source/quarchpy.qps.doctree +0 -0
  119. quarchpy/docs/_build/doctrees/source/quarchpy.user_interface.doctree +0 -0
  120. quarchpy/docs/_build/doctrees/source/quarchpy.utilities.doctree +0 -0
  121. quarchpy/docs/_build/doctrees/source/readme.doctree +0 -0
  122. quarchpy/docs/_build/html/.buildinfo +2 -2
  123. quarchpy/docs/_build/html/.buildinfo.bak +4 -0
  124. quarchpy/docs/_build/html/CHANGES.html +176 -150
  125. quarchpy/docs/_build/html/_sources/CHANGES.rst.txt +14 -0
  126. quarchpy/docs/_build/html/_static/alabaster.css +47 -87
  127. quarchpy/docs/_build/html/_static/basic.css +3 -14
  128. quarchpy/docs/_build/html/_static/doctools.js +0 -7
  129. quarchpy/docs/_build/html/_static/github-banner.svg +5 -0
  130. quarchpy/docs/_build/html/_static/language_data.js +1 -8
  131. quarchpy/docs/_build/html/_static/pygments.css +2 -1
  132. quarchpy/docs/_build/html/_static/searchtools.js +129 -71
  133. quarchpy/docs/_build/html/genindex.html +22 -55
  134. quarchpy/docs/_build/html/index.html +90 -85
  135. quarchpy/docs/_build/html/objects.inv +0 -0
  136. quarchpy/docs/_build/html/py-modindex.html +20 -29
  137. quarchpy/docs/_build/html/readme.html +20 -19
  138. quarchpy/docs/_build/html/search.html +14 -14
  139. quarchpy/docs/_build/html/searchindex.js +1 -1
  140. quarchpy/docs/_build/html/source/changelog.html +246 -216
  141. quarchpy/docs/_build/html/source/licenses.html +20 -19
  142. quarchpy/docs/_build/html/source/modules.html +22 -21
  143. quarchpy/docs/_build/html/source/quarchpy.calibration.html +20 -19
  144. quarchpy/docs/_build/html/source/quarchpy.config_files.html +20 -19
  145. quarchpy/docs/_build/html/source/quarchpy.connection_specific.html +22 -37
  146. quarchpy/docs/_build/html/source/quarchpy.debug.html +20 -19
  147. quarchpy/docs/_build/html/source/quarchpy.device.html +21 -20
  148. quarchpy/docs/_build/html/source/quarchpy.disk_test.html +20 -19
  149. quarchpy/docs/_build/html/source/quarchpy.fio.html +22 -47
  150. quarchpy/docs/_build/html/source/quarchpy.html +22 -37
  151. quarchpy/docs/_build/html/source/quarchpy.iometer.html +26 -25
  152. quarchpy/docs/_build/html/source/quarchpy.qis.html +20 -19
  153. quarchpy/docs/_build/html/source/quarchpy.qps.html +20 -19
  154. quarchpy/docs/_build/html/source/quarchpy.user_interface.html +20 -19
  155. quarchpy/docs/_build/html/source/quarchpy.utilities.html +20 -19
  156. quarchpy/docs/_build/html/source/readme.html +20 -19
  157. quarchpy/fio/FIO_interface.py.bak +317 -0
  158. quarchpy/fio/__pycache__/FIO_interface.cpython-311.pyc +0 -0
  159. quarchpy/fio/__pycache__/FIO_interface.cpython-313.pyc +0 -0
  160. quarchpy/fio/__pycache__/__init__.cpython-311.pyc +0 -0
  161. quarchpy/fio/__pycache__/__init__.cpython-313.pyc +0 -0
  162. quarchpy/fio/__pycache__/fioDiskFinder.cpython-311.pyc +0 -0
  163. quarchpy/fio/__pycache__/fioDiskFinder.cpython-313.pyc +0 -0
  164. quarchpy/iometer/__pycache__/__init__.cpython-311.pyc +0 -0
  165. quarchpy/iometer/__pycache__/__init__.cpython-313.pyc +0 -0
  166. quarchpy/iometer/__pycache__/gen_iometer_template.cpython-311.pyc +0 -0
  167. quarchpy/iometer/__pycache__/{gen_iometer_template.cpython-312.pyc → gen_iometer_template.cpython-313.pyc} +0 -0
  168. quarchpy/iometer/__pycache__/iometerFuncs.cpython-311.pyc +0 -0
  169. quarchpy/iometer/__pycache__/iometerFuncs.cpython-313.pyc +0 -0
  170. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-311.pyc +0 -0
  171. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-313.pyc +0 -0
  172. quarchpy/qis/__pycache__/__init__.cpython-311.pyc +0 -0
  173. quarchpy/qis/__pycache__/__init__.cpython-313.pyc +0 -0
  174. quarchpy/qis/__pycache__/qisFuncs.cpython-311.pyc +0 -0
  175. quarchpy/qis/__pycache__/qisFuncs.cpython-313.pyc +0 -0
  176. quarchpy/qps/__pycache__/__init__.cpython-311.pyc +0 -0
  177. quarchpy/qps/__pycache__/__init__.cpython-313.pyc +0 -0
  178. quarchpy/qps/__pycache__/qpsFuncs.cpython-311.pyc +0 -0
  179. quarchpy/qps/__pycache__/qpsFuncs.cpython-313.pyc +0 -0
  180. quarchpy/user_interface/__pycache__/__init__.cpython-311.pyc +0 -0
  181. quarchpy/user_interface/__pycache__/__init__.cpython-313.pyc +0 -0
  182. quarchpy/user_interface/__pycache__/user_interface.cpython-311.pyc +0 -0
  183. quarchpy/user_interface/__pycache__/user_interface.cpython-313.pyc +0 -0
  184. quarchpy/utilities/__pycache__/TestCenter.cpython-311.pyc +0 -0
  185. quarchpy/utilities/__pycache__/TestCenter.cpython-313.pyc +0 -0
  186. quarchpy/utilities/__pycache__/TimeValue.cpython-311.pyc +0 -0
  187. quarchpy/utilities/__pycache__/TimeValue.cpython-313.pyc +0 -0
  188. quarchpy/utilities/__pycache__/Version.cpython-311.pyc +0 -0
  189. quarchpy/utilities/__pycache__/Version.cpython-313.pyc +0 -0
  190. quarchpy/utilities/__pycache__/__init__.cpython-311.pyc +0 -0
  191. quarchpy/utilities/__pycache__/__init__.cpython-313.pyc +0 -0
  192. {quarchpy-2.2.4.dist-info → quarchpy-2.2.6.dist-info}/METADATA +27 -4
  193. {quarchpy-2.2.4.dist-info → quarchpy-2.2.6.dist-info}/RECORD +195 -224
  194. {quarchpy-2.2.4.dist-info → quarchpy-2.2.6.dist-info}/WHEEL +1 -1
  195. quarchpy/.idea/.name +0 -1
  196. quarchpy/.idea/inspectionProfiles/Project_Default.xml +0 -50
  197. quarchpy/.idea/inspectionProfiles/profiles_settings.xml +0 -6
  198. quarchpy/.idea/misc.xml +0 -7
  199. quarchpy/.idea/modules.xml +0 -8
  200. quarchpy/.idea/quarchpy.iml +0 -12
  201. quarchpy/.idea/vcs.xml +0 -6
  202. quarchpy/.idea/workspace.xml +0 -161
  203. quarchpy/__pycache__/__init__.cpython-311.pyc +0 -0
  204. quarchpy/__pycache__/__init__.cpython-312.pyc +0 -0
  205. quarchpy/__pycache__/_version.cpython-311.pyc +0 -0
  206. quarchpy/__pycache__/_version.cpython-312.pyc +0 -0
  207. quarchpy/__pycache__/connection.cpython-311.pyc +0 -0
  208. quarchpy/__pycache__/connection.cpython-312.pyc +0 -0
  209. quarchpy/__pycache__/run.cpython-312.pyc +0 -0
  210. quarchpy/config_files/__pycache__/__init__.cpython-312.pyc +0 -0
  211. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-312.pyc +0 -0
  212. quarchpy/connection_specific/QPS/win-amd64/InstallType.dat +0 -1
  213. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/jmdns-3.5.9.jar +0 -0
  214. quarchpy/connection_specific/QPS/win-amd64/qps_lib/qis-1.45.jar +0 -0
  215. quarchpy/connection_specific/QPS/win-amd64/qps_lib/qis-1.46.jar +0 -0
  216. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-311.pyc +0 -0
  217. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-312.pyc +0 -0
  218. quarchpy/connection_specific/__pycache__/__init__.cpython-311.pyc +0 -0
  219. quarchpy/connection_specific/__pycache__/__init__.cpython-312.pyc +0 -0
  220. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-311.pyc +0 -0
  221. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-312.pyc +0 -0
  222. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-311.pyc +0 -0
  223. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-312.pyc +0 -0
  224. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-311.pyc +0 -0
  225. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-312.pyc +0 -0
  226. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-311.pyc +0 -0
  227. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-312.pyc +0 -0
  228. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-311.pyc +0 -0
  229. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-312.pyc +0 -0
  230. quarchpy/connection_specific/__pycache__/connection_USB.cpython-311.pyc +0 -0
  231. quarchpy/connection_specific/__pycache__/connection_USB.cpython-312.pyc +0 -0
  232. quarchpy/connection_specific/__pycache__/mDNS.cpython-311.pyc +0 -0
  233. quarchpy/connection_specific/__pycache__/mDNS.cpython-312.pyc +0 -0
  234. quarchpy/connection_specific/connection_QIS.py.bak +0 -1749
  235. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-311.pyc +0 -0
  236. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-312.pyc +0 -0
  237. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-311.pyc +0 -0
  238. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-312.pyc +0 -0
  239. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-311.pyc +0 -0
  240. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-312.pyc +0 -0
  241. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-311.pyc +0 -0
  242. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-312.pyc +0 -0
  243. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-311.pyc +0 -0
  244. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-312.pyc +0 -0
  245. quarchpy/connection_specific/serial/__pycache__/win32.cpython-311.pyc +0 -0
  246. quarchpy/connection_specific/serial/__pycache__/win32.cpython-312.pyc +0 -0
  247. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-311.pyc +0 -0
  248. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-312.pyc +0 -0
  249. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-311.pyc +0 -0
  250. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-312.pyc +0 -0
  251. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-311.pyc +0 -0
  252. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-312.pyc +0 -0
  253. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-311.pyc +0 -0
  254. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-312.pyc +0 -0
  255. quarchpy/connection_specific/usb_libs/__pycache__/libusb1.cpython-312.pyc +0 -0
  256. quarchpy/connection_specific/usb_libs/__pycache__/usb1.cpython-312.pyc +0 -0
  257. quarchpy/debug/__pycache__/SystemTest.cpython-312.pyc +0 -0
  258. quarchpy/debug/__pycache__/__init__.cpython-312.pyc +0 -0
  259. quarchpy/debug/__pycache__/module_debug.cpython-312.pyc +0 -0
  260. quarchpy/debug/__pycache__/simple_terminal.cpython-312.pyc +0 -0
  261. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-312.pyc +0 -0
  262. quarchpy/debug/__pycache__/versionCompare.cpython-312.pyc +0 -0
  263. quarchpy/device/__pycache__/__init__.cpython-312.pyc +0 -0
  264. quarchpy/device/__pycache__/device.cpython-312.pyc +0 -0
  265. quarchpy/device/__pycache__/quarchArray.cpython-312.pyc +0 -0
  266. quarchpy/device/__pycache__/quarchPPM.cpython-312.pyc +0 -0
  267. quarchpy/device/__pycache__/quarchQPS.cpython-312.pyc +0 -0
  268. quarchpy/device/__pycache__/scanDevices.cpython-312.pyc +0 -0
  269. quarchpy/device/quarchPPM.py.bak +0 -67
  270. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-312.pyc +0 -0
  271. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-312.pyc +0 -0
  272. quarchpy/disk_test/__pycache__/__init__.cpython-312.pyc +0 -0
  273. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-312.pyc +0 -0
  274. quarchpy/fio/__pycache__/FIO_interface.cpython-312.pyc +0 -0
  275. quarchpy/fio/__pycache__/__init__.cpython-312.pyc +0 -0
  276. quarchpy/iometer/__pycache__/__init__.cpython-312.pyc +0 -0
  277. quarchpy/iometer/__pycache__/iometerFuncs.cpython-312.pyc +0 -0
  278. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-312.pyc +0 -0
  279. quarchpy/qis/__pycache__/__init__.cpython-312.pyc +0 -0
  280. quarchpy/qis/__pycache__/qisFuncs.cpython-312.pyc +0 -0
  281. quarchpy/qps/__pycache__/__init__.cpython-312.pyc +0 -0
  282. quarchpy/qps/__pycache__/qpsFuncs.cpython-312.pyc +0 -0
  283. quarchpy/user_interface/__pycache__/__init__.cpython-312.pyc +0 -0
  284. quarchpy/user_interface/__pycache__/user_interface.cpython-312.pyc +0 -0
  285. quarchpy/utilities/__pycache__/TestCenter.cpython-312.pyc +0 -0
  286. quarchpy/utilities/__pycache__/TimeValue.cpython-312.pyc +0 -0
  287. quarchpy/utilities/__pycache__/Version.cpython-312.pyc +0 -0
  288. quarchpy/utilities/__pycache__/__init__.cpython-312.pyc +0 -0
  289. {quarchpy-2.2.4.dist-info → quarchpy-2.2.6.dist-info}/top_level.txt +0 -0
@@ -19,8 +19,8 @@ Currently it supports:
19
19
  <RecordingConfiguration>
20
20
  <Header> <!-- Header information for the recording configuration -->
21
21
  <FileVersion>2.0</FileVersion> <!-- Version of the file, checked on load. -->
22
- <DeviceTarget>QTL2582-01, QTL2751-03, QTL2789-01</DeviceTarget> <!-- Device identifier for the compatible device(s) -->
23
- <FileDescription></FileDescription> <!-- Description of the file to make it clear what the file is intended for -->
22
+ <DeviceTarget>QTL2582-01, QTL2751-03, QTL2789-01, QTL2843-02</DeviceTarget> <!-- Device identifier for the compatible device(s) -->
23
+ <FileDescription>This file contains the default synthetic channel setup for an AC PAM.</FileDescription> <!-- Description of the file to make it clear what the file is intended for -->
24
24
  </Header>
25
25
  <SyntheticChannels> <!-- Root tag for synthetic channels configuration -->
26
26
  <Clear>false</Clear> <!-- Indicates whether to clear existing synthetic channels -->
@@ -2,62 +2,11 @@
2
2
  <RecordingConfiguration>
3
3
  <Header>
4
4
  <FileVersion>2.0</FileVersion>
5
- <DeviceTarget>QTL2582-01, QTL2751-03, QTL2789-01</DeviceTarget>
6
- <FileDescription></FileDescription>
5
+ <DeviceTarget>QTL2582-01, QTL2751-03, QTL2789-01, QTL2843-02</DeviceTarget>
6
+ <FileDescription>This file contains the additional channels of interest for an AC PAM, such as total harmonic distortion and crest factor.</FileDescription>
7
7
  </Header>
8
8
  <SyntheticChannels>
9
9
  <Clear>false</Clear>
10
- <SyntheticChannel>
11
- <Configuration>
12
- <Enable>true</Enable>
13
- <Visible>true</Visible>
14
- </Configuration>
15
- <SyntheticChannelFunction>
16
- <FunctionDetails>
17
- <DisplayGroup>v</DisplayGroup>
18
- <DisplayName>+3.3V_VOLT_RMS</DisplayName>
19
- <FunctionName>rms</FunctionName>
20
- </FunctionDetails>
21
- <FunctionArguments>
22
- <Argument>1ms</Argument>
23
- <Argument>chan(+3.3V,v)</Argument>
24
- </FunctionArguments>
25
- </SyntheticChannelFunction>
26
- </SyntheticChannel>
27
- <SyntheticChannel>
28
- <Configuration>
29
- <Enable>true</Enable>
30
- <Visible>true</Visible>
31
- </Configuration>
32
- <SyntheticChannelFunction>
33
- <FunctionDetails>
34
- <DisplayGroup>a</DisplayGroup>
35
- <DisplayName>+3.3V_CURR_RMS</DisplayName>
36
- <FunctionName>rms</FunctionName>
37
- </FunctionDetails>
38
- <FunctionArguments>
39
- <Argument>1ms</Argument>
40
- <Argument>chan(+3.3V,a)</Argument>
41
- </FunctionArguments>
42
- </SyntheticChannelFunction>
43
- </SyntheticChannel>
44
- <SyntheticChannel>
45
- <Configuration>
46
- <Enable>true</Enable>
47
- <Visible>true</Visible>
48
- </Configuration>
49
- <SyntheticChannelFunction>
50
- <FunctionDetails>
51
- <DisplayGroup>w</DisplayGroup>
52
- <DisplayName>+3.3V_POWER_RMS</DisplayName>
53
- <FunctionName>rms</FunctionName>
54
- </FunctionDetails>
55
- <FunctionArguments>
56
- <Argument>1ms</Argument>
57
- <Argument>chan(+3.3V,v)</Argument>
58
- </FunctionArguments>
59
- </SyntheticChannelFunction>
60
- </SyntheticChannel>
61
10
  <SyntheticChannel>
62
11
  <Configuration>
63
12
  <Enable>true</Enable>
@@ -121,7 +70,7 @@
121
70
  <FunctionDetails>
122
71
  <DisplayGroup>V</DisplayGroup>
123
72
  <DisplayName>L1_HAR</DisplayName>
124
- <FunctionName>subtract</FunctionName>
73
+ <FunctionName>harSubtract</FunctionName>
125
74
  </FunctionDetails>
126
75
  <FunctionArguments>
127
76
  <Argument>100ms</Argument>
@@ -139,7 +88,7 @@
139
88
  <FunctionDetails>
140
89
  <DisplayGroup>V</DisplayGroup>
141
90
  <DisplayName>L2_HAR</DisplayName>
142
- <FunctionName>subtract</FunctionName>
91
+ <FunctionName>harSubtract</FunctionName>
143
92
  </FunctionDetails>
144
93
  <FunctionArguments>
145
94
  <Argument>100ms</Argument>
@@ -157,7 +106,7 @@
157
106
  <FunctionDetails>
158
107
  <DisplayGroup>V</DisplayGroup>
159
108
  <DisplayName>L3_HAR</DisplayName>
160
- <FunctionName>subtract</FunctionName>
109
+ <FunctionName>harSubtract</FunctionName>
161
110
  </FunctionDetails>
162
111
  <FunctionArguments>
163
112
  <Argument>100ms</Argument>
@@ -20,7 +20,7 @@ Currently it supports:
20
20
  <Header> <!-- Header information for the recording configuration -->
21
21
  <FileVersion>2.0</FileVersion> <!-- Version of the file, checked on load. -->
22
22
  <DeviceTarget>QTL2312-01</DeviceTarget> <!-- Device identifier for the compatible device(s) -->
23
- <FileDescription></FileDescription> <!-- Description of the file to make it clear what the file is intended for -->
23
+ <FileDescription>This is an example file for PAMs, showing how to configure channels and add an RMS</FileDescription> <!-- Description of the file to make it clear what the file is intended for -->
24
24
  </Header>
25
25
  <SyntheticChannels> <!-- Root tag for synthetic channels configuration -->
26
26
  <Clear>false</Clear> <!-- Indicates whether to clear existing synthetic channels -->
@@ -1,7 +1,7 @@
1
1
  QPS Command Summary
2
2
  Copyright (c) Quarch Ltd
3
- QPS v1.44
4
- Generated: 12 Nov 2024
3
+ QPS v1.44.2
4
+ Generated: 14 Jan 2025
5
5
 
6
6
 
7
7
  *** Commands ***
@@ -774,7 +774,7 @@ To indicate the end marker of an interval then set the value to 'endSeq'; eg : m
774
774
  Command: $stream export
775
775
  Description: Saves to a given format
776
776
  Version: 2
777
- See also: $save csv
777
+ See also: $save csv, $stream import
778
778
  Arguments
779
779
  Argument: file
780
780
  Description: The file path to save the export
@@ -814,6 +814,60 @@ Argument file is optional and if not specified then a file name is assigned and
814
814
  If no fileType file is specified then the following is assigned: .../path to recording directory/fileType+Export+yyyyMMddHHmmss.fileType
815
815
  By default all channels are exported but can be filtered using argument "channel"
816
816
 
817
+ Command: $stream import
818
+ Description: Imports from a given format
819
+ Version: 2
820
+ See also: $stream export
821
+ Arguments
822
+ Argument: file
823
+ Description: The file path to be imported
824
+ Index: 0
825
+ Type: STRING
826
+ Default value: NONE
827
+ Argument: fileType
828
+ Description: File type; eg CSV
829
+ Index: 1
830
+ Type: STRING
831
+ Default value: csv
832
+ Argument: delimiter
833
+ Description: Value separator; eg ,
834
+ Index: 2
835
+ Type: STRING
836
+ Default value: ,
837
+ Acceptable values: ["\t", ";", ",", " "]
838
+ Argument: minTime
839
+ Description: The minimum time value; eg 100mS. The default value of 0nS indicates reading from the start
840
+ Index: 3
841
+ Type: STRING
842
+ Default value: 0nS
843
+ Argument: maxTime
844
+ Description: The maximum time value; eg 800mS. The default value of -1nS indicates reading to the end
845
+ Index: 4
846
+ Type: STRING
847
+ Default value: -1nS
848
+ Argument: offsetTime
849
+ Description: The offset time value; eg 10mS. The default value of 0nS indicates there is no offset
850
+ Index: 5
851
+ Type: STRING
852
+ Default value: 0nS
853
+ Argument: channels
854
+ Description: List of channels to import; eg "voltage:5v,current:12v" with the default set to "all"
855
+ Index: 6
856
+ Type: STRING
857
+ Default value: all
858
+ Argument: timeFormat
859
+ Description: Time format ["elapsed", "unix"]. The default is "elapsed"
860
+ Index: 7
861
+ Type: STRING
862
+ Default value: elapsed
863
+ Acceptable values: [elapsed, unix]
864
+ Notes:
865
+ The file must contain an extension that matches the one specified in fileType. This is used as a check.
866
+ Examples:
867
+ $stream import file="C:\Temp\data.csv"
868
+ $stream import file="C:\Temp\data.csv" channels="voltage:12v,current:12v"
869
+ $stream import file="C:\Temp\data.csv" channels="voltage:12v,current:12v" minTime=1S maxTime=10S
870
+
817
871
  Command: $stream read
818
872
  Description: Reads data between from a given start time and either end time or number of records
819
873
  Version: 2
@@ -1072,6 +1126,8 @@ $stream data add ~ Adds a channel/group value at a specified time
1072
1126
 
1073
1127
  $stream export ~ Saves to a given format
1074
1128
 
1129
+ $stream import ~ Imports from a given format
1130
+
1075
1131
  $stream read ~ Reads data between from a given start time and either end time or number of records
1076
1132
 
1077
1133
  $stream record ~ Starts streaming
@@ -1,39 +1,31 @@
1
1
  *** What's New In Quarch Power Studio ***
2
2
 
3
- 11th November 2024
3
+ 14th January 2025
4
4
 
5
- QPS version 1.44
6
- QIS version 1.46
5
+ QPS version 1.45
6
+ QIS version 1.47
7
7
 
8
8
 
9
9
 
10
10
  *** New Features ***
11
11
 
12
- Synthetic channels can now be disabled without deleting them (as with instrument channels)
12
+ Improved help menu links and additional documentation
13
13
 
14
- Added channel options to the CSV export dialog
14
+ Data valid synthetic channel for AC compliance testing
15
15
 
16
- Improved cursor controls and display
16
+ Improved import speed for custom user data
17
17
 
18
- Instrument profiles now display their name and description information when loaded
18
+ Reduced time from start stream, until data is first displayed
19
19
 
20
- Synthetic channel for subtraction added
20
+ Added notification for locked devices that are open in other applications
21
21
 
22
- Channels can now have visibility disabled by default for a less cluttered view
23
-
24
- Added a simple user debug command to capture all logs
25
-
26
- Improved debug logging when loading traces
22
+ Improved checking of analysis files when loading
27
23
 
28
24
 
29
25
  *** Major Fixes ***
30
26
 
31
- Fixed loading of synthetic channel files for AC PAM
32
-
33
- Fixed failure to calculate statistics for very short regions
34
-
35
- Fixed issue where stream start could take a second or so to begin showing data
27
+ Fixed issues with window resizing on multiple monitors
36
28
 
37
- Fixed bug where QIS debug logging did not work to console
29
+ Improved thread cycling which reduced performance
38
30
 
39
- Fixed bug where sparse user channels did not always export correctly to CSV
31
+ Fixed duplicate logging lines
@@ -200,13 +200,14 @@ class QpsInterface:
200
200
 
201
201
  """
202
202
  #print("Open recording at file : \""+str(file_path)+"\"")
203
- self.sendCmdVerbose("$open recording qpsFile=\""+str(file_path)+"\"",timeout=cmdTimeout)
203
+ notLoadingMessageStartTime=None
204
204
  loadingStarted=False
205
205
  message=""
206
- startTime=time.time()
207
- notLoadingMessageStartTime=None
206
+
207
+ openResponse = self.sendCmdVerbose("$open recording qpsFile=\""+str(file_path)+"\"",timeout=cmdTimeout)
208
+ #print(openResponse)
208
209
  while(1):
209
- update=self.sendCmdVerbose("$progress check \"open recording\"",timeout=cmdTimeout)
210
+ update=self.sendCmdVerbose("$progress check task=\"open recording\"",timeout=cmdTimeout)
210
211
  #print(update)
211
212
  m = re.search(r'\d+(\.\d+)?%', update)
212
213
  if m: # A percentage was found
@@ -216,8 +217,11 @@ class QpsInterface:
216
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%
217
218
  message = "Passed, Recording opened, loading detected and complete."
218
219
  break
219
- elif("Chart window is open but no loading is in progress." in update):
220
- if loadingStarted ==True:
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:
221
225
  # Loading started and has now ended, so we can exit the loop.
222
226
  message="Passed, Recording opened, loading detected and complete."
223
227
  break
@@ -227,7 +231,7 @@ class QpsInterface:
227
231
  # we exit, stating that no loading started within the desired time.
228
232
  notLoadingMessageStartTime = time.time()
229
233
  elif time.time() - notLoadingMessageStartTime> startOpenTimout:
230
- message = "No detection that QPS started loading the recording within "+str(startOpenTimout)+"s."
234
+ message = "No detection that QPS started loading the recording within " + str(startOpenTimout) + "s."
231
235
  break
232
236
 
233
237
  time.sleep(pollInterval) #Sleep pollInterval time, so we are not hammering QPS for updates while its busy loading.
@@ -0,0 +1,242 @@
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
+