@modular-circuit/perc 0.0.54 → 0.0.57
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.
- package/build/erc/connect_graph_visitor/index.js +1 -17
- package/build/erc/connect_graph_visitor/visitor.js +0 -2
- package/build/erc/context/connection_graph_builder_ctx.js +0 -2
- package/build/erc/context/error_severity.js +2 -5
- package/build/erc/context/graph.js +0 -2
- package/build/erc/context/graph_converter.js +0 -2
- package/build/erc/context/index.js +5 -21
- package/build/erc/context/pin_to_pin_test_ctx.js +0 -2
- package/build/erc/index.js +4 -20
- package/build/erc/netlist/constraints.js +9 -12
- package/build/erc/netlist/index.js +2 -18
- package/build/erc/netlist/tester.js +54 -35
- package/build/erc/parameter_propagation/error_code.js +37 -39
- package/build/erc/parameter_propagation/index.js +2 -18
- package/build/erc/parameter_propagation/link_testers/index.js +1 -17
- package/build/erc/parameter_propagation/link_testers/link_tester_base.js +101 -33
- package/build/erc/parameter_propagation/link_testers/tester_impl.js +953 -511
- package/build/erc/parameter_propagation/tester.js +195 -131
- package/build/erc/pin_compatibility_matrix/erc_setting.js +80 -82
- package/build/erc/pin_compatibility_matrix/error_code.js +2 -5
- package/build/erc/pin_compatibility_matrix/index.js +4 -20
- package/build/erc/pin_compatibility_matrix/pin_error.js +2 -5
- package/build/erc/pin_compatibility_matrix/tester.js +18 -21
- package/build/graphics/index.js +2 -18
- package/build/graphics/maker/index.js +3 -19
- package/build/graphics/maker/maker_base.js +0 -2
- package/build/graphics/maker/maker_type.js +2 -5
- package/build/graphics/maker/sch_maker.js +0 -2
- package/build/graphics/sch_erc_item.js +0 -2
- package/build/index.js +5 -21
- package/build/report/erc_report.js +9 -12
- package/build/report/erc_reporter.js +68 -88
- package/build/report/index.js +2 -18
- package/build/rule_check_item/erc_item.js +0 -2
- package/build/rule_check_item/index.js +2 -18
- package/build/rule_check_item/rc_item.js +0 -2
- package/build/tester/erc_tester.js +61 -27
- package/build/tester/graph/connection_graphs_builder.js +167 -84
- package/build/tester/graph/graph_erc.js +61 -12
- package/build/tester/graph/index.js +3 -19
- package/build/tester/graph/ir_graph_converter.js +254 -117
- package/build/tester/index.js +2 -18
- package/build/utils/get_dependent_modules_definition.js +141 -17
- package/build/utils/index.js +1 -17
- package/package.json +4 -4
|
@@ -1,10 +1,58 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// add the other testers following the AnalogLinkTester
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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';
|
|
8
56
|
/**
|
|
9
57
|
self.assign(self.sink_impedance, 1 / (1 / self.sinks.map_extract(lambda x: x.impedance)).sum())
|
|
10
58
|
self.require(self.source.impedance.upper() <= self.sink_impedance.lower() * 0.1) # about 10x for signal integrity
|
|
@@ -18,86 +66,102 @@ const report_1 = require("../../../report");
|
|
|
18
66
|
self.assign(self.current_limits, self.source.current_limits)
|
|
19
67
|
self.require(self.current_limits.contains(self.current_drawn), "overcurrent")
|
|
20
68
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
+
}
|
|
34
90
|
}
|
|
35
91
|
}
|
|
36
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
|
+
}
|
|
37
100
|
if (sources.length === 0) {
|
|
38
|
-
this.ctx.report.erc_errors.push(
|
|
101
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'Requires a connected analog source'));
|
|
39
102
|
return false;
|
|
40
103
|
}
|
|
41
104
|
if (sources.length > 1) {
|
|
42
|
-
this.ctx.report.erc_errors.push(
|
|
105
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'Multiple analog sources are not allowed'));
|
|
43
106
|
return false;
|
|
44
107
|
}
|
|
45
108
|
this.link = {
|
|
46
109
|
source: sources[0],
|
|
47
|
-
sinks,
|
|
110
|
+
sinks: sinks,
|
|
48
111
|
};
|
|
49
112
|
return true;
|
|
50
|
-
}
|
|
51
|
-
check_parameter_propagation() {
|
|
113
|
+
};
|
|
114
|
+
AnalogLinkTester.prototype.check_parameter_propagation = function () {
|
|
52
115
|
if (!this.link)
|
|
53
116
|
return;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
if (
|
|
58
|
-
|
|
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; }));
|
|
59
122
|
if (all_sinks_impedance.length > 0) {
|
|
60
|
-
|
|
123
|
+
var sink_impedance = r_div(sum(all_sinks_impedance.map(function (v) { return r_div(v, 1); })), 1);
|
|
61
124
|
if (source.impedance.upper > sink_impedance.lower * 0.1) {
|
|
62
|
-
this.ctx.report.erc_errors.push(
|
|
125
|
+
this.ctx.report.erc_errors.push(PP_IMPEDANCE_SIGNAL_INTEGRITY(this.all_port_ids));
|
|
63
126
|
}
|
|
64
127
|
}
|
|
65
128
|
}
|
|
66
|
-
if (
|
|
67
|
-
|
|
129
|
+
if (range_is_defined(source.voltage_out)) {
|
|
130
|
+
var all_voltage_limits = filter_defined_range(sinks.map(function (v) { return v.voltage_limits; }));
|
|
68
131
|
if (all_voltage_limits.length > 0) {
|
|
69
|
-
|
|
70
|
-
if (!
|
|
71
|
-
this.ctx.report.erc_errors.push(
|
|
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));
|
|
72
135
|
}
|
|
73
136
|
}
|
|
74
137
|
}
|
|
75
|
-
if (
|
|
76
|
-
if (!
|
|
77
|
-
this.ctx.report.erc_errors.push(
|
|
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));
|
|
78
141
|
}
|
|
79
142
|
}
|
|
80
|
-
if (
|
|
81
|
-
|
|
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; }));
|
|
82
145
|
if (all_sinks_signal_limits.length > 0) {
|
|
83
|
-
|
|
84
|
-
if (!
|
|
85
|
-
this.ctx.report.erc_errors.push(
|
|
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));
|
|
86
149
|
}
|
|
87
150
|
}
|
|
88
151
|
}
|
|
89
|
-
if (
|
|
90
|
-
|
|
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; }));
|
|
91
154
|
if (all_sinks_current_drawn.length > 0) {
|
|
92
|
-
|
|
93
|
-
if (
|
|
94
|
-
this.ctx.report.erc_errors.push(
|
|
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'));
|
|
95
158
|
}
|
|
96
159
|
}
|
|
97
160
|
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
161
|
+
};
|
|
162
|
+
return AnalogLinkTester;
|
|
163
|
+
}(LinkTesterBase));
|
|
164
|
+
export { AnalogLinkTester };
|
|
101
165
|
/**
|
|
102
166
|
|
|
103
167
|
voltage_hull = self.bidirs.hull(lambda x: x.voltage_out)
|
|
@@ -160,79 +224,96 @@ exports.AnalogLinkTester = AnalogLinkTester;
|
|
|
160
224
|
|
|
161
225
|
|
|
162
226
|
*/
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
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
|
+
}
|
|
181
253
|
}
|
|
182
254
|
}
|
|
183
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
|
+
}
|
|
184
263
|
this.link = {
|
|
185
|
-
sources,
|
|
186
|
-
sinks,
|
|
187
|
-
bidirs,
|
|
264
|
+
sources: sources,
|
|
265
|
+
sinks: sinks,
|
|
266
|
+
bidirs: bidirs,
|
|
188
267
|
};
|
|
189
268
|
return true;
|
|
190
|
-
}
|
|
191
|
-
check_parameter_propagation() {
|
|
269
|
+
};
|
|
270
|
+
DigitalLinkTester.prototype.check_parameter_propagation = function () {
|
|
271
|
+
var _a, _b, _c;
|
|
192
272
|
if (!this.link)
|
|
193
273
|
return;
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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));
|
|
198
278
|
if (all_defined_voltage.length > 0) {
|
|
199
|
-
|
|
200
|
-
|
|
279
|
+
var voltage = hull(all_defined_voltage);
|
|
280
|
+
var all_defined_voltage_limits = filter_defined_range(sinks.map(function (v) { return v.voltage_limits; }));
|
|
201
281
|
if (all_defined_voltage_limits.length > 0) {
|
|
202
|
-
|
|
203
|
-
if (!
|
|
204
|
-
this.ctx.report.erc_errors.push(
|
|
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'));
|
|
205
285
|
}
|
|
206
286
|
}
|
|
207
287
|
}
|
|
208
|
-
|
|
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));
|
|
209
289
|
if (all_defined_current_limits.length > 0) {
|
|
210
|
-
|
|
211
|
-
|
|
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; }));
|
|
212
292
|
if (all_defined_current_drawn.length > 0) {
|
|
213
|
-
|
|
214
|
-
if (
|
|
215
|
-
this.ctx.report.erc_errors.push(
|
|
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'));
|
|
216
296
|
}
|
|
217
297
|
}
|
|
218
298
|
}
|
|
219
|
-
|
|
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));
|
|
220
300
|
if (all_defined_output_thresholds.length > 0) {
|
|
221
|
-
|
|
222
|
-
|
|
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; }));
|
|
223
303
|
if (all_defined_input_thresholds.length > 0) {
|
|
224
|
-
|
|
225
|
-
if (!
|
|
226
|
-
this.ctx.report.erc_errors.push(
|
|
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));
|
|
227
307
|
}
|
|
228
308
|
}
|
|
229
309
|
}
|
|
230
310
|
if (!sources.length && !bidirs.length) {
|
|
231
|
-
this.ctx.report.erc_errors.push(
|
|
311
|
+
this.ctx.report.erc_errors.push(PP_REQUIRES_CONNECTED_SOURCE_OR_BIDIR(this.all_port_ids));
|
|
232
312
|
}
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
|
|
313
|
+
};
|
|
314
|
+
return DigitalLinkTester;
|
|
315
|
+
}(LinkTesterBase));
|
|
316
|
+
export { DigitalLinkTester };
|
|
236
317
|
/**
|
|
237
318
|
self.assign(self.voltage, self.source.voltage_out)
|
|
238
319
|
self.assign(self.voltage_limits, self.sinks.intersection(lambda x: x.voltage_limits))
|
|
@@ -242,60 +323,76 @@ exports.DigitalLinkTester = DigitalLinkTester;
|
|
|
242
323
|
self.assign(self.current_drawn, self.sinks.sum(lambda x: x.current_draw))
|
|
243
324
|
self.require(self.current_limits.contains(self.current_drawn), "overcurrent")
|
|
244
325
|
*/
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
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; }));
|
|
251
336
|
if (all_voltage_limits.length > 0) {
|
|
252
|
-
|
|
253
|
-
if (!
|
|
254
|
-
this.ctx.report.erc_errors.push(
|
|
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'));
|
|
255
340
|
}
|
|
256
341
|
}
|
|
257
342
|
}
|
|
258
|
-
if (
|
|
259
|
-
|
|
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; }));
|
|
260
345
|
if (all_sinks_current_drawn.length > 0) {
|
|
261
|
-
|
|
262
|
-
if (
|
|
263
|
-
this.ctx.report.erc_errors.push(
|
|
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'));
|
|
264
349
|
}
|
|
265
350
|
}
|
|
266
351
|
}
|
|
267
|
-
}
|
|
268
|
-
init_link() {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
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
|
+
}
|
|
280
369
|
}
|
|
281
370
|
}
|
|
282
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
|
+
}
|
|
283
379
|
if (sources.length === 0) {
|
|
284
|
-
this.ctx.report.erc_errors.push(
|
|
380
|
+
this.ctx.report.erc_errors.push(PP_NOT_DRIVEN(this.all_port_ids));
|
|
285
381
|
return false;
|
|
286
382
|
}
|
|
287
383
|
if (sources.length > 1) {
|
|
288
|
-
this.ctx.report.erc_errors.push(
|
|
384
|
+
this.ctx.report.erc_errors.push(PP_DUPLICATED_SOURCES(this.all_port_ids));
|
|
289
385
|
return false;
|
|
290
386
|
}
|
|
291
387
|
this.link = {
|
|
292
388
|
source: sources[0],
|
|
293
|
-
sinks,
|
|
389
|
+
sinks: sinks,
|
|
294
390
|
};
|
|
295
391
|
return true;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
|
|
392
|
+
};
|
|
393
|
+
return VoltageLinkTester;
|
|
394
|
+
}(LinkTesterBase));
|
|
395
|
+
export { VoltageLinkTester };
|
|
299
396
|
/*
|
|
300
397
|
self.description = DescriptionString(
|
|
301
398
|
"<b>voltage</b>: ", DescriptionString.FormatUnits(self.voltage, "V"),
|
|
@@ -307,182 +404,267 @@ exports.VoltageLinkTester = VoltageLinkTester;
|
|
|
307
404
|
self.assign(self.voltage_limits, self.gnds.intersection(lambda x: x.voltage_limits))
|
|
308
405
|
self.require(self.voltage_limits.contains(self.voltage), "overvoltage")
|
|
309
406
|
*/
|
|
310
|
-
|
|
311
|
-
|
|
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 () {
|
|
312
413
|
if (!this.link)
|
|
313
414
|
return;
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
if (!voltage || !
|
|
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))
|
|
318
419
|
voltage = { lower: 0, upper: 0 };
|
|
319
|
-
|
|
420
|
+
var all_defined_voltage_limits = filter_defined_range(gnds.map(function (v) { return v.voltage_limits; }));
|
|
320
421
|
if (all_defined_voltage_limits.length > 0) {
|
|
321
|
-
|
|
322
|
-
if (!
|
|
323
|
-
this.ctx.report.erc_errors.push(
|
|
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'));
|
|
324
425
|
}
|
|
325
426
|
}
|
|
326
|
-
}
|
|
327
|
-
init_link() {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
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
|
+
}
|
|
339
444
|
}
|
|
340
445
|
}
|
|
341
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
|
+
}
|
|
342
454
|
if (refs.length > 1) {
|
|
343
|
-
this.ctx.report.erc_errors.push(
|
|
455
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'Cannot connect multiple ground references to a ground.'));
|
|
344
456
|
return false;
|
|
345
457
|
}
|
|
346
458
|
this.link = {
|
|
347
459
|
ref: refs[0],
|
|
348
|
-
gnds,
|
|
460
|
+
gnds: gnds,
|
|
349
461
|
};
|
|
350
462
|
return true;
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
|
|
463
|
+
};
|
|
464
|
+
return GroundLinkTester;
|
|
465
|
+
}(LinkTesterBase));
|
|
466
|
+
export { GroundLinkTester };
|
|
354
467
|
/**
|
|
355
468
|
self.txd = self.connect(self.controller.txd, self.transceiver.txd, self.passive.map_extract(lambda port: port.txd),
|
|
356
469
|
flatten=True)
|
|
357
470
|
self.rxd = self.connect(self.controller.rxd, self.transceiver.rxd, self.passive.map_extract(lambda port: port.rxd),
|
|
358
471
|
flatten=True)
|
|
359
472
|
*/
|
|
360
|
-
|
|
361
|
-
|
|
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;
|
|
362
480
|
if (!this.link)
|
|
363
481
|
return;
|
|
364
|
-
|
|
482
|
+
var txd_tester = new DigitalLinkTester(this.ctx, __spreadArray([
|
|
365
483
|
this.link.controller.txd,
|
|
366
|
-
this.link.transceiver.rxd
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
const rxd_tester = new DigitalLinkTester(this.ctx, [
|
|
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([
|
|
370
487
|
this.link.controller.rxd,
|
|
371
|
-
this.link.transceiver.txd
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
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
|
+
}
|
|
394
525
|
}
|
|
395
526
|
}
|
|
396
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
|
+
}
|
|
397
535
|
if (controllers.length !== 1) {
|
|
398
|
-
this.ctx.report.erc_errors.push(
|
|
536
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one controller port.'));
|
|
399
537
|
return false;
|
|
400
538
|
}
|
|
401
539
|
if (transceivers.length !== 1) {
|
|
402
|
-
this.ctx.report.erc_errors.push(
|
|
540
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one transceiver port.'));
|
|
403
541
|
return false;
|
|
404
542
|
}
|
|
405
543
|
this.link = {
|
|
406
544
|
controller: controllers[0],
|
|
407
545
|
transceiver: transceivers[0],
|
|
408
|
-
passive,
|
|
546
|
+
passive: passive,
|
|
409
547
|
};
|
|
410
548
|
return true;
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
|
|
549
|
+
};
|
|
550
|
+
return CanLogicLinkTester;
|
|
551
|
+
}(CompositePortLinkTesterBase));
|
|
552
|
+
export { CanLogicLinkTester };
|
|
414
553
|
/**
|
|
415
554
|
self.canh = self.connect(self.nodes.map_extract(lambda node: node.canh),
|
|
416
555
|
flatten=True)
|
|
417
556
|
self.canl = self.connect(self.nodes.map_extract(lambda node: node.canl),
|
|
418
557
|
flatten=True)
|
|
419
558
|
*/
|
|
420
|
-
|
|
421
|
-
|
|
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;
|
|
422
566
|
if (!this.link)
|
|
423
567
|
return;
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
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
|
+
}
|
|
434
593
|
}
|
|
435
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
|
+
}
|
|
436
602
|
if (nodes.length === 0) {
|
|
437
|
-
this.ctx.report.erc_errors.push(
|
|
603
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'Requires at least one CAN differential port'));
|
|
438
604
|
return false;
|
|
439
605
|
}
|
|
440
606
|
this.link = {
|
|
441
|
-
nodes,
|
|
607
|
+
nodes: nodes,
|
|
442
608
|
};
|
|
443
609
|
return true;
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
|
|
610
|
+
};
|
|
611
|
+
return CanDiffLinkTester;
|
|
612
|
+
}(CompositePortLinkTesterBase));
|
|
613
|
+
export { CanDiffLinkTester };
|
|
447
614
|
/**
|
|
448
615
|
self.require(self.driver.frequency_limits.contains(self.frequency))
|
|
449
616
|
|
|
450
617
|
self.xi = self.connect(self.driver.xtal_in, self.crystal.xtal_in)
|
|
451
618
|
self.xo = self.connect(self.driver.xtal_out, self.crystal.xtal_out)
|
|
452
619
|
*/
|
|
453
|
-
|
|
454
|
-
|
|
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 () {
|
|
455
626
|
if (!this.link)
|
|
456
627
|
return;
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
if (
|
|
460
|
-
if (!
|
|
461
|
-
this.ctx.report.erc_errors.push(
|
|
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'));
|
|
462
633
|
}
|
|
463
634
|
}
|
|
464
|
-
}
|
|
465
|
-
init_link() {
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
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
|
+
}
|
|
477
652
|
}
|
|
478
653
|
}
|
|
479
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
|
+
}
|
|
480
662
|
if (drivers.length !== 1) {
|
|
481
|
-
this.ctx.report.erc_errors.push(
|
|
663
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one crystal driver port.'));
|
|
482
664
|
return false;
|
|
483
665
|
}
|
|
484
666
|
if (crystals.length !== 1) {
|
|
485
|
-
this.ctx.report.erc_errors.push(
|
|
667
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one crystal port.'));
|
|
486
668
|
return false;
|
|
487
669
|
}
|
|
488
670
|
this.link = {
|
|
@@ -490,69 +672,96 @@ class CrystalLinkTester extends link_tester_base_1.CompositePortLinkTesterBase {
|
|
|
490
672
|
crystal: crystals[0],
|
|
491
673
|
};
|
|
492
674
|
return true;
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
|
|
675
|
+
};
|
|
676
|
+
return CrystalLinkTester;
|
|
677
|
+
}(CompositePortLinkTesterBase));
|
|
678
|
+
export { CrystalLinkTester };
|
|
496
679
|
/**
|
|
497
680
|
self.swdio = self.connect(self.host.swdio, self.device.swdio, self.pull.map_extract(lambda port: port.swdio),
|
|
498
681
|
flatten=True)
|
|
499
682
|
self.swclk = self.connect(self.host.swclk, self.device.swclk, self.pull.map_extract(lambda port: port.swclk),
|
|
500
683
|
flatten=True)
|
|
501
684
|
*/
|
|
502
|
-
|
|
503
|
-
|
|
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;
|
|
504
692
|
if (!this.link)
|
|
505
693
|
return;
|
|
506
|
-
|
|
694
|
+
var swdio_tester = new DigitalLinkTester(this.ctx, __spreadArray([
|
|
507
695
|
this.link.host.swdio,
|
|
508
|
-
this.link.device.swdio
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
const swclk_tester = new DigitalLinkTester(this.ctx, [
|
|
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([
|
|
512
699
|
this.link.host.swclk,
|
|
513
|
-
this.link.device.swclk
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
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
|
+
}
|
|
536
737
|
}
|
|
537
738
|
}
|
|
538
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
|
+
}
|
|
539
747
|
if (hosts.length !== 1) {
|
|
540
|
-
this.ctx.report.erc_errors.push(
|
|
748
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one SWD host port.'));
|
|
541
749
|
return false;
|
|
542
750
|
}
|
|
543
751
|
if (devices.length !== 1) {
|
|
544
|
-
this.ctx.report.erc_errors.push(
|
|
752
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one SWD target port.'));
|
|
545
753
|
return false;
|
|
546
754
|
}
|
|
547
755
|
this.link = {
|
|
548
756
|
host: hosts[0],
|
|
549
757
|
device: devices[0],
|
|
550
|
-
pull,
|
|
758
|
+
pull: pull,
|
|
551
759
|
};
|
|
552
760
|
return true;
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
|
|
761
|
+
};
|
|
762
|
+
return SwdLinkTester;
|
|
763
|
+
}(CompositePortLinkTesterBase));
|
|
764
|
+
export { SwdLinkTester };
|
|
556
765
|
/**
|
|
557
766
|
self.require(self.pull.any_connected() | self.controller.has_pullup)
|
|
558
767
|
self.require(self.pull.length() <= 1, "at most one pullup")
|
|
@@ -564,109 +773,160 @@ exports.SwdLinkTester = SwdLinkTester;
|
|
|
564
773
|
self.controller.sda, self.targets.map_extract(lambda device: device.sda),
|
|
565
774
|
flatten=True)
|
|
566
775
|
*/
|
|
567
|
-
|
|
568
|
-
|
|
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;
|
|
569
783
|
if (!this.link)
|
|
570
784
|
return;
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
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
|
+
}
|
|
583
804
|
if (!this.link.pull.length && !this.link.controller.has_pullup) {
|
|
584
|
-
this.ctx.report.erc_errors.push(
|
|
805
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'Requires at least one pullup'));
|
|
585
806
|
}
|
|
586
807
|
if (this.link.pull.length > 1) {
|
|
587
|
-
this.ctx.report.erc_errors.push(
|
|
808
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'At most one pullup allowed'));
|
|
588
809
|
}
|
|
589
|
-
|
|
810
|
+
var addresses = this.link.targets.map(function (target) { return target.addresses; });
|
|
590
811
|
if (new Set(addresses).size !== addresses.length) {
|
|
591
|
-
this.ctx.report.erc_errors.push(
|
|
812
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'Conflicting addresses on I2C bus'));
|
|
592
813
|
}
|
|
593
|
-
}
|
|
594
|
-
init_link() {
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
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
|
+
}
|
|
611
836
|
}
|
|
612
837
|
}
|
|
613
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
|
+
}
|
|
614
846
|
if (controllers.length !== 1) {
|
|
615
|
-
this.ctx.report.erc_errors.push(
|
|
847
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one I2C controller port.'));
|
|
616
848
|
return false;
|
|
617
849
|
}
|
|
618
850
|
if (targets.length === 0) {
|
|
619
|
-
this.ctx.report.erc_errors.push(
|
|
851
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be at least one I2C target port.'));
|
|
620
852
|
return false;
|
|
621
853
|
}
|
|
622
854
|
this.link = {
|
|
623
|
-
pull,
|
|
855
|
+
pull: pull,
|
|
624
856
|
controller: controllers[0],
|
|
625
|
-
targets,
|
|
857
|
+
targets: targets,
|
|
626
858
|
};
|
|
627
859
|
return true;
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
|
|
860
|
+
};
|
|
861
|
+
return I2cLinkTester;
|
|
862
|
+
}(CompositePortLinkTesterBase));
|
|
863
|
+
export { I2cLinkTester };
|
|
631
864
|
/**
|
|
632
865
|
self.sck = self.connect(self.controller.sck, self.target_receiver.sck)
|
|
633
866
|
self.ws = self.connect(self.controller.ws, self.target_receiver.ws)
|
|
634
867
|
self.sd = self.connect(self.controller.sd, self.target_receiver.sd)
|
|
635
868
|
|
|
636
869
|
*/
|
|
637
|
-
|
|
638
|
-
|
|
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;
|
|
639
877
|
if (!this.link)
|
|
640
878
|
return;
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
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
|
+
}
|
|
661
914
|
}
|
|
662
915
|
}
|
|
663
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
|
+
}
|
|
664
924
|
if (controllers.length !== 1) {
|
|
665
|
-
this.ctx.report.erc_errors.push(
|
|
925
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one I2S controller port.'));
|
|
666
926
|
return false;
|
|
667
927
|
}
|
|
668
928
|
if (target_receivers.length !== 1) {
|
|
669
|
-
this.ctx.report.erc_errors.push(
|
|
929
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one I2S target receiver port.'));
|
|
670
930
|
return false;
|
|
671
931
|
}
|
|
672
932
|
this.link = {
|
|
@@ -674,9 +934,10 @@ class I2sLinkTester extends link_tester_base_1.CompositePortLinkTesterBase {
|
|
|
674
934
|
target_receiver: target_receivers[0],
|
|
675
935
|
};
|
|
676
936
|
return true;
|
|
677
|
-
}
|
|
678
|
-
|
|
679
|
-
|
|
937
|
+
};
|
|
938
|
+
return I2sLinkTester;
|
|
939
|
+
}(CompositePortLinkTesterBase));
|
|
940
|
+
export { I2sLinkTester };
|
|
680
941
|
/**
|
|
681
942
|
self.sck = self.connect(self.controller.sck, self.peripherals.map_extract(lambda device: device.sck),
|
|
682
943
|
flatten=True)
|
|
@@ -686,83 +947,138 @@ exports.I2sLinkTester = I2sLinkTester;
|
|
|
686
947
|
flatten=True)
|
|
687
948
|
|
|
688
949
|
*/
|
|
689
|
-
|
|
690
|
-
|
|
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;
|
|
691
957
|
if (!this.link)
|
|
692
958
|
return;
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
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
|
+
}
|
|
713
994
|
}
|
|
714
995
|
}
|
|
715
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
|
+
}
|
|
716
1004
|
if (controllers.length !== 1) {
|
|
717
|
-
this.ctx.report.erc_errors.push(
|
|
1005
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one SPI controller port.'));
|
|
718
1006
|
return false;
|
|
719
1007
|
}
|
|
720
1008
|
if (peripherals.length === 0) {
|
|
721
|
-
this.ctx.report.erc_errors.push(
|
|
1009
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be at least one SPI peripheral port.'));
|
|
722
1010
|
return false;
|
|
723
1011
|
}
|
|
724
1012
|
this.link = {
|
|
725
1013
|
controller: controllers[0],
|
|
726
|
-
peripherals,
|
|
1014
|
+
peripherals: peripherals,
|
|
727
1015
|
};
|
|
728
1016
|
return true;
|
|
729
|
-
}
|
|
730
|
-
|
|
731
|
-
|
|
1017
|
+
};
|
|
1018
|
+
return SpiLinkTester;
|
|
1019
|
+
}(CompositePortLinkTesterBase));
|
|
1020
|
+
export { SpiLinkTester };
|
|
732
1021
|
/**
|
|
733
1022
|
self.a = self.connect(self.source.a, self.sink.a)
|
|
734
1023
|
self.b = self.connect(self.source.b, self.sink.b)
|
|
735
1024
|
*/
|
|
736
|
-
|
|
737
|
-
|
|
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;
|
|
738
1032
|
if (!this.link)
|
|
739
1033
|
return;
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
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
|
+
}
|
|
757
1066
|
}
|
|
758
1067
|
}
|
|
759
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
|
+
}
|
|
760
1076
|
if (sources.length !== 1) {
|
|
761
|
-
this.ctx.report.erc_errors.push(
|
|
1077
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one speaker driver port.'));
|
|
762
1078
|
return false;
|
|
763
1079
|
}
|
|
764
1080
|
if (sinks.length !== 1) {
|
|
765
|
-
this.ctx.report.erc_errors.push(
|
|
1081
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one speaker port.'));
|
|
766
1082
|
return false;
|
|
767
1083
|
}
|
|
768
1084
|
this.link = {
|
|
@@ -770,35 +1086,51 @@ class SpeakerLinkTester extends link_tester_base_1.CompositePortLinkTesterBase {
|
|
|
770
1086
|
sink: sinks[0],
|
|
771
1087
|
};
|
|
772
1088
|
return true;
|
|
773
|
-
}
|
|
774
|
-
|
|
775
|
-
|
|
1089
|
+
};
|
|
1090
|
+
return SpeakerLinkTester;
|
|
1091
|
+
}(CompositePortLinkTesterBase));
|
|
1092
|
+
export { SpeakerLinkTester };
|
|
776
1093
|
/**
|
|
777
1094
|
self.driver = self.Port(TouchDriver())
|
|
778
1095
|
self.pad = self.Port(TouchPadPort())
|
|
779
1096
|
*/
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
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
|
+
}
|
|
793
1118
|
}
|
|
794
1119
|
}
|
|
795
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
|
+
}
|
|
796
1128
|
if (drivers.length !== 1) {
|
|
797
|
-
this.ctx.report.erc_errors.push(
|
|
1129
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one touch driver port.'));
|
|
798
1130
|
return false;
|
|
799
1131
|
}
|
|
800
1132
|
if (pads.length !== 1) {
|
|
801
|
-
this.ctx.report.erc_errors.push(
|
|
1133
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one touch pad port.'));
|
|
802
1134
|
return false;
|
|
803
1135
|
}
|
|
804
1136
|
this.link = {
|
|
@@ -806,35 +1138,63 @@ class TouchLinkTester extends link_tester_base_1.LinkTesterBase {
|
|
|
806
1138
|
pad: pads[0],
|
|
807
1139
|
};
|
|
808
1140
|
return true;
|
|
809
|
-
}
|
|
810
|
-
check_parameter_propagation() {
|
|
1141
|
+
};
|
|
1142
|
+
TouchLinkTester.prototype.check_parameter_propagation = function () {
|
|
811
1143
|
return;
|
|
812
|
-
}
|
|
813
|
-
|
|
814
|
-
|
|
1144
|
+
};
|
|
1145
|
+
return TouchLinkTester;
|
|
1146
|
+
}(LinkTesterBase));
|
|
1147
|
+
export { TouchLinkTester };
|
|
815
1148
|
/**
|
|
816
1149
|
self.a_tx = self.connect(self.a.tx, self.b.rx)
|
|
817
1150
|
self.b_tx = self.connect(self.b.tx, self.a.rx)
|
|
818
1151
|
|
|
819
1152
|
*/
|
|
820
|
-
|
|
821
|
-
|
|
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;
|
|
822
1160
|
if (!this.link)
|
|
823
1161
|
return;
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
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);
|
|
834
1193
|
}
|
|
1194
|
+
finally { if (e_22) throw e_22.error; }
|
|
835
1195
|
}
|
|
836
1196
|
if (ports.length !== 2) {
|
|
837
|
-
this.ctx.report.erc_errors.push(
|
|
1197
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly two UART ports.'));
|
|
838
1198
|
return false;
|
|
839
1199
|
}
|
|
840
1200
|
this.link = {
|
|
@@ -842,9 +1202,10 @@ class UartLinkTester extends link_tester_base_1.CompositePortLinkTesterBase {
|
|
|
842
1202
|
b: ports[1],
|
|
843
1203
|
};
|
|
844
1204
|
return true;
|
|
845
|
-
}
|
|
846
|
-
|
|
847
|
-
|
|
1205
|
+
};
|
|
1206
|
+
return UartLinkTester;
|
|
1207
|
+
}(CompositePortLinkTesterBase));
|
|
1208
|
+
export { UartLinkTester };
|
|
848
1209
|
/**
|
|
849
1210
|
|
|
850
1211
|
self.d_P = self.connect(self.host.dp, self.device.dp, self.passive.map_extract(lambda port: port.dp),
|
|
@@ -852,83 +1213,136 @@ exports.UartLinkTester = UartLinkTester;
|
|
|
852
1213
|
self.d_N = self.connect(self.host.dm, self.device.dm, self.passive.map_extract(lambda port: port.dm),
|
|
853
1214
|
flatten=True)
|
|
854
1215
|
*/
|
|
855
|
-
|
|
856
|
-
|
|
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;
|
|
857
1223
|
if (!this.link)
|
|
858
1224
|
return;
|
|
859
|
-
|
|
1225
|
+
var dp_tester = new DigitalLinkTester(this.ctx, __spreadArray([
|
|
860
1226
|
this.link.host.dp,
|
|
861
|
-
this.link.device.dp
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
const dm_tester = new DigitalLinkTester(this.ctx, [
|
|
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([
|
|
865
1230
|
this.link.host.dm,
|
|
866
|
-
this.link.device.dm
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
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
|
+
}
|
|
889
1268
|
}
|
|
890
1269
|
}
|
|
891
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
|
+
}
|
|
892
1278
|
if (hosts.length !== 1) {
|
|
893
|
-
this.ctx.report.erc_errors.push(
|
|
1279
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one USB host port.'));
|
|
894
1280
|
return false;
|
|
895
1281
|
}
|
|
896
1282
|
if (devices.length !== 1) {
|
|
897
|
-
this.ctx.report.erc_errors.push(
|
|
1283
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one USB device port.'));
|
|
898
1284
|
return false;
|
|
899
1285
|
}
|
|
900
1286
|
this.link = {
|
|
901
1287
|
host: hosts[0],
|
|
902
1288
|
device: devices[0],
|
|
903
|
-
passive,
|
|
1289
|
+
passive: passive,
|
|
904
1290
|
};
|
|
905
1291
|
return true;
|
|
906
|
-
}
|
|
907
|
-
|
|
908
|
-
|
|
1292
|
+
};
|
|
1293
|
+
return UsbLinkTester;
|
|
1294
|
+
}(CompositePortLinkTesterBase));
|
|
1295
|
+
export { UsbLinkTester };
|
|
909
1296
|
/**
|
|
910
1297
|
self.cc1 = self.Port(DigitalBidir(pullup_capable=pullup_capable))
|
|
911
1298
|
self.cc2 = self.Port(DigitalBidir(pullup_capable=pullup_capable))
|
|
912
1299
|
|
|
913
1300
|
*/
|
|
914
|
-
|
|
915
|
-
|
|
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;
|
|
916
1308
|
if (!this.link)
|
|
917
1309
|
return;
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
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
|
+
}
|
|
928
1335
|
}
|
|
929
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
|
+
}
|
|
930
1344
|
if (nodes.length !== 2) {
|
|
931
|
-
this.ctx.report.erc_errors.push(
|
|
1345
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly two CC ports.'));
|
|
932
1346
|
return false;
|
|
933
1347
|
}
|
|
934
1348
|
this.link = {
|
|
@@ -936,9 +1350,10 @@ class UsbCcLinkTester extends link_tester_base_1.CompositePortLinkTesterBase {
|
|
|
936
1350
|
b: nodes[1],
|
|
937
1351
|
};
|
|
938
1352
|
return true;
|
|
939
|
-
}
|
|
940
|
-
|
|
941
|
-
|
|
1353
|
+
};
|
|
1354
|
+
return UsbCcLinkTester;
|
|
1355
|
+
}(CompositePortLinkTesterBase));
|
|
1356
|
+
export { UsbCcLinkTester };
|
|
942
1357
|
/**
|
|
943
1358
|
|
|
944
1359
|
self.xclk = self.connect(self.host.xclk, self.cam.xclk)
|
|
@@ -956,13 +1371,18 @@ exports.UsbCcLinkTester = UsbCcLinkTester;
|
|
|
956
1371
|
self.y7 = self.connect(self.host.y7, self.cam.y7)
|
|
957
1372
|
|
|
958
1373
|
*/
|
|
959
|
-
|
|
960
|
-
|
|
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;
|
|
961
1381
|
if (!this.link)
|
|
962
1382
|
return;
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
1383
|
+
var host = this.link.host;
|
|
1384
|
+
var cam = this.link.cam;
|
|
1385
|
+
var digitalLinks = [
|
|
966
1386
|
[host.xclk, cam.xclk],
|
|
967
1387
|
[host.pclk, cam.pclk],
|
|
968
1388
|
[host.href, cam.href],
|
|
@@ -976,32 +1396,53 @@ class Dvp8LinkTester extends link_tester_base_1.CompositePortLinkTesterBase {
|
|
|
976
1396
|
[host.y6, cam.y6],
|
|
977
1397
|
[host.y7, cam.y7],
|
|
978
1398
|
];
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
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
|
+
}
|
|
982
1405
|
}
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
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
|
+
}
|
|
996
1430
|
}
|
|
997
1431
|
}
|
|
998
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
|
+
}
|
|
999
1440
|
if (hosts.length !== 1) {
|
|
1000
|
-
this.ctx.report.erc_errors.push(
|
|
1441
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one DVP8 host port.'));
|
|
1001
1442
|
return false;
|
|
1002
1443
|
}
|
|
1003
1444
|
if (cams.length !== 1) {
|
|
1004
|
-
this.ctx.report.erc_errors.push(
|
|
1445
|
+
this.ctx.report.erc_errors.push(PP_ILLEGAL_CONNECTION(this.all_port_ids, 'There must be exactly one DVP8 camera port.'));
|
|
1005
1446
|
return false;
|
|
1006
1447
|
}
|
|
1007
1448
|
this.link = {
|
|
@@ -1009,6 +1450,7 @@ class Dvp8LinkTester extends link_tester_base_1.CompositePortLinkTesterBase {
|
|
|
1009
1450
|
cam: cams[0],
|
|
1010
1451
|
};
|
|
1011
1452
|
return true;
|
|
1012
|
-
}
|
|
1013
|
-
|
|
1014
|
-
|
|
1453
|
+
};
|
|
1454
|
+
return Dvp8LinkTester;
|
|
1455
|
+
}(CompositePortLinkTesterBase));
|
|
1456
|
+
export { Dvp8LinkTester };
|