quarchpy 2.1.11.dev4__py3-none-any.whl → 2.2.17.dev1__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 (745) hide show
  1. quarchpy/__init__.py +60 -8
  2. quarchpy/_version.py +1 -1
  3. quarchpy/config_files/Cable_Modules/QTL1253-01 - Mini SAS Module Config v3.5 c1.3.qfg +196 -196
  4. quarchpy/config_files/Cable_Modules/QTL1253-01 - Mini SAS Module Config v4.000 c1.3.qfg +198 -198
  5. quarchpy/config_files/Cable_Modules/QTL1253-02 - Mini SAS Module Config v3.5 c1.3.qfg +196 -196
  6. quarchpy/config_files/Cable_Modules/QTL1253-02 - Mini SAS Module Config v4.000 c1.3.qfg +198 -198
  7. quarchpy/config_files/Cable_Modules/QTL1253-xx - Mini SAS Module Config v4.003 c1.6.qfg +197 -197
  8. quarchpy/config_files/Cable_Modules/QTL1271-xx - Ethernet Module Config v3.5 c1.2.qfg +188 -188
  9. quarchpy/config_files/Cable_Modules/QTL1271-xx - Ethernet Module Config v4.000 c1.2.qfg +190 -190
  10. quarchpy/config_files/Cable_Modules/QTL1271-xx - Ethernet Module Config v4.100 c1.3.qfg +189 -189
  11. quarchpy/config_files/Cable_Modules/QTL1292-xx - SFP+ Cable Pull Module Config v4.000 c1.1.qfg +154 -154
  12. quarchpy/config_files/Cable_Modules/QTL1309-04 - USB 3.0 Module Config v4.003 c1.2.qfg +187 -187
  13. quarchpy/config_files/Cable_Modules/QTL1309-xx - USB 3.0 Module Config v3.5 c1.1.qfg +187 -187
  14. quarchpy/config_files/Cable_Modules/QTL1309-xx - USB 3.0 Module Config v4.000 c1.1.qfg +188 -188
  15. quarchpy/config_files/Cable_Modules/QTL1366-xx - QSFP Cable Pull Module Config v4.000 c1.1.qfg +209 -209
  16. quarchpy/config_files/Cable_Modules/QTL1383-xx - eSATAp Module Config v4.000 c1.3.qfg +190 -190
  17. quarchpy/config_files/Cable_Modules/QTL1521-02 - Mini SAS HD Module Config v4.000 c1.1.qfg +210 -210
  18. quarchpy/config_files/Cable_Modules/QTL1521-03 - Mini SAS HD Module Config v4.000 c1.1.qfg +210 -210
  19. quarchpy/config_files/Cable_Modules/QTL1521-05 - Mini SAS HD Module Config v4.005 c1.1.qfg +209 -209
  20. quarchpy/config_files/Cable_Modules/QTL1521-05 - Mini SAS HD Module Config v4.007 c1.2.qfg +209 -209
  21. quarchpy/config_files/Cable_Modules/QTL1521-xx - Mini SAS HD Module Config v4.003 c1.5.qfg +209 -209
  22. quarchpy/config_files/Cable_Modules/QTL1663-xx - Quad QSFP Cable Pull Module Config v4.000 c1.1.qfg +308 -308
  23. quarchpy/config_files/Cable_Modules/QTL1675-05 - Mini SAS HD Module w Triggering Config v4.007 c1.3.qfg +211 -211
  24. quarchpy/config_files/Cable_Modules/QTL1675-xx - Mini SAS HD Module w Triggering Config v4.000 c1.1.qfg +210 -210
  25. quarchpy/config_files/Cable_Modules/QTL1917-xx - Dual SFP+ Cable Pull Module Config v4.000 c1.1.qfg +174 -174
  26. quarchpy/config_files/Cable_Modules/QTL1971-01 - USB TypeC Module Config v4.000 c1.1.qfg +203 -203
  27. quarchpy/config_files/Cable_Modules/QTL1971-02 - USB TypeC Module Config v4.000 c1.1.qfg +203 -203
  28. quarchpy/config_files/Cable_Modules/QTL2022-xx - RJ-45 Cable Module Config v4.104 c1.3.QFG +189 -189
  29. quarchpy/config_files/Cable_Modules/QTL2058-xx - External PCIe Module Config v4.001 c1.1.qfg +209 -209
  30. quarchpy/config_files/Cable_Modules/QTL2138-01 - SFP28 Cable Pull Module Config v4.000 c1.1.qfg +154 -154
  31. quarchpy/config_files/Cable_Modules/QTL2146-01 - Gen4 OCuLink Cable Module Config v4.001 c1.1.qfg +212 -212
  32. quarchpy/config_files/Cable_Modules/QTL2162-01 - 24G mini SAS HD Cable Break Module Config v4.000 c1.qfg +209 -209
  33. quarchpy/config_files/Cable_Modules/QTL2171-01 - QSFP28 Cable Module Config v4.000 c1.qfg +198 -198
  34. quarchpy/config_files/Cable_Modules/QTL2171-02 - QSFP28 Cable Module Config v4.000 c1.qfg +198 -198
  35. quarchpy/config_files/Cable_Modules/QTL2341-01 - Gen4 External PCIe Cable Module v4.000.qfg +209 -209
  36. quarchpy/config_files/Cable_Modules/QTL2602-xx - Multiprotocol Link Breaker.qfg +178 -178
  37. quarchpy/config_files/Cable_Modules/QTL2834-xx - -48V DC Breaker Module v5.000 c1.0.qfg +177 -177
  38. quarchpy/config_files/Card_Modules/QTL1069-xx - SBB 2.0 Module Config v3.5 c1.1.qfg +366 -366
  39. quarchpy/config_files/Card_Modules/QTL1630-01 - PCIe Card Module v4.000 c1.0.qfg +280 -280
  40. quarchpy/config_files/Card_Modules/QTL1630-02 - PCIe Card Module Config v4.004 c1.2.qfg +283 -283
  41. quarchpy/config_files/Card_Modules/QTL1630-02 - PCIe Card Module Config v4.005 c1.2.qfg +283 -283
  42. quarchpy/config_files/Card_Modules/QTL1630-02 - PCIe Card Module Config v4.100 c1.4.qfg +284 -284
  43. quarchpy/config_files/Card_Modules/QTL1630-04 - PCIe Card Module Config v4.001 c1.1.qfg +287 -287
  44. quarchpy/config_files/Card_Modules/QTL1630-04 - PCIe Card Module Config v4.004 c1.2.qfg +287 -287
  45. quarchpy/config_files/Card_Modules/QTL1688-01 - PCIe Card Module w Triggering Config v4.004 c1.2.qfg +284 -284
  46. quarchpy/config_files/Card_Modules/QTL1688-01 - PCIe Card Module w Triggering Config v4.006 c1.3.qfg +285 -285
  47. quarchpy/config_files/Card_Modules/QTL1688-03 - PCIe Card Module w Triggering Config v4.001 c1.1.qfg +286 -286
  48. quarchpy/config_files/Card_Modules/QTL1688-03 - PCIe Card Module w Triggering Config v4.004 c1.2.qfg +288 -288
  49. quarchpy/config_files/Card_Modules/QTL1688-04 - PCIe Card Module w Triggering Config v4.005 c1.5.qfg +288 -288
  50. quarchpy/config_files/Card_Modules/QTL1688-05 - PCIe Card Module w Triggering Config v4.005 c1.qfg +288 -288
  51. quarchpy/config_files/Card_Modules/QTL1848-01 - PCIe Lite Card Module Config v4.000.qfg +122 -122
  52. quarchpy/config_files/Card_Modules/QTL1848-02 - PCIe Lite Card Module Config v4.000.qfg +134 -134
  53. quarchpy/config_files/Card_Modules/QTL1919-01 - PCIe x8 Card Module Config v4.001 c1.4.qfg +247 -247
  54. quarchpy/config_files/Card_Modules/QTL1920-01 - PCIe x8 Card Module w Triggering Config v4.000 c1.3.qfg +247 -247
  55. quarchpy/config_files/Card_Modules/QTL2019-xx - M.2 Horizontal Card Module Config v4.002 c1.1.qfg +219 -219
  56. quarchpy/config_files/Card_Modules/QTL2034-xx - M.2 M-Key Vertical Module Config v4.001 c1.1.qfg +221 -221
  57. quarchpy/config_files/Card_Modules/QTL2067-xx - PCIe SFF Module Config v4.000 c1.1.qfg +248 -248
  58. quarchpy/config_files/Card_Modules/QTL2067-xx - Sanblaze 2 Drive Riser Card Config v4.006 c1.4.qfg +256 -256
  59. quarchpy/config_files/Card_Modules/QTL2067-xx - Sanblaze 2 Drive Riser Card Config v4.007 c1.4.qfg +256 -256
  60. quarchpy/config_files/Card_Modules/QTL2073-01 - GEN3 PCIe Lite Card Module Config v4.001.qfg +134 -134
  61. quarchpy/config_files/Card_Modules/QTL2073-01 - PCIe Lite Card Module Config v4.000.qfg +134 -134
  62. quarchpy/config_files/Card_Modules/QTL2074-01 - GEN3 PCIe HS Card Module v4.005 c1.4.qfg +287 -287
  63. quarchpy/config_files/Card_Modules/QTL2074-01 - PCIe Card Module Config CurrentLimit v4.004 c1.2.qfg +287 -287
  64. quarchpy/config_files/Card_Modules/QTL2087-xx - PCIe GEN4 Card Module w Triggering Config v4.001 c1.1.qfg +287 -287
  65. quarchpy/config_files/Card_Modules/QTL2087-xx - PCIe GEN4 Card Module w Triggering Config v4.001 c1.3.qfg +277 -277
  66. quarchpy/config_files/Card_Modules/QTL2087-xx - PCIe GEN4 Card Module w Triggering Config v5.000 c1.4.qfg +277 -277
  67. quarchpy/config_files/Card_Modules/QTL2094-01 - Sanblaze Dualport Riser Card Config v4.001 c1.1.qfg +223 -223
  68. quarchpy/config_files/Card_Modules/QTL2128-xx - PCIe GEN4 Card Module w Triggering Config v4.000 c1.1.qfg +287 -287
  69. quarchpy/config_files/Card_Modules/QTL2128-xx - PCIe GEN4 Card Module w Triggering Config v4.001 c1.4.qfg +277 -277
  70. quarchpy/config_files/Card_Modules/QTL2135-xx - PCIe GEN4 Card Module w Triggering Config - Inrush Limit v4.001 c1.4.qfg +277 -277
  71. quarchpy/config_files/Card_Modules/QTL2161-01 - EDSFF x8 Module Config v4.000 c1.1.qfg +210 -210
  72. quarchpy/config_files/Card_Modules/QTL2171-xx - EDSFF x8 Module w Triggering Config 4.001 c1.1.qfg +213 -213
  73. quarchpy/config_files/Card_Modules/QTL2203-01 - Sanblaze Dualport Rack Riser Card Config v4.000 c1.1.qfg +218 -218
  74. quarchpy/config_files/Card_Modules/QTL2203-01 - Sanblaze Dualport Rack Riser Card Config v4.005 c1.5.qfg +218 -218
  75. quarchpy/config_files/Card_Modules/QTL2272-01 - GEN4 EDSFF x8 Module Config v4.000 c1.1.qfg +211 -211
  76. quarchpy/config_files/Card_Modules/QTL2282-01 - Sanblaze Singleport Rack Riser Card Config v4.000 c1.1.qfg +212 -212
  77. quarchpy/config_files/Card_Modules/QTL2282-01 - Sanblaze Singleport Rack Riser Card Config v4.002 c1.2.qfg +212 -212
  78. quarchpy/config_files/Card_Modules/QTL2318-01 - SANBlaze U.2 Rack Riser Card Config v4.000 c1.1.qfg +218 -218
  79. quarchpy/config_files/Card_Modules/QTL2322-03 - GEN4 M.2 M-Key Vertical Breaker Module Config v5.001 c1.3.qfg +220 -220
  80. quarchpy/config_files/Card_Modules/QTL2322-xx - GEN4 M.2 M-Key Vertical Breaker Module Config v5.000 c1.1.qfg +208 -208
  81. quarchpy/config_files/Card_Modules/QTL2334-xx - Gen4 EDSFF x4 Card Module Config v4.000 c1.1.qfg +187 -187
  82. quarchpy/config_files/Card_Modules/QTL2351-xx - GEN4 EDSFF x4 Card Module +Triggering Config v4.000 c1.1.qfg +189 -189
  83. quarchpy/config_files/Card_Modules/QTL2351-xx - GEN4 EDSFF x4 Card Module +Triggering Config v4.001 c1.2.qfg +190 -190
  84. quarchpy/config_files/Card_Modules/QTL2357-xx - PCIe GEN5 Card Module Config v5.000 c1.1.qfg +282 -282
  85. quarchpy/config_files/Card_Modules/QTL2358-xx - PCIe GEN5 Card Module w Triggering Config v5.000 c1.1.qfg +283 -283
  86. quarchpy/config_files/Card_Modules/QTL2378-xx - SANBlaze U.3 Rack Riser Card Config v4.000 c1.1.qfg +215 -215
  87. quarchpy/config_files/Card_Modules/QTL2378-xx - SANBlaze U.3 Rack Riser Card Config v4.001 c1.2.qfg +217 -217
  88. quarchpy/config_files/Card_Modules/QTL2395-01 - GEN4 M.2 M-Key Vertical Breaker Module w Triggering Config v5.000 c1.1.qfg +208 -208
  89. quarchpy/config_files/Card_Modules/QTL2395-02 - GEN4 M.2 M-Key Vertical Breaker Module w Triggering Config v5.001 c1.3.qfg +220 -220
  90. quarchpy/config_files/Card_Modules/QTL2395-03 - GEN4 M.2 M-Key Vertical Breaker Module w Triggering Config v5.001 c1.3.qfg +220 -220
  91. quarchpy/config_files/Card_Modules/QTL2396-xx - PCIe GEN5 Card Module w inrush Config v5.000 c1.1.qfg +282 -282
  92. quarchpy/config_files/Card_Modules/QTL2403-xx - Gen4 PCIe Lite Module Config v4.000.qfg +135 -135
  93. quarchpy/config_files/Card_Modules/QTL2515-xx - PCIe GEN4 Card Module w Triggering - Inrush Limit Config v4.001 c1.3.qfg +277 -277
  94. quarchpy/config_files/Card_Modules/QTL2652-xx - Gen5 PCIe Lite Module Config v4.000.qfg +130 -130
  95. quarchpy/config_files/Card_Modules/QTL2652-xx - Gen5 PCIe Lite Module Config v4.003.qfg +137 -137
  96. quarchpy/config_files/Card_Modules/QTL2658-xx - Gen5 PCIe Lite Module w Inrush Config v4.000.qfg +130 -130
  97. quarchpy/config_files/Card_Modules/QTL2661-xx - GEN5 PCIe U.3 Breaker Config w Triggering v5.000 c1.1.qfg +229 -229
  98. quarchpy/config_files/Card_Modules/QTL2662-xx - GEN5 PCIe U.3 Breaker Config v5.000 c1.1.qfg +228 -228
  99. quarchpy/config_files/Card_Modules/QTL2686-xx - Gen5 EDSFF E3 x4 Breaker Config v5.000.qfg +230 -230
  100. quarchpy/config_files/Card_Modules/QTL2686-xx - Gen5 EDSFF E3 x4 Breaker Config v5.001 c1.2.qfg +233 -233
  101. quarchpy/config_files/Card_Modules/QTL2686-xx - Gen5 EDSFF E3 x4 Breaker v5.000 c1.1.qfg +230 -230
  102. quarchpy/config_files/Card_Modules/QTL2692-xx - Gen5 EDSFF E3 x4 Breaker +Triggering Config v5.000.qfg +230 -230
  103. quarchpy/config_files/Card_Modules/QTL2692-xx - Gen5 EDSFF E3 x4 Breaker w Triggering Config v5.001 c1.2.qfg +233 -233
  104. quarchpy/config_files/Card_Modules/QTL2692-xx - Gen5 EDSFF E3 x4 Breaker w Triggering v5.000 c1.1.qfg +230 -230
  105. quarchpy/config_files/Card_Modules/QTL2766-xx - GEN4 EDSFF E1 x8 Breaker Config v5.000.qfg +253 -253
  106. quarchpy/config_files/Card_Modules/QTL2767-xx - GEN4 EDSFF E3 x8 Breaker Config v5.000.qfg +253 -253
  107. quarchpy/config_files/Card_Modules/QTL2768-xx - GEN4 EDSFF E3 2T x8 Breaker Config v5.000.qfg +253 -253
  108. quarchpy/config_files/Card_Modules/QTL2776-xx - GEN4 EDSFF E1 x8 Breaker +Triggering Config v5.000.qfg +253 -253
  109. quarchpy/config_files/Card_Modules/QTL2777-xx - GEN4 EDSFF E3 x8 Breaker +Triggering Config v5.000.qfg +253 -253
  110. quarchpy/config_files/Card_Modules/QTL2778-xx - GEN4 EDSFF E3 2T x8 Breaker +Triggering Config v5.000.qfg +253 -253
  111. quarchpy/config_files/Card_Modules/QTL2798-xx - PCIe GEN5 Card Module w Triggering w Inrush Limit Config v5.000 c1.1.qfg +283 -283
  112. quarchpy/config_files/Card_Modules/QTL2804-xx - GEN5 MCIO x4 to U.2 Breaker Config v5.000 c1.1.qfg +234 -234
  113. quarchpy/config_files/Card_Modules/QTL2805-xx - GEN5 MCIO x4 to U.2 Breaker + Triggering Config v5.000 c1.1.qfg +234 -234
  114. quarchpy/config_files/Card_Modules/QTL2814-xx - GEN5 AIC to U.2 Breaker + Triggering Config v5.000 c1.1 .qfg +233 -233
  115. quarchpy/config_files/Card_Modules/QTL2892-xx - GEN5 EDSFF E1 x4 Breaker.qfg +233 -233
  116. quarchpy/config_files/Card_Modules/QTL2925-xx - GEN5 EDSFF E1 x4 Breaker +Triggering.qfg +233 -233
  117. quarchpy/config_files/Drive_Modules/QTL1177-xx - HS Module Config v3.5 c1.5.qfg +198 -198
  118. quarchpy/config_files/Drive_Modules/QTL1177-xx - HS Module Config v4.000 c1.5.qfg +200 -200
  119. quarchpy/config_files/Drive_Modules/QTL1177-xx - HS Module Config v4.006 c1.8.qfg +199 -199
  120. quarchpy/config_files/Drive_Modules/QTL1215-xx - Lite Module Config v3.50.qfg +118 -118
  121. quarchpy/config_files/Drive_Modules/QTL1215-xx - Lite Module Config v4.000.qfg +118 -118
  122. quarchpy/config_files/Drive_Modules/QTL1301-xx - HS Lite Module Config v3.50.qfg +129 -129
  123. quarchpy/config_files/Drive_Modules/QTL1301-xx - HS Lite Module Config v4.000.qfg +129 -129
  124. quarchpy/config_files/Drive_Modules/QTL1429-01 - EMC HS Lite Module Config v4.000.qfg +129 -129
  125. quarchpy/config_files/Drive_Modules/QTL1429-02 - EMC HS Lite Module Config v4.002.qfg +120 -120
  126. quarchpy/config_files/Drive_Modules/QTL1623-03 - 12G HS Lite Module Config v4.001.qfg +128 -128
  127. quarchpy/config_files/Drive_Modules/QTL1623-04 - 12G HS Lite Module Config v4.001.qfg +128 -128
  128. quarchpy/config_files/Drive_Modules/QTL1680-xx - SCA2 Lite Module Config v4.001.qfg +135 -135
  129. quarchpy/config_files/Drive_Modules/QTL1689-01 - 12G HS Module Config v4.001 c1.1.qfg +199 -199
  130. quarchpy/config_files/Drive_Modules/QTL1689-04 - 12G HS Module Config v4.002 c1.1.qfg +196 -196
  131. quarchpy/config_files/Drive_Modules/QTL1689-05 - 12G HS Module Config v4.002 c1.1.qfg +196 -196
  132. quarchpy/config_files/Drive_Modules/QTL1743-02 - PCIe SFF Module Config v4.003 c1.3.qfg +222 -222
  133. quarchpy/config_files/Drive_Modules/QTL1743-02 - PCIe SFF Module Config v4.006 c1.4.qfg +213 -213
  134. quarchpy/config_files/Drive_Modules/QTL1743-xx - PCIe SFF Module Config v4.000 c1.1.qfg +221 -221
  135. quarchpy/config_files/Drive_Modules/QTL1753-xx - 12G Lite Module Config v4.000.qfg +116 -116
  136. quarchpy/config_files/Drive_Modules/QTL1921-01 - EMC 12G HS Lite Module Config v4.000.qfg +120 -120
  137. quarchpy/config_files/Drive_Modules/QTL2207-01 - GEN 4 PCIe U.2 Drive Module.qfg +217 -217
  138. quarchpy/config_files/Drive_Modules/QTL2207-02 - GEN 4 PCIe U.2 Drive Module v5.000.qfg +220 -220
  139. quarchpy/config_files/Drive_Modules/QTL2207-03 - GEN 4 PCIe SFF HS Drive Module Triggering v5.001.qfg +221 -221
  140. quarchpy/config_files/Drive_Modules/QTL2207-xx - GEN 4 PCIe U.2 Drive Module v4.001.qfg +219 -219
  141. quarchpy/config_files/Drive_Modules/QTL2207-xx - GEN 4 PCIe U.2 Drive Module.qfg +219 -219
  142. quarchpy/config_files/Drive_Modules/QTL2245-01 - GEN 4 PCIe U.3 HS Drive Module v4.000.qfg +223 -223
  143. quarchpy/config_files/Drive_Modules/QTL2245-xx - GEN 4 PCIe U.3 HS Drive Module.qfg +229 -229
  144. quarchpy/config_files/Drive_Modules/QTL2266-01 - GEN 4 PCIe SFF HS Drive Module Triggering.qfg +219 -219
  145. quarchpy/config_files/Drive_Modules/QTL2266-02 - GEN 4 PCIe SFF HS Drive Module Triggering v4.002.qfg +220 -220
  146. quarchpy/config_files/Drive_Modules/QTL2266-03 - GEN 4 PCIe SFF HS Drive Module Triggering v5.001.qfg +221 -221
  147. quarchpy/config_files/Drive_Modules/QTL2266-XX - GEN 4 PCIe SFF HS Drive Module Triggering.qfg +219 -219
  148. quarchpy/config_files/Drive_Modules/QTL2270-01 - GEN 4 PCIe U.3 HS Drive Module Triggering v4.000.qfg +225 -225
  149. quarchpy/config_files/Drive_Modules/QTL2270-xx - GEN 4 PCIe U.3 HS Drive Module Triggering.qfg +230 -230
  150. quarchpy/config_files/Drive_Modules/QTL2542-02 - 24G SAS Drive Breaker Module v5.001.qfg +194 -194
  151. quarchpy/config_files/Drive_Modules/QTL2542-xx - 24G SAS Drive Breaker v5.000 c1.1.qfg +194 -194
  152. quarchpy/config_files/Drive_Modules/QTL2543-xx - 24G SAS Drive Breaker +Triggering v5.000 c1.1.qfg +195 -195
  153. quarchpy/config_files/Drive_Modules/QTL2602-xx - Multiprotocol Link Breaker.qfg +178 -178
  154. quarchpy/config_files/Drive_Modules/QTL2645-xx - Gen5 PCIe U.2 Drive Module v5.000.qfg +227 -227
  155. quarchpy/config_files/Drive_Modules/QTL2645-xx - Gen5 PCIe U.2 Drive Module v5.001.qfg +227 -227
  156. quarchpy/config_files/Drive_Modules/QTL2645-xx - Gen5 PCIe U.2 Drive Module v5.003.qfg +227 -227
  157. quarchpy/config_files/Drive_Modules/QTL2645-xx - Gen5 PCIe U.2 Drive Module v5.007.qfg +229 -229
  158. quarchpy/config_files/Drive_Modules/QTL2651-xx - Gen5 PCIe U.2 Drive Module + Triggering v5.000.qfg +228 -228
  159. quarchpy/config_files/Drive_Modules/QTL2651-xx - Gen5 PCIe U.2 Drive Module + Triggering v5.001.qfg +228 -228
  160. quarchpy/config_files/Drive_Modules/QTL2651-xx - Gen5 PCIe U.2 Drive Module + Triggering v5.003.qfg +228 -228
  161. quarchpy/config_files/Drive_Modules/QTL2651-xx - Gen5 PCIe U.2 Drive Module v5.007.qfg +230 -230
  162. quarchpy/config_files/Drive_Modules/QTL2661-xx - Gen5 U.3 Drive Module + Triggering v5.000.qfg +229 -229
  163. quarchpy/config_files/Drive_Modules/QTL2662-xx - Gen5 PCIe U.3 Drive Module v5.000.qfg +228 -228
  164. quarchpy/config_files/Drive_Modules/QTL2757-xx - Gen5 SFF Lite Breaker Module Config v4.000.qfg +140 -140
  165. quarchpy/config_files/Drive_Modules/QTL2804-xx - Gen5 MCIO to U.2 Breaker +Triggering v5.003.qfg +253 -253
  166. quarchpy/config_files/Drive_Modules/QTL2804-xx - Gen5 MCIO to U.2 Breaker v5.001.qfg +234 -234
  167. quarchpy/config_files/Drive_Modules/QTL2805-xx - Gen5 MCIO to U.2 Breaker +Triggering v5.001.qfg +234 -234
  168. quarchpy/config_files/Drive_Modules/QTL2805-xx - Gen5 MCIO to U.2 Breaker +Triggering v5.002.qfg +253 -253
  169. quarchpy/config_files/Drive_Modules/QTL2805-xx - Gen5 MCIO to U.2 Breaker +Triggering v5.003.qfg +253 -253
  170. quarchpy/config_files/Drive_Modules/QTL2813-xx - Gen5 AIC to U.2 Breaker v5.001 c1.2.qfg +230 -230
  171. quarchpy/config_files/Drive_Modules/QTL2813-xx - Gen5 AIC to U.2 Breaker with Triggering v5.002 c1.3.qfg +253 -253
  172. quarchpy/config_files/Drive_Modules/QTL2814-xx - Gen5 AIC to U.2 Breaker with Triggering v5.001 c1.2.qfg +230 -230
  173. quarchpy/config_files/Drive_Modules/QTL2814-xx - Gen5 AIC to U.2 Breaker with Triggering v5.002 c1.3.qfg +253 -253
  174. quarchpy/config_files/Drive_Modules/QTL2892-xx - Gen5 EDSFF E1 x4 Breaker v5.001.qfg +233 -233
  175. quarchpy/config_files/Drive_Modules/Standard Drive Module Config v3.5 c1.1.qfg +171 -171
  176. quarchpy/config_files/Power_Margining/HD/QTL1944-xx - HD Power Module v5.000.qfg +123 -123
  177. quarchpy/config_files/Power_Margining/HD/QTL1944-xx - HD Power Module v5.003.qfg +124 -124
  178. quarchpy/config_files/Power_Margining/HD/QTL1995-xx - x6 HD Power Module v5.002.qfg +122 -122
  179. quarchpy/config_files/Power_Margining/HD/QTL1995-xx - x6 HD Power Module v5.003.qfg +123 -123
  180. quarchpy/config_files/Power_Margining/HD/QTL1999-xx - Single HD Power Module v5.002.qfg +122 -122
  181. quarchpy/config_files/Power_Margining/HD/QTL1999-xx - Single HD Power Module v5.003.qfg +123 -123
  182. quarchpy/config_files/Power_Margining/HD/QTL1999-xx - Single HD Power Module v6.000.qfg +124 -124
  183. quarchpy/config_files/Power_Margining/PPM/QTL1455-02 - Power Margining Module v4.101.qfg +78 -78
  184. quarchpy/config_files/Power_Margining/PPM/QTL1455-02 - Power Margining Module v4.200.qfg +80 -80
  185. quarchpy/config_files/Power_Margining/PPM/QTL1455-02 - Power Margining Module v4.201.qfg +82 -82
  186. quarchpy/config_files/Power_Margining/PPM/QTL1455-02 - Test Power Margining Module v4.004.qfg +73 -73
  187. quarchpy/config_files/Power_Margining/PPM/QTL1658-01 - Power Margining Module w. Triggering v4.101.qfg +78 -78
  188. quarchpy/config_files/Power_Margining/PPM/QTL1658-01 - Power Margining Module w. Triggering v4.200.qfg +80 -80
  189. quarchpy/config_files/Power_Margining/PPM/QTL1658-01 - Power Margining Module w. Triggering v4.201.qfg +82 -82
  190. quarchpy/config_files/Power_Margining/PPM/QTL1727-01 - 3v3 Power Margining Module w. Triggering v4.105.qfg +78 -78
  191. quarchpy/config_files/Power_Margining/PPM/QTL1727-01 - 3v3 Power Margining Module w. Triggering v4.200.qfg +80 -80
  192. quarchpy/config_files/Power_Margining/PPM/QTL1727-01 - 3v3 Power Margining Module w. Triggering v4.201.qfg +82 -82
  193. quarchpy/config_files/Power_Margining/PPM/QTL1730-01 - 3v3 Power Margining Module v4.105.qfg +78 -78
  194. quarchpy/config_files/Power_Margining/PPM/QTL1730-01 - 3v3 Power Margining Module v4.200.qfg +80 -80
  195. quarchpy/config_files/Power_Margining/PPM/QTL1730-01 - 3v3 Power Margining Module v4.201.qfg +82 -82
  196. quarchpy/config_files/Power_Margining/XLC/QTL1824-01 - Power Margining Module V2 - Triggering v4.000.qfg +80 -80
  197. quarchpy/config_files/Power_Margining/XLC/QTL1824-01 - Power Margining Module V2 - Triggering v4.200.qfg +81 -81
  198. quarchpy/config_files/Power_Margining/XLC/QTL1824-01 - Power Margining Module V2 - Triggering v4.202.qfg +87 -87
  199. quarchpy/config_files/Power_Margining/XLC/QTL1824-01 - Power Margining Module V2 - Triggering v4.210.qfg +88 -88
  200. quarchpy/config_files/Power_Margining/XLC/QTL1824-01 - Power Margining Module V2 - Triggering v4.211.qfg +121 -121
  201. quarchpy/config_files/Power_Margining/XLC/QTL1824-03 - Power Margining Module V2 - Triggering v4.213.qfg +121 -121
  202. quarchpy/config_files/Power_Margining/XLC/QTL1847-01 - Power Margining Module V2 v4.213.qfg +121 -121
  203. quarchpy/config_files/Switch_Modules/QTL1390-xx - 4-8 SATA MUX Module Config v4.002.qfg +186 -186
  204. quarchpy/config_files/Switch_Modules/QTL1443-xx - 1-8 USB3 MUX Module Config v4.002.qfg +147 -147
  205. quarchpy/config_files/Switch_Modules/QTL1443-xx - 1-8 USB3 MUX Module Config v4.003.qfg +147 -147
  206. quarchpy/config_files/Switch_Modules/QTL1443-xx - 1-8 USB3 MUX Module Config v4.100.qfg +147 -147
  207. quarchpy/config_files/Switch_Modules/QTL1449-xx - 1-8 PCIe MUX Module Config v4.000.qfg +145 -145
  208. quarchpy/config_files/Switch_Modules/QTL1490-xx - SATA Keyed HS Module Config v4.003 c1.6.qfg +194 -194
  209. quarchpy/config_files/Switch_Modules/QTL1490-xx - SATA Keyed HS Module Config v4.006 c1.8.qfg +193 -193
  210. quarchpy/config_files/Switch_Modules/QTL1530-xx - 1-8 DP MUX Module Config v4.000.qfg +145 -145
  211. quarchpy/config_files/Switch_Modules/QTL1564-xx - 12 Port Mini SAS HD MUX Module Config v4.000.qfg +184 -184
  212. quarchpy/config_files/Switch_Modules/QTL1584-xx - 1-4 ExpressCard MUX Module Config v4.000.qfg +81 -81
  213. quarchpy/config_files/quarch_config_parser.py +19 -16
  214. quarchpy/connection_specific/QPS/{License/argparse4j-license.txt → 3rdPartyLicenses/argparse4j-LICENSE.txt} +23 -25
  215. quarchpy/connection_specific/QPS/3rdPartyLicenses/com.sun.istack-license.html +59 -0
  216. quarchpy/connection_specific/QPS/{qis/License/LICENSE.txt → 3rdPartyLicenses/commons-io-LICENSE-2.0.txt} +202 -202
  217. quarchpy/connection_specific/QPS/3rdPartyLicenses/controlsfx-license.txt +29 -0
  218. quarchpy/connection_specific/QPS/{License/LICENSE.txt → 3rdPartyLicenses/evalex-LICENSE.txt} +202 -202
  219. quarchpy/connection_specific/QPS/3rdPartyLicenses/gson-license.txt +202 -0
  220. quarchpy/connection_specific/QPS/3rdPartyLicenses/guava-license.txt +202 -0
  221. quarchpy/connection_specific/QPS/3rdPartyLicenses/jakarta.activation-license.html +59 -0
  222. quarchpy/connection_specific/QPS/3rdPartyLicenses/jakarta.xml.bind-api-license.html +59 -0
  223. quarchpy/connection_specific/QPS/3rdPartyLicenses/janino-LICENSE.txt +31 -0
  224. quarchpy/connection_specific/QPS/3rdPartyLicenses/jfx-license.txt +347 -0
  225. quarchpy/connection_specific/QPS/3rdPartyLicenses/log4j-license.txt +202 -0
  226. quarchpy/connection_specific/QPS/3rdPartyLicenses/netty-LICENSE.txt +202 -0
  227. quarchpy/connection_specific/QPS/3rdPartyLicenses/netty-NOTICE.txt +239 -0
  228. quarchpy/connection_specific/QPS/3rdPartyLicenses/nsmenufx-LICENSE.txt +24 -0
  229. quarchpy/connection_specific/QPS/3rdPartyLicenses/slf4j-LICENSE.txt +24 -0
  230. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1253-01 - Mini SAS Module Config v3.5 c1.3.xml +597 -0
  231. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1253-01 - Mini SAS Module Config v4.000 c1.3.xml +597 -0
  232. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1253-02 - Mini SAS Module Config v3.5 c1.3.xml +597 -0
  233. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1253-02 - Mini SAS Module Config v4.000 c1.3.xml +597 -0
  234. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1253-xx - Mini SAS Module Config v4.003 c1.6.xml +599 -0
  235. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1271-xx - Ethernet Module Config v3.5 c1.2.xml +533 -0
  236. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1271-xx - Ethernet Module Config v4.000 c1.2.xml +533 -0
  237. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1271-xx - Ethernet Module Config v4.100 c1.3.xml +535 -0
  238. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1292-xx - SFP+ Cable Pull Module Config v4.000 c1.1.xml +449 -0
  239. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1309-04 - USB 3.0 Module Config v4.003 c1.2.xml +530 -0
  240. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1309-xx - USB 3.0 Module Config v3.5 c1.1.xml +528 -0
  241. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1309-xx - USB 3.0 Module Config v4.000 c1.1.xml +528 -0
  242. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1366-xx - QSFP Cable Pull Module Config v4.000 c1.1.xml +684 -0
  243. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1383-xx - eSATAp Module Config v4.000 c1.3.xml +542 -0
  244. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1521-02 - Mini SAS HD Module Config v4.000 c1.1.xml +670 -0
  245. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1521-03 - Mini SAS HD Module Config v4.000 c1.1.xml +670 -0
  246. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1521-05 - Mini SAS HD Module Config v4.005 c1.1.xml +672 -0
  247. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1521-05 - Mini SAS HD Module Config v4.007 c1.2.xml +672 -0
  248. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1521-xx - Mini SAS HD Module Config v4.003 c1.5.xml +672 -0
  249. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1663-xx - Quad QSFP Cable Pull Module Config v4.000 c1.1.xml +1523 -0
  250. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1675-05 - Mini SAS HD Module w Triggering Config v4.007 c1.3.xml +673 -0
  251. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1675-xx - Mini SAS HD Module w Triggering Config v4.000 c1.1.xml +673 -0
  252. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1917-xx - Dual SFP+ Cable Pull Module Config v4.000 c1.1.xml +614 -0
  253. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1971-01 - USB TypeC Module Config v4.000 c1.1.xml +637 -0
  254. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL1971-02 - USB TypeC Module Config v4.000 c1.1.xml +641 -0
  255. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL2022-xx - RJ-45 Cable Module Config v4.104 c1.3.xml +535 -0
  256. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL2058-xx - External PCIe Module Config v4.001 c1.1.xml +696 -0
  257. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL2138-01 - SFP28 Cable Pull Module Config v4.000 c1.1.xml +449 -0
  258. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL2146-01 - Gen4 OCuLink Cable Module Config v4.001 c1.1.xml +718 -0
  259. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL2162-01 - 24G mini SAS HD Cable Break Module Config v4.000 c1.xml +672 -0
  260. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL2171-01 - QSFP28 Cable Module Config v4.000 c1.xml +583 -0
  261. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL2171-02 - QSFP28 Cable Module Config v4.000 c1.xml +583 -0
  262. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL2341-01 - Gen4 External PCIe Cable Module v4.000.xml +625 -0
  263. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL2602-xx - Multiprotocol Link Breaker.xml +414 -0
  264. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL2834-xx - -48V DC Breaker Module v5.000 c1.0.xml +374 -0
  265. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Cable Modules/QTL3000-xx - RJ-45 Cable Module v5.000 c1.4.xml +539 -0
  266. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1069-xx - SBB 2.0 Module Config v3.5 c1.1.xml +1614 -0
  267. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1630-01 - PCIe Card Module v4.000 c1.0.xml +1271 -0
  268. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1630-02 - PCIe Card Module Config v4.004 c1.2.xml +1289 -0
  269. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1630-02 - PCIe Card Module Config v4.005 c1.2.xml +1289 -0
  270. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1630-02 - PCIe Card Module Config v4.100 c1.4.xml +1290 -0
  271. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1630-04 - PCIe Card Module Config v4.001 c1.1.xml +1297 -0
  272. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1630-04 - PCIe Card Module Config v4.004 c1.2.xml +1301 -0
  273. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1688-01 - PCIe Card Module w Triggering Config v4.004 c1.2.xml +1290 -0
  274. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1688-01 - PCIe Card Module w Triggering Config v4.006 c1.3.xml +1291 -0
  275. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1688-03 - PCIe Card Module w Triggering Config v4.001 c1.1.xml +1298 -0
  276. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1688-03 - PCIe Card Module w Triggering Config v4.004 c1.2.xml +1302 -0
  277. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1688-04 - PCIe Card Module w Triggering Config v4.005 c1.5.xml +1307 -0
  278. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1688-05 - PCIe Card Module w Triggering Config v4.005 c1.xml +1307 -0
  279. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1848-01 - PCIe Lite Card Module Config v4.000.xml +219 -0
  280. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1848-02 - PCIe Lite Card Module Config v4.000.xml +286 -0
  281. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1919-01 - PCIe x8 Card Module Config v4.001 c1.4.xml +965 -0
  282. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL1920-01 - PCIe x8 Card Module w Triggering Config v4.000 c1.3.xml +966 -0
  283. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2019-xx - M.2 Horizontal Card Module Config v4.002 c1.1.xml +703 -0
  284. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2034-xx - M.2 M-Key Vertical Module Config v4.001 c1.1.xml +737 -0
  285. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2067-xx - PCIe SFF Module Config v4.000 c1.1.xml +971 -0
  286. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2067-xx - Sanblaze 2 Drive Riser Card Config v4.006 c1.4.xml +1020 -0
  287. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2067-xx - Sanblaze 2 Drive Riser Card Config v4.007 c1.4.xml +1022 -0
  288. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2073-01 - GEN3 PCIe Lite Card Module Config v4.001.xml +286 -0
  289. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2073-01 - PCIe Lite Card Module Config v4.000.xml +286 -0
  290. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2074-01 - GEN3 PCIe HS Card Module v4.005 c1.4.xml +1301 -0
  291. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2074-01 - PCIe Card Module Config CurrentLimit v4.004 c1.2.xml +1301 -0
  292. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2087-xx - PCIe GEN4 Card Module w Triggering Config v4.001 c1.1.xml +1307 -0
  293. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2087-xx - PCIe GEN4 Card Module w Triggering Config v4.001 c1.3.xml +1212 -0
  294. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2087-xx - PCIe GEN4 Card Module w Triggering Config v5.000 c1.4.xml +1212 -0
  295. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2094-01 - Sanblaze Dualport Riser Card Config v4.001 c1.1.xml +773 -0
  296. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2128-xx - PCIe GEN4 Card Module w Triggering Config v4.000 c1.1.xml +1306 -0
  297. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2128-xx - PCIe GEN4 Card Module w Triggering Config v4.001 c1.4.xml +1211 -0
  298. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2135-xx - PCIe GEN4 Card Module w Triggering Config - Inrush Limit v4.001 c1.4.xml +1211 -0
  299. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2161-01 - EDSFF x8 Module Config v4.000 c1.1.xml +773 -0
  300. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2171-xx - EDSFF x8 Module w Triggering Config 4.001 c1.1.xml +785 -0
  301. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2203-01 - Sanblaze Dualport Rack Riser Card Config v4.000 c1.1.xml +715 -0
  302. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2203-01 - Sanblaze Dualport Rack Riser Card Config v4.005 c1.5.xml +715 -0
  303. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2272-01 - GEN4 EDSFF x8 Module Config v4.000 c1.1.xml +771 -0
  304. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2282-01 - Sanblaze Singleport Rack Riser Card Config v4.000 c1.1.xml +666 -0
  305. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2282-01 - Sanblaze Singleport Rack Riser Card Config v4.002 c1.2.xml +666 -0
  306. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2318-01 - SANBlaze U.2 Rack Riser Card Config v4.000 c1.1.xml +715 -0
  307. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2322-03 - GEN4 M.2 M-Key Vertical Breaker Module Config v5.001 c1.3.xml +738 -0
  308. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2322-xx - GEN4 M.2 M-Key Vertical Breaker Module Config v5.000 c1.1.xml +637 -0
  309. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2334-xx - Gen4 EDSFF x4 Card Module Config v4.000 c1.1.xml +615 -0
  310. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2351-xx - GEN4 EDSFF x4 Card Module +Triggering Config v4.000 c1.1.xml +621 -0
  311. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2351-xx - GEN4 EDSFF x4 Card Module +Triggering Config v4.001 c1.2.xml +624 -0
  312. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2357-xx - PCIe GEN5 Card Module Config v5.000 c1.1.xml +1242 -0
  313. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2358-xx - PCIe GEN5 Card Module w Triggering Config v5.000 c1.1.xml +1250 -0
  314. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2378-xx - SANBlaze U.3 Rack Riser Card Config v4.000 c1.1.xml +682 -0
  315. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2378-xx - SANBlaze U.3 Rack Riser Card Config v4.001 c1.2.xml +698 -0
  316. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2395-01 - GEN4 M.2 M-Key Vertical Breaker Module w Triggering Config v5.000 c1.1.xml +647 -0
  317. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2395-02 - GEN4 M.2 M-Key Vertical Breaker Module w Triggering Config v5.001 c1.3.xml +742 -0
  318. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2395-03 - GEN4 M.2 M-Key Vertical Breaker Module w Triggering Config v5.001 c1.3.xml +742 -0
  319. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2396-xx - PCIe GEN5 Card Module w inrush Config v5.000 c1.1.xml +1242 -0
  320. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2403-xx - Gen4 PCIe Lite Module Config v4.000.xml +293 -0
  321. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2515-xx - PCIe GEN4 Card Module w Triggering - Inrush Limit Config v4.001 c1.3.xml +1212 -0
  322. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2652-xx - Gen5 PCIe Lite Module Config v4.000.xml +259 -0
  323. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2652-xx - Gen5 PCIe Lite Module Config v4.003.xml +288 -0
  324. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2658-xx - Gen5 PCIe Lite Module w Inrush Config v4.000.xml +259 -0
  325. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2661-xx - GEN5 PCIe U.3 Breaker Config w Triggering v5.000 c1.1.xml +813 -0
  326. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2662-xx - GEN5 PCIe U.3 Breaker Config v5.000 c1.1.xml +801 -0
  327. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2686-xx - Gen5 EDSFF E3 x4 Breaker Config v5.000.xml +741 -0
  328. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2686-xx - Gen5 EDSFF E3 x4 Breaker Config v5.001 c1.2.xml +799 -0
  329. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2686-xx - Gen5 EDSFF E3 x4 Breaker Config v5.002 c1.4.xml +743 -0
  330. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2686-xx - Gen5 EDSFF E3 x4 Breaker v5.000 c1.1.xml +741 -0
  331. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2692-xx - Gen5 EDSFF E3 x4 Breaker +Triggering Config v5.000.xml +742 -0
  332. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2692-xx - Gen5 EDSFF E3 x4 Breaker w Triggering Config v5.001 c1.2.xml +800 -0
  333. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2692-xx - Gen5 EDSFF E3 x4 Breaker w Triggering v5.000 c1.1.xml +742 -0
  334. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2766-xx - GEN4 EDSFF E1 x8 Breaker Config v5.000.xml +982 -0
  335. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2767-xx - GEN4 EDSFF E3 x8 Breaker Config v5.000.xml +982 -0
  336. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2768-xx - GEN4 EDSFF E3 2T x8 Breaker Config v5.000.xml +982 -0
  337. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2776-xx - GEN4 EDSFF E1 x8 Breaker +Triggering Config v5.000.xml +983 -0
  338. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2777-xx - GEN4 EDSFF E3 x8 Breaker +Triggering Config v5.000.xml +983 -0
  339. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2778-xx - GEN4 EDSFF E3 2T x8 Breaker +Triggering Config v5.000.xml +983 -0
  340. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2798-xx - PCIe GEN5 Card Module w Triggering w Inrush Limit Config v5.000 c1.1.xml +1250 -0
  341. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2804-xx - GEN5 MCIO x4 to U.2 Breaker Config v5.000 c1.1.xml +813 -0
  342. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2805-xx - GEN5 MCIO x4 to U.2 Breaker + Triggering Config v5.000 c1.1.xml +814 -0
  343. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2813-xx - Gen5 AIC to U.2 Breaker v5.002 c1.3.xml +871 -0
  344. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2814-xx - GEN5 AIC to U.2 Breaker + Triggering Config v5.000 c1.1 .xml +807 -0
  345. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2814-xx - Gen5 AIC to U.2 Breaker + Triggering Config v5.002 c1.3.xml +872 -0
  346. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2892-xx - GEN5 EDSFF E1 x4 Breaker.xml +799 -0
  347. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2901-xx - GEN5 M.2 M-Key Horizontal Breaker Config v5.000 c1.1.xml +753 -0
  348. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2902-xx - GEN5 M.2 M-Key Horizontal Breaker w Triggering Config v5.000 c1.1.xml +762 -0
  349. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2902-xx- -Gen5 M.2 Horizontal Breaker +Triggering Config 5.000 c1.1.xml +762 -0
  350. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2925-xx - GEN5 EDSFF E1 x4 Breaker +Triggering.xml +800 -0
  351. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Card Modules/QTL2954-01 - fake delete.xml +947 -0
  352. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1177-xx - HS Module Config v3.5 c1.5.xml +592 -0
  353. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1177-xx - HS Module Config v4.000 c1.5.xml +592 -0
  354. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1177-xx - HS Module Config v4.006 c1.8.xml +594 -0
  355. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1215-xx - Lite Module Config v3.50.xml +203 -0
  356. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1215-xx - Lite Module Config v4.000.xml +203 -0
  357. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1301-xx - HS Lite Module Config v3.50.xml +281 -0
  358. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1301-xx - HS Lite Module Config v4.000.xml +281 -0
  359. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1429-01 - EMC HS Lite Module Config v4.000.xml +281 -0
  360. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1429-02 - EMC HS Lite Module Config v4.002.xml +234 -0
  361. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1623-03 - 12G HS Lite Module Config v4.001.xml +266 -0
  362. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1623-04 - 12G HS Lite Module Config v4.001.xml +266 -0
  363. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1680-xx - SCA2 Lite Module Config v4.001.xml +333 -0
  364. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1689-01 - 12G HS Module Config v4.001 c1.1.xml +594 -0
  365. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1689-04 - 12G HS Module Config v4.002 c1.1.xml +580 -0
  366. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1689-05 - 12G HS Module Config v4.002 c1.1.xml +579 -0
  367. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1743-02 - PCIe SFF Module Config v4.003 c1.3.xml +794 -0
  368. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1743-02 - PCIe SFF Module Config v4.006 c1.4.xml +698 -0
  369. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1743-xx - PCIe SFF Module Config v4.000 c1.1.xml +789 -0
  370. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1753-xx - 12G Lite Module Config v4.000.xml +192 -0
  371. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL1921-01 - EMC 12G HS Lite Module Config v4.000.xml +233 -0
  372. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2207-01 - GEN 4 PCIe U.2 Drive Module.xml +733 -0
  373. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2207-02 - GEN 4 PCIe U.2 Drive Module v5.000.xml +753 -0
  374. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2207-03 - GEN 4 PCIe SFF HS Drive Module Triggering v5.001.xml +763 -0
  375. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2207-xx - GEN 4 PCIe U.2 Drive Module v4.001.xml +751 -0
  376. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2207-xx - GEN 4 PCIe U.2 Drive Module.xml +746 -0
  377. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2245-01 - GEN 4 PCIe U.3 HS Drive Module v4.000.xml +789 -0
  378. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2245-xx - GEN 4 PCIe U.3 HS Drive Module.xml +823 -0
  379. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2266-01 - GEN 4 PCIe SFF HS Drive Module Triggering.xml +743 -0
  380. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2266-02 - GEN 4 PCIe SFF HS Drive Module Triggering v4.002.xml +758 -0
  381. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2266-03 - GEN 4 PCIe SFF HS Drive Module Triggering v5.001.xml +764 -0
  382. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2266-XX - GEN 4 PCIe SFF HS Drive Module Triggering.xml +747 -0
  383. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2270-01 - GEN 4 PCIe U.3 HS Drive Module Triggering v4.000.xml +798 -0
  384. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2270-xx - GEN 4 PCIe U.3 HS Drive Module Triggering.xml +835 -0
  385. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2542-02 - 24G SAS Drive Breaker Module v5.001.xml +530 -0
  386. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2542-xx - 24G SAS Drive Breaker v5.000 c1.1.xml +530 -0
  387. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2543-xx - 24G SAS Drive Breaker +Triggering v5.000 c1.1.xml +539 -0
  388. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2543-xx - 24G SAS Drive Breaker +Triggering v5.001 c1.3.xml +539 -0
  389. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2602-xx - Multiprotocol Link Breaker.xml +414 -0
  390. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2645-xx - Gen5 PCIe U.2 Drive Module v5.000.xml +792 -0
  391. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2645-xx - Gen5 PCIe U.2 Drive Module v5.001.xml +792 -0
  392. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2645-xx - Gen5 PCIe U.2 Drive Module v5.003.xml +793 -0
  393. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2645-xx - Gen5 PCIe U.2 Drive Module v5.007.xml +816 -0
  394. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2645-xx - Gen5 PCIe U.2 Drive Module v5.008.xml +818 -0
  395. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2651-xx - Gen5 PCIe U.2 Drive Module + Triggering v5.000.xml +801 -0
  396. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2651-xx - Gen5 PCIe U.2 Drive Module + Triggering v5.001.xml +801 -0
  397. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2651-xx - Gen5 PCIe U.2 Drive Module + Triggering v5.003.xml +802 -0
  398. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2651-xx - Gen5 PCIe U.2 Drive Module v5.007.xml +825 -0
  399. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2661-xx - Gen5 U.3 Drive Module + Triggering v5.000.xml +813 -0
  400. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2662-xx - Gen5 PCIe U.3 Drive Module v5.000.xml +801 -0
  401. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2757-xx - Gen5 SFF Lite Breaker Module Config v4.000.xml +272 -0
  402. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2804-xx - Gen5 MCIO to U.2 Breaker +Triggering v5.003.xml +818 -0
  403. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2804-xx - Gen5 MCIO to U.2 Breaker v5.001.xml +813 -0
  404. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2805-xx - Gen5 MCIO to U.2 Breaker +Triggering v5.001.xml +814 -0
  405. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2805-xx - Gen5 MCIO to U.2 Breaker +Triggering v5.002.xml +819 -0
  406. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2805-xx - Gen5 MCIO to U.2 Breaker +Triggering v5.003.xml +819 -0
  407. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2892-xx - Gen5 EDSFF E1 x4 Breaker v5.001.xml +799 -0
  408. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2892-xx - Gen5 EDSFF E1 x4 Breaker v5.002.xml +801 -0
  409. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2940-xx - Gen5 EDSFF E3 x8 Breaker v5.000.xml +1105 -0
  410. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/QTL2941-xx - Gen5 EDSFF E3 x8 Breaker +Triggering v5.000.xml +1106 -0
  411. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Drive Modules/Standard Drive Module Config v3.5 c1.1.xml +463 -0
  412. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Switch Modules/QTL1490-xx - SATA Keyed HS Module Config v4.003 c1.6.xml +555 -0
  413. quarchpy/connection_specific/QPS/DeviceConfig/breaker/Switch Modules/QTL1490-xx - SATA Keyed HS Module Config v4.006 c1.8.xml +557 -0
  414. quarchpy/connection_specific/QPS/DeviceConfig/colors/default-colors.properties +64 -0
  415. quarchpy/connection_specific/QPS/DeviceConfig/colors/qtl2789-colors.properties +2 -0
  416. quarchpy/connection_specific/QPS/InstallType.dat +1 -0
  417. quarchpy/connection_specific/QPS/Power-Studio-QuickStart.pdf +0 -0
  418. quarchpy/connection_specific/QPS/QuarchPowerStudio.properties.xml +0 -1
  419. quarchpy/connection_specific/QPS/app.jar +0 -0
  420. quarchpy/connection_specific/QPS/app.properties +7 -0
  421. quarchpy/connection_specific/QPS/commandLineOptions.txt +19 -10
  422. quarchpy/connection_specific/QPS/license.txt +1 -0
  423. quarchpy/connection_specific/QPS/qis/3rdPartyLicenses/com.sun.istack-license.html +59 -0
  424. quarchpy/connection_specific/QPS/qis/3rdPartyLicenses/dorkbox-LICENSE.Apachev2 +218 -0
  425. quarchpy/connection_specific/QPS/qis/3rdPartyLicenses/jSerialComm-LICENSE-APACHE-2.0 +202 -0
  426. quarchpy/connection_specific/QPS/qis/3rdPartyLicenses/jSerialComm-LICENSE-LGPL-3.0 +165 -0
  427. quarchpy/connection_specific/QPS/qis/3rdPartyLicenses/jakarta.activation-license.html +59 -0
  428. quarchpy/connection_specific/QPS/qis/3rdPartyLicenses/jakarta.xml.bind-api-license.html +59 -0
  429. quarchpy/connection_specific/QPS/qis/3rdPartyLicenses/javassist-License.html +381 -0
  430. quarchpy/connection_specific/QPS/qis/3rdPartyLicenses/jmdns-LICENSE.txt +202 -0
  431. quarchpy/connection_specific/QPS/qis/3rdPartyLicenses/jna-AL2.0 +177 -0
  432. quarchpy/connection_specific/QPS/qis/3rdPartyLicenses/kotlin-stdlib-LICENSE-2.0.txt +202 -0
  433. quarchpy/connection_specific/QPS/qis/3rdPartyLicenses/netty-LICENSE.txt +202 -0
  434. quarchpy/connection_specific/QPS/qis/3rdPartyLicenses/netty-NOTICE.txt +239 -0
  435. quarchpy/connection_specific/QPS/qis/3rdPartyLicenses/slf4j-LICENSE.txt +24 -0
  436. quarchpy/connection_specific/QPS/qis/3rdPartyLicenses/usb4java-LICENSE.md +20 -0
  437. quarchpy/connection_specific/QPS/qis/QuarchInstrumentServer.properties.xml +1 -0
  438. quarchpy/connection_specific/QPS/qis/README.txt +5 -5
  439. quarchpy/connection_specific/QPS/qis/help.txt +112 -61
  440. quarchpy/connection_specific/QPS/qis/license.txt +1 -0
  441. quarchpy/connection_specific/QPS/qis/qis-NoGUI.bat +1 -1
  442. quarchpy/connection_specific/QPS/qis/qis-NoGUI.sh +1 -1
  443. quarchpy/connection_specific/QPS/qis/qis.bat +1 -1
  444. quarchpy/connection_specific/QPS/qis/qis.jar +0 -0
  445. quarchpy/connection_specific/QPS/qis/qis.sh +1 -1
  446. quarchpy/connection_specific/QPS/qis/qis_lib/Collections-2.4.jar +0 -0
  447. quarchpy/connection_specific/QPS/qis/qis_lib/Desktop-1.1.jar +0 -0
  448. quarchpy/connection_specific/QPS/qis/qis_lib/EvalEx-3.5.0.jar +0 -0
  449. quarchpy/connection_specific/QPS/qis/qis_lib/Executor-3.13.jar +0 -0
  450. quarchpy/connection_specific/QPS/qis/qis_lib/JNA-1.2.jar +0 -0
  451. quarchpy/connection_specific/QPS/qis/qis_lib/OS-1.8.jar +0 -0
  452. quarchpy/connection_specific/QPS/qis/qis_lib/SystemTray-4.4.jar +0 -0
  453. quarchpy/connection_specific/QPS/qis/qis_lib/Updates-1.1.jar +0 -0
  454. quarchpy/connection_specific/QPS/qis/qis_lib/Utilities-1.46.jar +0 -0
  455. quarchpy/connection_specific/QPS/qis/qis_lib/cinterface-2.5.6.jar +0 -0
  456. quarchpy/connection_specific/QPS/qis/qis_lib/commons-compiler-3.1.12.jar +0 -0
  457. quarchpy/connection_specific/QPS/qis/qis_lib/commons-compiler-jdk-3.1.12.jar +0 -0
  458. quarchpy/connection_specific/QPS/qis/qis_lib/gson-2.13.1.jar +0 -0
  459. quarchpy/connection_specific/QPS/qis/qis_lib/istack-commons-runtime-3.0.11.jar +0 -0
  460. quarchpy/connection_specific/QPS/qis/qis_lib/jakarta.activation-api-2.1.0.jar +0 -0
  461. quarchpy/connection_specific/QPS/qis/qis_lib/jakarta.xml.bind-api-4.0.0.jar +0 -0
  462. quarchpy/connection_specific/QPS/qis/qis_lib/janino-3.1.12.jar +0 -0
  463. quarchpy/connection_specific/QPS/qis/qis_lib/javassist-3.29.2-GA.jar +0 -0
  464. quarchpy/connection_specific/QPS/qis/qis_lib/jaxb-core-4.0.0.jar +0 -0
  465. quarchpy/connection_specific/QPS/qis/qis_lib/jaxb-runtime-4.0.0.jar +0 -0
  466. quarchpy/connection_specific/QPS/qis/qis_lib/jmdns-3.6.0.jar +0 -0
  467. quarchpy/connection_specific/QPS/qis/qis_lib/jna-jpms-5.12.1.jar +0 -0
  468. quarchpy/connection_specific/QPS/qis/qis_lib/jna-platform-jpms-5.12.1.jar +0 -0
  469. quarchpy/connection_specific/QPS/qis/qis_lib/jul-to-slf4j-2.0.17.jar +0 -0
  470. quarchpy/connection_specific/QPS/qis/qis_lib/kotlin-stdlib-1.9.21.jar +0 -0
  471. quarchpy/connection_specific/QPS/qis/qis_lib/log4j-api-2.25.0.jar +0 -0
  472. quarchpy/connection_specific/QPS/qis/qis_lib/log4j-core-2.25.0.jar +0 -0
  473. quarchpy/connection_specific/QPS/qis/qis_lib/log4j-layout-template-json-2.25.0.jar +0 -0
  474. quarchpy/connection_specific/QPS/qis/qis_lib/log4j-slf4j2-impl-2.25.0.jar +0 -0
  475. quarchpy/connection_specific/QPS/qis/qis_lib/netty-buffer-4.2.2.Final.jar +0 -0
  476. quarchpy/connection_specific/QPS/qis/qis_lib/netty-codec-base-4.2.2.Final.jar +0 -0
  477. quarchpy/connection_specific/QPS/qis/qis_lib/netty-codec-http-4.2.2.Final.jar +0 -0
  478. quarchpy/connection_specific/QPS/qis/qis_lib/netty-common-4.2.2.Final.jar +0 -0
  479. quarchpy/connection_specific/QPS/qis/qis_lib/netty-handler-4.2.2.Final.jar +0 -0
  480. quarchpy/connection_specific/QPS/qis/qis_lib/netty-transport-4.2.2.Final.jar +0 -0
  481. quarchpy/connection_specific/QPS/qis/qis_lib/quarchcommon-2.1.9.jar +0 -0
  482. quarchpy/connection_specific/QPS/qis/qis_lib/slf4j-api-2.0.17.jar +0 -0
  483. quarchpy/connection_specific/QPS/qis/qis_lib/torridoncommon-1.2.8.jar +0 -0
  484. quarchpy/connection_specific/QPS/qis/qis_lib/usb4java-1.3.1.jar +0 -0
  485. quarchpy/connection_specific/QPS/qis/resources/filters/Example.txt +36 -0
  486. quarchpy/connection_specific/QPS/qis/resources/filters/iec_filters.xml +17 -0
  487. quarchpy/connection_specific/QPS/qis/resources/org/usb4java/darwin-x86-64/libusb4java.dylib +0 -0
  488. quarchpy/connection_specific/QPS/qis/resources/org/usb4java/linux-aarch64/libusb4java.so +0 -0
  489. quarchpy/connection_specific/QPS/qis/resources/org/usb4java/linux-arm/libusb4java.so +0 -0
  490. quarchpy/connection_specific/QPS/qis/resources/org/usb4java/linux-x86/libusb4java.so +0 -0
  491. quarchpy/connection_specific/QPS/qis/resources/org/usb4java/linux-x86-64/libusb4java.so +0 -0
  492. quarchpy/connection_specific/QPS/qis/resources/org/usb4java/win32-x86/libusb4java.dll +0 -0
  493. quarchpy/connection_specific/QPS/qis/resources/org/usb4java/win32-x86-64/libusb4java.dll +0 -0
  494. quarchpy/connection_specific/QPS/qps-command-reference.html +339 -0
  495. quarchpy/connection_specific/QPS/qps.jar +0 -0
  496. quarchpy/connection_specific/QPS/qps_lib/EvalEx-3.5.0.jar +0 -0
  497. quarchpy/connection_specific/QPS/qps_lib/commons-compiler-3.1.12.jar +0 -0
  498. quarchpy/connection_specific/QPS/qps_lib/commons-compiler-jdk-3.1.12.jar +0 -0
  499. quarchpy/connection_specific/QPS/qps_lib/commons-io-2.19.0.jar +0 -0
  500. quarchpy/connection_specific/QPS/qps_lib/controlsfx-11.2.2.jar +0 -0
  501. quarchpy/connection_specific/QPS/qps_lib/gson-2.13.1.jar +0 -0
  502. quarchpy/connection_specific/QPS/qps_lib/guava-33.4.8-jre.jar +0 -0
  503. quarchpy/connection_specific/QPS/qps_lib/istack-commons-runtime-3.0.11.jar +0 -0
  504. quarchpy/connection_specific/QPS/qps_lib/jakarta.activation-api-2.1.0.jar +0 -0
  505. quarchpy/connection_specific/QPS/qps_lib/jakarta.xml.bind-api-4.0.0.jar +0 -0
  506. quarchpy/connection_specific/QPS/qps_lib/janino-3.1.12.jar +0 -0
  507. quarchpy/connection_specific/QPS/qps_lib/jaxb-core-4.0.0.jar +0 -0
  508. quarchpy/connection_specific/QPS/qps_lib/jaxb-runtime-4.0.0.jar +0 -0
  509. quarchpy/connection_specific/QPS/qps_lib/jfa-1.2.0.jar +0 -0
  510. quarchpy/connection_specific/QPS/qps_lib/jfxutilities-1.0.5.jar +0 -0
  511. quarchpy/connection_specific/QPS/qps_lib/jna-5.17.0.jar +0 -0
  512. quarchpy/connection_specific/QPS/qps_lib/jul-to-slf4j-2.0.17.jar +0 -0
  513. quarchpy/connection_specific/QPS/qps_lib/log4j-api-2.25.0.jar +0 -0
  514. quarchpy/connection_specific/QPS/qps_lib/log4j-core-2.25.0.jar +0 -0
  515. quarchpy/connection_specific/QPS/qps_lib/log4j-layout-template-json-2.25.0.jar +0 -0
  516. quarchpy/connection_specific/QPS/qps_lib/log4j-slf4j2-impl-2.25.0.jar +0 -0
  517. quarchpy/connection_specific/QPS/qps_lib/netty-buffer-4.2.2.Final.jar +0 -0
  518. quarchpy/connection_specific/QPS/qps_lib/netty-codec-base-4.2.2.Final.jar +0 -0
  519. quarchpy/connection_specific/QPS/qps_lib/netty-codec-http-4.2.2.Final.jar +0 -0
  520. quarchpy/connection_specific/QPS/qps_lib/netty-common-4.2.2.Final.jar +0 -0
  521. quarchpy/connection_specific/QPS/qps_lib/netty-handler-4.2.2.Final.jar +0 -0
  522. quarchpy/connection_specific/QPS/qps_lib/netty-transport-4.2.2.Final.jar +0 -0
  523. quarchpy/connection_specific/QPS/qps_lib/nsmenufx-3.1.0.jar +0 -0
  524. quarchpy/connection_specific/QPS/qps_lib/quarchcommon-2.1.9.jar +0 -0
  525. quarchpy/connection_specific/QPS/qps_lib/qutils-1.0.2.jar +0 -0
  526. quarchpy/connection_specific/QPS/qps_lib/slf4j-api-2.0.17.jar +0 -0
  527. quarchpy/connection_specific/QPS/qps_lib/txw2-4.0.0.jar +0 -0
  528. quarchpy/connection_specific/QPS/resources/InstallBanner.bmp +0 -0
  529. quarchpy/connection_specific/QPS/resources/QPS.icns +0 -0
  530. quarchpy/connection_specific/QPS/resources/QPS.ico +0 -0
  531. quarchpy/connection_specific/QPS/resources/QPS.png +0 -0
  532. quarchpy/connection_specific/QPS/resources/QuarchIcon_128x128.png +0 -0
  533. quarchpy/connection_specific/QPS/resources/QuarchIcon_16x16.png +0 -0
  534. quarchpy/connection_specific/QPS/resources/QuarchIcon_256x256.png +0 -0
  535. quarchpy/connection_specific/QPS/resources/QuarchIcon_32x32.png +0 -0
  536. quarchpy/connection_specific/QPS/resources/QuarchIcon_64x64.png +0 -0
  537. quarchpy/connection_specific/QPS/resources/profiles/3_PHASE_PAM_AC_DEFAULT.rcf +533 -0
  538. quarchpy/connection_specific/QPS/resources/profiles/3_PHASE_PAM_AC_DEFAULT.scf +90 -0
  539. quarchpy/connection_specific/QPS/resources/profiles/3_PHASE_PAM_AC_FULL.rcf +830 -0
  540. quarchpy/connection_specific/QPS/resources/profiles/3_PHASE_PAM_AC_FULL.scf +144 -0
  541. quarchpy/connection_specific/QPS/resources/profiles/PAM_EXAMPLE_CONFIG.rcf +193 -0
  542. quarchpy/connection_specific/QPS/scriptCommands.txt +161 -22
  543. quarchpy/connection_specific/QPS/whats-new.txt +27 -0
  544. quarchpy/connection_specific/connection_QIS.py +1513 -1777
  545. quarchpy/connection_specific/connection_QPS.py +96 -11
  546. quarchpy/connection_specific/connection_ReST.py +29 -16
  547. quarchpy/connection_specific/connection_TCP.py +1 -1
  548. quarchpy/connection_specific/connection_Telnet.py +8 -2
  549. quarchpy/connection_specific/connection_USB.py +12 -13
  550. quarchpy/connection_specific/jdk_jres/__init__.py +0 -0
  551. quarchpy/connection_specific/jdk_jres/fix_permissions.py +60 -0
  552. quarchpy/connection_specific/mDNS.py +139 -0
  553. quarchpy/connection_specific/serial/rfc2217.py +2 -2
  554. quarchpy/connection_specific/serial/tools/list_ports_common.py +1 -4
  555. quarchpy/connection_specific/serial/tools/list_ports_linux.py +0 -6
  556. quarchpy/connection_specific/serial/tools/list_ports_osx.py +1 -6
  557. quarchpy/connection_specific/serial/tools/list_ports_posix.py +0 -5
  558. quarchpy/connection_specific/serial/tools/list_ports_windows.py +0 -6
  559. quarchpy/connection_specific/serial/urlhandler/protocol_alt.py +0 -4
  560. quarchpy/connection_specific/serial/urlhandler/protocol_hwgrep.py +0 -5
  561. quarchpy/connection_specific/serial/urlhandler/protocol_loop.py +1 -1
  562. quarchpy/connection_specific/serial/urlhandler/protocol_socket.py +1 -1
  563. quarchpy/connection_specific/serial/urlhandler/protocol_spy.py +0 -5
  564. quarchpy/connection_specific/usb_libs/usb1.py +4 -4
  565. quarchpy/debug/SystemTest.py +152 -41
  566. quarchpy/debug/module_debug.py +52 -38
  567. quarchpy/debug/simple_terminal.py +37 -28
  568. quarchpy/debug/upgrade_quarchpy.py +10 -14
  569. quarchpy/debug/versionCompare.py +2 -3
  570. quarchpy/device/__init__.py +10 -4
  571. quarchpy/device/device.py +1279 -402
  572. quarchpy/device/device_fixture_idn_info.py +8 -0
  573. quarchpy/device/device_idn_info.py +100 -0
  574. quarchpy/device/device_network_info.py +18 -0
  575. quarchpy/device/discovered_device.py +150 -0
  576. quarchpy/device/packet_processing.py +88 -0
  577. quarchpy/device/quarchArray.py +10 -6
  578. quarchpy/device/quarchPPM.py +395 -40
  579. quarchpy/device/quarchQPS.py +771 -294
  580. quarchpy/device/scanDevices.py +329 -230
  581. quarchpy/docs/CHANGES.rst +478 -328
  582. quarchpy/docs/_build/doctrees/CHANGES.doctree +0 -0
  583. quarchpy/docs/_build/doctrees/environment.pickle +0 -0
  584. quarchpy/docs/_build/doctrees/index.doctree +0 -0
  585. quarchpy/docs/_build/doctrees/readme.doctree +0 -0
  586. quarchpy/docs/_build/doctrees/source/changelog.doctree +0 -0
  587. quarchpy/docs/_build/doctrees/source/licenses.doctree +0 -0
  588. quarchpy/docs/_build/doctrees/source/modules.doctree +0 -0
  589. quarchpy/docs/_build/doctrees/source/quarchpy.calibration.doctree +0 -0
  590. quarchpy/docs/_build/doctrees/source/quarchpy.config_files.doctree +0 -0
  591. quarchpy/docs/_build/doctrees/source/quarchpy.connection_specific.doctree +0 -0
  592. quarchpy/docs/_build/doctrees/source/quarchpy.debug.doctree +0 -0
  593. quarchpy/docs/_build/doctrees/source/quarchpy.device.doctree +0 -0
  594. quarchpy/docs/_build/doctrees/source/quarchpy.disk_test.doctree +0 -0
  595. quarchpy/docs/_build/doctrees/source/quarchpy.doctree +0 -0
  596. quarchpy/docs/_build/doctrees/source/quarchpy.fio.doctree +0 -0
  597. quarchpy/docs/_build/doctrees/source/quarchpy.iometer.doctree +0 -0
  598. quarchpy/docs/_build/doctrees/source/quarchpy.qis.doctree +0 -0
  599. quarchpy/docs/_build/doctrees/source/quarchpy.qps.doctree +0 -0
  600. quarchpy/docs/_build/doctrees/source/quarchpy.user_interface.doctree +0 -0
  601. quarchpy/docs/_build/doctrees/source/quarchpy.utilities.doctree +0 -0
  602. quarchpy/docs/_build/doctrees/source/readme.doctree +0 -0
  603. quarchpy/docs/_build/html/.buildinfo +4 -4
  604. quarchpy/docs/_build/html/CHANGES.html +717 -484
  605. quarchpy/docs/_build/html/_sources/CHANGES.rst.txt +478 -314
  606. quarchpy/docs/_build/html/_sources/index.rst.txt +23 -23
  607. quarchpy/docs/_build/html/_sources/readme.rst.txt +41 -41
  608. quarchpy/docs/_build/html/_sources/source/modules.rst.txt +7 -7
  609. quarchpy/docs/_build/html/_sources/source/quarchpy.calibration.rst.txt +78 -78
  610. quarchpy/docs/_build/html/_sources/source/quarchpy.config_files.rst.txt +22 -22
  611. quarchpy/docs/_build/html/_sources/source/quarchpy.connection_specific.rst.txt +76 -76
  612. quarchpy/docs/_build/html/_sources/source/quarchpy.debug.rst.txt +38 -38
  613. quarchpy/docs/_build/html/_sources/source/quarchpy.device.rst.txt +54 -54
  614. quarchpy/docs/_build/html/_sources/source/quarchpy.disk_test.rst.txt +126 -126
  615. quarchpy/docs/_build/html/_sources/source/quarchpy.fio.rst.txt +30 -30
  616. quarchpy/docs/_build/html/_sources/source/quarchpy.iometer.rst.txt +22 -22
  617. quarchpy/docs/_build/html/_sources/source/quarchpy.qis.rst.txt +22 -22
  618. quarchpy/docs/_build/html/_sources/source/quarchpy.qps.rst.txt +22 -22
  619. quarchpy/docs/_build/html/_sources/source/quarchpy.rst.txt +50 -50
  620. quarchpy/docs/_build/html/_sources/source/quarchpy.user_interface.rst.txt +22 -22
  621. quarchpy/docs/_build/html/_sources/source/quarchpy.utilities.rst.txt +22 -22
  622. quarchpy/docs/_build/html/_static/alabaster.css +662 -700
  623. quarchpy/docs/_build/html/_static/basic.css +905 -904
  624. quarchpy/docs/_build/html/_static/doctools.js +106 -280
  625. quarchpy/docs/_build/html/_static/documentation_options.js +12 -11
  626. quarchpy/docs/_build/html/_static/language_data.js +192 -297
  627. quarchpy/docs/_build/html/_static/pygments.css +84 -82
  628. quarchpy/docs/_build/html/_static/searchtools.js +510 -404
  629. quarchpy/docs/_build/html/_static/sphinx_highlight.js +154 -0
  630. quarchpy/docs/_build/html/genindex.html +1876 -1430
  631. quarchpy/docs/_build/html/index.html +223 -188
  632. quarchpy/docs/_build/html/objects.inv +0 -0
  633. quarchpy/docs/_build/html/py-modindex.html +300 -306
  634. quarchpy/docs/_build/html/readme.html +137 -137
  635. quarchpy/docs/_build/html/search.html +123 -125
  636. quarchpy/docs/_build/html/searchindex.js +1 -1
  637. quarchpy/docs/_build/html/source/changelog.html +805 -537
  638. quarchpy/docs/_build/html/source/licenses.html +181 -181
  639. quarchpy/docs/_build/html/source/modules.html +222 -214
  640. quarchpy/docs/_build/html/source/quarchpy.calibration.html +147 -147
  641. quarchpy/docs/_build/html/source/quarchpy.config_files.html +136 -136
  642. quarchpy/docs/_build/html/source/quarchpy.connection_specific.html +1072 -615
  643. quarchpy/docs/_build/html/source/quarchpy.debug.html +241 -247
  644. quarchpy/docs/_build/html/source/quarchpy.device.html +4087 -1024
  645. quarchpy/docs/_build/html/source/quarchpy.disk_test.html +220 -220
  646. quarchpy/docs/_build/html/source/quarchpy.fio.html +218 -164
  647. quarchpy/docs/_build/html/source/quarchpy.html +823 -250
  648. quarchpy/docs/_build/html/source/quarchpy.iometer.html +271 -184
  649. quarchpy/docs/_build/html/source/quarchpy.qis.html +985 -249
  650. quarchpy/docs/_build/html/source/quarchpy.qps.html +186 -213
  651. quarchpy/docs/_build/html/source/quarchpy.user_interface.html +278 -319
  652. quarchpy/docs/_build/html/source/quarchpy.utilities.html +228 -211
  653. quarchpy/docs/_build/html/source/readme.html +147 -147
  654. quarchpy/docs/conf.py +56 -56
  655. quarchpy/docs/index.rst +23 -23
  656. quarchpy/docs/make.bat +35 -35
  657. quarchpy/docs/readme.rst +41 -41
  658. quarchpy/docs/source/modules.rst +7 -7
  659. quarchpy/docs/source/quarchpy.calibration.rst +78 -78
  660. quarchpy/docs/source/quarchpy.config_files.rst +22 -22
  661. quarchpy/docs/source/quarchpy.connection_specific.rst +76 -76
  662. quarchpy/docs/source/quarchpy.debug.rst +38 -38
  663. quarchpy/docs/source/quarchpy.device.rst +54 -54
  664. quarchpy/docs/source/quarchpy.disk_test.rst +126 -126
  665. quarchpy/docs/source/quarchpy.fio.rst +30 -30
  666. quarchpy/docs/source/quarchpy.iometer.rst +22 -22
  667. quarchpy/docs/source/quarchpy.qis.rst +22 -22
  668. quarchpy/docs/source/quarchpy.qps.rst +22 -22
  669. quarchpy/docs/source/quarchpy.rst +50 -50
  670. quarchpy/docs/source/quarchpy.user_interface.rst +22 -22
  671. quarchpy/docs/source/quarchpy.utilities.rst +22 -22
  672. quarchpy/fio/FIO_interface.py +258 -9
  673. quarchpy/fio/{test_performance_class.py → HIDEtest_performance_class.py} +533 -533
  674. quarchpy/fio/fioDiskFinder.py +1 -1
  675. quarchpy/fio/performanceClass.py +5 -4
  676. quarchpy/install_qps.py +369 -0
  677. quarchpy/qis/StreamHeaderInfo.py +5 -4
  678. quarchpy/qis/qisFuncs.py +234 -96
  679. quarchpy/qps/__init__.py +2 -2
  680. quarchpy/qps/qpsFuncs.py +238 -139
  681. quarchpy/run.py +103 -56
  682. quarchpy/user_interface/user_interface.py +201 -158
  683. quarchpy/utilities/TestCenter.py +64 -45
  684. quarchpy/utilities/TimeValue.py +4 -3
  685. quarchpy/utilities/Version.py +50 -0
  686. {quarchpy-2.1.11.dev4.dist-info → quarchpy-2.2.17.dev1.dist-info}/METADATA +174 -10
  687. quarchpy-2.2.17.dev1.dist-info/RECORD +763 -0
  688. {quarchpy-2.1.11.dev4.dist-info → quarchpy-2.2.17.dev1.dist-info}/WHEEL +1 -2
  689. quarchpy/.idea/.gitignore +0 -3
  690. quarchpy/.idea/inspectionProfiles/profiles_settings.xml +0 -6
  691. quarchpy/.idea/misc.xml +0 -4
  692. quarchpy/.idea/modules.xml +0 -8
  693. quarchpy/.idea/quarchpy.iml +0 -12
  694. quarchpy/.idea/workspace.xml +0 -146
  695. quarchpy/connection_specific/QPS/License/LGPL.txt +0 -167
  696. quarchpy/connection_specific/QPS/License/Material-Icons.txt +0 -1
  697. quarchpy/connection_specific/QPS/License/NOTICE.txt +0 -143
  698. quarchpy/connection_specific/QPS/License/Netty-license.txt +0 -143
  699. quarchpy/connection_specific/QPS/License/controlsfx-license.txt +0 -26
  700. quarchpy/connection_specific/QPS/License/usb4java-license.txt +0 -167
  701. quarchpy/connection_specific/QPS/qis/License/LGPL.txt +0 -167
  702. quarchpy/connection_specific/QPS/qis/License/NOTICE.txt +0 -143
  703. quarchpy/connection_specific/QPS/qis/qis_lib/CInterface-1.4.jar +0 -0
  704. quarchpy/connection_specific/QPS/qis/qis_lib/CInterface-1.5.01.jar +0 -0
  705. quarchpy/connection_specific/QPS/qis/qis_lib/CInterface-1.5.jar +0 -0
  706. quarchpy/connection_specific/QPS/qis/qis_lib/CInterface-1.6.1.jar +0 -0
  707. quarchpy/connection_specific/QPS/qis/qis_lib/CInterface-1.6.jar +0 -0
  708. quarchpy/connection_specific/QPS/qis/qis_lib/CInterface-1.7.jar +0 -0
  709. quarchpy/connection_specific/QPS/qis/qis_lib/QuarchCommon-0.2.3.jar +0 -0
  710. quarchpy/connection_specific/QPS/qis/qis_lib/QuarchCommon-0.2.4.jar +0 -0
  711. quarchpy/connection_specific/QPS/qis/qis_lib/commons-lang3-3.2.1.jar +0 -0
  712. quarchpy/connection_specific/QPS/qis/qis_lib/libusb4java-1.3.0-darwin-x86-64.jar +0 -0
  713. quarchpy/connection_specific/QPS/qis/qis_lib/libusb4java-1.3.0-linux-aarch64.jar +0 -0
  714. quarchpy/connection_specific/QPS/qis/qis_lib/libusb4java-1.3.0-linux-arm.jar +0 -0
  715. quarchpy/connection_specific/QPS/qis/qis_lib/libusb4java-1.3.0-linux-x86-64.jar +0 -0
  716. quarchpy/connection_specific/QPS/qis/qis_lib/libusb4java-1.3.0-linux-x86.jar +0 -0
  717. quarchpy/connection_specific/QPS/qis/qis_lib/libusb4java-1.3.0-win32-x86-64.jar +0 -0
  718. quarchpy/connection_specific/QPS/qis/qis_lib/libusb4java-1.3.0-win32-x86.jar +0 -0
  719. quarchpy/connection_specific/QPS/qis/qis_lib/netty-all-4.1.43.Final.jar +0 -0
  720. quarchpy/connection_specific/QPS/qis/qis_lib/usb4java-1.3.0.jar +0 -0
  721. quarchpy/connection_specific/QPS/qps.bat +0 -2
  722. quarchpy/connection_specific/QPS/qps.sh +0 -2
  723. quarchpy/connection_specific/QPS/qps_lib/QuarchCommon-0.2.2.jar +0 -0
  724. quarchpy/connection_specific/QPS/qps_lib/QuarchCommon-0.2.3.jar +0 -0
  725. quarchpy/connection_specific/QPS/qps_lib/QuarchCommon-0.2.4.jar +0 -0
  726. quarchpy/connection_specific/QPS/qps_lib/controlsfx-8.40.13.jar +0 -0
  727. quarchpy/connection_specific/QPS/qps_lib/controlsfx-8.40.14.jar +0 -0
  728. quarchpy/connection_specific/QPS/qps_lib/controlsfx-samples-8.40.13.jar +0 -0
  729. quarchpy/connection_specific/QPS/qps_lib/fxsampler-1.0.10.jar +0 -0
  730. quarchpy/connection_specific/QPS/qps_lib/jfxtras-labs-8.0-r6-SNAPSHOT.jar +0 -0
  731. quarchpy/connection_specific/QPS/qps_lib/jfxtras-labs-8.0-r6.jar +0 -0
  732. quarchpy/connection_specific/QPS/qps_lib/netty-all-4.0.37.Final.jar +0 -0
  733. quarchpy/connection_specific/QPS/qps_lib/netty-all-4.1.22.Final.jar +0 -0
  734. quarchpy/connection_specific/QPS/qps_lib/netty-all-4.1.22.Final_2.jar +0 -0
  735. quarchpy/connection_specific/QPS/qps_lib/netty-all-4.1.43.Final.jar +0 -0
  736. quarchpy/connection_specific/QPS/qps_lib/org.eclipse.fx.ide.css.jfx8_1.2.0.201501301049.jar +0 -0
  737. quarchpy/connection_specific/QPS/qps_lib/org.eclipse.fx.ide.css.jfx8_2.4.0.201605112122.jar +0 -0
  738. quarchpy/debug/quarchpy - Shortcut.lnk +0 -0
  739. quarchpy/device/deleteme.py +0 -100
  740. quarchpy-2.1.11.dev4.dist-info/RECORD +0 -489
  741. /quarchpy/connection_specific/QPS/{License → 3rdPartyLicenses}/Material-Icons-license.txt +0 -0
  742. /quarchpy/connection_specific/QPS/DeviceConfig/{QTL1995-02.XML → QTL1995-02.xml} +0 -0
  743. /quarchpy/connection_specific/QPS/DeviceConfig/{QTL1999-02.XML → QTL1999-02.xml} +0 -0
  744. /quarchpy/connection_specific/QPS/DeviceConfig/{QTL2312-01.XML → QTL2312-01.xml} +0 -0
  745. {quarchpy-2.1.11.dev4.dist-info → quarchpy-2.2.17.dev1.dist-info}/top_level.txt +0 -0
@@ -1,379 +1,856 @@
1
+ from __future__ import annotations
2
+ import logging
3
+ logger = logging.getLogger(__name__)
4
+ import time
5
+ from io import StringIO
6
+ from typing_extensions import Optional, Union, List, Any, Literal
7
+ import enum
8
+
9
+ # Third-party imports
10
+ try:
11
+ import pandas as pd
12
+ except ImportError:
13
+ pd = None # type: ignore
14
+
15
+ # Local application imports
1
16
  from quarchpy.device import quarchDevice
2
- from quarchpy.qps import toQpsTimeStamp
3
- import os, time, datetime, sys, logging
17
+ from quarchpy.user_interface.user_interface import requestDialog
4
18
 
5
- if sys.version_info[0] < 3:
6
- from StringIO import StringIO
7
- else:
8
- from io import StringIO
19
+ def qpsNowStr() -> str:
20
+ """
21
+ Gets the current time as milliseconds since the Unix epoch.
9
22
 
10
- current_milli_time = lambda: int (round (time.time() * 1000))
11
- current_second_time = lambda: int (round (time.time()))
23
+ Returns:
24
+ str: The current time as a string representing milliseconds
25
+ since the epoch.
26
+ """
27
+ return str(current_milli_time())
12
28
 
13
- # Using standard Unix time, milliseconds since the epoch (midnight 1 January 1970 UTC)
14
- # Should avoid issues with time zones and summer time correction but the local and host
15
- # clocks should still be synchronised
16
- def qpsNowStr():
17
- return current_milli_time() # datetime supports microseconds
18
29
 
30
+ # --- Main Classes ---
19
31
 
20
32
  class quarchQPS(quarchDevice):
21
- def __init__(self, quarchDevice):
33
+ """
34
+ Represents a Quarch Power Supply (QPS) device, extending quarchDevice.
22
35
 
23
- self.quarchDevice = quarchDevice
24
- self.ConType = quarchDevice.ConType
25
- self.ConString = quarchDevice.ConString
36
+ Handles interaction specific to QPS modules, including stream management.
37
+ """
38
+
39
+ def __init__(self, quarchDevice: quarchDevice):
40
+ """
41
+ Initializes the quarchQPS wrapper using an existing quarchDevice object.
26
42
 
43
+ Args:
44
+ quarchDevice (quarchDevice): An initialized instance of
45
+ the base quarchDevice class containing connection details.
46
+
47
+ Raises:
48
+ AttributeError: If the provided quarchDevice is not a valid QPS connection.
49
+ """
50
+ super().__init__(quarchDevice.ConString, ConType=quarchDevice.ConType)
51
+ self.quarchDevice = quarchDevice
27
52
  self.connectionObj = quarchDevice.connectionObj
28
- self.IP_address = quarchDevice.connectionObj.qps.host
29
- self.port_number = quarchDevice.connectionObj.qps.port
30
53
 
31
- def startStream(self, directory, unserInput=True):
54
+ if not hasattr(self.connectionObj, 'qps'):
55
+ raise AttributeError("The provided quarchDevice is not a valid QPS connection.")
56
+ self.IP_address = self.connectionObj.qps.host
57
+ self.port_number = self.connectionObj.qps.port
58
+
59
+ # --- Public API Methods ---
60
+
61
+ def start_stream(self, directory: str, user_input: bool = True, stream_duration: str = "") -> 'quarchStream':
62
+ """
63
+ Initializes and starts a Quarch data stream.
64
+
65
+ This method creates a quarchStream object, which handles the setup
66
+ and management of the data stream for the QPS application.
67
+
68
+ Args:
69
+ directory (str): The target directory where stream data will be saved.
70
+ user_input (bool, optional): Controls user interaction on failure.
71
+ If True (default), prompts the user. If False, raises an
72
+ Exception on failure.
73
+ stream_duration (str, optional): Defines the requested duration for the
74
+ stream. An empty string (default) signifies an indefinite stream.
75
+
76
+ Returns:
77
+ quarchStream: An instance of the quarchStream class representing and
78
+ managing the active stream.
32
79
  """
33
- directory - str - desired stream dir
34
- 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).
80
+ return quarchStream(self, directory, user_input, stream_duration)
81
+
82
+ def startStream(self, directory: str, unserInput: bool = True, streamDuration: str = "") -> 'quarchStream':
35
83
  """
36
- time.sleep(1) #TODO remove this sleep once script->QPS timeing issue resolved. This works fine in the meantime
37
- return quarchStream(self.quarchDevice, directory, unserInput)
84
+ DEPRECATED: Use start_stream instead.
38
85
 
86
+ Args:
87
+ directory (str): The target directory where stream data will be saved.
88
+ unserInput (bool, optional): Controls user interaction on failure.
89
+ streamDuration (str, optional): Defines the requested duration.
39
90
 
91
+ Returns:
92
+ quarchStream: An instance of the quarchStream class.
93
+ """
94
+ return self.start_stream(directory, unserInput, streamDuration)
40
95
 
41
-
42
96
 
43
97
  class quarchStream:
44
- def __init__(self, quarchQPS, directory, unserInput=True):
98
+ """
99
+ Manages an active data stream from a Quarch QPS device.
100
+
101
+ Instantiation automatically attempts to start the stream. Provides methods to
102
+ control and monitor the stream.
103
+ """
104
+
105
+ def __init__(self, quarchQPS: quarchQPS, directory: str, unserInput: bool = True, streamDuration: str = ""):
106
+ """
107
+ Initializes and attempts to start a data stream from the connected device.
108
+
109
+ Args:
110
+ quarchQPS (quarchQPS): The quarchQPS object to stream from.
111
+ directory (str): The target directory for the stream data.
112
+ unserInput (bool, optional): Controls user interaction if the initial
113
+ stream start command fails. Defaults to True.
114
+ streamDuration (str, optional): Requested stream duration. Defaults to "".
115
+
116
+ Raises:
117
+ Exception: If starting the stream fails and `unserInput` is False.
118
+ """
45
119
  self.connectionObj = quarchQPS.connectionObj
46
- self.IP_address = quarchQPS.connectionObj.qps.host
47
- self.port_number = quarchQPS.connectionObj.qps.port
120
+ self.IP_address = quarchQPS.IP_address
121
+ self.port_number = quarchQPS.port_number
48
122
  self.ConString = quarchQPS.ConString
49
123
  self.ConType = quarchQPS.ConType
50
- time.sleep(1)
51
- response = self.startQPSStream(directory)
52
- if not "fail:" in response.lower():
53
- return
54
- else:
124
+
125
+ response = self.startQPSStream(directory, streamDuration)
126
+ if "fail:" in response.lower():
55
127
  if unserInput is False:
56
128
  raise Exception(response)
57
129
  else:
58
- self.failCheck(response)
130
+ self.failCheck(response, streamDuration)
131
+
132
+ # --- Public API Methods ---
133
+
134
+ def start_qps_stream(self, new_directory: str, stream_duration: str = "") -> str:
135
+ """
136
+ Sends the command to start the QPS stream.
137
+
138
+ Args:
139
+ new_directory (str): The path for the stream data.
140
+ stream_duration (str, optional): The duration for the stream. Defaults to "".
59
141
 
60
- def startQPSStream(self, newDirectory):
61
- '''STARTS the stream '''
62
- response = self.connectionObj.qps.sendCmdVerbose("$start stream \"" + str(newDirectory)+"\"")
142
+ Returns:
143
+ str: The response from the QPS system.
144
+ """
145
+ command = f'$start stream "{new_directory}" {stream_duration}'.strip()
146
+ response = self.connectionObj.qps.sendCmdVerbose(command)
147
+ if "Error" in response:
148
+ logger.debug("Initial start stream command failed with 'Error', retrying once.")
149
+ response = self.connectionObj.qps.sendCmdVerbose(command)
63
150
  return response
64
151
 
65
- def failCheck(self, response):
66
- ''' handles failed starting of stream that requires input from user to fix.'''
152
+ def startQPSStream(self, newDirectory: str, streamDuration: str = "") -> str:
153
+ """
154
+ DEPRECATED: Use start_qps_stream instead.
155
+
156
+ Args:
157
+ newDirectory (str): The path to the directory where the stream data should be saved.
158
+ streamDuration (str, optional): The duration for which the stream should run.
159
+
160
+ Returns:
161
+ str: The response message from the QPS system.
162
+ """
163
+ return self.start_qps_stream(newDirectory, streamDuration)
164
+
165
+ def fail_check(self, response: str, stream_duration: str) -> str:
166
+ """
167
+ Handles recoverable failures during stream startup.
168
+
169
+ Currently handles "Directory already exists" by prompting for a new name.
170
+
171
+ Args:
172
+ response (str): The failure response message from the server.
173
+ stream_duration (str): The stream duration, for retrying.
174
+
175
+ Returns:
176
+ str: The successful response after a retry.
177
+
178
+ Raises:
179
+ Exception: If the failure is not a known, handled type.
180
+ """
67
181
  while "fail:" in response.lower():
68
182
  if "Fail: Directory already exists" in response:
69
- print (response)
70
- print("Please enter a new file name:")
71
- if sys.version_info.major==3:
72
- newDir = input()
73
- else:
74
- newDir = raw_input()
75
- response = self.startQPSStream( newDir)
76
- else: # If its a failure we don't know how to handle.
77
- raise Exception(response)
183
+ new_dir = requestDialog(message=f"{response}\nPlease enter a new file name:")
184
+ response = self.start_qps_stream(new_dir, stream_duration)
185
+ else:
186
+ raise Exception(f"Unhandled QPS stream start failure: {response}")
78
187
  return response
79
188
 
80
- def get_stats(self, format="df"):
189
+ def failCheck(self, response: str, streamDuration: str) -> str:
190
+ """
191
+ DEPRECATED: Use fail_check instead.
192
+
193
+ Args:
194
+ response (str): The response message from a stream start attempt.
195
+ streamDuration (str): The duration for the stream, needed for retry attempts.
196
+
197
+ Returns:
198
+ str: The successful response message after a retry.
199
+
200
+ Raises:
201
+ Exception: If the response contains an unhandled failure.
202
+ """
203
+ return self.fail_check(response, streamDuration)
204
+
205
+ def get_stats(self, format: str = "df") -> Union[pd.DataFrame, List[List[str]], None]:
81
206
  """
82
- Returns the QPS annotation statistics grid information as a pandas dataframe object
207
+ Retrieves statistics from the QPS device.
208
+
209
+ Args:
210
+ format (str, optional): The desired output format ("df" for pandas
211
+ DataFrame, "list" for list of lists). Defaults to "df".
212
+
213
+ Returns:
214
+ Union[pd.DataFrame, List[List[str]], None]: Statistics data in the
215
+ specified format, or None if pandas is required but not found.
83
216
 
84
- Returns
85
- -------
86
- df = : dataframe
87
- The response text from QPS. If successful "ok. Saving stats to : file_name" otherwise returns the exception thrown
217
+ Raises:
218
+ Exception: If the QPS command fails.
88
219
  """
89
220
  command_response = self.connectionObj.qps.sendCmdVerbose("$get stats", timeout=60).strip()
90
221
  if command_response.startswith("Fail"):
91
222
  raise Exception(command_response)
92
223
 
93
224
  if format == "df":
94
- try:
95
- import warnings
96
- warnings.simplefilter(action='ignore', category=FutureWarning)
97
- import pandas as pd
98
- pd.set_option('display.max_columns', None)
99
- pd.set_option('display.width', 1024)
100
- except Exception as e:
101
- logging.error(e)
102
- logging.warning("pandas not imported correctly. Continuing")
103
- pass
225
+ if pd is None:
226
+ logger.error("Pandas is not installed, cannot return DataFrame.")
227
+ return None
228
+
104
229
  test_data = StringIO(command_response)
105
- retVal = pd.read_csv(test_data, sep=",", header=[0, 1], error_bad_lines=False)
106
- elif format == "list":
107
- retVal = []
108
- for line in command_response.replace("\r\n","\n").split("\n"):
109
- row = []
110
- for element in line.split(","):
111
- row.append(element)
112
- retVal.append(row)
113
230
 
114
- return retVal
231
+ df = pd.read_csv(test_data, sep=",", header=[0, 1], on_bad_lines="skip")
115
232
 
233
+ return df
116
234
 
117
- def stats_to_CSV(self, file_name=""):
118
- """
119
- Saves the statistics grid to a csv file
235
+ elif format == "list":
236
+ ret_val = []
237
+ for line in command_response.replace("\r\n", "\n").split("\n"):
238
+ row = [element for element in line.split(",")]
239
+ ret_val.append(row)
240
+ return ret_val
120
241
 
121
- Parameters
122
- ----------
123
- file-name= : str, optional
124
- The absolute path of the file you would like to save the csv to. If left empty then a filename will be give.
125
- Default location is the path of the executable.
126
- Returns
127
- -------
128
- command_response : str or None
242
+ return None
129
243
 
130
- The response text from QPS. If successful "ok. Saving stats to : file_name" otherwise returns the exception thrown
244
+ def stats_to_csv(self, file_name: str = "", poll_till_complete: bool = False,
245
+ check_interval: float = 0.5, timeout: int = 60) -> str:
131
246
  """
132
- command_response = self.connectionObj.qps.sendCmdVerbose("$stats to csv \""+file_name+"\"", timeout=60)
247
+ Commands the QPS device to save its current statistics to a CSV file.
248
+
249
+ Args:
250
+ file_name (str, optional): Absolute path for the CSV file on the QPS
251
+ device's filesystem. Defaults to "".
252
+ poll_till_complete (bool, optional): If True, waits for the export
253
+ to finish. Defaults to False.
254
+ check_interval (float, optional): Seconds between status checks when
255
+ polling. Defaults to 0.5.
256
+ timeout (int, optional): Max seconds to wait for polling to complete.
257
+ Defaults to 60.
258
+
259
+ Returns:
260
+ str: The initial response from the QPS device.
261
+
262
+ Raises:
263
+ Exception: If the initial QPS command fails.
264
+ TimeoutError: If polling is enabled and times out.
265
+ """
266
+ cmd = f'$stats to csv "{file_name}"'
267
+ command_response = self.connectionObj.qps.sendCmdVerbose(cmd, timeout=60)
268
+
133
269
  if command_response.startswith("Fail"):
134
270
  raise Exception(command_response)
271
+
272
+ if poll_till_complete:
273
+ start_time = time.monotonic()
274
+ while check_export_status(self.get_stats_export_status()):
275
+ if (time.monotonic() - start_time) > timeout:
276
+ raise TimeoutError(f"QPS CSV Export of stats timed out after {timeout} seconds")
277
+ time.sleep(check_interval)
278
+
135
279
  return command_response
136
280
 
137
- def get_custom_stats_range(self, start_time, end_time):
138
- """
139
- Returns the QPS statistics information over a specific time ignoring any set annotations.
140
-
141
- Parameters
142
- ----------
143
- start_time = : str
144
- The time in seconds you would like the stats to start this can be in integer or string format.
145
- or using the following format to specify daysDhours:minutes:seconds.milliseconds
146
- xxxDxx:xx:xx.xxxx
147
- end_time = : str
148
- The time in seconds you would like the stats to stop this can be in integer or string format
149
- or using the following format to specify daysDhours:minutes:seconds.milliseconds
150
- xxxDxx:xx:xx.xxxx
151
- Returns
152
- -------
153
- df = : dataframe
154
- The response text from QPS. If successful "ok. Saving stats to : file_name" otherwise returns the exception thrown
281
+ def stats_to_CSV(self, file_name: str = "", poll_till_complete: bool = False,
282
+ check_interval: float = 0.5, timeout: int = 60) -> str:
155
283
  """
156
- try:
157
- import warnings
158
- warnings.simplefilter(action='ignore', category=FutureWarning)
159
- import pandas as pd
160
- pd.set_option('max_columns', None)
161
- pd.set_option('display.width', 1024)
162
- except:
163
- logging.warning("pandas not imported correctly")
164
- pass
165
- command_response = self.connectionObj.qps.sendCmdVerbose("$get custom stats range " + str(start_time)+ " " + str(end_time), timeout=60)
284
+ DEPRECATED: Use stats_to_csv instead.
285
+
286
+ Args:
287
+ file_name (str, optional): The absolute path for the CSV file. Defaults to "".
288
+ poll_till_complete (bool, optional): If True, polls until the export is
289
+ finished. Defaults to False.
290
+ check_interval (float, optional): Time in seconds between status checks
291
+ when polling. Defaults to 0.5.
292
+ timeout (int, optional): Max time in seconds to wait for polling. Defaults to 60.
293
+
294
+ Returns:
295
+ str: The initial response message from the QPS device.
296
+ """
297
+ return self.stats_to_csv(file_name, poll_till_complete, check_interval, timeout)
298
+
299
+ def get_custom_stats_range(self, start_time: Union[int, str], end_time: Union[int, str]) -> Optional[pd.DataFrame]:
300
+ """
301
+ Retrieves statistics from the QPS device for a specified time range.
302
+
303
+ Args:
304
+ start_time (Union[int, str]): The start time for stats calculation.
305
+ end_time (Union[int, str]): The end time for stats calculation.
306
+
307
+ Returns:
308
+ Optional[pd.DataFrame]: A DataFrame containing the stats.
309
+
310
+ Raises:
311
+ ImportError: If the pandas library is not installed.
312
+ Exception: If the QPS command fails or data parsing fails.
313
+ """
314
+ if pd is None:
315
+ logger.warning("pandas not imported correctly. Required for get_custom_stats_range.")
316
+ raise ImportError("pandas library is required for get_custom_stats_range")
317
+
318
+ command_response = self.connectionObj.qps.sendCmdVerbose(
319
+ f"$get custom stats range {start_time} {end_time}", timeout=60)
320
+
166
321
  if command_response.startswith("Fail"):
167
322
  raise Exception(command_response)
323
+
168
324
  test_data = StringIO(command_response)
169
325
  try:
170
- df = pd.read_csv(test_data, sep=",", header=[0,1])
326
+ df = pd.read_csv(test_data, sep=",", header=[0, 1], on_bad_lines="skip")
171
327
  except Exception as e:
172
- logging.error("Unable to create pandas data frame from command response :" + str(command_response))
328
+ logger.error(f"Unable to create pandas data frame from command response: {command_response}")
173
329
  raise e
174
330
  return df
175
331
 
176
- def takeSnapshot(self):
332
+ def take_snapshot(self) -> str:
177
333
  """
178
- Triggers QPS take snapshot function and saves it in the streams directory.
334
+ Triggers the QPS device to capture an immediate snapshot.
335
+
336
+ Returns:
337
+ str: The response from the QPS device.
338
+
339
+ Raises:
340
+ Exception: If the command fails.
179
341
  """
180
342
  command_response = self.connectionObj.qps.sendCmdVerbose("$take snapshot")
181
343
  if command_response.startswith("Fail"):
182
344
  raise Exception(command_response)
183
- return(command_response)
345
+ return command_response
184
346
 
185
- def getStreamState(self):
347
+ def takeSnapshot(self) -> str:
186
348
  """
187
- Askes QPS for the stream status.
188
- QPS stream state != Module stream state.
189
- This is different from "rec stream?" cmd to the module as it will return "streaming" when the module is nolonger streaming but QPS is still receiveing stream data from the module.
190
- ei the module has stopped streaming but is emptying the stream buffer.
349
+ DEPRECATED: Use take_snapshot instead.
350
+
351
+ Returns:
352
+ str: The response message from the QPS device.
353
+ """
354
+ return self.take_snapshot()
355
+
356
+ def get_stream_state(self) -> str:
357
+ """
358
+ Queries the QPS application for its current stream processing state.
359
+
360
+ Returns:
361
+ str: The stream state as reported by the QPS application.
362
+
363
+ Raises:
364
+ Exception: If the command fails.
191
365
  """
192
366
  command_response = self.connectionObj.qps.sendCmdVerbose("$stream state")
193
367
  if command_response.startswith("Fail"):
194
368
  raise Exception(command_response)
195
- return(command_response)
196
-
197
- def addAnnotation(self, title, annotationTime = 0, extraText="", yPos="", titleColor ="", annotationColor = "", annotationType = "", annotationGroup =""):
198
- """
199
- Adds a custom annotation to stream with given parameters.
200
-
201
- Parameters
202
- ----------
203
- title= : str
204
- The title appears next to the annotation in the stream
205
- extraText= : str, optional
206
- The additional text that can be viewed when selecting the annotation
207
- yPos : str, optional
208
- The percetange of how high up the screen the annotation should appear 0 is the bottom and 100 the top
209
- titleColor : str, optional
210
- The color of the text next to the annotation in hex format 000000 to FFFFFF
211
- annotationColor : str, optional
212
- The color of the annotation marker in hex format 000000 to FFFFFF
213
- annotationGroup : str, optional
214
- The group the annotation belongs to
215
- annotationTime : int, optional
216
- The time in milliseconds after the start of the stream at which the annotation should be placed. 0 will plot the annotation live at the most recent sample
217
-
218
- Returns
219
- -------
220
- command_response : str or None
221
-
222
- The response text from QPS. "ok" if annotation successfully added
223
- """
224
- annotationTime = str(annotationTime)
225
- annotationType = annotationType.lower()
226
- if annotationType == "" or annotationType == "annotation":
227
- annotationType = "annotate"
228
- elif annotationType == "comment":
229
- pass # already in the correct format for command
230
- else:
231
- retString = "Fail annotationType must be 'annotation' or 'comment'"
232
- logging.warning(retString)
233
- return retString
369
+ return command_response
234
370
 
235
- # If the function has already been passed the XML string to give to QPS
236
- if ("<<" in title.replace(" ", "")):
237
- annotationString = str(title)
238
- else:
239
- annotationString = "<"
371
+ def getStreamState(self) -> str:
372
+ """
373
+ DEPRECATED: Use get_stream_state instead.
240
374
 
241
- if annotationTime == "0":
242
- # Use current time
243
- annotationTime = qpsNowStr()
244
- elif(annotationTime.startswith("e")):
245
- pass
246
- else:
247
- # Convert timestamp to QPS format
248
- annotationTime = toQpsTimeStamp(annotationTime)
249
-
250
- if title != "":
251
- annotationString += "<text>" + str(title) + "</text>"
252
- if extraText != "":
253
- annotationString += "<extraText>" + str(extraText) + "</extraText>"
254
- if yPos != "":
255
- annotationString += "<yPos>" + str(yPos) + "</yPos>"
256
- if titleColor != "":
257
- annotationString += "<textColor>" + str(titleColor) + "</textColor>"
258
- if annotationColor != "":
259
- annotationString += "<color>" + str(annotationColor) + "</color>"
260
- if annotationGroup != "":
261
- annotationString += "<userType>" + str(annotationGroup) + "</userType>"
262
- annotationString += ">"
263
-
264
- # command is sent on newline so \n needs to be chnaged to \\n which is changed back just before printing in qps.
265
- annotationString = annotationString.replace("\n", "\\n")
266
- logging.debug("Time sending to QPS:" + str(annotationTime))
267
- return self.connectionObj.qps.sendCmdVerbose("$" +annotationType+" "+str(annotationTime)+" "+annotationString)
268
-
269
- def addComment(self, title, commentTime = 0, extraText="", yPos="", titleColor ="", commentColor = "", annotationType = "", annotationGroup =""):
270
- #Comments are just annotations that do not affect the statistics grid.
271
- #This function was kept to be backwards compatible and is a simple pass through to add annotation.
272
- if annotationType == "":
273
- annotationType = "comment"
274
- return self.addAnnotation(title = title, annotationTime=commentTime, extraText=extraText, yPos=yPos, titleColor=titleColor, annotationColor=commentColor, annotationType=annotationType, annotationGroup=annotationGroup)
275
-
276
- def saveCSV(self,filePath, linesPerFile=None, cr=None, delimiter=None, timeout=60):
277
- """
278
- Saves the stream to csv file at specified location
279
-
280
- Parameters
281
- ----------
282
- filePath= : str
283
- The file path that ou would like the CSV file saved to.
284
- linesPerFile= : str, optional
285
- The number of lines per CSV file. Can be any int number or "all"
286
- cr : bool, optional
287
- Whether the end of line terminator should include a carriage return.
288
- delimiter : str, optional
289
- The delimiter to be used by the csv file.
290
- timeout : str, otptional
291
- The timeout to wait for a response from QPS
292
-
293
- Returns
294
- -------
295
- command_response : str or None
296
- The response text from QPS. "ok" if command is successful or the stack trace if exception thrown
375
+ Returns:
376
+ str: The stream state reported by the QPS application.
377
+ """
378
+ return self.get_stream_state()
379
+
380
+ def add_annotation(self, title: str, annotation_time: Union[int, str] = 0, extra_text: str = "",
381
+ y_pos: Union[int, str] = "",
382
+ title_color: str = "", annotation_color: str = "", annotation_type: str = "annotate",
383
+ time_format: str = "unix") -> str:
384
+ """
385
+ Adds a custom annotation marker to the active QPS stream.
386
+
387
+ Args:
388
+ title (str): The primary text label for the annotation.
389
+ annotation_time (Union[int, str], optional): When the annotation appears. Defaults to 0 ("now").
390
+ extra_text (str, optional): Additional text for the annotation. Defaults to "".
391
+ y_pos (Union[int, str], optional): Vertical position (0-100). Defaults to "".
392
+ title_color (str, optional): Hex color for the title. Defaults to "".
393
+ annotation_color (str, optional): Hex color for the marker. Defaults to "".
394
+ annotation_type (str, optional): "annotate" or "comment". Defaults to "annotate".
395
+ time_format (str, optional): "unix" or "elapsed". Defaults to "unix".
396
+
397
+ Returns:
398
+ str: The response message from the QPS device.
399
+ """
400
+ time_val = str(annotation_time)
401
+ if any(c.isalpha() for c in time_val):
402
+ time_format = "elapsed"
403
+ if time_val.startswith("e"):
404
+ time_val = time_val[1:] + "s"
405
+ elif time_val == "0":
406
+ time_val = qpsNowStr()
407
+ time_format = "unix"
408
+
409
+ title = title.replace("\n", "\\n")
410
+ extra_text = extra_text.replace("\n", "\\n")
411
+
412
+ cmd = f'$stream annotation add time={time_val} text="{title}"'
413
+ if extra_text:
414
+ cmd += f' extraText="{extra_text}"'
415
+ if y_pos != "":
416
+ cmd += f' yPos={y_pos}'
417
+ if annotation_type:
418
+ cmd += f' type={annotation_type}'
419
+ if annotation_color:
420
+ cmd += f' colour={annotation_color}'
421
+ if title_color:
422
+ cmd += f' textColour={title_color}'
423
+ if time_format:
424
+ cmd += f' timeFormat={time_format}'
425
+
426
+ return self.connectionObj.qps.sendCmdVerbose(cmd)
427
+
428
+ def addAnnotation(self, title: str, annotationTime: Union[int, str] = 0, extraText: str = "",
429
+ yPos: Union[int, str] = "",
430
+ titleColor: str = "", annotationColor: str = "", annotationType: str = "",
431
+ annotationGroup: str = "", timeFormat: str = "unix") -> str:
432
+ """
433
+ DEPRECATED: Use add_annotation instead.
434
+
435
+ Args:
436
+ title (str): The primary text label for the annotation.
437
+ annotationTime (Union[int, str], optional): Timestamp. Defaults to 0 ("now").
438
+ extraText (str, optional): Additional text. Defaults to "".
439
+ yPos (Union[int, str], optional): Vertical position (0-100). Defaults to "".
440
+ titleColor (str, optional): Hex color for the title. Defaults to "".
441
+ annotationColor (str, optional): Hex color for the marker. Defaults to "".
442
+ annotationType (str, optional): "annotate" or "comment". Defaults to "".
443
+ annotationGroup (str, optional): Not used. Defaults to "".
444
+ timeFormat (str, optional): "unix" or "elapsed". Defaults to "unix".
445
+
446
+ Returns:
447
+ str: The response message from the QPS device.
448
+ """
449
+ current_type = annotationType.lower()
450
+ if current_type == "" or current_type == "annotation":
451
+ current_type = "annotate"
452
+
453
+ return self.add_annotation(title, annotation_time=annotationTime, extra_text=extraText, y_pos=yPos,
454
+ title_color=titleColor, annotation_color=annotationColor,
455
+ annotation_type=current_type, time_format=timeFormat)
456
+
457
+ def add_comment(self, title: str, comment_time: Union[int, str] = 0, **kwargs: Any) -> str:
458
+ """
459
+ Adds a 'comment' type annotation to the QPS stream.
460
+
461
+ This is a convenience wrapper for `add_annotation` that sets the type to 'comment'.
462
+
463
+ Args:
464
+ title (str): The text label for the comment.
465
+ comment_time (Union[int, str], optional): The timestamp. Defaults to 0.
466
+ **kwargs: Other arguments accepted by `add_annotation`.
467
+
468
+ Returns:
469
+ str: The response message from the QPS device.
470
+ """
471
+ kwargs['annotation_type'] = 'comment'
472
+ return self.add_annotation(title, annotation_time=comment_time, **kwargs)
473
+
474
+ def addComment(self, title: str, commentTime: Union[int, str] = 0, extraText: str = "", yPos: Union[int, str] = "",
475
+ titleColor: str = "", commentColor: str = "", annotationType: str = "",
476
+ annotationGroup: str = "", timeFormat: str = "unix") -> str:
477
+ """
478
+ DEPRECATED: Use add_comment instead.
479
+
480
+ Args:
481
+ title (str): The text label for the comment.
482
+ commentTime (Union[int, str], optional): The timestamp. Defaults to 0.
483
+ extraText (str, optional): Additional text. Defaults to "".
484
+ yPos (Union[int, str], optional): Vertical position (0-100). Defaults to "".
485
+ titleColor (str, optional): Hex color for the title. Defaults to "".
486
+ commentColor (str, optional): Hex color for the comment marker. Defaults to "".
487
+ annotationType (str, optional): Overridden to 'comment'. Defaults to "".
488
+ annotationGroup (str, optional): Not used. Defaults to "".
489
+ timeFormat (str, optional): "unix" or "elapsed". Defaults to "unix".
490
+
491
+ Returns:
492
+ str: The response message from the QPS device.
493
+ """
494
+ return self.add_comment(title, comment_time=commentTime, extraText=extraText, yPos=yPos,
495
+ titleColor=titleColor, commentColor=commentColor,
496
+ timeFormat=timeFormat)
497
+
498
+ def save_csv(self, file_path: str, lines_per_file: Optional[Union[int, str]] = None, use_cr: Optional[bool] = None,
499
+ delimiter: Optional[str] = None, timeout: int = 180, poll_till_complete: bool = False,
500
+ check_interval: float = 0.5) -> str:
501
+ """
502
+ Commands the QPS device to save the stream data to a CSV file.
503
+
504
+ Args:
505
+ file_path (str): Target file path on the QPS device's filesystem.
506
+ lines_per_file (Optional[Union[int, str]], optional): Max lines per file. Defaults to None.
507
+ use_cr (Optional[bool], optional): True for CRLF, False for LF. Defaults to None.
508
+ delimiter (Optional[str], optional): Field delimiter for the CSV. Defaults to None.
509
+ timeout (int, optional): Timeout in seconds. Defaults to 180.
510
+ poll_till_complete (bool, optional): If True, waits for export to finish. Defaults to False.
511
+ check_interval (float, optional): Seconds between status checks when polling. Defaults to 0.5.
512
+
513
+ Returns:
514
+ str: The initial response from the QPS device.
515
+
516
+ Raises:
517
+ TimeoutError: If polling is enabled and the export does not complete in time.
297
518
  """
298
519
  args = ""
520
+ if lines_per_file is not None:
521
+ args += f" -l{lines_per_file}"
522
+ if use_cr is not None:
523
+ args += " -cyes" if use_cr else " -cno"
524
+ if delimiter is not None:
525
+ args += f" -s{delimiter}"
526
+
527
+ command = f'$save csv "{file_path}" {args}'.strip()
528
+ command_response = self.connectionObj.qps.sendCmdVerbose(command, timeout=timeout)
529
+
530
+ if poll_till_complete:
531
+ start_time = time.monotonic()
532
+ while check_export_status(self.get_stream_export_status()):
533
+ if (time.monotonic() - start_time) > timeout:
534
+ raise TimeoutError(f"Stream export to CSV timed out after {timeout} seconds")
535
+ logger.debug("Waiting for stream export to complete...")
536
+ time.sleep(check_interval)
299
537
 
300
- if linesPerFile != None:
301
- args +=" -l" + str(linesPerFile)
302
- if cr !=None:
303
- if cr is True:
304
- args+= " -cyes"
305
- elif cr is False:
306
- args += " -cno"
307
- if delimiter !=None:
308
- args += " -s"+delimiter
538
+ return command_response
539
+
540
+ def saveCSV(self, filePath: str, linesPerFile: Optional[Union[int, str]] = None, cr: Optional[bool] = None,
541
+ delimiter: Optional[str] = None, timeout: int = 180, pollTillComplete: bool = False,
542
+ checkInterval: float = 0.5) -> str:
543
+ """
544
+ DEPRECATED: Use save_csv instead.
545
+
546
+ Args:
547
+ filePath (str): The target file path on the QPS device's filesystem.
548
+ linesPerFile (Optional[Union[int, str]], optional): Max lines per file. Defaults to None.
549
+ cr (Optional[bool], optional): True for CRLF, False for LF line endings. Defaults to None.
550
+ delimiter (Optional[str], optional): Field delimiter for the CSV. Defaults to None.
551
+ timeout (int, optional): Timeout in seconds. Defaults to 180.
552
+ pollTillComplete (bool, optional): If True, waits for export to finish. Defaults to False.
553
+ checkInterval (float, optional): Seconds between status checks when polling. Defaults to 0.5.
554
+
555
+ Returns:
556
+ str: The initial response from the QPS device.
557
+ """
558
+ return self.save_csv(filePath, linesPerFile, cr, delimiter, timeout, pollTillComplete, checkInterval)
309
559
 
310
- #, filePath, linesPerFile, cr, delimiter
311
- return self.connectionObj.qps.sendCmdVerbose("$save csv \"" + filePath + "\" " + args, timeout=timeout)
560
+ def create_channel(self, channel_name: str, channel_group: str, base_units: str, use_prefix: bool) -> str:
561
+ """
562
+ Creates a new custom data channel on the QPS device.
312
563
 
313
- def createChannel(self, channelName, channelGroup, baseUnits, usePrefix):
314
- #Conditions to convert false / true inputs to specification input
315
- if usePrefix == False:
316
- usePrefix = "no"
317
- if usePrefix == True:
318
- usePrefix = "yes"
564
+ Args:
565
+ channel_name (str): The name for the new channel.
566
+ channel_group (str): The group to associate the channel with (e.g., "Voltage").
567
+ base_units (str): The fundamental unit for the channel (e.g., "V", "A").
568
+ use_prefix (bool): If True, allows channel prefixes (e.g., 'm' for milli).
319
569
 
320
- return self.connectionObj.qps.sendCmdVerbose("$create channel " + channelName + " " + channelGroup + " " + baseUnits + " " + usePrefix)
570
+ Returns:
571
+ str: The response from the QPS device.
572
+ """
573
+ prefix_str = "yes" if use_prefix else "no"
574
+ command = f"$create channel {channel_name} {channel_group} {base_units} {prefix_str}"
575
+ return self.connectionObj.qps.sendCmdVerbose(command)
321
576
 
322
- def hideChannel(self, channelSpecifier):
323
- return self.connectionObj.qps.sendCmdVerbose("$hide channel " + channelSpecifier)
577
+ def createChannel(self, channelName: str, channelGroup: str, baseUnits: str, usePrefix: bool) -> str:
578
+ """
579
+ DEPRECATED: Use create_channel instead.
324
580
 
325
- def showChannel(self, channelSpecifier):
326
- return self.connectionObj.qps.sendCmdVerbose("$show channel " + channelSpecifier)
581
+ Args:
582
+ channelName (str): The name for the new channel.
583
+ channelGroup (str): The group to associate the channel with.
584
+ baseUnits (str): The fundamental unit for the channel.
585
+ usePrefix (bool): If True, allows channel prefixes.
327
586
 
328
- def myChannels(self):
329
- return self.connectionObj.qps.sendCmdVerbose("$channels")
587
+ Returns:
588
+ str: The response message from the QPS device.
589
+ """
590
+ return self.create_channel(channelName, channelGroup, baseUnits, usePrefix)
591
+
592
+ def hide_channel(self, channel_specifier: str) -> str:
593
+ """
594
+ Hides a specified channel from the QPS stream view.
595
+
596
+ Args:
597
+ channel_specifier (str): The identifier of the channel to hide (e.g., "5v:voltage").
598
+
599
+ Returns:
600
+ str: The response from the QPS device.
601
+ """
602
+ return self.connectionObj.qps.sendCmdVerbose(f"$hide channel {channel_specifier}")
603
+
604
+ def hideChannel(self, channelSpecifier: str) -> str:
605
+ """
606
+ DEPRECATED: Use hide_channel instead.
607
+
608
+ Args:
609
+ channelSpecifier (str): The identifier of the channel to hide.
610
+
611
+ Returns:
612
+ str: The response message from the QPS device.
613
+ """
614
+ return self.hide_channel(channelSpecifier)
615
+
616
+ def show_channel(self, channel_specifier: str) -> str:
617
+ """
618
+ Shows (un-hides) a specified channel in the QPS stream view.
330
619
 
331
- def channels(self):
620
+ Args:
621
+ channel_specifier (str): The identifier of the channel to show.
622
+
623
+ Returns:
624
+ str: The response from the QPS device.
625
+ """
626
+ return self.connectionObj.qps.sendCmdVerbose(f"$show channel {channel_specifier}")
627
+
628
+ def showChannel(self, channelSpecifier: str) -> str:
629
+ """
630
+ DEPRECATED: Use show_channel instead.
631
+
632
+ Args:
633
+ channelSpecifier (str): The identifier of the channel to show.
634
+
635
+ Returns:
636
+ str: The response message from the QPS device.
637
+ """
638
+ return self.show_channel(channelSpecifier)
639
+
640
+ def channels(self) -> List[str]:
641
+ """
642
+ Retrieves the list of available channels from QPS, split into a list of strings.
643
+
644
+ Returns:
645
+ list[str]: A list where each element is a channel identifier string.
646
+ """
332
647
  return self.connectionObj.qps.sendCmdVerbose("$channels").splitlines()
333
-
334
- def stopStream(self):
335
- return self.connectionObj.qps.sendCmdVerbose("$stop stream")
336
-
337
- def stopStreamAndAllowBufferToEmpty(self, checkInterval=0.5):
338
- self.stopStream()
339
- streamState = self.getStreamState().lower()
340
- while "running" in streamState:
341
- logging.debug("Stream buffer still emptying: "+ streamState)
342
- time.sleep(checkInterval)
343
- streamState = self.getStreamState().lower()
344
- logging.debug("QPS no longer Streaming: " + streamState)
345
-
346
- def hideAllDefaultChannels(self):
347
-
348
- #TODO query QPS / Device for all channel names and hide all of them
349
- #All Default Channels
350
- self.hideChannel ("3.3v:voltage")
351
- self.hideChannel ("3v3:voltage")
352
- self.hideChannel ("5v:voltage")
353
- self.hideChannel ("12v:voltage")
354
- self.hideChannel ("3v3:current")
355
- self.hideChannel ("3.3v:current")
356
- self.hideChannel ("5v:current")
357
- self.hideChannel ("12v:current")
358
- self.hideChannel ("3v3:power")
359
- self.hideChannel ("3.3v:power")
360
- self.hideChannel ("5v:power")
361
- self.hideChannel ("12v:power")
362
- self.hideChannel ("tot:power")
363
- #Default PAM channels
364
- self.hideChannel ("perst#:digital")
365
- self.hideChannel ("wake#:digital")
366
- self.hideChannel ("lkreq#:digital")
367
- self.hideChannel ("smclk:digital")
368
- self.hideChannel ("smdat:digital")
369
-
370
- #function to add a data point the the stream
371
- #time value will default to current time if none passed
372
- def addDataPoint(self, channelName, groupName, dataValue, dataPointTime = 0):
373
- if dataPointTime == 0:
374
- dataPointTime = qpsNowStr()
648
+
649
+ def myChannels(self) -> str:
650
+ """
651
+ DEPRECATED: Use channels instead.
652
+
653
+ Retrieves the list of available channels from QPS as a single raw string.
654
+
655
+ Returns:
656
+ str: The raw response string from the QPS '$channels' command.
657
+ """
658
+ return self.connectionObj.qps.sendCmdVerbose("$channels")
659
+
660
+ def hide_all_default_channels(self) -> None:
661
+ """
662
+ Hides a predefined list of common default QPS/PAM channels.
663
+
664
+ Note:
665
+ This list is hardcoded and might not be exhaustive for all hardware.
666
+ """
667
+ default_channels = [
668
+ "3.3v:voltage", "3v3:voltage", "5v:voltage", "12v:voltage",
669
+ "3.3v:current", "3v3:current", "5v:current", "12v:current",
670
+ "3.3v:power", "3v3:power", "5v:power", "12v:power", "tot:power",
671
+ "perst#:digital", "wake#:digital", "clkreq#:digital",
672
+ "smclk:digital", "smdat:digital"
673
+ ]
674
+ for channel in default_channels:
675
+ try:
676
+ self.hide_channel(channel)
677
+ except Exception as e:
678
+ logger.warning(f"Failed to hide default channel '{channel}': {e}")
679
+
680
+ def hideAllDefaultChannels(self) -> None:
681
+ """
682
+ DEPRECATED: Use hide_all_default_channels instead.
683
+
684
+ Hides a predefined list of common default QPS/PAM channels.
685
+ """
686
+ self.hide_all_default_channels()
687
+
688
+ def add_data_point(self, channel_name: str, group_name: str, data_value: Union[int, float],
689
+ data_point_time: Union[int, str] = 0, time_format: str = "unix") -> None:
690
+ """
691
+ Adds a single data point to a specified custom channel.
692
+
693
+ Args:
694
+ channel_name (str): The name of the custom channel.
695
+ group_name (str): The group associated with the channel.
696
+ data_value (Union[int, float]): The numeric value of the data point.
697
+ data_point_time (Union[int, str], optional): Timestamp for the data point.
698
+ Defaults to 0 (current time).
699
+ time_format (str, optional): "unix" or "elapsed". Defaults to "unix".
700
+ """
701
+ if data_point_time == 0:
702
+ timestamp = qpsNowStr()
703
+ time_format = "unix"
375
704
  else:
376
- dataPointTime = toQpsTimeStamp (dataPointTime)
705
+ timestamp = str(data_point_time)
706
+
707
+ command = (f"$stream data add {channel_name} {group_name} "
708
+ f"{timestamp} {data_value} {time_format}")
709
+
710
+ self.connectionObj.qps.sendCmdVerbose(command)
711
+
712
+ def addDataPoint(self, channelName: str, groupName: str, dataValue: Union[int, float],
713
+ dataPointTime: Union[int, str] = 0, timeFormat: str = "unix") -> None:
714
+ """
715
+ DEPRECATED: Use add_data_point instead.
716
+
717
+ Adds a single data point to a specified custom channel in the QPS stream.
718
+
719
+ Args:
720
+ channelName (str): The name of the custom channel to add data to.
721
+ groupName (str): The group associated with the channel (must match creation).
722
+ dataValue (int or float): The numeric value of the data point.
723
+ dataPointTime (int or str, optional): The timestamp for the data point.
724
+ timeFormat (str, optional): The format of the given time ["elapsed"|"unix"].
725
+ """
726
+ self.add_data_point(channelName, groupName, dataValue, dataPointTime, timeFormat)
727
+
728
+ def get_stream_export_status(self) -> str:
729
+ """
730
+ Queries the QPS device for the status of the main stream data export process.
731
+
732
+ Returns:
733
+ str: The response string from QPS indicating the stream export status
734
+ """
735
+ return self.connectionObj.qps.sendCmdVerbose("$stream export status")
736
+
737
+ def get_stats_export_status(self) -> str:
738
+ """
739
+ Queries the QPS device for the status of the statistics data export process.
740
+
741
+ Returns:
742
+ str: The response string from QPS indicating the stats export status
743
+ """
744
+ return self.connectionObj.qps.sendCmdVerbose("$stream stats export status")
745
+
746
+ def stop_stream(self, poll_till_complete: bool = False, check_interval: float = 0.1, timeout: int = 60) -> Literal[Status.OVERRUN, Status.STOPPED] | Any:
747
+ """
748
+ Sends the command to stop the QPS data stream.
377
749
 
378
- #print ("printing command: $log " + channelName + " " + groupName + " " + str(dataPointTime) + " " + str(dataValue))
379
- self.connectionObj.qps.sendCmdVerbose("$log " + channelName + " " + groupName + " " + str(dataPointTime) + " " + str(dataValue))
750
+ Args:
751
+ poll_till_complete (bool, optional): If True, waits for the stream to fully stop. Defaults to False.
752
+ check_interval (float, optional): Seconds between status checks when polling. Defaults to 0.1.
753
+ timeout (int, optional): Max seconds to wait for polling to complete. Defaults to 60.
754
+
755
+ Returns:
756
+ str: The final stream status if polling, otherwise the initial command response.
757
+
758
+ Raises:
759
+ Exception: If the stop command itself fails.
760
+ TimeoutError: If polling is enabled and times out.
761
+ """
762
+ response = self.connectionObj.qps.sendCmdVerbose("$stop stream")
763
+ if response.startswith("Fail"):
764
+ raise Exception(response)
765
+
766
+ if poll_till_complete:
767
+ start_time = time.monotonic()
768
+ while True:
769
+ stream_state = self.get_stream_state().lower()
770
+ is_stopped = check_stream_stopped_status(stream_state)
771
+ if is_stopped:
772
+ return is_stopped
773
+
774
+ if (time.monotonic() - start_time) > timeout:
775
+ raise TimeoutError(f"Timeout ({timeout}s) waiting for stream to stop. Last state: {stream_state}")
776
+
777
+ logger.debug(f"Stream buffer still emptying: {stream_state}")
778
+ time.sleep(check_interval)
779
+
780
+ return response
781
+
782
+ def stopStream(self, pollTillComplete: bool = False, checkInterval: float = 0.1, timeout: int = 60) -> str:
783
+ """
784
+ DEPRECATED: Use stop_stream instead.
785
+
786
+ Args:
787
+ pollTillComplete (bool, optional): If True, waits until the QPS stream
788
+ state is no longer "running". Defaults to False.
789
+ checkInterval (float, optional): Time in seconds between status checks
790
+ when polling. Defaults to 0.1.
791
+ timeout (int, optional): Maximum time in seconds to wait. Defaults to 60.
792
+
793
+ Returns:
794
+ str: The final checked stream status string ("STOPPED", "OVERRUN") if polling,
795
+ otherwise the initial response from the '$stop stream' command.
796
+ """
797
+ return self.stop_stream(pollTillComplete, checkInterval, timeout)
798
+
799
+
800
+ # -------------------------------------
801
+ # Constants/Enums
802
+ # -------------------------------------
803
+ class Status(enum.Enum):
804
+ IN_PROGRESS = "IN PROGRESS"
805
+ COMPLETE = "COMPLETE"
806
+ STOPPED = "STOPPED"
807
+ OVERRUN = "OVERRUN"
808
+ OK = "OK"
809
+
810
+
811
+ # -------------------------------------
812
+ # API Utility Functions
813
+ # -------------------------------------
814
+ def current_milli_time():
815
+ return int(round(time.time() * 1000))
816
+
817
+
818
+ def current_second_time():
819
+ return int(round(time.time()))
820
+
821
+
822
+ # -------------------------------------
823
+ # Stream API Utility Functions
824
+ # -------------------------------------
825
+ def check_stream_status(stream_status):
826
+ # Check the stream status, so we know if anything went wrong during the capture period
827
+ if "stopped" in stream_status:
828
+ if "overrun" in stream_status:
829
+ return '\tStream interrupted due to internal device buffer has filled up'
830
+ elif "user" in stream_status:
831
+ return '\tStream interrupted due to max file size has being exceeded'
832
+ else:
833
+ return "\tStopped for unknown reason"
834
+ return "\t Stream running"
835
+
836
+
837
+ def check_stream_stopped_status(stream_status):
838
+ # Check the stream status, so we know if anything went wrong during the capture period
839
+ if "stopped" in stream_status:
840
+ if "overrun" in stream_status:
841
+ logger.warning('Stream interrupted due to internal device buffer has filled up')
842
+ return Status.OVERRUN
843
+ else:
844
+ return Status.STOPPED
845
+ return Status.IN_PROGRESS
846
+
847
+
848
+ # -------------------------------------
849
+ # QPS API Utility Functions
850
+ # -------------------------------------
851
+ def check_export_status(export_status):
852
+ if export_status == Status.COMPLETE:
853
+ return True
854
+ elif export_status == Status.IN_PROGRESS:
855
+ return False
856
+ return False