incyclist-devices 2.0.38 → 2.1.1
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/lib/adapters.d.ts +1 -1
- package/lib/antv2/adapter-factory.d.ts +4 -13
- package/lib/antv2/adapter.d.ts +16 -33
- package/lib/antv2/adapter.js +68 -112
- package/lib/antv2/ant-interface.d.ts +3 -11
- package/lib/antv2/ant-interface.js +1 -1
- package/lib/antv2/base/adapter.d.ts +62 -0
- package/lib/antv2/base/adapter.js +360 -0
- package/lib/antv2/base/ant-interface.d.ts +35 -0
- package/lib/antv2/base/ant-interface.js +285 -0
- package/lib/antv2/base/binding.d.ts +13 -0
- package/lib/antv2/base/binding.js +27 -0
- package/lib/antv2/cad/adapter.d.ts +10 -0
- package/lib/antv2/cad/adapter.js +25 -0
- package/lib/antv2/cad/index.d.ts +2 -0
- package/lib/antv2/cad/index.js +7 -0
- package/lib/antv2/consts.d.ts +2 -0
- package/lib/antv2/consts.js +5 -0
- package/lib/antv2/factories/adapter-factory.d.ts +14 -0
- package/lib/antv2/factories/adapter-factory.js +65 -0
- package/lib/antv2/factories/sensor-factory.d.ts +5 -0
- package/lib/antv2/factories/sensor-factory.js +22 -0
- package/lib/antv2/fe/adapter.d.ts +25 -26
- package/lib/antv2/fe/adapter.js +212 -218
- package/lib/antv2/hr/adapter.d.ts +6 -14
- package/lib/antv2/hr/adapter.js +7 -55
- package/lib/antv2/hr copy/adapter.d.ts +11 -0
- package/lib/antv2/hr copy/adapter.js +30 -0
- package/lib/antv2/hr copy/index.d.ts +2 -0
- package/lib/antv2/hr copy/index.js +7 -0
- package/lib/antv2/index.d.ts +5 -4
- package/lib/antv2/index.js +4 -2
- package/lib/antv2/pwr/adapter.d.ts +9 -29
- package/lib/antv2/pwr/adapter.js +20 -130
- package/lib/antv2/types.d.ts +23 -3
- package/lib/base/adpater.d.ts +42 -45
- package/lib/base/adpater.js +144 -110
- package/lib/base/consts.d.ts +4 -0
- package/lib/base/consts.js +9 -0
- package/lib/ble/adapter-factory.d.ts +4 -4
- package/lib/ble/base/adapter.d.ts +6 -24
- package/lib/ble/base/adapter.js +4 -94
- package/lib/ble/ble-interface.d.ts +2 -3
- package/lib/ble/cp/adapter.d.ts +6 -11
- package/lib/ble/cp/adapter.js +9 -12
- package/lib/ble/elite/adapter.d.ts +8 -8
- package/lib/ble/elite/adapter.js +6 -2
- package/lib/ble/fm/adapter.d.ts +11 -11
- package/lib/ble/fm/adapter.js +26 -20
- package/lib/ble/hr/adapter.d.ts +3 -4
- package/lib/ble/hr/adapter.js +2 -2
- package/lib/ble/tacx/adapter.d.ts +2 -3
- package/lib/ble/tacx/adapter.js +8 -8
- package/lib/ble/types.d.ts +1 -2
- package/lib/ble/wahoo/adapter.d.ts +2 -2
- package/lib/ble/wahoo/adapter.js +6 -6
- package/lib/ble/wahoo/comms.js +16 -16
- package/lib/factories/adapters.d.ts +7 -0
- package/lib/factories/adapters.js +49 -0
- package/lib/factories/index.d.ts +3 -0
- package/lib/factories/index.js +10 -0
- package/lib/factories/interfaces.d.ts +7 -0
- package/lib/factories/interfaces.js +27 -0
- package/lib/index.d.ts +8 -9
- package/lib/index.js +5 -8
- package/lib/interfaces.d.ts +1 -1
- package/lib/modes/ant-fe-adv-st-mode.d.ts +12 -0
- package/lib/modes/ant-fe-adv-st-mode.js +83 -0
- package/lib/modes/antble-erg.d.ts +31 -0
- package/lib/modes/antble-erg.js +28 -0
- package/lib/modes/antble-smarttrainer.d.ts +23 -0
- package/lib/modes/antble-smarttrainer.js +65 -0
- package/lib/modes/base.d.ts +29 -0
- package/lib/modes/{cycling-mode.js → base.js} +23 -26
- package/lib/modes/daum-classic-standard.d.ts +17 -0
- package/lib/modes/daum-classic-standard.js +54 -0
- package/lib/modes/daum-erg.d.ts +49 -0
- package/lib/{serial/daum/ERGCyclingMode.js → modes/daum-erg.js} +45 -73
- package/lib/modes/daum-power.d.ts +5 -0
- package/lib/{serial/daum/DaumPowerMeterCyclingMode.js → modes/daum-power.js} +1 -10
- package/lib/modes/daum-premium-standard.d.ts +24 -0
- package/lib/{serial/daum/premium/modes/daum-classic.js → modes/daum-premium-standard.js} +26 -38
- package/lib/modes/daum-smarttrainer.d.ts +83 -0
- package/lib/{serial/daum/SmartTrainerCyclingMode.js → modes/daum-smarttrainer.js} +23 -26
- package/lib/modes/kettler-erg.d.ts +44 -0
- package/lib/{serial/kettler/ergo-racer/modes/erg.js → modes/kettler-erg.js} +12 -23
- package/lib/modes/power-base.d.ts +28 -3
- package/lib/modes/power-base.js +184 -7
- package/lib/modes/power-meter.d.ts +11 -16
- package/lib/modes/power-meter.js +15 -54
- package/lib/modes/simulator.d.ts +38 -10
- package/lib/modes/simulator.js +14 -46
- package/lib/modes/{cycling-mode.d.ts → types.d.ts} +22 -30
- package/lib/modes/types.js +56 -0
- package/lib/serial/SinglePathScanner.d.ts +17 -0
- package/lib/serial/SinglePathScanner.js +87 -0
- package/lib/serial/adapter-factory.d.ts +8 -6
- package/lib/serial/adapter.d.ts +6 -11
- package/lib/serial/adapter.js +5 -2
- package/lib/serial/base/adapter.d.ts +17 -0
- package/lib/serial/base/adapter.js +67 -0
- package/lib/serial/base/comms.d.ts +62 -0
- package/lib/serial/base/comms.js +280 -0
- package/lib/serial/base/serial-interface.d.ts +36 -0
- package/lib/serial/base/serial-interface.js +288 -0
- package/lib/serial/base/serial-scanner.d.ts +16 -0
- package/lib/serial/base/serial-scanner.js +87 -0
- package/lib/serial/base/serialport.d.ts +17 -0
- package/lib/serial/base/serialport.js +87 -0
- package/lib/serial/comms.d.ts +2 -2
- package/lib/serial/daum/DaumAdapter.d.ts +26 -35
- package/lib/serial/daum/DaumAdapter.js +214 -161
- package/lib/serial/daum/classic/PROTOCOL_NAME.d.ts +2 -0
- package/lib/serial/daum/classic/PROTOCOL_NAME.js +5 -0
- package/lib/serial/daum/classic/adapter.d.ts +13 -26
- package/lib/serial/daum/classic/adapter.js +72 -176
- package/lib/serial/daum/classic/comms.d.ts +21 -17
- package/lib/serial/daum/classic/comms.js +41 -14
- package/lib/serial/daum/classic/consts.d.ts +2 -0
- package/lib/serial/daum/classic/consts.js +5 -0
- package/lib/serial/daum/classic/mock.d.ts +4 -0
- package/lib/serial/daum/classic/mock.js +18 -7
- package/lib/serial/daum/classic/types.d.ts +8 -10
- package/lib/serial/daum/classic/utils.d.ts +1 -2
- package/lib/serial/daum/consts.d.ts +0 -0
- package/lib/serial/daum/consts.js +0 -0
- package/lib/serial/daum/premium/adapter.d.ts +17 -15
- package/lib/serial/daum/premium/adapter.js +86 -109
- package/lib/serial/daum/premium/comms.d.ts +7 -7
- package/lib/serial/daum/premium/comms.js +25 -16
- package/lib/serial/daum/premium/mock.d.ts +5 -1
- package/lib/serial/daum/premium/mock.js +17 -7
- package/lib/serial/daum/premium/types.d.ts +32 -17
- package/lib/serial/daum/premium/types.js +8 -8
- package/lib/serial/daum/premium/utils.d.ts +2 -3
- package/lib/serial/daum/premium/utils.js +3 -3
- package/lib/serial/daum/types.d.ts +14 -0
- package/lib/serial/daum/types.js +13 -0
- package/lib/serial/factories/adapter-factory.d.ts +14 -0
- package/lib/serial/factories/adapter-factory.js +30 -0
- package/lib/serial/index.d.ts +8 -5
- package/lib/serial/index.js +15 -15
- package/lib/serial/kettler/comms.d.ts +1 -1
- package/lib/serial/kettler/ergo-racer/adapter.d.ts +11 -16
- package/lib/serial/kettler/ergo-racer/adapter.js +10 -12
- package/lib/serial/kettler/types.d.ts +8 -0
- package/lib/serial/kettler/types.js +2 -0
- package/lib/serial/serial-interface.d.ts +2 -32
- package/lib/serial/serial-interface.js +4 -78
- package/lib/serial/serial-scanner.d.ts +16 -0
- package/lib/serial/serial-scanner.js +87 -0
- package/lib/serial/serialport.d.ts +1 -13
- package/lib/serial/types.d.ts +45 -0
- package/lib/serial/types.js +9 -0
- package/lib/simulator/Simulator.d.ts +13 -19
- package/lib/simulator/Simulator.js +10 -51
- package/lib/types/Command.d.ts +8 -0
- package/lib/types/Command.js +2 -0
- package/lib/types/adapter.d.ts +34 -24
- package/lib/types/command.d.ts +0 -8
- package/lib/types/command.js +0 -2
- package/lib/types/data.d.ts +12 -1
- package/lib/types/device.d.ts +8 -23
- package/lib/types/device.js +9 -8
- package/lib/types/index.d.ts +6 -0
- package/lib/types/index.js +22 -0
- package/lib/types/route.d.ts +0 -19
- package/lib/types/route.js +0 -2
- package/lib/types/types.d.ts +8 -0
- package/lib/types/types.js +2 -0
- package/lib/utils/utils.d.ts +2 -1
- package/lib/utils/utils.js +22 -4
- package/package.json +3 -3
- package/lib/antv2/modes/ant-fe-adv-st-mode.d.ts +0 -9
- package/lib/antv2/modes/ant-fe-adv-st-mode.js +0 -51
- package/lib/antv2/modes/ant-fe-erg-mode.d.ts +0 -6
- package/lib/antv2/modes/ant-fe-erg-mode.js +0 -14
- package/lib/antv2/modes/ant-fe-st-mode.d.ts +0 -5
- package/lib/antv2/modes/ant-fe-st-mode.js +0 -13
- package/lib/modes/ble-erg-mode.d.ts +0 -18
- package/lib/modes/ble-erg-mode.js +0 -148
- package/lib/modes/ble-st-mode.d.ts +0 -15
- package/lib/modes/ble-st-mode.js +0 -96
- package/lib/serial/daum/DaumPowerMeterCyclingMode.d.ts +0 -8
- package/lib/serial/daum/ERGCyclingMode.d.ts +0 -26
- package/lib/serial/daum/SmartTrainerCyclingMode.d.ts +0 -42
- package/lib/serial/daum/classic/modes/daum-classic.d.ts +0 -13
- package/lib/serial/daum/classic/modes/daum-classic.js +0 -97
- package/lib/serial/daum/constants.d.ts +0 -19
- package/lib/serial/daum/constants.js +0 -22
- package/lib/serial/daum/premium/modes/daum-classic.d.ts +0 -14
- package/lib/serial/kettler/ergo-racer/modes/erg.d.ts +0 -25
package/lib/modes/power-base.js
CHANGED
|
@@ -3,16 +3,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
7
|
-
const adpater_1 = require("../base/adpater");
|
|
6
|
+
const consts_1 = require("../base/consts");
|
|
8
7
|
const calculations_1 = __importDefault(require("../utils/calculations"));
|
|
9
8
|
const gd_eventlog_1 = require("gd-eventlog");
|
|
10
|
-
|
|
9
|
+
const base_1 = require("./base");
|
|
10
|
+
const MIN_SPEED = 10;
|
|
11
|
+
class PowerBasedCyclingModeBase extends base_1.CyclingModeBase {
|
|
11
12
|
constructor(adapter, props) {
|
|
12
13
|
super(adapter, props);
|
|
13
14
|
this.prevUpdateTS = 0;
|
|
14
15
|
this.data = { speed: 0, power: 0, distanceInternal: 0, pedalRpm: 0, isPedalling: false, heartrate: 0 };
|
|
15
16
|
}
|
|
17
|
+
getData() {
|
|
18
|
+
return this.data;
|
|
19
|
+
}
|
|
20
|
+
getSlope() {
|
|
21
|
+
const { slope } = this.data;
|
|
22
|
+
return slope || 0;
|
|
23
|
+
}
|
|
16
24
|
initLogger(defaultLogName) {
|
|
17
25
|
const a = this.adapter;
|
|
18
26
|
this.logger = a.getLogger();
|
|
@@ -21,18 +29,93 @@ class PowerBasedCyclingModeBase extends cycling_mode_1.CyclingModeBase {
|
|
|
21
29
|
}
|
|
22
30
|
getWeight() {
|
|
23
31
|
const a = this.adapter;
|
|
24
|
-
const defaultWeight =
|
|
32
|
+
const defaultWeight = consts_1.DEFAULT_BIKE_WEIGHT + consts_1.DEFAULT_USER_WEIGHT;
|
|
25
33
|
const m = (a) ? a.getWeight() || defaultWeight : defaultWeight;
|
|
26
34
|
return m;
|
|
27
35
|
}
|
|
28
36
|
getTimeSinceLastUpdate() {
|
|
29
37
|
const ts = Date.now();
|
|
30
38
|
const duration = this.prevUpdateTS === 0 ? 0 : ((ts - this.prevUpdateTS) / 1000);
|
|
31
|
-
this.prevUpdateTS = ts;
|
|
32
39
|
return duration;
|
|
33
40
|
}
|
|
41
|
+
checkForResetOrEmpty(request) {
|
|
42
|
+
if (!request || request.reset) {
|
|
43
|
+
this.prevRequest = {};
|
|
44
|
+
return { reset: true };
|
|
45
|
+
}
|
|
46
|
+
if (Object.keys(request).length === 0 && this.prevRequest) {
|
|
47
|
+
return { targetPower: this.prevRequest.targetPower, refresh: true };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
checkForTempPowerAdjustments(request) {
|
|
51
|
+
if (request.targetPowerDelta && this.prevRequest && this.prevRequest.targetPower) {
|
|
52
|
+
request.targetPower = this.prevRequest.targetPower + request.targetPowerDelta;
|
|
53
|
+
if (request.targetPower < 10)
|
|
54
|
+
request.targetPower = this.prevRequest.targetPower;
|
|
55
|
+
delete request.targetPowerDelta;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
checkRefresh(request, newRequest) {
|
|
59
|
+
if (request.refresh && request.targetPower === undefined) {
|
|
60
|
+
delete request.refresh;
|
|
61
|
+
if (this.prevRequest)
|
|
62
|
+
newRequest.targetPower = this.prevRequest.targetPower;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
checkTargetPowerSet(request, newRequest) {
|
|
66
|
+
let target = undefined;
|
|
67
|
+
if (request.targetPower !== undefined)
|
|
68
|
+
target = request.targetPower;
|
|
69
|
+
if (request.targetPower === undefined && request.maxPower !== undefined && request.minPower !== undefined && request.maxPower === request.minPower) {
|
|
70
|
+
target = request.minPower;
|
|
71
|
+
}
|
|
72
|
+
if (target !== undefined) {
|
|
73
|
+
delete request.refresh;
|
|
74
|
+
newRequest.targetPower = Number(target);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
checkSlope(request) {
|
|
78
|
+
if (request.slope !== undefined) {
|
|
79
|
+
this.data.slope = request.slope;
|
|
80
|
+
delete request.slope;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
checkEmptyRequest(newRequest) {
|
|
84
|
+
if (Object.keys(newRequest).length === 0) {
|
|
85
|
+
if (this.prevRequest) {
|
|
86
|
+
newRequest.targetPower = this.prevRequest.targetPower;
|
|
87
|
+
newRequest.refresh = true;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
checkMinPower(request, newRequest) {
|
|
92
|
+
if (request.minPower !== undefined) {
|
|
93
|
+
const target = newRequest.targetPower !== undefined ? newRequest.targetPower : this.prevRequest.targetPower;
|
|
94
|
+
if (target && target < request.minPower) {
|
|
95
|
+
newRequest.targetPower = request.minPower;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
if (this.prevRequest)
|
|
99
|
+
newRequest.targetPower = this.prevRequest.targetPower;
|
|
100
|
+
}
|
|
101
|
+
newRequest.minPower = request.minPower;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
checkMaxPower(request, newRequest) {
|
|
105
|
+
if (request.maxPower !== undefined) {
|
|
106
|
+
const target = newRequest.targetPower !== undefined ? newRequest.targetPower : this.prevRequest.targetPower;
|
|
107
|
+
if (target && target > request.maxPower) {
|
|
108
|
+
newRequest.targetPower = request.maxPower;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
if (this.prevRequest)
|
|
112
|
+
newRequest.targetPower = this.prevRequest.targetPower;
|
|
113
|
+
}
|
|
114
|
+
newRequest.maxPower = request.maxPower;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
34
117
|
calculateSpeedAndDistance(power, slope, m, t, props = {}) {
|
|
35
|
-
const prevData = this.
|
|
118
|
+
const prevData = this.getData();
|
|
36
119
|
const vPrev = (prevData.speed || 0) / 3.6;
|
|
37
120
|
const EkinPrev = 1 / 2 * m * vPrev * vPrev;
|
|
38
121
|
let powerToMaintainSpeed = calculations_1.default.calculatePower(m, vPrev, slope, props);
|
|
@@ -57,8 +140,57 @@ class PowerBasedCyclingModeBase extends cycling_mode_1.CyclingModeBase {
|
|
|
57
140
|
return { speed, distance };
|
|
58
141
|
}
|
|
59
142
|
}
|
|
143
|
+
updateSpeedAndDistance(power, slope, bikeType, data, prevData) {
|
|
144
|
+
const distanceInternal = prevData.distanceInternal || 0;
|
|
145
|
+
const m = this.getWeight();
|
|
146
|
+
const t = this.getTimeSinceLastUpdate();
|
|
147
|
+
const { speed, distance } = this.calculateSpeedAndDistance(power, slope, m, t, { bikeType });
|
|
148
|
+
if (power === 0 && speed < MIN_SPEED) {
|
|
149
|
+
data.speed = prevData.speed < 1 ? 0 : prevData.speed - 1;
|
|
150
|
+
data.distanceInternal = distanceInternal || 0 + data.speed / 3.6 * t;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
data.speed = speed;
|
|
154
|
+
data.distanceInternal = distanceInternal + distance;
|
|
155
|
+
}
|
|
156
|
+
return t;
|
|
157
|
+
}
|
|
158
|
+
getCalcBasics(bikeData) {
|
|
159
|
+
var _a;
|
|
160
|
+
const prevData = JSON.parse(JSON.stringify(this.getData()));
|
|
161
|
+
const data = Object.assign({}, this.getData());
|
|
162
|
+
const prevRequest = this.prevRequest || {};
|
|
163
|
+
const bikeType = (_a = this.getSetting('bikeType')) === null || _a === void 0 ? void 0 : _a.toLowerCase();
|
|
164
|
+
const slope = (prevData.slope !== undefined ? prevData.slope : prevRequest.slope || 0);
|
|
165
|
+
this.copyBikeData(data, bikeData);
|
|
166
|
+
return { data, prevData, prevRequest, bikeType, slope };
|
|
167
|
+
}
|
|
168
|
+
copyBikeData(data, bikeData) {
|
|
169
|
+
var _a;
|
|
170
|
+
const keys = Object.keys(bikeData);
|
|
171
|
+
keys.forEach(key => {
|
|
172
|
+
if (bikeData[key] === null)
|
|
173
|
+
delete data[key];
|
|
174
|
+
if (key === 'slope')
|
|
175
|
+
return;
|
|
176
|
+
else if (bikeData[key] !== undefined)
|
|
177
|
+
data[key] = bikeData[key];
|
|
178
|
+
});
|
|
179
|
+
if (data.distanceInternal === undefined)
|
|
180
|
+
data.distanceInternal = 0;
|
|
181
|
+
if (data.time === undefined)
|
|
182
|
+
data.time = 0;
|
|
183
|
+
if (data.slope === undefined)
|
|
184
|
+
data.slope = 0;
|
|
185
|
+
if (bikeData.isPedalling === undefined)
|
|
186
|
+
data.isPedalling = data.pedalRpm > 0;
|
|
187
|
+
if (((_a = this.prevRequest) === null || _a === void 0 ? void 0 : _a.slope) !== undefined) {
|
|
188
|
+
data.slope = this.prevRequest.slope;
|
|
189
|
+
}
|
|
190
|
+
return data;
|
|
191
|
+
}
|
|
60
192
|
calculatePowerAndDistance(speed, slope, m, t, props = {}) {
|
|
61
|
-
const prevData = this.
|
|
193
|
+
const prevData = this.getData();
|
|
62
194
|
const vPrev = (prevData.speed || 0) / 3.6;
|
|
63
195
|
const EkinPrev = 1 / 2 * m * vPrev * vPrev;
|
|
64
196
|
const vTarget = (speed || 0) / 3.6;
|
|
@@ -71,5 +203,50 @@ class PowerBasedCyclingModeBase extends cycling_mode_1.CyclingModeBase {
|
|
|
71
203
|
this.data.power = power;
|
|
72
204
|
return { power, distance };
|
|
73
205
|
}
|
|
206
|
+
getBikeInitRequest() {
|
|
207
|
+
return {};
|
|
208
|
+
}
|
|
209
|
+
sendBikeUpdate(incoming) {
|
|
210
|
+
if (this.logger)
|
|
211
|
+
this.logger.logEvent({ message: "processing update request", request: incoming, prev: this.prevRequest, data: this.getData() });
|
|
212
|
+
let newRequest = {};
|
|
213
|
+
const request = Object.assign({}, incoming);
|
|
214
|
+
try {
|
|
215
|
+
const req = this.checkForResetOrEmpty(request);
|
|
216
|
+
if (req)
|
|
217
|
+
return req;
|
|
218
|
+
this.checkSlope(request);
|
|
219
|
+
this.checkForTempPowerAdjustments(request);
|
|
220
|
+
this.checkTargetPowerSet(request, newRequest);
|
|
221
|
+
this.checkRefresh(request, newRequest);
|
|
222
|
+
this.checkMaxPower(request, newRequest);
|
|
223
|
+
this.checkMinPower(request, newRequest);
|
|
224
|
+
this.checkEmptyRequest(newRequest);
|
|
225
|
+
this.prevRequest = JSON.parse(JSON.stringify(newRequest));
|
|
226
|
+
}
|
|
227
|
+
catch (err) {
|
|
228
|
+
if (this.logger)
|
|
229
|
+
this.logger.logEvent({ message: "error", fn: 'sendBikeUpdate()', error: err.message, stack: err.stack });
|
|
230
|
+
}
|
|
231
|
+
return newRequest;
|
|
232
|
+
}
|
|
233
|
+
updateData(bikeData, log = true) {
|
|
234
|
+
try {
|
|
235
|
+
const { data, prevData, slope, bikeType } = this.getCalcBasics(bikeData);
|
|
236
|
+
const t = this.updateSpeedAndDistance(data.power, slope, bikeType, data, prevData);
|
|
237
|
+
data.time = (data.speed > 0) ? data.time + t : data.time;
|
|
238
|
+
if (log && this.logger)
|
|
239
|
+
this.logger.logEvent({ message: "updateData result", mode: this.getName(), data, bikeData });
|
|
240
|
+
this.data = data;
|
|
241
|
+
this.prevUpdateTS = Date.now();
|
|
242
|
+
return data;
|
|
243
|
+
}
|
|
244
|
+
catch (err) {
|
|
245
|
+
if (this.logger)
|
|
246
|
+
this.logger.logEvent({ message: 'error', fn: 'updateData()', error: err.message || err });
|
|
247
|
+
return this.getData();
|
|
248
|
+
}
|
|
249
|
+
}
|
|
74
250
|
}
|
|
251
|
+
PowerBasedCyclingModeBase.config = { name: '', description: '', properties: [] };
|
|
75
252
|
exports.default = PowerBasedCyclingModeBase;
|
|
@@ -1,20 +1,15 @@
|
|
|
1
|
-
import
|
|
1
|
+
import ICyclingMode, { Settings, UpdateRequest } from './types';
|
|
2
|
+
import { IncyclistBikeData } from "../types";
|
|
2
3
|
import PowerBasedCyclingModeBase from './power-base';
|
|
3
|
-
import {
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
constructor(adapter:
|
|
11
|
-
getName(): string;
|
|
12
|
-
getDescription(): string;
|
|
13
|
-
getProperties(): CyclingModeProperty[];
|
|
14
|
-
getProperty(name: string): CyclingModeProperty;
|
|
4
|
+
import { IncyclistDeviceAdapter } from '../base/adpater';
|
|
5
|
+
export default class PowerMeterCyclingMode extends PowerBasedCyclingModeBase implements ICyclingMode {
|
|
6
|
+
protected static config: {
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
properties: any[];
|
|
10
|
+
};
|
|
11
|
+
constructor(adapter: IncyclistDeviceAdapter, props?: Settings);
|
|
15
12
|
getBikeInitRequest(): UpdateRequest;
|
|
16
13
|
sendBikeUpdate(request?: UpdateRequest): UpdateRequest;
|
|
17
|
-
|
|
18
|
-
log: boolean;
|
|
19
|
-
}): IncyclistBikeData;
|
|
14
|
+
copyBikeData(data: IncyclistBikeData, bikeData: IncyclistBikeData): IncyclistBikeData;
|
|
20
15
|
}
|
package/lib/modes/power-meter.js
CHANGED
|
@@ -3,76 +3,37 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.config = void 0;
|
|
7
6
|
const power_base_1 = __importDefault(require("./power-base"));
|
|
8
|
-
const MIN_SPEED = 10;
|
|
9
|
-
exports.config = {
|
|
10
|
-
name: 'PowerMeter',
|
|
11
|
-
description: 'Power and cadence are taken from device. Speed is calculated from power and current slope\nThis mode will not respect maximum power and/or workout limits',
|
|
12
|
-
properties: []
|
|
13
|
-
};
|
|
14
7
|
class PowerMeterCyclingMode extends power_base_1.default {
|
|
15
8
|
constructor(adapter, props) {
|
|
16
9
|
super(adapter, props);
|
|
17
10
|
this.initLogger('PowerMeterMode');
|
|
18
|
-
this.data =
|
|
19
|
-
}
|
|
20
|
-
getName() {
|
|
21
|
-
return exports.config.name;
|
|
22
|
-
}
|
|
23
|
-
getDescription() {
|
|
24
|
-
return exports.config.description;
|
|
25
|
-
}
|
|
26
|
-
getProperties() {
|
|
27
|
-
return exports.config.properties;
|
|
28
|
-
}
|
|
29
|
-
getProperty(name) {
|
|
30
|
-
return exports.config.properties.find(p => p.name === name);
|
|
11
|
+
this.data.slope = 0;
|
|
31
12
|
}
|
|
32
13
|
getBikeInitRequest() {
|
|
33
14
|
return {};
|
|
34
15
|
}
|
|
35
16
|
sendBikeUpdate(request = {}) {
|
|
36
|
-
|
|
37
|
-
const
|
|
17
|
+
this.logger.logEvent({ message: "processing update request", request });
|
|
18
|
+
const prevData = this.data;
|
|
19
|
+
const prevSlope = prevData.slope;
|
|
38
20
|
if (request.slope && request.slope !== prevSlope) {
|
|
39
21
|
this.data.slope = request.slope;
|
|
40
|
-
this.updateData(this.data,
|
|
22
|
+
this.updateData(this.data, false);
|
|
41
23
|
}
|
|
42
|
-
this.logger.logEvent({ message: "processing update request", request });
|
|
43
24
|
return {};
|
|
44
25
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
let power = bikeData.power || 0;
|
|
50
|
-
const slope = prevData.slope || 0;
|
|
51
|
-
const distanceInternal = prevData.distanceInternal || 0;
|
|
52
|
-
if (power > 0) {
|
|
53
|
-
data.isPedalling = true;
|
|
54
|
-
}
|
|
55
|
-
const m = this.getWeight();
|
|
56
|
-
const t = this.getTimeSinceLastUpdate();
|
|
57
|
-
const { speed, distance } = this.calculateSpeedAndDistance(power, slope, m, t);
|
|
58
|
-
data.power = Math.round(power);
|
|
59
|
-
data.slope = slope;
|
|
60
|
-
if (power === 0 && speed < MIN_SPEED) {
|
|
61
|
-
data.speed = Math.round(prevData.speed - 1) < 0 ? 0 : Math.round(prevData.speed - 1);
|
|
62
|
-
data.distanceInternal = distanceInternal + data.speed / 3.6 * t;
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
data.speed = speed;
|
|
66
|
-
data.distanceInternal = distanceInternal + distance;
|
|
67
|
-
}
|
|
68
|
-
if (props.log)
|
|
69
|
-
this.logger.logEvent({ message: "updateData result", data, bikeData, prevSpeed: prevData.speed, stopped: speed < MIN_SPEED });
|
|
70
|
-
this.data = data;
|
|
26
|
+
copyBikeData(data, bikeData) {
|
|
27
|
+
const newData = super.copyBikeData(data, bikeData);
|
|
28
|
+
if (bikeData.power > 0) {
|
|
29
|
+
newData.isPedalling = true;
|
|
71
30
|
}
|
|
72
|
-
|
|
73
|
-
this.logger.logEvent({ message: 'error', fn: 'updateData()', error: err.message || err });
|
|
74
|
-
}
|
|
75
|
-
return this.data;
|
|
31
|
+
return newData;
|
|
76
32
|
}
|
|
77
33
|
}
|
|
34
|
+
PowerMeterCyclingMode.config = {
|
|
35
|
+
name: 'PowerMeter',
|
|
36
|
+
description: 'Power and cadence are taken from device. Speed is calculated from power and current slope\nThis mode will not respect maximum power and/or workout limits',
|
|
37
|
+
properties: []
|
|
38
|
+
};
|
|
78
39
|
exports.default = PowerMeterCyclingMode;
|
package/lib/modes/simulator.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventLogger } from "gd-eventlog";
|
|
2
|
-
import {
|
|
2
|
+
import { CyclingModeProperyType, UpdateRequest } from "./types";
|
|
3
|
+
import { IncyclistBikeData } from "../types";
|
|
3
4
|
import { Simulator } from "../simulator/Simulator";
|
|
4
5
|
import PowerBasedCyclingModeBase from "./power-base";
|
|
5
6
|
export type ERGEvent = {
|
|
@@ -9,21 +10,48 @@ export type ERGEvent = {
|
|
|
9
10
|
tsStart?: number;
|
|
10
11
|
};
|
|
11
12
|
export default class SimulatorCyclingMode extends PowerBasedCyclingModeBase {
|
|
12
|
-
static
|
|
13
|
+
protected static config: {
|
|
14
|
+
isERG: boolean;
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
properties: ({
|
|
18
|
+
key: string;
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
type: CyclingModeProperyType;
|
|
22
|
+
options: string[];
|
|
23
|
+
default: string;
|
|
24
|
+
min?: undefined;
|
|
25
|
+
max?: undefined;
|
|
26
|
+
condition?: undefined;
|
|
27
|
+
} | {
|
|
28
|
+
key: string;
|
|
29
|
+
name: string;
|
|
30
|
+
description: string;
|
|
31
|
+
type: CyclingModeProperyType;
|
|
32
|
+
default: number;
|
|
33
|
+
min: number;
|
|
34
|
+
max: number;
|
|
35
|
+
options?: undefined;
|
|
36
|
+
condition?: undefined;
|
|
37
|
+
} | {
|
|
38
|
+
key: string;
|
|
39
|
+
name: string;
|
|
40
|
+
description: string;
|
|
41
|
+
condition: (s: any) => boolean;
|
|
42
|
+
type: CyclingModeProperyType;
|
|
43
|
+
default: number;
|
|
44
|
+
min: number;
|
|
45
|
+
max: number;
|
|
46
|
+
options?: undefined;
|
|
47
|
+
})[];
|
|
48
|
+
};
|
|
13
49
|
logger: EventLogger;
|
|
14
50
|
data: IncyclistBikeData;
|
|
15
51
|
prevRequest: UpdateRequest;
|
|
16
52
|
prevUpdateTS: number;
|
|
17
|
-
hasBikeUpdate: boolean;
|
|
18
|
-
chain: number[];
|
|
19
|
-
cassette: number[];
|
|
20
53
|
event: ERGEvent;
|
|
21
54
|
constructor(adapter: Simulator, props?: any);
|
|
22
|
-
getName(): string;
|
|
23
|
-
getDescription(): string;
|
|
24
|
-
getProperties(): CyclingModeProperty[];
|
|
25
|
-
getProperty(name: string): CyclingModeProperty;
|
|
26
55
|
getBikeInitRequest(): UpdateRequest;
|
|
27
|
-
sendBikeUpdate(request: UpdateRequest): UpdateRequest;
|
|
28
56
|
updateData(bikeData: IncyclistBikeData): IncyclistBikeData;
|
|
29
57
|
}
|
package/lib/modes/simulator.js
CHANGED
|
@@ -3,62 +3,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
7
|
-
const cycling_mode_1 = require("../modes/cycling-mode");
|
|
6
|
+
const types_1 = require("./types");
|
|
8
7
|
const power_base_1 = __importDefault(require("./power-base"));
|
|
9
8
|
const MIN_SPEED = 10;
|
|
10
|
-
const config = {
|
|
11
|
-
name: "Simulator",
|
|
12
|
-
description: "Simulates a ride with constant speed or power output",
|
|
13
|
-
properties: [
|
|
14
|
-
{ key: 'mode', name: 'Simulation Type', description: '', type: cycling_mode_1.CyclingModeProperyType.SingleSelect, options: ['Speed', 'Power'], default: 'Power' },
|
|
15
|
-
{ key: 'delay', name: 'Start Delay', description: 'Delay (in s) at start of training', type: cycling_mode_1.CyclingModeProperyType.Integer, default: 2, min: 0, max: 30 },
|
|
16
|
-
{ key: 'power', name: 'Power', description: 'Power (in W) at start of training', condition: (s) => !s.mode || s.mode === 'Power', type: cycling_mode_1.CyclingModeProperyType.Integer, default: 150, min: 25, max: 800 },
|
|
17
|
-
{ key: 'speed', name: 'Speed', description: 'Speed (in km/h) at start of training', condition: (s) => s.mode === 'Speed', type: cycling_mode_1.CyclingModeProperyType.Integer, default: 30, min: 5, max: 50 },
|
|
18
|
-
{ key: 'bikeType', name: 'Bike Type', description: '', type: cycling_mode_1.CyclingModeProperyType.SingleSelect, options: ['Race', 'Mountain', 'Triathlon'], default: 'Race' }
|
|
19
|
-
]
|
|
20
|
-
};
|
|
21
9
|
class SimulatorCyclingMode extends power_base_1.default {
|
|
22
10
|
constructor(adapter, props) {
|
|
23
11
|
super(adapter, props);
|
|
24
12
|
this.prevUpdateTS = 0;
|
|
25
|
-
this.hasBikeUpdate = false;
|
|
26
13
|
this.event = {};
|
|
27
|
-
this.
|
|
28
|
-
this.data = {};
|
|
29
|
-
this.logger.logEvent({ message: 'constructor', props });
|
|
30
|
-
}
|
|
31
|
-
getName() {
|
|
32
|
-
return config.name;
|
|
33
|
-
}
|
|
34
|
-
getDescription() {
|
|
35
|
-
return config.description;
|
|
36
|
-
}
|
|
37
|
-
getProperties() {
|
|
38
|
-
return config.properties;
|
|
39
|
-
}
|
|
40
|
-
getProperty(name) {
|
|
41
|
-
return config.properties.find(p => p.name === name);
|
|
14
|
+
this.initLogger('SIMMode');
|
|
42
15
|
}
|
|
43
16
|
getBikeInitRequest() {
|
|
44
17
|
return {};
|
|
45
18
|
}
|
|
46
|
-
sendBikeUpdate(request) {
|
|
47
|
-
this.logger.logEvent({ message: 'bike update request', request });
|
|
48
|
-
const r = request || { refresh: true };
|
|
49
|
-
if (r.refresh) {
|
|
50
|
-
if (Object.keys(r).length === 1)
|
|
51
|
-
return this.prevRequest || {};
|
|
52
|
-
delete r.refresh;
|
|
53
|
-
}
|
|
54
|
-
if (request.slope !== undefined) {
|
|
55
|
-
if (!this.data)
|
|
56
|
-
this.data = {};
|
|
57
|
-
this.data.slope = request.slope;
|
|
58
|
-
}
|
|
59
|
-
this.prevRequest = request ? JSON.parse(JSON.stringify(request)) : {};
|
|
60
|
-
return r;
|
|
61
|
-
}
|
|
62
19
|
updateData(bikeData) {
|
|
63
20
|
const prevData = JSON.parse(JSON.stringify(this.data || {}));
|
|
64
21
|
const prevSpeed = prevData.speed;
|
|
@@ -136,5 +93,16 @@ class SimulatorCyclingMode extends power_base_1.default {
|
|
|
136
93
|
return data;
|
|
137
94
|
}
|
|
138
95
|
}
|
|
139
|
-
SimulatorCyclingMode.
|
|
96
|
+
SimulatorCyclingMode.config = {
|
|
97
|
+
isERG: true,
|
|
98
|
+
name: "Simulator",
|
|
99
|
+
description: "Simulates a ride with constant speed or power output",
|
|
100
|
+
properties: [
|
|
101
|
+
{ key: 'mode', name: 'Simulation Type', description: '', type: types_1.CyclingModeProperyType.SingleSelect, options: ['Speed', 'Power'], default: 'Power' },
|
|
102
|
+
{ key: 'delay', name: 'Start Delay', description: 'Delay (in s) at start of training', type: types_1.CyclingModeProperyType.Integer, default: 2, min: 0, max: 30 },
|
|
103
|
+
{ key: 'power', name: 'Power', description: 'Power (in W) at start of training', condition: (s) => !s.mode || s.mode === 'Power', type: types_1.CyclingModeProperyType.Integer, default: 150, min: 25, max: 800 },
|
|
104
|
+
{ key: 'speed', name: 'Speed', description: 'Speed (in km/h) at start of training', condition: (s) => s.mode === 'Speed', type: types_1.CyclingModeProperyType.Integer, default: 30, min: 5, max: 50 },
|
|
105
|
+
{ key: 'bikeType', name: 'Bike Type', description: '', type: types_1.CyclingModeProperyType.SingleSelect, options: ['Race', 'Mountain', 'Triathlon'], default: 'Race' }
|
|
106
|
+
]
|
|
107
|
+
};
|
|
140
108
|
exports.default = SimulatorCyclingMode;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IAdapter, IncyclistBikeData } from "../types";
|
|
2
2
|
export type UpdateRequest = {
|
|
3
3
|
slope?: number;
|
|
4
4
|
minPower?: number;
|
|
@@ -27,28 +27,17 @@ export type CyclingModeProperty = {
|
|
|
27
27
|
default?: any;
|
|
28
28
|
options?: any[];
|
|
29
29
|
};
|
|
30
|
-
export type IncyclistBikeData = {
|
|
31
|
-
isPedalling?: boolean;
|
|
32
|
-
power: number;
|
|
33
|
-
pedalRpm: number;
|
|
34
|
-
speed: number;
|
|
35
|
-
heartrate?: number;
|
|
36
|
-
distanceInternal?: number;
|
|
37
|
-
time?: number;
|
|
38
|
-
gear?: number;
|
|
39
|
-
slope?: number;
|
|
40
|
-
};
|
|
41
30
|
export type Settings = {
|
|
42
31
|
[key: string]: any;
|
|
43
32
|
};
|
|
44
|
-
export default interface
|
|
33
|
+
export default interface ICyclingMode {
|
|
45
34
|
getName(): string;
|
|
46
35
|
getDescription(): string;
|
|
36
|
+
getProperties(): CyclingModeProperty[];
|
|
37
|
+
getProperty(name: string): CyclingModeProperty;
|
|
47
38
|
getBikeInitRequest(): UpdateRequest;
|
|
48
39
|
sendBikeUpdate(request: UpdateRequest): UpdateRequest;
|
|
49
40
|
updateData(data: IncyclistBikeData): IncyclistBikeData;
|
|
50
|
-
getProperties(): CyclingModeProperty[];
|
|
51
|
-
getProperty(name: string): CyclingModeProperty;
|
|
52
41
|
setSettings(settings: any): any;
|
|
53
42
|
setSetting(name: string, value: any): void;
|
|
54
43
|
getSetting(name: string): any;
|
|
@@ -56,23 +45,26 @@ export default interface CyclingMode {
|
|
|
56
45
|
setModeProperty(name: string, value: any): void;
|
|
57
46
|
getModeProperty(name: string): any;
|
|
58
47
|
}
|
|
59
|
-
export
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
48
|
+
export type CyclingModeConfig = {
|
|
49
|
+
isERG?: boolean;
|
|
50
|
+
name: string;
|
|
51
|
+
description: string;
|
|
52
|
+
properties: CyclingModeProperty[];
|
|
53
|
+
};
|
|
54
|
+
export declare class CyclingMode implements ICyclingMode {
|
|
55
|
+
constructor(_adapter: IAdapter, _props?: any);
|
|
56
|
+
static supportsERGMode(): boolean;
|
|
66
57
|
getName(): string;
|
|
67
58
|
getDescription(): string;
|
|
68
|
-
sendBikeUpdate(request: UpdateRequest): UpdateRequest;
|
|
69
|
-
updateData(data: IncyclistBikeData): IncyclistBikeData;
|
|
70
59
|
getProperties(): CyclingModeProperty[];
|
|
71
|
-
getProperty(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
60
|
+
getProperty(_name: string): CyclingModeProperty;
|
|
61
|
+
getBikeInitRequest(): UpdateRequest;
|
|
62
|
+
sendBikeUpdate(_request: UpdateRequest): UpdateRequest;
|
|
63
|
+
updateData(_data: IncyclistBikeData): IncyclistBikeData;
|
|
64
|
+
setSettings(_settings: any): void;
|
|
65
|
+
setSetting(_name: string, _value: any): void;
|
|
66
|
+
getSetting(_name: string): void;
|
|
75
67
|
getSettings(): Settings;
|
|
76
|
-
setModeProperty(
|
|
77
|
-
getModeProperty(
|
|
68
|
+
setModeProperty(_name: string, _value: any): void;
|
|
69
|
+
getModeProperty(_name: string): void;
|
|
78
70
|
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CyclingMode = exports.CyclingModeProperyType = void 0;
|
|
4
|
+
var CyclingModeProperyType;
|
|
5
|
+
(function (CyclingModeProperyType) {
|
|
6
|
+
CyclingModeProperyType["Integer"] = "Integer";
|
|
7
|
+
CyclingModeProperyType["Boolean"] = "Boolean";
|
|
8
|
+
CyclingModeProperyType["Float"] = "Float";
|
|
9
|
+
CyclingModeProperyType["String"] = "String";
|
|
10
|
+
CyclingModeProperyType["SingleSelect"] = "SingleSelect";
|
|
11
|
+
CyclingModeProperyType["MultiSelect"] = "MultiSelect";
|
|
12
|
+
})(CyclingModeProperyType || (exports.CyclingModeProperyType = CyclingModeProperyType = {}));
|
|
13
|
+
class CyclingMode {
|
|
14
|
+
constructor(_adapter, _props) { }
|
|
15
|
+
static supportsERGMode() { return false; }
|
|
16
|
+
getName() {
|
|
17
|
+
throw new Error("Method not implemented.");
|
|
18
|
+
}
|
|
19
|
+
getDescription() {
|
|
20
|
+
throw new Error("Method not implemented.");
|
|
21
|
+
}
|
|
22
|
+
getProperties() {
|
|
23
|
+
throw new Error("Method not implemented.");
|
|
24
|
+
}
|
|
25
|
+
getProperty(_name) {
|
|
26
|
+
throw new Error("Method not implemented.");
|
|
27
|
+
}
|
|
28
|
+
getBikeInitRequest() {
|
|
29
|
+
throw new Error("Method not implemented.");
|
|
30
|
+
}
|
|
31
|
+
sendBikeUpdate(_request) {
|
|
32
|
+
throw new Error("Method not implemented.");
|
|
33
|
+
}
|
|
34
|
+
updateData(_data) {
|
|
35
|
+
throw new Error("Method not implemented.");
|
|
36
|
+
}
|
|
37
|
+
setSettings(_settings) {
|
|
38
|
+
throw new Error("Method not implemented.");
|
|
39
|
+
}
|
|
40
|
+
setSetting(_name, _value) {
|
|
41
|
+
throw new Error("Method not implemented.");
|
|
42
|
+
}
|
|
43
|
+
getSetting(_name) {
|
|
44
|
+
throw new Error("Method not implemented.");
|
|
45
|
+
}
|
|
46
|
+
getSettings() {
|
|
47
|
+
throw new Error("Method not implemented.");
|
|
48
|
+
}
|
|
49
|
+
setModeProperty(_name, _value) {
|
|
50
|
+
throw new Error("Method not implemented.");
|
|
51
|
+
}
|
|
52
|
+
getModeProperty(_name) {
|
|
53
|
+
throw new Error("Method not implemented.");
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.CyclingMode = CyclingMode;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SerialDeviceSettings } from './adapter';
|
|
2
|
+
import { EventLogger } from "gd-eventlog";
|
|
3
|
+
import { SerialScannerProps } from "./types";
|
|
4
|
+
import SerialInterface from "./serial-interface";
|
|
5
|
+
export declare class SinglePathScanner {
|
|
6
|
+
path: string;
|
|
7
|
+
serial: SerialInterface;
|
|
8
|
+
result: SerialDeviceSettings;
|
|
9
|
+
isScanning: boolean;
|
|
10
|
+
props: SerialScannerProps;
|
|
11
|
+
logger: EventLogger;
|
|
12
|
+
isFound: boolean;
|
|
13
|
+
constructor(path: string, serial: SerialInterface, props: SerialScannerProps);
|
|
14
|
+
logEvent(event: any): void;
|
|
15
|
+
onStopRequest(resolve: any): Promise<void>;
|
|
16
|
+
scan(): Promise<SerialDeviceSettings | undefined>;
|
|
17
|
+
}
|