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,35 +1,38 @@
1
- import time
2
- import socket
3
- import sys
4
- import operator
5
1
  import logging
6
- import os
7
-
2
+ logger = logging.getLogger(__name__)
3
+ import operator
4
+ import socket
8
5
  from sys import platform
6
+ from typing import Optional, List
9
7
 
10
8
  from quarchpy.config_files.quarch_config_parser import return_module_type_list
11
- from quarchpy.user_interface import*
9
+ from quarchpy.user_interface import *
12
10
  from quarchpy.user_interface import User_interface
11
+
13
12
  try:
14
- from quarchpy.connection_specific.connection_USB import importUSB # , USBConn
13
+ from quarchpy.connection_specific.connection_USB import importUSB
15
14
  except:
16
15
  printText("System Compatibility issue - Is your Python architecture consistent with the Operating System?")
17
16
  pass
18
17
  from quarchpy.device import quarchDevice, quarchArray
18
+ from quarchpy.device.device_idn_info import IDNInfo
19
+ from quarchpy.device.device_fixture_idn_info import FixtureIDNInfo
20
+ from quarchpy.device.device_network_info import DeviceNetworkInfo
21
+ from quarchpy.device.packet_processing import decode_locate_packet
22
+ from quarchpy.device.discovered_device import DiscoveredDevice
19
23
  from quarchpy.connection_specific.connection_Serial import serialList, serial
20
24
  from quarchpy.device.quarchArray import isThisAnArrayController
21
25
  from quarchpy.connection_specific.connection_USB import TQuarchUSB_IF
22
- from quarchpy.connection_specific import connection_ReST
23
-
24
- # TODO: bodge bodge bodge
25
- from quarchpy.utilities import TestCenter
26
-
26
+ from quarchpy.connection_specific import connection_ReST, connection_TCP
27
+ from quarchpy.connection_specific.mDNS import MyListener
27
28
 
28
29
  '''
29
30
  Merge two dictionaries and return the result
30
31
  '''
32
+
33
+
31
34
  def mergeDict(x, y):
32
- if (y is None):
35
+ if y is None:
33
36
  return x
34
37
  else:
35
38
  merged = x.copy()
@@ -40,14 +43,16 @@ def mergeDict(x, y):
40
43
  '''
41
44
  Scan for Quarch modules across all available COM ports
42
45
  '''
43
- def list_serial(debuPrint=False):
46
+
47
+
48
+ def list_serial(debugPrint=False):
44
49
  serial_ports = serialList.comports()
45
50
  serial_modules = dict()
46
51
 
47
52
  for i in serial_ports:
48
- logging.debug("Scanning for Quarch devices on: " + str(i))
53
+ logger.debug("Scanning for Quarch devices on: " + str(i))
49
54
  try:
50
- ser = serial.Serial(i[0], 19200, timeout=0.5)
55
+ ser = serial.Serial(i[0], 19200, timeout=0.5, write_timeout=0.5)
51
56
  ser.write(b'*serial?\r\n')
52
57
  s = ser.read(size=64)
53
58
  serial_module = s.splitlines()[1]
@@ -57,16 +62,17 @@ def list_serial(debuPrint=False):
57
62
  if "QTL" not in serial_module:
58
63
  serial_module = "QTL" + serial_module
59
64
 
60
- module = str(i[0]), str(serial_module)
65
+ # Keep for debugging
66
+ # module = str(i[0]), str(serial_module)
61
67
 
62
68
  if serial_module[7] == "-" and serial_module[10] == "-":
63
69
  serial_modules["SERIAL:" + str(i[0])] = serial_module
64
- logging.debug("Located quarch module: " + serial_module)
70
+ logger.debug("Located quarch module: " + serial_module)
65
71
 
66
72
  ser.close()
67
- logging.debug("Finished scanning for Quarch devices on: " + str(i))
73
+ logger.debug("Finished scanning for Quarch devices on: " + str(i))
68
74
  except Exception as err:
69
- logging.debug("Exception during serial scan: " + str(err))
75
+ logger.debug("Exception during serial scan: " + str(err))
70
76
  pass
71
77
  return serial_modules
72
78
 
@@ -74,7 +80,9 @@ def list_serial(debuPrint=False):
74
80
  '''
75
81
  Scan for all Quarch devices available over USB
76
82
  '''
77
- def list_USB(debuPrint=False):
83
+
84
+
85
+ def list_USB(debuPrint=False, discovered_devices: Optional[List[DiscoveredDevice]] = None):
78
86
  QUARCH_VENDOR_ID = 0x16d0
79
87
  QUARCH_PRODUCT_ID1 = 0x0449
80
88
 
@@ -83,7 +91,8 @@ def list_USB(debuPrint=False):
83
91
  context = usb1.USBContext()
84
92
  usb_list = context.getDeviceList()
85
93
 
86
- if (debuPrint): printText(usb_list)
94
+ if debuPrint:
95
+ printText(usb_list)
87
96
 
88
97
  usb_modules = dict()
89
98
  hdList = []
@@ -91,35 +100,35 @@ def list_USB(debuPrint=False):
91
100
  usb_permission_error = False
92
101
 
93
102
  for i in usb_list:
103
+ i_handle = None
94
104
  if hex(i.device_descriptor.idVendor) == hex(QUARCH_VENDOR_ID) and hex(i.device_descriptor.idProduct) == hex(
95
105
  QUARCH_PRODUCT_ID1):
96
106
  try:
97
- logging.debug("Opening USB handle to quarch module: " + str(i))
107
+ logger.debug("Opening USB handle to quarch module: " + str(i))
98
108
  i_handle = i.open()
99
109
  except Exception as err:
100
- logging.debug("USB port open exception: " + str(err))
110
+ logger.debug("USB port open exception: " + str(err))
101
111
  if "LIBUSB_ERROR_ACCESS [-3]" in str(err):
102
- logging.debug("Unable to communicate with Quarch module over USB, device may be in use already.")
112
+ logger.debug("Unable to communicate with Quarch module over USB, device may be in use already.")
103
113
  if not platform == "win32":
104
114
  if not os.path.isfile("/etc/udev/rules.d/20-quarchmodules.rules"):
105
115
  usb_permission_error = True
106
116
  usb_modules["USB:???"] = "LOCKED MODULE"
107
117
 
108
-
109
118
  try:
110
119
  module_sn = i_handle.getASCIIStringDescriptor(3)
111
- if "1944" in module_sn or "2098" in module_sn : #use enclosure number instead of serial number
120
+ if "1944" in module_sn or "2098" in module_sn: #use enclosure number instead of serial number
112
121
  hdList.append(i)
113
122
  except Exception as err:
114
- logging.debug("USB exception on reading serial number: " + str(err))
123
+ logger.debug("USB exception on reading serial number: " + str(err))
115
124
  usb_modules["USB:???"] = "LOCKED MODULE"
116
125
  continue
117
126
 
118
127
  try:
119
- if (debuPrint): printText(i_handle.getASCIIStringDescriptor(3) + " " + i_handle.getASCIIStringDescriptor(
120
- 2) + " " + i_handle.getASCIIStringDescriptor(1))
128
+ if debuPrint:
129
+ printText(i_handle.getASCIIStringDescriptor(3) + " " + i_handle.getASCIIStringDescriptor(2) + " " + i_handle.getASCIIStringDescriptor(1))
121
130
  except Exception as err:
122
- logging.error("USB exception on reading descriptor strings: " + str(err))
131
+ logger.error("USB exception on reading descriptor strings: " + str(err))
123
132
  usb_modules["USB:???"] = "LOCKED MODULE"
124
133
  continue
125
134
 
@@ -128,27 +137,24 @@ def list_USB(debuPrint=False):
128
137
  else:
129
138
  module_sn = module_sn.strip()
130
139
 
131
- if (debuPrint): printText(module_sn)
140
+ if debuPrint:
141
+ printText(module_sn)
132
142
 
133
143
  usb_modules["USB:" + module_sn] = module_sn
134
- logging.debug("Located USB module: " + module_sn)
144
+ logger.debug("Located USB module: " + module_sn)
135
145
 
136
146
  try:
137
- logging.debug("Closing USB handle to quarch module: " + str(i))
147
+ logger.debug("Closing USB handle to quarch module: " + str(i))
138
148
  i_handle.close()
139
149
  except Exception as err:
140
- logging.error("Exception on closing USB port: " + str(err))
150
+ logger.error("Exception on closing USB port: " + str(err))
141
151
  continue
142
152
 
143
- # before returning the list of usb modules scan through the list for a 1944 create a quarch device and use sendCommand("*enclosure?")
144
-
153
+ # Before returning the list of usb modules scan through the list for a 1944 create a quarch device and use sendCommand("*enclosure?")
145
154
  for module in hdList:
146
-
147
- QquarchDevice = None
148
- quarchDevice = None
149
- quarchDevice = module
155
+ quarchUSBDevice = module
150
156
  QquarchDevice = TQuarchUSB_IF(context)
151
- QquarchDevice.connection = quarchDevice
157
+ QquarchDevice.connection = quarchUSBDevice
152
158
  QquarchDevice.OpenPort()
153
159
  time.sleep(0.02) # sleep sometimes needed before sending comand directly after opening device
154
160
  QquarchDevice.SetTimeout(2000)
@@ -160,15 +166,45 @@ def list_USB(debuPrint=False):
160
166
  if keyToFind in usb_modules:
161
167
  del usb_modules[keyToFind]
162
168
  usb_modules["USB:QTL" + enclNo] = "QTL" + enclNo
163
- logging.debug("Located USB module: QTL" + enclNo)
169
+ logger.debug("Located USB module: QTL" + enclNo)
164
170
 
165
171
  QquarchDevice.ClosePort()
166
172
  QquarchDevice.deviceHandle = None
167
173
 
168
-
169
174
  if usb_permission_error:
170
- logging.warning("Potential permission error accessing Quarch module(s) via USB.")
171
- logging.warning("If unknown, run the command 'sudo python3 -m quarchpy.run debug --fixusb' to add a new usb rule.")
175
+ logger.warning("Potential permission error accessing Quarch module(s) via USB.")
176
+ logger.warning("If unknown, run the command 'sudo python3 -m quarchpy.run debug --fixusb' to add a new usb rule.")
177
+
178
+ # Ensure discovered usb devices are populated if required.
179
+ # Devices connected via USB must be enquired via *IDN?
180
+ if discovered_devices is not None:
181
+ try:
182
+ index = 0
183
+ cmd = "*IDN?"
184
+ # Create a temporary list to ensure nothing is overwritten.
185
+ temp_discovered_devices_list: List[DiscoveredDevice] = []
186
+ for key, value in usb_modules.items():
187
+ # Ensure to skip any locked modules.
188
+ if key != "USB:???":
189
+ idn_info = IDNInfo()
190
+ fix_idn_info = FixtureIDNInfo()
191
+ device_net_info = DeviceNetworkInfo()
192
+ discovered_device = DiscoveredDevice(idn_info, fix_idn_info, device_net_info)
193
+ temp_discovered_devices_list.append(discovered_device)
194
+ quarch_device = quarchDevice(key)
195
+ response = quarch_device.send_command(cmd)
196
+ is_idn_valid = temp_discovered_devices_list[index].idn_info.parse_idn_response(response)
197
+ # Cleanup connection to module
198
+ quarch_device.close_connection()
199
+ del quarch_device
200
+ if is_idn_valid:
201
+ index += 1
202
+ else:
203
+ temp_discovered_devices_list.remove(discovered_device)
204
+
205
+ discovered_devices.extend(temp_discovered_devices_list)
206
+ except Exception as e:
207
+ logger.debug(str(e))
172
208
 
173
209
  return usb_modules
174
210
 
@@ -176,43 +212,48 @@ def list_USB(debuPrint=False):
176
212
  '''
177
213
  List all Quarch devices found over LAN, using a UDP broadcast scan
178
214
  '''
179
- def list_network(target_conn="all", debugPring=False, lanTimeout=1, ipAddressLookup=None):
180
215
 
181
- ipList = socket.gethostbyname_ex(socket.gethostname())
182
- logging.debug(os.path.basename(__file__) + ": Discovered the following interfaces: " + str(ipList))
183
- retVal={}
184
- for ip in ipList[2]:
185
- # Create and configure the socket for broadcast.
186
- mySocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
187
- mySocket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
188
- mySocket.settimeout(lanTimeout)
189
216
 
190
- lan_modules = dict()
217
+ def list_network(target_conn="all", debugPrint=False, lanTimeout=1, ipAddressLookup=None, discovered_devices: Optional[List[DiscoveredDevice]] = None):
218
+ retVal = {}
219
+ lan_modules = dict()
220
+ specifiedDevice = None
221
+ moduleFound = None
222
+ mySocket = None
223
+ ip_module = None
224
+ module_name = None
225
+ # Broadcast the message.
226
+ logger.debug("Broadcast LAN discovery message for UDP scan to all network interfaces")
227
+ ipList = socket.gethostbyname_ex(socket.gethostname())
228
+ ipList[2].append("")
229
+ logger.debug(os.path.basename(__file__) + ": Discovered the following interfaces: " + str(ipList))
191
230
 
192
- specifiedDevice = None
231
+ for ip in ipList[2]:
232
+ logger.debug(os.path.basename(__file__) + ": Broadcasting on : " + ip)
233
+ try:
234
+ mySocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
235
+ mySocket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
236
+ mySocket.settimeout(lanTimeout)
237
+ mySocket.bind((ip, 56732))
238
+ except Exception as err:
239
+ logger.debug("Error while trying to bind to network interfaces: " + " Error: " + str(err))
193
240
 
194
241
  if ipAddressLookup is not None:
195
242
  # Attempts to find the device through UDP then REST
196
- specifiedDevice = lookupDevice(str(ipAddressLookup).strip(), mySocket, lan_modules )
197
-
198
-
243
+ specifiedDevice, moduleFound = lookupDevice(str(ipAddressLookup).strip(), mySocket, lan_modules, moduleFound)
199
244
 
200
- # Broadcast the message.
201
- logging.debug("Broadcast LAN discovery message for UDP scan")
202
- mySocket.bind((ip,56732))
203
245
  mySocket.sendto(b'Discovery: Who is out there?\0\n', ('255.255.255.255', 30303))
204
- #mySocket.sendto(b'Discovery: Who is out there?\0\n', ('255.255.255.255', 30303)) #56732
205
-
206
246
  counter = 0
207
-
208
247
  # Receive messages until timeout.
209
248
  while True:
210
249
  network_modules = {}
250
+ msg_received = None
211
251
  counter += 1
212
252
  # Receive raw message until timeout, then break.
213
253
  try:
214
- msg_received = mySocket.recvfrom(256)
215
- except:
254
+ msg_received = mySocket.recvfrom(1024)
255
+ except Exception as e:
256
+ logger.debug(str(e))
216
257
  # check if any a device was targeted directly and allow parse
217
258
  if specifiedDevice is not None:
218
259
  msg_received = specifiedDevice
@@ -221,11 +262,21 @@ def list_network(target_conn="all", debugPring=False, lanTimeout=1, ipAddressLoo
221
262
  break
222
263
  cont = 0
223
264
 
224
- # print(msg_received)
225
265
  # Used split \r\n since values of 13 or 10 were looked at as /r and /n when using splitlines
226
266
  # This fixes for all cases except if 13 is followed by 10.
227
267
  splits = msg_received[0].split(b"\r\n")
228
268
  del splits[-1]
269
+
270
+ # Decode the discovered device and extend the provided discovered_devices list if required
271
+ if discovered_devices is not None:
272
+ idn_info = IDNInfo()
273
+ fix_idn_info = FixtureIDNInfo()
274
+ device_net_info = DeviceNetworkInfo()
275
+ discovered_device: DiscoveredDevice = DiscoveredDevice(idn_info, fix_idn_info, device_net_info)
276
+ discovered_device.device_info = decode_locate_packet(splits)
277
+ discovered_device.populate_device_info()
278
+ discovered_devices.append(discovered_device)
279
+
229
280
  for lines in splits:
230
281
  if cont <= 1:
231
282
  index = cont
@@ -234,14 +285,10 @@ def list_network(target_conn="all", debugPring=False, lanTimeout=1, ipAddressLoo
234
285
  else:
235
286
  index = repr(lines[0]).replace("'", "")
236
287
  data = repr(lines[1:]).replace("'", "").replace("b", "")
237
-
238
288
  network_modules[index] = data
239
-
240
289
  module_name = get_user_level_serial_number(network_modules)
241
- logging.debug("Found UDP response: " + module_name)
242
-
290
+ logger.debug("Found UDP response: " + module_name)
243
291
  ip_module = msg_received[1][0].strip()
244
-
245
292
  try:
246
293
  # Add a QTL before modules without it.
247
294
  if "QTL" not in module_name.decode("utf-8"):
@@ -252,52 +299,61 @@ def list_network(target_conn="all", debugPring=False, lanTimeout=1, ipAddressLoo
252
299
  module_name = "QTL" + module_name
253
300
 
254
301
  # Checks if there's a value in the TELNET key.
255
- if (target_conn.lower() == "all" or target_conn.lower() == "telnet"):
302
+ if target_conn.lower() == "all" or target_conn.lower() == "telnet":
256
303
  if network_modules.get("\\x8a") or network_modules.get("138"):
257
304
  # Append the information to the list.
258
305
  lan_modules["TELNET:" + ip_module] = module_name
259
- logging.debug("Found Telnet module: " + module_name)
306
+ logger.debug("Found Telnet module: " + module_name)
260
307
 
261
308
  # Checks if there's a value in the REST key.
262
- if (target_conn.lower() == "all" or target_conn.lower() == "rest"):
309
+ if target_conn.lower() == "all" or target_conn.lower() == "rest":
263
310
  if network_modules.get("\\x84") or network_modules.get("132"):
264
311
  # Append the information to the list.
265
312
  lan_modules["REST:" + ip_module] = module_name
266
- logging.debug("Found REST module: " + module_name)
313
+ logger.debug("Found REST module: " + module_name)
267
314
 
268
315
  # Checks if there's a value in the TCP key.
269
- if (target_conn.lower() == "all" or target_conn.lower() == "tcp"):
316
+ if target_conn.lower() == "all" or target_conn.lower() == "tcp":
270
317
  if network_modules.get("\\x85") or network_modules.get("133"):
271
318
  # Append the information to the list.
272
319
  lan_modules["TCP:" + ip_module] = module_name
273
- logging.debug("Found TCP module: " + module_name)
274
-
320
+ logger.debug("Found TCP module: " + module_name)
275
321
  mySocket.close()
276
- logging.debug("Finished UDP scan")
277
- retVal.update(lan_modules)
322
+ if ipAddressLookup is not None:
323
+ if moduleFound is None:
324
+ printText("IP Scan failed, no module found.")
325
+ else:
326
+ printText("IP Scan succeeded, module found: " + moduleFound)
327
+ logger.debug("Finished UDP scan")
328
+ retVal.update(lan_modules)
278
329
  return retVal
279
330
 
280
331
 
281
- ''''''
282
332
  def get_user_level_serial_number(network_modules):
333
+ """
334
+
335
+ :param network_modules:
336
+ :return:
337
+ """
283
338
  list_of_multi_module_units = ["1995"] # List of modules that require enclosure number + Port to be displayed.
339
+ module_name = None
284
340
 
285
341
  # Filter the raw message to get the module and ip address.
286
342
  if "134" in network_modules.keys():
287
- module_name = network_modules.get("134").strip() # enclosure number only
343
+ module_name = network_modules.get("134").strip() # enclosure number only
288
344
  for module in list_of_multi_module_units:
289
345
  if module in module_name:
290
- module_name += "-" + network_modules.get("135").strip() # enclosure number with port
346
+ module_name += "-" + network_modules.get("135").strip() # enclosure number with port
291
347
  break
292
348
  elif "\\x86" in network_modules.keys():
293
349
  module_name = network_modules.get("\\x86").strip() # enclosure number only
294
350
  for module in list_of_multi_module_units:
295
351
  if module in module_name:
296
- module_name += "-" + network_modules.get("\\x87").strip() # enclosure number with port
352
+ module_name += "-" + network_modules.get("\\x87").strip() # enclosure number with port
297
353
  break
298
354
  else:
299
355
  if "131" in network_modules.keys():
300
- module_name = module_name = network_modules.get("131").strip() # serial number
356
+ module_name = module_name = network_modules.get("131").strip() # serial number
301
357
  elif "\\x83" in network_modules.keys():
302
358
  module_name = module_name = network_modules.get("\\x83").strip() # serial number
303
359
 
@@ -305,93 +361,120 @@ def get_user_level_serial_number(network_modules):
305
361
 
306
362
 
307
363
  ''''''
308
- def lookupDevice(ipAddressLookup, mySocket, lan_modules):
364
+
365
+
366
+ def lookupDevice(ipAddressLookup, mySocket, lan_modules, module_found):
367
+ specifiedDevice = None
309
368
  try:
310
- printText("Ipaddress lookup " + ipAddressLookup)
311
369
  # For future reference, 0 is the C terminator for a string
370
+ timeout = mySocket.gettimeout()
371
+ logger.debug("Ipaddress lookup =" + ipAddressLookup + " timeout = " + str(timeout))
372
+
312
373
  mySocket.sendto(b'Discovery: Who is out there?\0\n', (str(ipAddressLookup).strip(), 30303))
313
374
  specifiedDevice = mySocket.recvfrom(256)
314
375
  # Check to see if the response contains the connection protocol
315
- if ("\\x8a") or ("138") or ("\\x84") or ("132") or ("\\x85") or ("133") not in specifiedDevice:
316
- # If not allow it to fall-back to REST
317
- specifiedDevice = None
318
- else:
319
- # Exit as device was found correctly
320
- return specifiedDevice
376
+ return specifiedDevice
321
377
  except Exception as e:
322
- printText("Error during UDP lookup " + str(e))
323
- printText("Is the IP address correct?\r\n")
324
- # Return if there's an error
325
- return None
378
+ logger.debug("Error during UDP lookup of IP address " + str(ipAddressLookup) + " Error: " + str(e))
379
+ logger.debug("No Quarch module found at this address. Please check the IP address and that you can ping it.\r\n")
326
380
 
327
- if specifiedDevice is None:
381
+ if specifiedDevice is None: #Only True if TCP not found or errored
328
382
  try:
329
383
  restCon = connection_ReST.ReSTConn(str(ipAddressLookup).replace("\r\n", ""))
330
- restDevice = restCon.sendCommand("*serial?")
384
+ restDevice = restCon.sendCommand("*enclosure?") #Try use enclosure for PPMs
385
+ if "fail" in restDevice.lower(): # This will fail nicely for other modules
386
+ restDevice = restCon.sendCommand("*serial?") # and serial number will be used in place.
331
387
  if not str(restDevice).startswith("QTL"):
332
388
  restDevice = "QTL" + restDevice
389
+ # Exit as device was found correctly
333
390
  # Add the item to list
334
391
  lan_modules["REST:" + str(ipAddressLookup).replace("\r\n", "")] = restDevice
335
-
392
+ module_found = restDevice
393
+ specifiedDevice = None # Don't return rest connection, to bypass tcp parsing.
336
394
  except Exception as e:
337
- printText("Error During REST scan " + str(e))
395
+ logger.debug("Error During REST scan of IP address " + str(ipAddressLookup) + " Error: " + str(e))
396
+ logger.debug("Please check the IP address and that you can ping it.\r\n")
397
+ try:
398
+ # Keep for debugging purposes
399
+ # from threading import Thread
400
+ # t = Thread(target=connection_TCP.TCPConn, args=(str(ipAddressLookup).replace("\r\n", ""),))
401
+ # t.daemon = True
402
+ # t.start()
403
+ # t.join(50)
404
+ # if t.is_alive():
405
+ # raise TimeoutError("Timeout during TCP Connection attempt.")
406
+
407
+ tcpCon = connection_TCP.TCPConn(str(ipAddressLookup).replace("\r\n", ""))
408
+ tcpDevice = tcpCon.sendCommand("*enclosure?") #Try use enclosure for PPMs
409
+ if "fail" in tcpDevice.lower(): # This will fail nicely for other modules
410
+ tcpDevice = tcpCon.sendCommand("*serial?") # and serial number will be used in place.
411
+ if not str(tcpDevice).startswith("QTL"):
412
+ tcpDevice = "QTL" + tcpDevice
413
+ # Exit as device was found correctly
414
+ # Add the item to list
415
+ lan_modules["TCP:" + str(ipAddressLookup).replace("\r\n", "")] = tcpDevice
416
+ module_found = tcpDevice
417
+ specifiedDevice = None # Don't return tcp connection, to bypass tcp parsing.
418
+ except Exception as e:
419
+ logger.debug("Error During TCP scan of IP address " + str(ipAddressLookup) + " Error: " + str(e))
420
+ logger.debug("Please check the IP address and that you can ping it.\r\n")
338
421
 
339
422
  # Needs to return None so previous method will not attempt another lookup.
340
- return None
341
-
342
-
343
- """
344
- Takes in the connection target and returns the serial number of a module found on the standard scan.
345
-
346
- Parameters
347
- ----------
348
- connectionTarget= : str
349
- The connection target of the module you would like to know the serial number of.
350
-
351
- Returns
352
- -------
353
- ret_val : str
354
- The Serial number of the supplied device.
355
-
356
- """
423
+ return specifiedDevice, module_found
424
+ return None
425
+
426
+
357
427
  def getSerialNumberFromConnectionTarget(connectionTarget):
428
+ """
429
+ Takes in the connection target and returns the serial number of a module found on the standard scan.
430
+
431
+ Parameters
432
+ ----------
433
+ connectionTarget= : str
434
+ The connection target of the module you would like to know the serial number of.
435
+
436
+ Returns
437
+ -------
438
+ ret_val : str
439
+ The Serial number of the supplied device.
440
+
441
+ """
358
442
  myDict = scanDevices(favouriteOnly=False)
359
- for k,v in myDict.items():
443
+ for k, v in myDict.items():
360
444
  if k == connectionTarget:
361
445
  return v
362
446
  return None
363
447
 
364
448
 
365
- """
366
- Takes in the connection type and serial number of a module and returns the connection target.
367
-
368
- Parameters
369
- ----------
370
- module_string= : str
371
- The connection type and serial number combination eg. TCP:QTL1999-05-005.
372
-
373
- scan_dictionary= :dict, optional
374
- A scan dictionary can be passed so that a scan does not need to take place on every call.
375
- This would be advised if calling this for every item in a list of serial numbers.
376
-
377
- connection_preference= : list str, optional
378
- The preference of which connection type to prioratise if none it given.
379
- Defaults to "USB", "TCP", "SERIAL", "REST", "TELNET" in that order.
380
-
381
- include_conn_type = : boolean, optional
382
- Decided whether the connection type will appear in the return value eg. TCP:192.168.1.1 vs 192.168.1.1
383
-
384
- Returns
385
- -------
386
- ret_val : str
387
- The Connection target of the supplied device.
388
-
389
- """
390
- def get_connection_target(module_string ,scan_dictionary=None, connection_preference= None, include_conn_type = True):
391
- logging.debug("Getting connection target for : "+ str(module_string))
392
- if connection_preference == None:
449
+ def get_connection_target(module_string, scan_dictionary=None, connection_preference=None, include_conn_type=True):
450
+ """
451
+ Takes in the connection type and serial number of a module and returns the connection target.
452
+
453
+ Parameters
454
+ ----------
455
+ module_string= : str
456
+ The connection type and serial number combination eg. TCP:QTL1999-05-005.
457
+
458
+ scan_dictionary= :dict, optional
459
+ A scan dictionary can be passed so that a scan does not need to take place on every call.
460
+ This would be advised if calling this for every item in a list of serial numbers.
461
+
462
+ connection_preference= : list str, optional
463
+ The preference of which connection type to prioratise if none it given.
464
+ Defaults to "USB", "TCP", "SERIAL", "REST", "TELNET" in that order.
465
+
466
+ include_conn_type = : boolean, optional
467
+ Decided whether the connection type will appear in the return value eg. TCP:192.168.1.1 vs 192.168.1.1
468
+
469
+ Returns
470
+ -------
471
+ ret_val : str
472
+ The Connection target of the supplied device.
473
+ """
474
+ logger.debug("Getting connection target for : " + str(module_string))
475
+ if connection_preference is None:
393
476
  connection_preference = ["USB", "TCP", "SERIAL", "REST", "TELNET"]
394
- module_string.replace("::", ":") #QIS/QPS format to QuarchPy format
477
+ module_string.replace("::", ":") #QIS/QPS format to QuarchPy format
395
478
  delimeter_pos = module_string.find(":")
396
479
  if delimeter_pos == -1:
397
480
  con_type = None
@@ -399,18 +482,18 @@ def get_connection_target(module_string ,scan_dictionary=None, connection_prefer
399
482
  else:
400
483
  con_type = module_string[:delimeter_pos]
401
484
  serial_number = module_string[delimeter_pos + 1:].lower()
402
- if serial_number.find("qtl") !=-1:
403
- serial_number=serial_number.replace("qtl","")
485
+ if serial_number.find("qtl") != -1:
486
+ serial_number = serial_number.replace("qtl", "")
404
487
  if scan_dictionary is None:
405
- logging.debug("Scanning for devices...")
406
- scan_dictionary = scanDevices(favouriteOnly=False,filterStr=[serial_number])
488
+ logger.debug("Scanning for devices...")
489
+ scan_dictionary = scanDevices(favouriteOnly=False, filterStr=[serial_number])
407
490
 
408
- ret_val="Fail Module Not Found"
491
+ ret_val = "Fail Module Not Found"
409
492
 
410
493
  if con_type is None:
411
494
  connection_found = False
412
495
  for con_type in connection_preference:
413
- if connection_found is False:
496
+ if not connection_found:
414
497
  for k, v in scan_dictionary.items():
415
498
  if k.__contains__(con_type):
416
499
  ret_val = k
@@ -418,7 +501,7 @@ def get_connection_target(module_string ,scan_dictionary=None, connection_prefer
418
501
  else:
419
502
  for k, v in scan_dictionary.items():
420
503
  if k.lower().__contains__(con_type.lower()):
421
- ret_val=k
504
+ ret_val = k
422
505
 
423
506
  if not include_conn_type and not ret_val.__contains__("Fail"):
424
507
  delimeter_pos = ret_val.find(":")
@@ -430,6 +513,8 @@ def get_connection_target(module_string ,scan_dictionary=None, connection_prefer
430
513
  '''
431
514
  Scans for Quarch modules across the given interface(s). Returns a dictionary of module addresses and serial numbers
432
515
  '''
516
+
517
+
433
518
  def filter_module_type(module_type_filter, found_devices):
434
519
  """
435
520
  Used in scandevices to filter modules by their type.
@@ -452,24 +537,43 @@ def filter_module_type(module_type_filter, found_devices):
452
537
  return filtered_devices
453
538
 
454
539
 
540
+ def scan_mDNS(mdnsListener, zeroconf=None):
541
+ from zeroconf import ServiceBrowser, Zeroconf
542
+ if zeroconf is None:
543
+ zeroconf = Zeroconf()
544
+ listener = mdnsListener
545
+ browser = ServiceBrowser(zeroconf, "_http._tcp.local.", listener)
546
+ return browser
547
+
548
+
455
549
  '''
456
550
  Scans for Quarch modules across the given interface(s). Returns a dictionary of module addresses and serial numbers
457
551
  '''
458
- def scanDevices(target_conn="all", lanTimeout=1, scanInArray=True, favouriteOnly=True,filterStr=None,
459
- module_type_filter=None, ipAddressLookup=None):
552
+
553
+
554
+ def scanDevices(target_conn="all", lanTimeout=1, scanInArray=True, favouriteOnly=True, filterStr=None, module_type_filter=None, ipAddressLookup=None, discovered_devices=None):
460
555
  foundDevices = dict()
461
556
  scannedArrays = list()
462
557
 
558
+ # Setup mdns with zeroconf
559
+ # Ensure listener/zeroconf instance stay persistent (ensures only one thread is used for each scan cycle)
560
+ mdns_listener = MyListener().get_instance()
561
+ zeroconf = mdns_listener.get_zeroconf()
562
+ # Setup new mdns discovery service for every scan cycle
563
+ browser = scan_mDNS(mdns_listener, zeroconf)
564
+ # Set target_conn
565
+ mdns_listener.target_conn = target_conn.lower()
566
+
463
567
  if target_conn.lower() == "all":
464
- foundDevices = list_USB()
568
+ foundDevices = list_USB(discovered_devices=discovered_devices)
465
569
  foundDevices = mergeDict(foundDevices, list_serial())
466
570
  try:
467
- #This will fail if the test machine is not connected to a network
468
- foundDevices = mergeDict(foundDevices, list_network("all", ipAddressLookup=ipAddressLookup, lanTimeout=lanTimeout))
571
+ # This will fail if the test machine is not connected to a network
572
+ foundDevices = mergeDict(foundDevices, list_network("all", ipAddressLookup=ipAddressLookup, lanTimeout=lanTimeout, discovered_devices=discovered_devices))
573
+ foundDevices = mergeDict(foundDevices, mdns_listener.get_found_devices())
469
574
  except Exception as e:
470
- logging.error(e)
471
- logging.warning("Network scan failed, check network connection")
472
- # print(foundDevices)
575
+ logger.error(e)
576
+ logger.warning("Network scan failed, check network connection")
473
577
 
474
578
  if target_conn.lower() == "serial":
475
579
  foundDevices = list_serial()
@@ -479,24 +583,25 @@ def scanDevices(target_conn="all", lanTimeout=1, scanInArray=True, favouriteOnly
479
583
 
480
584
  if target_conn.lower() == "tcp" or target_conn.lower() == "rest" or target_conn.lower() == "telnet":
481
585
  foundDevices = list_network(target_conn, ipAddressLookup=ipAddressLookup, lanTimeout=lanTimeout)
586
+ foundDevices = mergeDict(foundDevices, mdns_listener.get_found_devices())
482
587
 
483
- if (scanInArray):
484
- for k, v in foundDevices.items(): # k=Connection target, v=serial number
485
- if (k not in scannedArrays):
588
+ if scanInArray:
589
+ for k, v in foundDevices.items(): # k=Connection target, v=serial number
590
+ if k not in scannedArrays:
486
591
  scannedArrays.append(k)
487
- if (isThisAnArrayController(v)):
592
+ if isThisAnArrayController(v):
488
593
  try:
489
594
  myQuarchDevice = quarchDevice(k)
490
- myArrayControler = quarchArray(myQuarchDevice)
491
- scanDevices = myArrayControler.scanSubModules()
492
- foundDevices = mergeDict(foundDevices, scanDevices)
493
- myArrayControler.closeConnection()
595
+ myArrayController = quarchArray(myQuarchDevice)
596
+ scannedDevices = myArrayController.scanSubModules()
597
+ foundDevices = mergeDict(foundDevices, scannedDevices)
598
+ myArrayController.close_connection()
494
599
  except Exception as e:
495
- logging.error(e, exc_info=True)
496
- logging.warning("Cannot get serial number. Quarch device may be in use by another program.")
600
+ logger.debug(e, exc_info=True)
601
+ logger.debug("Cannot get serial number. Quarch device may be in use by another program.")
497
602
  foundDevices[k] = "DEVICE IN USE"
498
603
 
499
- if (favouriteOnly):
604
+ if favouriteOnly:
500
605
 
501
606
  # Sort list in order of connection type preference. Can be changed by changing position in conPref list. This must be done so that it is in the correct format for picking the favourite connections.
502
607
  index = 0
@@ -513,7 +618,7 @@ def scanDevices(target_conn="all", lanTimeout=1, scanInArray=True, favouriteOnly
513
618
  favConFoundDevices = {}
514
619
  index = 0
515
620
  for k, v in sortedFoundDevices.items():
516
- if (favConFoundDevices == {} or not v in favConFoundDevices.values()):
621
+ if favConFoundDevices == {} or not v in favConFoundDevices.values():
517
622
  favConFoundDevices[k] = v
518
623
  foundDevices = favConFoundDevices
519
624
 
@@ -521,24 +626,28 @@ def scanDevices(target_conn="all", lanTimeout=1, scanInArray=True, favouriteOnly
521
626
  sortedFoundDevices = {}
522
627
  sortedFoundDevices = sorted(foundDevices.items(), key=operator.itemgetter(1))
523
628
  foundDevices = dict(sortedFoundDevices)
524
- if filterStr != None:
629
+ if filterStr is not None:
525
630
  filteredDevices = {}
526
631
  for k, v in foundDevices.items():
527
632
  for j in filterStr:
528
- if (j in v or "LOCKED MODULE" in v): #show locked modules too incase the module you are looking for is on the system but is locked
633
+ if (
634
+ j in v or "LOCKED MODULE" in v): #show locked modules too incase the module you are looking for is on the system but is locked
529
635
  filteredDevices[k] = v
530
636
  foundDevices = filteredDevices
531
637
 
532
638
  # used to filter module via type ( Power / Drive / ...)
533
639
  if module_type_filter:
534
640
  foundDevices = filter_module_type(module_type_filter, foundDevices)
535
-
641
+ # Cancels the mdns discovery service (required to close active thread)
642
+ browser.cancel()
536
643
  return foundDevices
537
644
 
538
645
 
539
646
  '''
540
647
  Prints out a list of Quarch devices nicely onto the terminal, numbering each unit
541
648
  '''
649
+
650
+
542
651
  def listDevices(scanDictionary):
543
652
  if not scanDictionary:
544
653
  printText("No quarch devices found to display")
@@ -553,80 +662,70 @@ def listDevices(scanDictionary):
553
662
  '''
554
663
  Requests the user to select one of the devices in the given list
555
664
  '''
556
- def userSelectDevice(scanDictionary=None, scanFilterStr=None,favouriteOnly=True, message=None, title=None, nice=False, additionalOptions = None, target_conn="all"):
557
- if User_interface.instance != None and User_interface.instance.selectedInterface == "testcenter":
558
- nice = False
559
- if message is None: message = "Please select a quarch device"
560
- if title is None: title = "Select a Device"
561
665
 
562
- while (True):
666
+
667
+ def userSelectDevice(scanDictionary=None, scanFilterStr=None, favouriteOnly=True, message=None, title=None, nice=False, additionalOptions=None, target_conn="all"):
668
+ if User_interface.instance is not None and User_interface.instance.selectedInterface == "testcenter":
669
+ nice = False
670
+ if message is None:
671
+ message = "Please select a quarch device"
672
+ if title is None:
673
+ title = "Select a Device"
674
+ ip_address = None
675
+ while True:
563
676
  # Scan first, if no list is supplied
564
- if (scanDictionary is None):
677
+ if scanDictionary is None:
565
678
  printText("Scanning for devices...")
566
- scanDictionary = scanDevices(filterStr=scanFilterStr, favouriteOnly=favouriteOnly, target_conn=target_conn)
567
-
568
- if len(scanDictionary)<1:
569
- scanDictionary["***No Devices Found***"]="***No Devices Found***"
679
+ if ip_address is None:
680
+ scanDictionary = scanDevices(filterStr=scanFilterStr, favouriteOnly=favouriteOnly, target_conn=target_conn)
681
+ else:
682
+ scanDictionary = scanDevices(filterStr=scanFilterStr, favouriteOnly=favouriteOnly, target_conn=target_conn, ipAddressLookup=ip_address)
570
683
 
684
+ if len(scanDictionary) < 1:
685
+ scanDictionary["***No Devices Found***"] = "***No Devices Found***"
571
686
 
572
- if nice: #Prepair the data for niceListSelection using displayTable().
573
- if additionalOptions is None: additionalOptions = ["Rescan","Quit"]
687
+ if nice: # Prepare the data for niceListSelection using displayTable().
688
+ if additionalOptions is None:
689
+ additionalOptions = ["Specify IP Address", "Rescan", "Quit"]
574
690
  tempList = []
575
- tempEl = []
576
691
  for k, v in scanDictionary.items():
577
- tempEl = []
578
- tempEl.append(v)
692
+ tempEl = [v]
579
693
  charPos = k.find(":")
580
694
  tempEl.append(k)
581
695
  tempList.append(tempEl)
582
- adOp =[]
696
+ adOp = []
583
697
  for option in additionalOptions:
584
- adOp.append([option]*2) # Put option in all columns
698
+ adOp.append([option] * 2) # Put option in all columns
585
699
  #adOp.append([option,"-"])
586
700
  userStr = listSelection(title, message, tempList, additionalOptions=adOp, indexReq=True, nice=nice, tableHeaders=["Selection", "Description"])
587
- userStr = userStr[2] #With the data formatted in this way the ConnTarget will always be in userStr[2]
701
+ userStr = userStr[2] #With the data formatted in this way the ConnTarget will always be in userStr[2]
588
702
 
589
- else: # Prepare data for old style selection or testCenter
703
+ else: # Prepare data for old style selection or testCenter
590
704
  devicesString = []
591
705
  for k, v in scanDictionary.items():
592
706
  charPos = k.find(":")
593
707
  devicesString.append(k + '=' + v + ": " + k[:charPos])
594
708
  devicesString = ','.join(devicesString)
595
- if additionalOptions is None :
596
- additionalOptions = "Rescan=Rescan,Quit=Quit"
597
- userStr = listSelection(title=title,message=message,selectionList=devicesString, additionalOptions=additionalOptions)
709
+ if additionalOptions is None:
710
+ additionalOptions = "Specify IP Address=IP Scan,Rescan=Rescan,Quit=Quit"
711
+ userStr = listSelection(title=title, message=message, selectionList=devicesString,
712
+ additionalOptions=additionalOptions)
598
713
 
599
714
  # Process the user response
600
- if (userStr.lower() in 'quit'):
715
+ if userStr.lower() in 'quit':
601
716
  return "quit"
602
- elif (userStr.lower() in 'rescan'):
717
+ elif userStr.lower() in 'rescan':
718
+ ip_address = None
603
719
  scanDictionary = None
604
720
  favouriteOnly = True
605
- elif (userStr.lower() in 'all conn types'):
721
+ elif userStr.lower() in 'all conn types':
722
+ ip_address = None
723
+ scanDictionary = None
724
+ favouriteOnly = False
725
+ elif userStr.lower() in 'specify ip address':
726
+ ip_address = requestDialog("Please input IP Address of the module you would like to connect to: ")
606
727
  scanDictionary = None
607
728
  favouriteOnly = False
608
729
  else:
609
730
  # Return the address string of the selected module
610
731
  return userStr
611
-
612
-
613
- #Not used but could come in usefull in near future.
614
- # def userSelectAndReturnDevice(scanDictionary=None, scanFilterStr=None,favouriteOnly=True, message=None, title=None, nice=True, additionalOptions =["rescan","all conn types", "quit"], target_conn="all"):
615
- # scanDictionary = scanDevices()
616
- # connectionTarget = userSelectDevice(scanDictionary, scanFilterStr, favouriteOnly, message, title, nice,
617
- # additionalOptions, target_conn)
618
- # serialNumber = getSerialNumberFromConnectionTarget(connectionTarget)
619
- #
620
- # if connectionTarget.__contains__("<") and connectionTarget.__contains__(">"):
621
- # connectionTarget, portNumber = connectionTarget.split("<")
622
- # portNumber = portNumber[:-1]
623
- # myDevice = quarchDevice(connectionTarget)
624
- # myArrayController = quarchArray(myDevice)
625
- # mySubDevice = myArrayController.getSubDevice(portNumber)
626
- # myDevice = mySubDevice
627
- # elif(serialNumber.lower().__contains__("qtl1999") or serialNumber.lower().__contains__("qtl1995") or serialNumber.lower().__contains__("qtl2312")):
628
- # myDevice = quarchPPM(quarchDevice(connectionTarget))
629
- #
630
- # else:
631
- # myDevice = quarchDevice(connectionTarget)
632
- # return myDevice