@modular-circuit/perc 0.0.51

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 (136) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/build/erc/connect_graph_visitor/index.d.ts +2 -0
  4. package/build/erc/connect_graph_visitor/index.d.ts.map +1 -0
  5. package/build/erc/connect_graph_visitor/index.js +1 -0
  6. package/build/erc/connect_graph_visitor/visitor.d.ts +5 -0
  7. package/build/erc/connect_graph_visitor/visitor.d.ts.map +1 -0
  8. package/build/erc/connect_graph_visitor/visitor.js +0 -0
  9. package/build/erc/context/connection_graph_builder_ctx.d.ts +7 -0
  10. package/build/erc/context/connection_graph_builder_ctx.d.ts.map +1 -0
  11. package/build/erc/context/connection_graph_builder_ctx.js +0 -0
  12. package/build/erc/context/error_severity.d.ts +11 -0
  13. package/build/erc/context/error_severity.d.ts.map +1 -0
  14. package/build/erc/context/error_severity.js +13 -0
  15. package/build/erc/context/graph.d.ts +3 -0
  16. package/build/erc/context/graph.d.ts.map +1 -0
  17. package/build/erc/context/graph.js +0 -0
  18. package/build/erc/context/graph_converter.d.ts +8 -0
  19. package/build/erc/context/graph_converter.d.ts.map +1 -0
  20. package/build/erc/context/graph_converter.js +0 -0
  21. package/build/erc/context/index.d.ts +6 -0
  22. package/build/erc/context/index.d.ts.map +1 -0
  23. package/build/erc/context/index.js +5 -0
  24. package/build/erc/context/pin_to_pin_test_ctx.d.ts +7 -0
  25. package/build/erc/context/pin_to_pin_test_ctx.d.ts.map +1 -0
  26. package/build/erc/context/pin_to_pin_test_ctx.js +0 -0
  27. package/build/erc/index.d.ts +5 -0
  28. package/build/erc/index.d.ts.map +1 -0
  29. package/build/erc/index.js +4 -0
  30. package/build/erc/netlist/constraints.d.ts +5 -0
  31. package/build/erc/netlist/constraints.d.ts.map +1 -0
  32. package/build/erc/netlist/constraints.js +30 -0
  33. package/build/erc/netlist/index.d.ts +3 -0
  34. package/build/erc/netlist/index.d.ts.map +1 -0
  35. package/build/erc/netlist/index.js +2 -0
  36. package/build/erc/netlist/tester.d.ts +10 -0
  37. package/build/erc/netlist/tester.d.ts.map +1 -0
  38. package/build/erc/netlist/tester.js +67 -0
  39. package/build/erc/parameter_propagation/error_code.d.ts +41 -0
  40. package/build/erc/parameter_propagation/error_code.d.ts.map +1 -0
  41. package/build/erc/parameter_propagation/error_code.js +74 -0
  42. package/build/erc/parameter_propagation/index.d.ts +3 -0
  43. package/build/erc/parameter_propagation/index.d.ts.map +1 -0
  44. package/build/erc/parameter_propagation/index.js +2 -0
  45. package/build/erc/parameter_propagation/link_testers/index.d.ts +2 -0
  46. package/build/erc/parameter_propagation/link_testers/index.d.ts.map +1 -0
  47. package/build/erc/parameter_propagation/link_testers/index.js +1 -0
  48. package/build/erc/parameter_propagation/link_testers/link_tester_base.d.ts +23 -0
  49. package/build/erc/parameter_propagation/link_testers/link_tester_base.d.ts.map +1 -0
  50. package/build/erc/parameter_propagation/link_testers/link_tester_base.js +112 -0
  51. package/build/erc/parameter_propagation/link_testers/tester_impl.d.ts +247 -0
  52. package/build/erc/parameter_propagation/link_testers/tester_impl.d.ts.map +1 -0
  53. package/build/erc/parameter_propagation/link_testers/tester_impl.js +1456 -0
  54. package/build/erc/parameter_propagation/tester.d.ts +16 -0
  55. package/build/erc/parameter_propagation/tester.d.ts.map +1 -0
  56. package/build/erc/parameter_propagation/tester.js +215 -0
  57. package/build/erc/pin_compatibility_matrix/erc_setting.d.ts +29 -0
  58. package/build/erc/pin_compatibility_matrix/erc_setting.d.ts.map +1 -0
  59. package/build/erc/pin_compatibility_matrix/erc_setting.js +110 -0
  60. package/build/erc/pin_compatibility_matrix/error_code.d.ts +55 -0
  61. package/build/erc/pin_compatibility_matrix/error_code.d.ts.map +1 -0
  62. package/build/erc/pin_compatibility_matrix/error_code.js +56 -0
  63. package/build/erc/pin_compatibility_matrix/index.d.ts +5 -0
  64. package/build/erc/pin_compatibility_matrix/index.d.ts.map +1 -0
  65. package/build/erc/pin_compatibility_matrix/index.js +4 -0
  66. package/build/erc/pin_compatibility_matrix/pin_error.d.ts +7 -0
  67. package/build/erc/pin_compatibility_matrix/pin_error.d.ts.map +1 -0
  68. package/build/erc/pin_compatibility_matrix/pin_error.js +7 -0
  69. package/build/erc/pin_compatibility_matrix/tester.d.ts +9 -0
  70. package/build/erc/pin_compatibility_matrix/tester.d.ts.map +1 -0
  71. package/build/erc/pin_compatibility_matrix/tester.js +23 -0
  72. package/build/graphics/index.d.ts +3 -0
  73. package/build/graphics/index.d.ts.map +1 -0
  74. package/build/graphics/index.js +2 -0
  75. package/build/graphics/maker/index.d.ts +4 -0
  76. package/build/graphics/maker/index.d.ts.map +1 -0
  77. package/build/graphics/maker/index.js +3 -0
  78. package/build/graphics/maker/maker_base.d.ts +35 -0
  79. package/build/graphics/maker/maker_base.d.ts.map +1 -0
  80. package/build/graphics/maker/maker_base.js +0 -0
  81. package/build/graphics/maker/maker_type.d.ts +10 -0
  82. package/build/graphics/maker/maker_type.d.ts.map +1 -0
  83. package/build/graphics/maker/maker_type.js +10 -0
  84. package/build/graphics/maker/sch_maker.d.ts +5 -0
  85. package/build/graphics/maker/sch_maker.d.ts.map +1 -0
  86. package/build/graphics/maker/sch_maker.js +0 -0
  87. package/build/graphics/sch_erc_item.d.ts +28 -0
  88. package/build/graphics/sch_erc_item.d.ts.map +1 -0
  89. package/build/graphics/sch_erc_item.js +0 -0
  90. package/build/index.d.ts +6 -0
  91. package/build/index.d.ts.map +1 -0
  92. package/build/index.js +5 -0
  93. package/build/report/erc_report.d.ts +16 -0
  94. package/build/report/erc_report.d.ts.map +1 -0
  95. package/build/report/erc_report.js +16 -0
  96. package/build/report/erc_reporter.d.ts +88 -0
  97. package/build/report/erc_reporter.d.ts.map +1 -0
  98. package/build/report/erc_reporter.js +87 -0
  99. package/build/report/index.d.ts +3 -0
  100. package/build/report/index.d.ts.map +1 -0
  101. package/build/report/index.js +2 -0
  102. package/build/rule_check_item/erc_item.d.ts +4 -0
  103. package/build/rule_check_item/erc_item.d.ts.map +1 -0
  104. package/build/rule_check_item/erc_item.js +0 -0
  105. package/build/rule_check_item/index.d.ts +3 -0
  106. package/build/rule_check_item/index.d.ts.map +1 -0
  107. package/build/rule_check_item/index.js +2 -0
  108. package/build/rule_check_item/rc_item.d.ts +33 -0
  109. package/build/rule_check_item/rc_item.d.ts.map +1 -0
  110. package/build/rule_check_item/rc_item.js +0 -0
  111. package/build/tester/erc_tester.d.ts +18 -0
  112. package/build/tester/erc_tester.d.ts.map +1 -0
  113. package/build/tester/erc_tester.js +66 -0
  114. package/build/tester/graph/connection_graphs_builder.d.ts +22 -0
  115. package/build/tester/graph/connection_graphs_builder.d.ts.map +1 -0
  116. package/build/tester/graph/connection_graphs_builder.js +187 -0
  117. package/build/tester/graph/graph_erc.d.ts +16 -0
  118. package/build/tester/graph/graph_erc.d.ts.map +1 -0
  119. package/build/tester/graph/graph_erc.js +63 -0
  120. package/build/tester/graph/index.d.ts +4 -0
  121. package/build/tester/graph/index.d.ts.map +1 -0
  122. package/build/tester/graph/index.js +3 -0
  123. package/build/tester/graph/ir_graph_converter.d.ts +30 -0
  124. package/build/tester/graph/ir_graph_converter.d.ts.map +1 -0
  125. package/build/tester/graph/ir_graph_converter.js +279 -0
  126. package/build/tester/index.d.ts +3 -0
  127. package/build/tester/index.d.ts.map +1 -0
  128. package/build/tester/index.js +2 -0
  129. package/build/tsconfig.build.tsbuildinfo +1 -0
  130. package/build/utils/get_dependent_modules_definition.d.ts +4 -0
  131. package/build/utils/get_dependent_modules_definition.d.ts.map +1 -0
  132. package/build/utils/get_dependent_modules_definition.js +145 -0
  133. package/build/utils/index.d.ts +2 -0
  134. package/build/utils/index.d.ts.map +1 -0
  135. package/build/utils/index.js +1 -0
  136. package/package.json +39 -0
@@ -0,0 +1,1456 @@
1
+ // add the other testers following the AnalogLinkTester
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __values = (this && this.__values) || function(o) {
18
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
19
+ if (m) return m.call(o);
20
+ if (o && typeof o.length === "number") return {
21
+ next: function () {
22
+ if (o && i >= o.length) o = void 0;
23
+ return { value: o && o[i++], done: !o };
24
+ }
25
+ };
26
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
27
+ };
28
+ var __read = (this && this.__read) || function (o, n) {
29
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
30
+ if (!m) return o;
31
+ var i = m.call(o), r, ar = [], e;
32
+ try {
33
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
34
+ }
35
+ catch (error) { e = { error: error }; }
36
+ finally {
37
+ try {
38
+ if (r && !r.done && (m = i["return"])) m.call(i);
39
+ }
40
+ finally { if (e) throw e.error; }
41
+ }
42
+ return ar;
43
+ };
44
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
45
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
46
+ if (ar || !(i in from)) {
47
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
48
+ ar[i] = from[i];
49
+ }
50
+ }
51
+ return to.concat(ar || Array.prototype.slice.call(from));
52
+ };
53
+ import { PortType, all_range_are_defined, contains, filter_defined_range, hull, interests, intersection, r_div, range_is_defined, sum, } from '@modular-circuit/electronics-model';
54
+ import { CompositePortLinkTesterBase, LinkTesterBase } from './link_tester_base';
55
+ import { PP_DUPLICATED_SOURCES, PP_ILLEGAL_CONNECTION, PP_IMPEDANCE_SIGNAL_INTEGRITY, PP_INCOMPATIBLE_DIGITAL_THRESHOLDS, PP_INCOMPATIBLE_SIGNAL_LEVELS, PP_INCOMPATIBLE_VOLTAGE_LEVELS, PP_NOT_DRIVEN, PP_OVER_DRIVEN, PP_REQUIRES_CONNECTED_SOURCE_OR_BIDIR, PP_SIGNAL_LEVELS_NOT_CONTAINED_WITHIN_VOLTAGE, } from '../../../report';
56
+ /**
57
+ self.assign(self.sink_impedance, 1 / (1 / self.sinks.map_extract(lambda x: x.impedance)).sum())
58
+ self.require(self.source.impedance.upper() <= self.sink_impedance.lower() * 0.1) # about 10x for signal integrity
59
+ self.assign(self.current_drawn, self.sinks.sum(lambda x: x.current_draw))
60
+
61
+ self.assign(self.voltage_limits, self.sinks.intersection(lambda x: x.voltage_limits))
62
+ self.require(self.voltage_limits.contains(self.voltage), "incompatible voltage levels")
63
+ self.assign(self.signal_limits, self.sinks.intersection(lambda x: x.signal_limits))
64
+ self.require(self.voltage.contains(self.signal), "signal levels not contained within voltage")
65
+ self.require(self.signal_limits.contains(self.signal), "incompatible signal levels")
66
+ self.assign(self.current_limits, self.source.current_limits)
67
+ self.require(self.current_limits.contains(self.current_drawn), "overcurrent")
68
+ */
69
+ var AnalogLinkTester = /** @class */ (function (_super) {
70
+ __extends(AnalogLinkTester, _super);
71
+ function AnalogLinkTester() {
72
+ return _super !== null && _super.apply(this, arguments) || this;
73
+ }
74
+ AnalogLinkTester.prototype.init_link = function () {
75
+ var e_1, _a;
76
+ var sources = [];
77
+ var sinks = [];
78
+ try {
79
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
80
+ var v = _c.value;
81
+ switch (v.type) {
82
+ case PortType.AnalogSource: {
83
+ sources.push(v);
84
+ break;
85
+ }
86
+ case PortType.AnalogSink: {
87
+ sinks.push(v);
88
+ break;
89
+ }
90
+ }
91
+ }
92
+ }
93
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
94
+ finally {
95
+ try {
96
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
97
+ }
98
+ finally { if (e_1) throw e_1.error; }
99
+ }
100
+ if (sources.length === 0) {
101
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'Requires a connected analog source'));
102
+ return false;
103
+ }
104
+ if (sources.length > 1) {
105
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'Multiple analog sources are not allowed'));
106
+ return false;
107
+ }
108
+ this.link = {
109
+ source: sources[0],
110
+ sinks: sinks,
111
+ };
112
+ return true;
113
+ };
114
+ AnalogLinkTester.prototype.check_parameter_propagation = function () {
115
+ if (!this.link)
116
+ return;
117
+ var source = this.link.source;
118
+ var sinks = this.link.sinks;
119
+ var source_id = this.ctx.port_id.get(source);
120
+ if (range_is_defined(source.impedance)) {
121
+ var all_sinks_impedance = filter_defined_range(sinks.map(function (v) { return v.impedance; }));
122
+ if (all_sinks_impedance.length > 0) {
123
+ var sink_impedance = r_div(sum(all_sinks_impedance.map(function (v) { return r_div(v, 1); })), 1);
124
+ if (source.impedance.upper > sink_impedance.lower * 0.1) {
125
+ this.ctx.report.erc_errors.push(PP_IMPEDANCE_SIGNAL_INTEGRITY(this.all_port_ids));
126
+ }
127
+ }
128
+ }
129
+ if (range_is_defined(source.voltage_out)) {
130
+ var all_voltage_limits = filter_defined_range(sinks.map(function (v) { return v.voltage_limits; }));
131
+ if (all_voltage_limits.length > 0) {
132
+ var voltage_limits = intersection(all_voltage_limits);
133
+ if (!interests(voltage_limits, source.voltage_out)) {
134
+ this.ctx.report.erc_errors.push(PP_INCOMPATIBLE_VOLTAGE_LEVELS(source_id));
135
+ }
136
+ }
137
+ }
138
+ if (all_range_are_defined(source.signal_out, source.voltage_out)) {
139
+ if (!interests(source.voltage_out, source.signal_out)) {
140
+ this.ctx.report.erc_errors.push(PP_SIGNAL_LEVELS_NOT_CONTAINED_WITHIN_VOLTAGE(source_id));
141
+ }
142
+ }
143
+ if (range_is_defined(source.signal_out)) {
144
+ var all_sinks_signal_limits = filter_defined_range(sinks.map(function (v) { return v.signal_limits; }));
145
+ if (all_sinks_signal_limits.length > 0) {
146
+ var signal_limits = intersection(all_sinks_signal_limits);
147
+ if (!interests(signal_limits, source.signal_out)) {
148
+ this.ctx.report.erc_errors.push(PP_INCOMPATIBLE_SIGNAL_LEVELS(source_id));
149
+ }
150
+ }
151
+ }
152
+ if (range_is_defined(source.current_limits)) {
153
+ var all_sinks_current_drawn = filter_defined_range(sinks.map(function (v) { return v.current_drawn; }));
154
+ if (all_sinks_current_drawn.length > 0) {
155
+ var current_drawn = sum(all_sinks_current_drawn);
156
+ if (interests(current_drawn, source.current_limits)) {
157
+ this.ctx.report.erc_errors.push(PP_OVER_DRIVEN([source_id], 'current'));
158
+ }
159
+ }
160
+ }
161
+ };
162
+ return AnalogLinkTester;
163
+ }(LinkTesterBase));
164
+ export { AnalogLinkTester };
165
+ /**
166
+
167
+ voltage_hull = self.bidirs.hull(lambda x: x.voltage_out)
168
+ voltage_hull = self.sources.any_connected().then_else(
169
+ voltage_hull.hull(self.sources.hull(lambda x: x.voltage_out)),
170
+ voltage_hull
171
+ )
172
+ self.assign(self.voltage, voltage_hull)
173
+
174
+ self.assign(self.voltage_limits,
175
+ self.sinks.intersection(lambda x: x.voltage_limits).intersect(self.bidirs.intersection(lambda x: x.voltage_limits))
176
+ )
177
+ self.require(self.voltage_limits.contains(self.voltage), "overvoltage")
178
+
179
+ self.assign(self.current_drawn,
180
+ self.sinks.sum(lambda x: x.current_draw) + self.bidirs.sum(lambda x: x.current_draw)
181
+ )
182
+ self.assign(self.current_limits,
183
+ self.sources.intersection(lambda x: x.current_limits)
184
+ .intersect(self.bidirs.intersection(lambda x: x.current_limits)))
185
+ self.require(self.current_limits.contains(self.current_drawn), "overcurrent")
186
+
187
+ self.assign(self.output_thresholds,
188
+ self.sources.intersection(lambda x: x.output_thresholds)
189
+ .intersect(self.bidirs.intersection(lambda x: x.output_thresholds),))
190
+ self.assign(self.input_thresholds,
191
+ self.sinks.hull(lambda x: x.input_thresholds).hull(self.bidirs.hull(lambda x: x.input_thresholds)),
192
+ )
193
+ self.require(self.output_thresholds.contains(self.input_thresholds), "incompatible digital thresholds")
194
+
195
+ self.require(self.sources.any_connected() | (self.bidirs.length() > 0),
196
+ "requires connected source or bidir")
197
+
198
+ # ensure both digital levels can be driven (but pull-up or -down only connections are allowed)
199
+ self.assign(self.pullup_capable,
200
+ self.sources.any(lambda x: x.pullup_capable) |
201
+ self.sinks.any(lambda x: x.pullup_capable) |
202
+ self.bidirs.any(lambda x: x.pullup_capable))
203
+ self.assign(self.pulldown_capable,
204
+ self.sources.any(lambda x: x.pulldown_capable) |
205
+ self.sinks.any(lambda x: x.pulldown_capable) |
206
+ self.bidirs.any(lambda x: x.pulldown_capable))
207
+ self.assign(self._has_low_signal_driver, # assumed bidirs are true directional drivers
208
+ self.bidirs.any_connected() | self.sources.any(lambda x: x.low_driver))
209
+ self.assign(self._has_high_signal_driver,
210
+ self.bidirs.any_connected() | self.sources.any(lambda x: x.high_driver))
211
+
212
+ is_bridged_internal = (self.sources.any(lambda x: x._bridged_internal) |
213
+ self.sinks.any(lambda x: x._bridged_internal) |
214
+ self.bidirs.any(lambda x: x._bridged_internal))
215
+ self.require(is_bridged_internal |
216
+ self._has_high_signal_driver.implies(self._has_low_signal_driver | self.pulldown_capable), "requires low driver or pulldown")
217
+ self.require(is_bridged_internal |
218
+ self._has_low_signal_driver.implies(self._has_high_signal_driver | self.pullup_capable), "requires high driver or pullup")
219
+
220
+ # when multiple sources, ensure they all drive only one signal direction (eg, open drain)
221
+ self.require((self.sources.count(lambda x: x.high_driver) > 1).implies(~self.sources.any(lambda x: x.low_driver)) &
222
+ (self.sources.count(lambda x: x.low_driver) > 1).implies(~self.sources.any(lambda x: x.high_driver)),
223
+ "conflicting source drivers")
224
+
225
+
226
+ */
227
+ var DigitalLinkTester = /** @class */ (function (_super) {
228
+ __extends(DigitalLinkTester, _super);
229
+ function DigitalLinkTester() {
230
+ return _super !== null && _super.apply(this, arguments) || this;
231
+ }
232
+ DigitalLinkTester.prototype.init_link = function () {
233
+ var e_2, _a;
234
+ var sinks = [];
235
+ var sources = [];
236
+ var bidirs = [];
237
+ try {
238
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
239
+ var v = _c.value;
240
+ switch (v.type) {
241
+ case PortType.DigitalSource: {
242
+ sources.push(v);
243
+ break;
244
+ }
245
+ case PortType.DigitalSink: {
246
+ sinks.push(v);
247
+ break;
248
+ }
249
+ case PortType.DigitalBidir: {
250
+ bidirs.push(v);
251
+ break;
252
+ }
253
+ }
254
+ }
255
+ }
256
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
257
+ finally {
258
+ try {
259
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
260
+ }
261
+ finally { if (e_2) throw e_2.error; }
262
+ }
263
+ this.link = {
264
+ sources: sources,
265
+ sinks: sinks,
266
+ bidirs: bidirs,
267
+ };
268
+ return true;
269
+ };
270
+ DigitalLinkTester.prototype.check_parameter_propagation = function () {
271
+ var _a, _b, _c;
272
+ if (!this.link)
273
+ return;
274
+ var sources = (_a = this.link.sources) !== null && _a !== void 0 ? _a : [];
275
+ var sinks = (_b = this.link.sinks) !== null && _b !== void 0 ? _b : [];
276
+ var bidirs = (_c = this.link.bidirs) !== null && _c !== void 0 ? _c : [];
277
+ var all_defined_voltage = filter_defined_range.apply(void 0, __spreadArray(__spreadArray([], __read(bidirs.map(function (v) { return v.voltage_out; })), false), __read(sources.map(function (v) { return v.voltage_out; })), false));
278
+ if (all_defined_voltage.length > 0) {
279
+ var voltage = hull(all_defined_voltage);
280
+ var all_defined_voltage_limits = filter_defined_range(sinks.map(function (v) { return v.voltage_limits; }));
281
+ if (all_defined_voltage_limits.length > 0) {
282
+ var voltage_limits = intersection(all_defined_voltage_limits);
283
+ if (!contains(voltage_limits, voltage)) {
284
+ this.ctx.report.erc_errors.push(PP_OVER_DRIVEN(this.all_port_ids, 'voltage'));
285
+ }
286
+ }
287
+ }
288
+ var all_defined_current_limits = filter_defined_range.apply(void 0, __spreadArray(__spreadArray([], __read(bidirs.map(function (v) { return v.current_limits; })), false), __read(sources.map(function (v) { return v.current_limits; })), false));
289
+ if (all_defined_current_limits.length > 0) {
290
+ var current_limits = sum(all_defined_current_limits);
291
+ var all_defined_current_drawn = filter_defined_range(sinks.map(function (v) { return v.current_drawn; }));
292
+ if (all_defined_current_drawn.length > 0) {
293
+ var current_drawn = sum(all_defined_current_drawn);
294
+ if (interests(current_drawn, current_limits)) {
295
+ this.ctx.report.erc_errors.push(PP_OVER_DRIVEN(this.all_port_ids, 'current'));
296
+ }
297
+ }
298
+ }
299
+ var all_defined_output_thresholds = filter_defined_range.apply(void 0, __spreadArray(__spreadArray([], __read(bidirs.map(function (v) { return v.output_thresholds; })), false), __read(sources.map(function (v) { return v.output_thresholds; })), false));
300
+ if (all_defined_output_thresholds.length > 0) {
301
+ var output_thresholds = intersection(all_defined_output_thresholds);
302
+ var all_defined_input_thresholds = filter_defined_range(sinks.map(function (v) { return v.input_thresholds; }));
303
+ if (all_defined_input_thresholds.length > 0) {
304
+ var input_thresholds = hull(all_defined_input_thresholds);
305
+ if (!contains(output_thresholds, input_thresholds)) {
306
+ this.ctx.report.erc_errors.push(PP_INCOMPATIBLE_DIGITAL_THRESHOLDS(this.all_port_ids));
307
+ }
308
+ }
309
+ }
310
+ if (!sources.length && !bidirs.length) {
311
+ this.ctx.report.erc_errors.push(PP_REQUIRES_CONNECTED_SOURCE_OR_BIDIR(this.all_port_ids));
312
+ }
313
+ };
314
+ return DigitalLinkTester;
315
+ }(LinkTesterBase));
316
+ export { DigitalLinkTester };
317
+ /**
318
+ self.assign(self.voltage, self.source.voltage_out)
319
+ self.assign(self.voltage_limits, self.sinks.intersection(lambda x: x.voltage_limits))
320
+ self.require(self.voltage_limits.contains(self.voltage), "overvoltage")
321
+ self.assign(self.current_limits, self.source.current_limits)
322
+
323
+ self.assign(self.current_drawn, self.sinks.sum(lambda x: x.current_draw))
324
+ self.require(self.current_limits.contains(self.current_drawn), "overcurrent")
325
+ */
326
+ var VoltageLinkTester = /** @class */ (function (_super) {
327
+ __extends(VoltageLinkTester, _super);
328
+ function VoltageLinkTester() {
329
+ return _super !== null && _super.apply(this, arguments) || this;
330
+ }
331
+ VoltageLinkTester.prototype.check_parameter_propagation = function () {
332
+ var source = this.link.source;
333
+ var sinks = this.link.sinks;
334
+ if (range_is_defined(source.voltage_out)) {
335
+ var all_voltage_limits = filter_defined_range(sinks.map(function (v) { return v.voltage_limits; }));
336
+ if (all_voltage_limits.length > 0) {
337
+ var voltage_limits = intersection(all_voltage_limits);
338
+ if (!interests(voltage_limits, source.voltage_out)) {
339
+ this.ctx.report.erc_errors.push(PP_OVER_DRIVEN(this.all_port_ids, 'voltage'));
340
+ }
341
+ }
342
+ }
343
+ if (range_is_defined(source.current_limits)) {
344
+ var all_sinks_current_drawn = filter_defined_range(sinks.map(function (v) { return v.current_drawn; }));
345
+ if (all_sinks_current_drawn.length > 0) {
346
+ var current_drawn = sum(all_sinks_current_drawn);
347
+ if (interests(current_drawn, source.current_limits)) {
348
+ this.ctx.report.erc_errors.push(PP_OVER_DRIVEN(this.all_port_ids, 'current'));
349
+ }
350
+ }
351
+ }
352
+ };
353
+ VoltageLinkTester.prototype.init_link = function () {
354
+ var e_3, _a;
355
+ var sources = [];
356
+ var sinks = [];
357
+ try {
358
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
359
+ var v = _c.value;
360
+ switch (v.type) {
361
+ case PortType.VoltageSource: {
362
+ sources.push(v);
363
+ break;
364
+ }
365
+ case PortType.VoltageSink: {
366
+ sinks.push(v);
367
+ break;
368
+ }
369
+ }
370
+ }
371
+ }
372
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
373
+ finally {
374
+ try {
375
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
376
+ }
377
+ finally { if (e_3) throw e_3.error; }
378
+ }
379
+ if (sources.length === 0) {
380
+ this.ctx.report.erc_errors.push(PP_NOT_DRIVEN(this.all_port_ids));
381
+ return false;
382
+ }
383
+ if (sources.length > 1) {
384
+ this.ctx.report.erc_errors.push(PP_DUPLICATED_SOURCES(this.all_port_ids));
385
+ return false;
386
+ }
387
+ this.link = {
388
+ source: sources[0],
389
+ sinks: sinks,
390
+ };
391
+ return true;
392
+ };
393
+ return VoltageLinkTester;
394
+ }(LinkTesterBase));
395
+ export { VoltageLinkTester };
396
+ /*
397
+ self.description = DescriptionString(
398
+ "<b>voltage</b>: ", DescriptionString.FormatUnits(self.voltage, "V"),
399
+ " <b>of limits</b>: ", DescriptionString.FormatUnits(self.voltage_limits, "V"))
400
+
401
+ self.assign(self.voltage, self.ref.is_connected().then_else(
402
+ self.ref.voltage_out, (0, 0)*Volt
403
+ ))
404
+ self.assign(self.voltage_limits, self.gnds.intersection(lambda x: x.voltage_limits))
405
+ self.require(self.voltage_limits.contains(self.voltage), "overvoltage")
406
+ */
407
+ var GroundLinkTester = /** @class */ (function (_super) {
408
+ __extends(GroundLinkTester, _super);
409
+ function GroundLinkTester() {
410
+ return _super !== null && _super.apply(this, arguments) || this;
411
+ }
412
+ GroundLinkTester.prototype.check_parameter_propagation = function () {
413
+ if (!this.link)
414
+ return;
415
+ var ref = this.link.ref;
416
+ var gnds = this.link.gnds;
417
+ var voltage = ref === null || ref === void 0 ? void 0 : ref.voltage_out;
418
+ if (!voltage || !range_is_defined(voltage))
419
+ voltage = { lower: 0, upper: 0 };
420
+ var all_defined_voltage_limits = filter_defined_range(gnds.map(function (v) { return v.voltage_limits; }));
421
+ if (all_defined_voltage_limits.length > 0) {
422
+ var voltage_limits = intersection(all_defined_voltage_limits);
423
+ if (!interests(voltage_limits, voltage)) {
424
+ this.ctx.report.erc_errors.push(PP_OVER_DRIVEN(this.all_port_ids, 'voltage'));
425
+ }
426
+ }
427
+ };
428
+ GroundLinkTester.prototype.init_link = function () {
429
+ var e_4, _a;
430
+ var refs = [];
431
+ var gnds = [];
432
+ try {
433
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
434
+ var v = _c.value;
435
+ switch (v.type) {
436
+ case PortType.GroundReference: {
437
+ refs.push(v);
438
+ break;
439
+ }
440
+ case PortType.Ground: {
441
+ gnds.push(v);
442
+ break;
443
+ }
444
+ }
445
+ }
446
+ }
447
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
448
+ finally {
449
+ try {
450
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
451
+ }
452
+ finally { if (e_4) throw e_4.error; }
453
+ }
454
+ if (refs.length > 1) {
455
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'Cannot connect multiple ground references to a ground.'));
456
+ return false;
457
+ }
458
+ this.link = {
459
+ ref: refs[0],
460
+ gnds: gnds,
461
+ };
462
+ return true;
463
+ };
464
+ return GroundLinkTester;
465
+ }(LinkTesterBase));
466
+ export { GroundLinkTester };
467
+ /**
468
+ self.txd = self.connect(self.controller.txd, self.transceiver.txd, self.passive.map_extract(lambda port: port.txd),
469
+ flatten=True)
470
+ self.rxd = self.connect(self.controller.rxd, self.transceiver.rxd, self.passive.map_extract(lambda port: port.rxd),
471
+ flatten=True)
472
+ */
473
+ var CanLogicLinkTester = /** @class */ (function (_super) {
474
+ __extends(CanLogicLinkTester, _super);
475
+ function CanLogicLinkTester() {
476
+ return _super !== null && _super.apply(this, arguments) || this;
477
+ }
478
+ CanLogicLinkTester.prototype.check_parameter_propagation = function () {
479
+ var e_5, _a;
480
+ if (!this.link)
481
+ return;
482
+ var txd_tester = new DigitalLinkTester(this.ctx, __spreadArray([
483
+ this.link.controller.txd,
484
+ this.link.transceiver.rxd
485
+ ], __read(this.link.passive.map(function (port) { return port.rxd; })), false));
486
+ var rxd_tester = new DigitalLinkTester(this.ctx, __spreadArray([
487
+ this.link.controller.rxd,
488
+ this.link.transceiver.txd
489
+ ], __read(this.link.passive.map(function (port) { return port.txd; })), false));
490
+ try {
491
+ for (var _b = __values([txd_tester, rxd_tester]), _c = _b.next(); !_c.done; _c = _b.next()) {
492
+ var tst = _c.value;
493
+ tst.test();
494
+ }
495
+ }
496
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
497
+ finally {
498
+ try {
499
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
500
+ }
501
+ finally { if (e_5) throw e_5.error; }
502
+ }
503
+ };
504
+ CanLogicLinkTester.prototype.init_link = function () {
505
+ var e_6, _a;
506
+ var controllers = [];
507
+ var transceivers = [];
508
+ var passive = [];
509
+ try {
510
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
511
+ var v = _c.value;
512
+ switch (v.type) {
513
+ case PortType.CanControllerPort: {
514
+ controllers.push(v);
515
+ break;
516
+ }
517
+ case PortType.CanTransceiverPort: {
518
+ transceivers.push(v);
519
+ break;
520
+ }
521
+ case PortType.CanPassivePort: {
522
+ passive.push(v);
523
+ break;
524
+ }
525
+ }
526
+ }
527
+ }
528
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
529
+ finally {
530
+ try {
531
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
532
+ }
533
+ finally { if (e_6) throw e_6.error; }
534
+ }
535
+ if (controllers.length !== 1) {
536
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one controller port.'));
537
+ return false;
538
+ }
539
+ if (transceivers.length !== 1) {
540
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one transceiver port.'));
541
+ return false;
542
+ }
543
+ this.link = {
544
+ controller: controllers[0],
545
+ transceiver: transceivers[0],
546
+ passive: passive,
547
+ };
548
+ return true;
549
+ };
550
+ return CanLogicLinkTester;
551
+ }(CompositePortLinkTesterBase));
552
+ export { CanLogicLinkTester };
553
+ /**
554
+ self.canh = self.connect(self.nodes.map_extract(lambda node: node.canh),
555
+ flatten=True)
556
+ self.canl = self.connect(self.nodes.map_extract(lambda node: node.canl),
557
+ flatten=True)
558
+ */
559
+ var CanDiffLinkTester = /** @class */ (function (_super) {
560
+ __extends(CanDiffLinkTester, _super);
561
+ function CanDiffLinkTester() {
562
+ return _super !== null && _super.apply(this, arguments) || this;
563
+ }
564
+ CanDiffLinkTester.prototype.check_parameter_propagation = function () {
565
+ var e_7, _a;
566
+ if (!this.link)
567
+ return;
568
+ var canh_tester = new DigitalLinkTester(this.ctx, this.link.nodes.map(function (node) { return node.canh; }));
569
+ var canl_tester = new DigitalLinkTester(this.ctx, this.link.nodes.map(function (node) { return node.canl; }));
570
+ try {
571
+ for (var _b = __values([canh_tester, canl_tester]), _c = _b.next(); !_c.done; _c = _b.next()) {
572
+ var tst = _c.value;
573
+ tst.test();
574
+ }
575
+ }
576
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
577
+ finally {
578
+ try {
579
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
580
+ }
581
+ finally { if (e_7) throw e_7.error; }
582
+ }
583
+ };
584
+ CanDiffLinkTester.prototype.init_link = function () {
585
+ var e_8, _a;
586
+ var nodes = [];
587
+ try {
588
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
589
+ var v = _c.value;
590
+ if (v.type === PortType.CanDiffPort) {
591
+ nodes.push(v);
592
+ }
593
+ }
594
+ }
595
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
596
+ finally {
597
+ try {
598
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
599
+ }
600
+ finally { if (e_8) throw e_8.error; }
601
+ }
602
+ if (nodes.length === 0) {
603
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'Requires at least one CAN differential port'));
604
+ return false;
605
+ }
606
+ this.link = {
607
+ nodes: nodes,
608
+ };
609
+ return true;
610
+ };
611
+ return CanDiffLinkTester;
612
+ }(CompositePortLinkTesterBase));
613
+ export { CanDiffLinkTester };
614
+ /**
615
+ self.require(self.driver.frequency_limits.contains(self.frequency))
616
+
617
+ self.xi = self.connect(self.driver.xtal_in, self.crystal.xtal_in)
618
+ self.xo = self.connect(self.driver.xtal_out, self.crystal.xtal_out)
619
+ */
620
+ var CrystalLinkTester = /** @class */ (function (_super) {
621
+ __extends(CrystalLinkTester, _super);
622
+ function CrystalLinkTester() {
623
+ return _super !== null && _super.apply(this, arguments) || this;
624
+ }
625
+ CrystalLinkTester.prototype.check_parameter_propagation = function () {
626
+ if (!this.link)
627
+ return;
628
+ var driver = this.link.driver;
629
+ var crystal = this.link.crystal;
630
+ if (all_range_are_defined(driver.frequency_limits, crystal.frequency)) {
631
+ if (!contains(driver.frequency_limits, crystal.frequency)) {
632
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'Frequency out of range'));
633
+ }
634
+ }
635
+ };
636
+ CrystalLinkTester.prototype.init_link = function () {
637
+ var e_9, _a;
638
+ var drivers = [];
639
+ var crystals = [];
640
+ try {
641
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
642
+ var v = _c.value;
643
+ switch (v.type) {
644
+ case PortType.CrystalDriver: {
645
+ drivers.push(v);
646
+ break;
647
+ }
648
+ case PortType.CrystalPort: {
649
+ crystals.push(v);
650
+ break;
651
+ }
652
+ }
653
+ }
654
+ }
655
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
656
+ finally {
657
+ try {
658
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
659
+ }
660
+ finally { if (e_9) throw e_9.error; }
661
+ }
662
+ if (drivers.length !== 1) {
663
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one crystal driver port.'));
664
+ return false;
665
+ }
666
+ if (crystals.length !== 1) {
667
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one crystal port.'));
668
+ return false;
669
+ }
670
+ this.link = {
671
+ driver: drivers[0],
672
+ crystal: crystals[0],
673
+ };
674
+ return true;
675
+ };
676
+ return CrystalLinkTester;
677
+ }(CompositePortLinkTesterBase));
678
+ export { CrystalLinkTester };
679
+ /**
680
+ self.swdio = self.connect(self.host.swdio, self.device.swdio, self.pull.map_extract(lambda port: port.swdio),
681
+ flatten=True)
682
+ self.swclk = self.connect(self.host.swclk, self.device.swclk, self.pull.map_extract(lambda port: port.swclk),
683
+ flatten=True)
684
+ */
685
+ var SwdLinkTester = /** @class */ (function (_super) {
686
+ __extends(SwdLinkTester, _super);
687
+ function SwdLinkTester() {
688
+ return _super !== null && _super.apply(this, arguments) || this;
689
+ }
690
+ SwdLinkTester.prototype.check_parameter_propagation = function () {
691
+ var e_10, _a;
692
+ if (!this.link)
693
+ return;
694
+ var swdio_tester = new DigitalLinkTester(this.ctx, __spreadArray([
695
+ this.link.host.swdio,
696
+ this.link.device.swdio
697
+ ], __read(this.link.pull.map(function (port) { return port.swdio; })), false));
698
+ var swclk_tester = new DigitalLinkTester(this.ctx, __spreadArray([
699
+ this.link.host.swclk,
700
+ this.link.device.swclk
701
+ ], __read(this.link.pull.map(function (port) { return port.swclk; })), false));
702
+ try {
703
+ for (var _b = __values([swdio_tester, swclk_tester]), _c = _b.next(); !_c.done; _c = _b.next()) {
704
+ var tst = _c.value;
705
+ tst.test();
706
+ }
707
+ }
708
+ catch (e_10_1) { e_10 = { error: e_10_1 }; }
709
+ finally {
710
+ try {
711
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
712
+ }
713
+ finally { if (e_10) throw e_10.error; }
714
+ }
715
+ };
716
+ SwdLinkTester.prototype.init_link = function () {
717
+ var e_11, _a;
718
+ var hosts = [];
719
+ var devices = [];
720
+ var pull = [];
721
+ try {
722
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
723
+ var v = _c.value;
724
+ switch (v.type) {
725
+ case PortType.SwdHostPort: {
726
+ hosts.push(v);
727
+ break;
728
+ }
729
+ case PortType.SwdTargetPort: {
730
+ devices.push(v);
731
+ break;
732
+ }
733
+ case PortType.SwdPullPort: {
734
+ pull.push(v);
735
+ break;
736
+ }
737
+ }
738
+ }
739
+ }
740
+ catch (e_11_1) { e_11 = { error: e_11_1 }; }
741
+ finally {
742
+ try {
743
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
744
+ }
745
+ finally { if (e_11) throw e_11.error; }
746
+ }
747
+ if (hosts.length !== 1) {
748
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one SWD host port.'));
749
+ return false;
750
+ }
751
+ if (devices.length !== 1) {
752
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one SWD target port.'));
753
+ return false;
754
+ }
755
+ this.link = {
756
+ host: hosts[0],
757
+ device: devices[0],
758
+ pull: pull,
759
+ };
760
+ return true;
761
+ };
762
+ return SwdLinkTester;
763
+ }(CompositePortLinkTesterBase));
764
+ export { SwdLinkTester };
765
+ /**
766
+ self.require(self.pull.any_connected() | self.controller.has_pullup)
767
+ self.require(self.pull.length() <= 1, "at most one pullup")
768
+ self.require(self.addresses.all_unique(), "conflicting addresses on I2C bus")
769
+ self.scl = self.connect(self.pull.map_extract(lambda device: device.scl),
770
+ self.controller.scl, self.targets.map_extract(lambda device: device.scl),
771
+ flatten=True)
772
+ self.sda = self.connect(self.pull.map_extract(lambda device: device.sda),
773
+ self.controller.sda, self.targets.map_extract(lambda device: device.sda),
774
+ flatten=True)
775
+ */
776
+ var I2cLinkTester = /** @class */ (function (_super) {
777
+ __extends(I2cLinkTester, _super);
778
+ function I2cLinkTester() {
779
+ return _super !== null && _super.apply(this, arguments) || this;
780
+ }
781
+ I2cLinkTester.prototype.check_parameter_propagation = function () {
782
+ var e_12, _a;
783
+ if (!this.link)
784
+ return;
785
+ var scl_tester = new DigitalLinkTester(this.ctx, __spreadArray(__spreadArray(__spreadArray([], __read(this.link.pull.map(function (device) { return device.scl; })), false), [
786
+ this.link.controller.scl
787
+ ], false), __read(this.link.targets.map(function (device) { return device.scl; })), false));
788
+ var sda_tester = new DigitalLinkTester(this.ctx, __spreadArray(__spreadArray(__spreadArray([], __read(this.link.pull.map(function (device) { return device.sda; })), false), [
789
+ this.link.controller.sda
790
+ ], false), __read(this.link.targets.map(function (device) { return device.sda; })), false));
791
+ try {
792
+ for (var _b = __values([scl_tester, sda_tester]), _c = _b.next(); !_c.done; _c = _b.next()) {
793
+ var tst = _c.value;
794
+ tst.test();
795
+ }
796
+ }
797
+ catch (e_12_1) { e_12 = { error: e_12_1 }; }
798
+ finally {
799
+ try {
800
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
801
+ }
802
+ finally { if (e_12) throw e_12.error; }
803
+ }
804
+ if (!this.link.pull.length && !this.link.controller.has_pullup) {
805
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'Requires at least one pullup'));
806
+ }
807
+ if (this.link.pull.length > 1) {
808
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'At most one pullup allowed'));
809
+ }
810
+ var addresses = this.link.targets.map(function (target) { return target.addresses; });
811
+ if (new Set(addresses).size !== addresses.length) {
812
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'Conflicting addresses on I2C bus'));
813
+ }
814
+ };
815
+ I2cLinkTester.prototype.init_link = function () {
816
+ var e_13, _a;
817
+ var pull = [];
818
+ var controllers = [];
819
+ var targets = [];
820
+ try {
821
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
822
+ var v = _c.value;
823
+ switch (v.type) {
824
+ case PortType.I2cPullupPort: {
825
+ pull.push(v);
826
+ break;
827
+ }
828
+ case PortType.I2cController: {
829
+ controllers.push(v);
830
+ break;
831
+ }
832
+ case PortType.I2cTarget: {
833
+ targets.push(v);
834
+ break;
835
+ }
836
+ }
837
+ }
838
+ }
839
+ catch (e_13_1) { e_13 = { error: e_13_1 }; }
840
+ finally {
841
+ try {
842
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
843
+ }
844
+ finally { if (e_13) throw e_13.error; }
845
+ }
846
+ if (controllers.length !== 1) {
847
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one I2C controller port.'));
848
+ return false;
849
+ }
850
+ if (targets.length === 0) {
851
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be at least one I2C target port.'));
852
+ return false;
853
+ }
854
+ this.link = {
855
+ pull: pull,
856
+ controller: controllers[0],
857
+ targets: targets,
858
+ };
859
+ return true;
860
+ };
861
+ return I2cLinkTester;
862
+ }(CompositePortLinkTesterBase));
863
+ export { I2cLinkTester };
864
+ /**
865
+ self.sck = self.connect(self.controller.sck, self.target_receiver.sck)
866
+ self.ws = self.connect(self.controller.ws, self.target_receiver.ws)
867
+ self.sd = self.connect(self.controller.sd, self.target_receiver.sd)
868
+
869
+ */
870
+ var I2sLinkTester = /** @class */ (function (_super) {
871
+ __extends(I2sLinkTester, _super);
872
+ function I2sLinkTester() {
873
+ return _super !== null && _super.apply(this, arguments) || this;
874
+ }
875
+ I2sLinkTester.prototype.check_parameter_propagation = function () {
876
+ var e_14, _a;
877
+ if (!this.link)
878
+ return;
879
+ var controller = this.link.controller;
880
+ var target_receiver = this.link.target_receiver;
881
+ var sck_tester = new DigitalLinkTester(this.ctx, [controller.sck, target_receiver.sck]);
882
+ var ws_tester = new DigitalLinkTester(this.ctx, [controller.ws, target_receiver.ws]);
883
+ var sd_tester = new DigitalLinkTester(this.ctx, [controller.sd, target_receiver.sd]);
884
+ try {
885
+ for (var _b = __values([sck_tester, ws_tester, sd_tester]), _c = _b.next(); !_c.done; _c = _b.next()) {
886
+ var tst = _c.value;
887
+ tst.test();
888
+ }
889
+ }
890
+ catch (e_14_1) { e_14 = { error: e_14_1 }; }
891
+ finally {
892
+ try {
893
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
894
+ }
895
+ finally { if (e_14) throw e_14.error; }
896
+ }
897
+ };
898
+ I2sLinkTester.prototype.init_link = function () {
899
+ var e_15, _a;
900
+ var controllers = [];
901
+ var target_receivers = [];
902
+ try {
903
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
904
+ var v = _c.value;
905
+ switch (v.type) {
906
+ case PortType.I2sController: {
907
+ controllers.push(v);
908
+ break;
909
+ }
910
+ case PortType.I2sTargetReceiver: {
911
+ target_receivers.push(v);
912
+ break;
913
+ }
914
+ }
915
+ }
916
+ }
917
+ catch (e_15_1) { e_15 = { error: e_15_1 }; }
918
+ finally {
919
+ try {
920
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
921
+ }
922
+ finally { if (e_15) throw e_15.error; }
923
+ }
924
+ if (controllers.length !== 1) {
925
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one I2S controller port.'));
926
+ return false;
927
+ }
928
+ if (target_receivers.length !== 1) {
929
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one I2S target receiver port.'));
930
+ return false;
931
+ }
932
+ this.link = {
933
+ controller: controllers[0],
934
+ target_receiver: target_receivers[0],
935
+ };
936
+ return true;
937
+ };
938
+ return I2sLinkTester;
939
+ }(CompositePortLinkTesterBase));
940
+ export { I2sLinkTester };
941
+ /**
942
+ self.sck = self.connect(self.controller.sck, self.peripherals.map_extract(lambda device: device.sck),
943
+ flatten=True)
944
+ self.miso = self.connect(self.controller.miso, self.peripherals.map_extract(lambda device: device.miso),
945
+ flatten=True)
946
+ self.mosi = self.connect(self.controller.mosi, self.peripherals.map_extract(lambda device: device.mosi),
947
+ flatten=True)
948
+
949
+ */
950
+ var SpiLinkTester = /** @class */ (function (_super) {
951
+ __extends(SpiLinkTester, _super);
952
+ function SpiLinkTester() {
953
+ return _super !== null && _super.apply(this, arguments) || this;
954
+ }
955
+ SpiLinkTester.prototype.check_parameter_propagation = function () {
956
+ var e_16, _a;
957
+ if (!this.link)
958
+ return;
959
+ var controller = this.link.controller;
960
+ var peripherals = this.link.peripherals;
961
+ var sck_tester = new DigitalLinkTester(this.ctx, __spreadArray([controller.sck], __read(peripherals.map(function (device) { return device.sck; })), false));
962
+ var miso_tester = new DigitalLinkTester(this.ctx, __spreadArray([controller.miso], __read(peripherals.map(function (device) { return device.miso; })), false));
963
+ var mosi_tester = new DigitalLinkTester(this.ctx, __spreadArray([controller.mosi], __read(peripherals.map(function (device) { return device.mosi; })), false));
964
+ try {
965
+ for (var _b = __values([sck_tester, miso_tester, mosi_tester]), _c = _b.next(); !_c.done; _c = _b.next()) {
966
+ var tst = _c.value;
967
+ tst.test();
968
+ }
969
+ }
970
+ catch (e_16_1) { e_16 = { error: e_16_1 }; }
971
+ finally {
972
+ try {
973
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
974
+ }
975
+ finally { if (e_16) throw e_16.error; }
976
+ }
977
+ };
978
+ SpiLinkTester.prototype.init_link = function () {
979
+ var e_17, _a;
980
+ var controllers = [];
981
+ var peripherals = [];
982
+ try {
983
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
984
+ var v = _c.value;
985
+ switch (v.type) {
986
+ case PortType.SpiController: {
987
+ controllers.push(v);
988
+ break;
989
+ }
990
+ case PortType.SpiPeripheral: {
991
+ peripherals.push(v);
992
+ break;
993
+ }
994
+ }
995
+ }
996
+ }
997
+ catch (e_17_1) { e_17 = { error: e_17_1 }; }
998
+ finally {
999
+ try {
1000
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1001
+ }
1002
+ finally { if (e_17) throw e_17.error; }
1003
+ }
1004
+ if (controllers.length !== 1) {
1005
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one SPI controller port.'));
1006
+ return false;
1007
+ }
1008
+ if (peripherals.length === 0) {
1009
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be at least one SPI peripheral port.'));
1010
+ return false;
1011
+ }
1012
+ this.link = {
1013
+ controller: controllers[0],
1014
+ peripherals: peripherals,
1015
+ };
1016
+ return true;
1017
+ };
1018
+ return SpiLinkTester;
1019
+ }(CompositePortLinkTesterBase));
1020
+ export { SpiLinkTester };
1021
+ /**
1022
+ self.a = self.connect(self.source.a, self.sink.a)
1023
+ self.b = self.connect(self.source.b, self.sink.b)
1024
+ */
1025
+ var SpeakerLinkTester = /** @class */ (function (_super) {
1026
+ __extends(SpeakerLinkTester, _super);
1027
+ function SpeakerLinkTester() {
1028
+ return _super !== null && _super.apply(this, arguments) || this;
1029
+ }
1030
+ SpeakerLinkTester.prototype.check_parameter_propagation = function () {
1031
+ var e_18, _a;
1032
+ if (!this.link)
1033
+ return;
1034
+ var a_tester = new AnalogLinkTester(this.ctx, [this.link.source.a, this.link.sink.a]);
1035
+ var b_tester = new AnalogLinkTester(this.ctx, [this.link.source.b, this.link.sink.b]);
1036
+ try {
1037
+ for (var _b = __values([a_tester, b_tester]), _c = _b.next(); !_c.done; _c = _b.next()) {
1038
+ var tst = _c.value;
1039
+ tst.test();
1040
+ }
1041
+ }
1042
+ catch (e_18_1) { e_18 = { error: e_18_1 }; }
1043
+ finally {
1044
+ try {
1045
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1046
+ }
1047
+ finally { if (e_18) throw e_18.error; }
1048
+ }
1049
+ };
1050
+ SpeakerLinkTester.prototype.init_link = function () {
1051
+ var e_19, _a;
1052
+ var sources = [];
1053
+ var sinks = [];
1054
+ try {
1055
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
1056
+ var v = _c.value;
1057
+ switch (v.type) {
1058
+ case PortType.SpeakerDriverPort: {
1059
+ sources.push(v);
1060
+ break;
1061
+ }
1062
+ case PortType.SpeakerPort: {
1063
+ sinks.push(v);
1064
+ break;
1065
+ }
1066
+ }
1067
+ }
1068
+ }
1069
+ catch (e_19_1) { e_19 = { error: e_19_1 }; }
1070
+ finally {
1071
+ try {
1072
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1073
+ }
1074
+ finally { if (e_19) throw e_19.error; }
1075
+ }
1076
+ if (sources.length !== 1) {
1077
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one speaker driver port.'));
1078
+ return false;
1079
+ }
1080
+ if (sinks.length !== 1) {
1081
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one speaker port.'));
1082
+ return false;
1083
+ }
1084
+ this.link = {
1085
+ source: sources[0],
1086
+ sink: sinks[0],
1087
+ };
1088
+ return true;
1089
+ };
1090
+ return SpeakerLinkTester;
1091
+ }(CompositePortLinkTesterBase));
1092
+ export { SpeakerLinkTester };
1093
+ /**
1094
+ self.driver = self.Port(TouchDriver())
1095
+ self.pad = self.Port(TouchPadPort())
1096
+ */
1097
+ var TouchLinkTester = /** @class */ (function (_super) {
1098
+ __extends(TouchLinkTester, _super);
1099
+ function TouchLinkTester() {
1100
+ return _super !== null && _super.apply(this, arguments) || this;
1101
+ }
1102
+ TouchLinkTester.prototype.init_link = function () {
1103
+ var e_20, _a;
1104
+ var drivers = [];
1105
+ var pads = [];
1106
+ try {
1107
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
1108
+ var v = _c.value;
1109
+ switch (v.type) {
1110
+ case PortType.TouchDriver: {
1111
+ drivers.push(v);
1112
+ break;
1113
+ }
1114
+ case PortType.TouchPadPort: {
1115
+ pads.push(v);
1116
+ break;
1117
+ }
1118
+ }
1119
+ }
1120
+ }
1121
+ catch (e_20_1) { e_20 = { error: e_20_1 }; }
1122
+ finally {
1123
+ try {
1124
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1125
+ }
1126
+ finally { if (e_20) throw e_20.error; }
1127
+ }
1128
+ if (drivers.length !== 1) {
1129
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one touch driver port.'));
1130
+ return false;
1131
+ }
1132
+ if (pads.length !== 1) {
1133
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one touch pad port.'));
1134
+ return false;
1135
+ }
1136
+ this.link = {
1137
+ driver: drivers[0],
1138
+ pad: pads[0],
1139
+ };
1140
+ return true;
1141
+ };
1142
+ TouchLinkTester.prototype.check_parameter_propagation = function () {
1143
+ return;
1144
+ };
1145
+ return TouchLinkTester;
1146
+ }(LinkTesterBase));
1147
+ export { TouchLinkTester };
1148
+ /**
1149
+ self.a_tx = self.connect(self.a.tx, self.b.rx)
1150
+ self.b_tx = self.connect(self.b.tx, self.a.rx)
1151
+
1152
+ */
1153
+ var UartLinkTester = /** @class */ (function (_super) {
1154
+ __extends(UartLinkTester, _super);
1155
+ function UartLinkTester() {
1156
+ return _super !== null && _super.apply(this, arguments) || this;
1157
+ }
1158
+ UartLinkTester.prototype.check_parameter_propagation = function () {
1159
+ var e_21, _a;
1160
+ if (!this.link)
1161
+ return;
1162
+ var tx_tester = new DigitalLinkTester(this.ctx, [this.link.a.tx, this.link.b.rx]);
1163
+ var rx_tester = new DigitalLinkTester(this.ctx, [this.link.b.tx, this.link.a.rx]);
1164
+ try {
1165
+ for (var _b = __values([tx_tester, rx_tester]), _c = _b.next(); !_c.done; _c = _b.next()) {
1166
+ var tst = _c.value;
1167
+ tst.test();
1168
+ }
1169
+ }
1170
+ catch (e_21_1) { e_21 = { error: e_21_1 }; }
1171
+ finally {
1172
+ try {
1173
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1174
+ }
1175
+ finally { if (e_21) throw e_21.error; }
1176
+ }
1177
+ };
1178
+ UartLinkTester.prototype.init_link = function () {
1179
+ var e_22, _a;
1180
+ var ports = [];
1181
+ try {
1182
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
1183
+ var v = _c.value;
1184
+ if (v.type === PortType.UartPort) {
1185
+ ports.push(v);
1186
+ }
1187
+ }
1188
+ }
1189
+ catch (e_22_1) { e_22 = { error: e_22_1 }; }
1190
+ finally {
1191
+ try {
1192
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1193
+ }
1194
+ finally { if (e_22) throw e_22.error; }
1195
+ }
1196
+ if (ports.length !== 2) {
1197
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly two UART ports.'));
1198
+ return false;
1199
+ }
1200
+ this.link = {
1201
+ a: ports[0],
1202
+ b: ports[1],
1203
+ };
1204
+ return true;
1205
+ };
1206
+ return UartLinkTester;
1207
+ }(CompositePortLinkTesterBase));
1208
+ export { UartLinkTester };
1209
+ /**
1210
+
1211
+ self.d_P = self.connect(self.host.dp, self.device.dp, self.passive.map_extract(lambda port: port.dp),
1212
+ flatten=True)
1213
+ self.d_N = self.connect(self.host.dm, self.device.dm, self.passive.map_extract(lambda port: port.dm),
1214
+ flatten=True)
1215
+ */
1216
+ var UsbLinkTester = /** @class */ (function (_super) {
1217
+ __extends(UsbLinkTester, _super);
1218
+ function UsbLinkTester() {
1219
+ return _super !== null && _super.apply(this, arguments) || this;
1220
+ }
1221
+ UsbLinkTester.prototype.check_parameter_propagation = function () {
1222
+ var e_23, _a;
1223
+ if (!this.link)
1224
+ return;
1225
+ var dp_tester = new DigitalLinkTester(this.ctx, __spreadArray([
1226
+ this.link.host.dp,
1227
+ this.link.device.dp
1228
+ ], __read(this.link.passive.map(function (port) { return port.dp; })), false));
1229
+ var dm_tester = new DigitalLinkTester(this.ctx, __spreadArray([
1230
+ this.link.host.dm,
1231
+ this.link.device.dm
1232
+ ], __read(this.link.passive.map(function (port) { return port.dm; })), false));
1233
+ try {
1234
+ for (var _b = __values([dp_tester, dm_tester]), _c = _b.next(); !_c.done; _c = _b.next()) {
1235
+ var tst = _c.value;
1236
+ tst.test();
1237
+ }
1238
+ }
1239
+ catch (e_23_1) { e_23 = { error: e_23_1 }; }
1240
+ finally {
1241
+ try {
1242
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1243
+ }
1244
+ finally { if (e_23) throw e_23.error; }
1245
+ }
1246
+ };
1247
+ UsbLinkTester.prototype.init_link = function () {
1248
+ var e_24, _a;
1249
+ var hosts = [];
1250
+ var devices = [];
1251
+ var passive = [];
1252
+ try {
1253
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
1254
+ var v = _c.value;
1255
+ switch (v.type) {
1256
+ case PortType.UsbHostPort: {
1257
+ hosts.push(v);
1258
+ break;
1259
+ }
1260
+ case PortType.UsbDevicePort: {
1261
+ devices.push(v);
1262
+ break;
1263
+ }
1264
+ case PortType.UsbPassivePort: {
1265
+ passive.push(v);
1266
+ break;
1267
+ }
1268
+ }
1269
+ }
1270
+ }
1271
+ catch (e_24_1) { e_24 = { error: e_24_1 }; }
1272
+ finally {
1273
+ try {
1274
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1275
+ }
1276
+ finally { if (e_24) throw e_24.error; }
1277
+ }
1278
+ if (hosts.length !== 1) {
1279
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one USB host port.'));
1280
+ return false;
1281
+ }
1282
+ if (devices.length !== 1) {
1283
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one USB device port.'));
1284
+ return false;
1285
+ }
1286
+ this.link = {
1287
+ host: hosts[0],
1288
+ device: devices[0],
1289
+ passive: passive,
1290
+ };
1291
+ return true;
1292
+ };
1293
+ return UsbLinkTester;
1294
+ }(CompositePortLinkTesterBase));
1295
+ export { UsbLinkTester };
1296
+ /**
1297
+ self.cc1 = self.Port(DigitalBidir(pullup_capable=pullup_capable))
1298
+ self.cc2 = self.Port(DigitalBidir(pullup_capable=pullup_capable))
1299
+
1300
+ */
1301
+ var UsbCcLinkTester = /** @class */ (function (_super) {
1302
+ __extends(UsbCcLinkTester, _super);
1303
+ function UsbCcLinkTester() {
1304
+ return _super !== null && _super.apply(this, arguments) || this;
1305
+ }
1306
+ UsbCcLinkTester.prototype.check_parameter_propagation = function () {
1307
+ var e_25, _a;
1308
+ if (!this.link)
1309
+ return;
1310
+ var cc1_tester = new DigitalLinkTester(this.ctx, [this.link.a.cc1, this.link.b.cc1]);
1311
+ var cc2_tester = new DigitalLinkTester(this.ctx, [this.link.a.cc2, this.link.b.cc2]);
1312
+ try {
1313
+ for (var _b = __values([cc1_tester, cc2_tester]), _c = _b.next(); !_c.done; _c = _b.next()) {
1314
+ var tst = _c.value;
1315
+ tst.test();
1316
+ }
1317
+ }
1318
+ catch (e_25_1) { e_25 = { error: e_25_1 }; }
1319
+ finally {
1320
+ try {
1321
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1322
+ }
1323
+ finally { if (e_25) throw e_25.error; }
1324
+ }
1325
+ };
1326
+ UsbCcLinkTester.prototype.init_link = function () {
1327
+ var e_26, _a;
1328
+ var nodes = [];
1329
+ try {
1330
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
1331
+ var v = _c.value;
1332
+ if (v.type === PortType.UsbCcPort) {
1333
+ nodes.push(v);
1334
+ }
1335
+ }
1336
+ }
1337
+ catch (e_26_1) { e_26 = { error: e_26_1 }; }
1338
+ finally {
1339
+ try {
1340
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1341
+ }
1342
+ finally { if (e_26) throw e_26.error; }
1343
+ }
1344
+ if (nodes.length !== 2) {
1345
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly two CC ports.'));
1346
+ return false;
1347
+ }
1348
+ this.link = {
1349
+ a: nodes[0],
1350
+ b: nodes[1],
1351
+ };
1352
+ return true;
1353
+ };
1354
+ return UsbCcLinkTester;
1355
+ }(CompositePortLinkTesterBase));
1356
+ export { UsbCcLinkTester };
1357
+ /**
1358
+
1359
+ self.xclk = self.connect(self.host.xclk, self.cam.xclk)
1360
+ self.pclk = self.connect(self.host.pclk, self.cam.pclk)
1361
+ self.href = self.connect(self.host.href, self.cam.href)
1362
+ self.vsync = self.connect(self.host.vsync, self.cam.vsync)
1363
+
1364
+ self.y0 = self.connect(self.host.y0, self.cam.y0)
1365
+ self.y1 = self.connect(self.host.y1, self.cam.y1)
1366
+ self.y2 = self.connect(self.host.y2, self.cam.y2)
1367
+ self.y3 = self.connect(self.host.y3, self.cam.y3)
1368
+ self.y4 = self.connect(self.host.y4, self.cam.y4)
1369
+ self.y5 = self.connect(self.host.y5, self.cam.y5)
1370
+ self.y6 = self.connect(self.host.y6, self.cam.y6)
1371
+ self.y7 = self.connect(self.host.y7, self.cam.y7)
1372
+
1373
+ */
1374
+ var Dvp8LinkTester = /** @class */ (function (_super) {
1375
+ __extends(Dvp8LinkTester, _super);
1376
+ function Dvp8LinkTester() {
1377
+ return _super !== null && _super.apply(this, arguments) || this;
1378
+ }
1379
+ Dvp8LinkTester.prototype.check_parameter_propagation = function () {
1380
+ var e_27, _a;
1381
+ if (!this.link)
1382
+ return;
1383
+ var host = this.link.host;
1384
+ var cam = this.link.cam;
1385
+ var digitalLinks = [
1386
+ [host.xclk, cam.xclk],
1387
+ [host.pclk, cam.pclk],
1388
+ [host.href, cam.href],
1389
+ [host.vsync, cam.vsync],
1390
+ [host.y0, cam.y0],
1391
+ [host.y1, cam.y1],
1392
+ [host.y2, cam.y2],
1393
+ [host.y3, cam.y3],
1394
+ [host.y4, cam.y4],
1395
+ [host.y5, cam.y5],
1396
+ [host.y6, cam.y6],
1397
+ [host.y7, cam.y7],
1398
+ ];
1399
+ try {
1400
+ for (var digitalLinks_1 = __values(digitalLinks), digitalLinks_1_1 = digitalLinks_1.next(); !digitalLinks_1_1.done; digitalLinks_1_1 = digitalLinks_1.next()) {
1401
+ var _b = __read(digitalLinks_1_1.value, 2), hostPort = _b[0], camPort = _b[1];
1402
+ var tester = new DigitalLinkTester(this.ctx, [hostPort, camPort]);
1403
+ tester.test();
1404
+ }
1405
+ }
1406
+ catch (e_27_1) { e_27 = { error: e_27_1 }; }
1407
+ finally {
1408
+ try {
1409
+ if (digitalLinks_1_1 && !digitalLinks_1_1.done && (_a = digitalLinks_1.return)) _a.call(digitalLinks_1);
1410
+ }
1411
+ finally { if (e_27) throw e_27.error; }
1412
+ }
1413
+ };
1414
+ Dvp8LinkTester.prototype.init_link = function () {
1415
+ var e_28, _a;
1416
+ var hosts = [];
1417
+ var cams = [];
1418
+ try {
1419
+ for (var _b = __values(this.ports), _c = _b.next(); !_c.done; _c = _b.next()) {
1420
+ var v = _c.value;
1421
+ switch (v.type) {
1422
+ case PortType.Dvp8Host: {
1423
+ hosts.push(v);
1424
+ break;
1425
+ }
1426
+ case PortType.Dvp8Camera: {
1427
+ cams.push(v);
1428
+ break;
1429
+ }
1430
+ }
1431
+ }
1432
+ }
1433
+ catch (e_28_1) { e_28 = { error: e_28_1 }; }
1434
+ finally {
1435
+ try {
1436
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1437
+ }
1438
+ finally { if (e_28) throw e_28.error; }
1439
+ }
1440
+ if (hosts.length !== 1) {
1441
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one DVP8 host port.'));
1442
+ return false;
1443
+ }
1444
+ if (cams.length !== 1) {
1445
+ this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one DVP8 camera port.'));
1446
+ return false;
1447
+ }
1448
+ this.link = {
1449
+ host: hosts[0],
1450
+ cam: cams[0],
1451
+ };
1452
+ return true;
1453
+ };
1454
+ return Dvp8LinkTester;
1455
+ }(CompositePortLinkTesterBase));
1456
+ export { Dvp8LinkTester };