incyclist-devices 2.0.38 → 2.1.0
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/antv2/adapter-factory.d.ts +4 -2
- package/lib/antv2/adapter.d.ts +3 -20
- package/lib/antv2/adapter.js +2 -92
- package/lib/antv2/fe/adapter.d.ts +9 -5
- package/lib/antv2/fe/adapter.js +25 -14
- package/lib/antv2/hr/adapter.d.ts +2 -1
- package/lib/antv2/pwr/adapter.d.ts +9 -5
- package/lib/antv2/pwr/adapter.js +19 -8
- package/lib/antv2/types.d.ts +2 -1
- package/lib/base/adpater.d.ts +31 -13
- package/lib/base/adpater.js +84 -28
- package/lib/ble/adapter-factory.d.ts +10 -9
- package/lib/ble/base/adapter.d.ts +9 -20
- package/lib/ble/base/adapter.js +13 -69
- package/lib/ble/ble-interface.d.ts +5 -4
- package/lib/ble/cp/adapter.d.ts +5 -8
- package/lib/ble/cp/adapter.js +26 -10
- package/lib/ble/elite/adapter.d.ts +6 -5
- package/lib/ble/elite/adapter.js +26 -2
- package/lib/ble/fm/adapter.d.ts +10 -9
- package/lib/ble/fm/adapter.js +38 -11
- package/lib/ble/hr/adapter.d.ts +5 -3
- package/lib/ble/peripheral-cache.d.ts +3 -2
- package/lib/ble/tacx/adapter.d.ts +2 -2
- package/lib/ble/wahoo/adapter.d.ts +2 -2
- package/lib/index.d.ts +5 -5
- package/lib/index.js +4 -2
- 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 +16 -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 +23 -0
- package/lib/{serial/daum/premium/modes/daum-classic.js → modes/daum-premium-standard.js} +26 -38
- package/lib/modes/daum-smarttrainer.d.ts +82 -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 +182 -5
- package/lib/modes/power-meter.d.ts +10 -16
- package/lib/modes/power-meter.js +15 -54
- package/lib/modes/simulator.d.ts +37 -10
- package/lib/modes/simulator.js +14 -46
- package/lib/modes/{cycling-mode.d.ts → types.d.ts} +22 -19
- package/lib/modes/types.js +56 -0
- package/lib/serial/adapter-factory.d.ts +7 -5
- package/lib/serial/adapter.d.ts +2 -2
- package/lib/serial/adapter.js +5 -2
- package/lib/serial/daum/DaumAdapter.d.ts +27 -24
- package/lib/serial/daum/DaumAdapter.js +200 -128
- package/lib/serial/daum/classic/adapter.d.ts +20 -21
- package/lib/serial/daum/classic/adapter.js +83 -157
- package/lib/serial/daum/classic/comms.d.ts +19 -13
- package/lib/serial/daum/classic/comms.js +39 -12
- package/lib/serial/daum/classic/mock.d.ts +4 -0
- package/lib/serial/daum/classic/mock.js +14 -4
- package/lib/serial/daum/premium/adapter.d.ts +16 -11
- package/lib/serial/daum/premium/adapter.js +98 -95
- package/lib/serial/daum/premium/comms.d.ts +4 -1
- package/lib/serial/daum/premium/comms.js +25 -17
- package/lib/serial/daum/premium/mock.d.ts +4 -0
- package/lib/serial/daum/premium/mock.js +15 -5
- package/lib/serial/daum/types.d.ts +11 -0
- package/lib/serial/daum/types.js +5 -0
- package/lib/serial/kettler/ergo-racer/adapter.d.ts +10 -8
- package/lib/serial/kettler/ergo-racer/adapter.js +17 -7
- package/lib/serial/serial-interface.js +1 -2
- package/lib/simulator/Simulator.d.ts +14 -17
- package/lib/simulator/Simulator.js +18 -47
- package/lib/types/adapter.d.ts +29 -8
- package/lib/types/adapter.js +68 -0
- package/lib/utils/utils.d.ts +1 -1
- 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/premium/modes/daum-classic.d.ts +0 -14
- package/lib/serial/kettler/ergo-racer/modes/erg.d.ts +0 -25
- /package/lib/serial/daum/{constants.d.ts → consts.d.ts} +0 -0
- /package/lib/serial/daum/{constants.js → consts.js} +0 -0
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
26
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
27
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -12,205 +35,101 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
36
|
};
|
|
14
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.DaumClassicControl = void 0;
|
|
15
39
|
const gd_eventlog_1 = require("gd-eventlog");
|
|
16
40
|
const utils_1 = require("../../../utils/utils");
|
|
17
|
-
const DaumAdapter_1 =
|
|
18
|
-
const
|
|
41
|
+
const DaumAdapter_1 = __importStar(require("../DaumAdapter"));
|
|
42
|
+
const daum_classic_standard_1 = __importDefault(require("../../../modes/daum-classic-standard"));
|
|
19
43
|
const comms_1 = __importDefault(require("./comms"));
|
|
20
44
|
const serial_interface_1 = __importDefault(require("../../serial-interface"));
|
|
21
45
|
const PROTOCOL_NAME = "Daum Classic";
|
|
22
46
|
const DEFAULT_GEAR = 10;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
47
|
+
class DaumClassicControl extends DaumAdapter_1.DaumControl {
|
|
48
|
+
getSupportedCyclingModes() {
|
|
49
|
+
const supported = super.getSupportedCyclingModes();
|
|
50
|
+
supported.push(daum_classic_standard_1.default);
|
|
51
|
+
return supported;
|
|
28
52
|
}
|
|
29
|
-
|
|
30
|
-
|
|
53
|
+
getDefaultCyclingMode() {
|
|
54
|
+
return new daum_classic_standard_1.default(this.adapter);
|
|
31
55
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const path = `${port}`;
|
|
35
|
-
return { serial, path };
|
|
36
|
-
};
|
|
56
|
+
}
|
|
57
|
+
exports.DaumClassicControl = DaumClassicControl;
|
|
37
58
|
class DaumClassicAdapter extends DaumAdapter_1.default {
|
|
38
59
|
constructor(settings, props) {
|
|
39
60
|
super(settings, props);
|
|
61
|
+
this.setControl(new DaumClassicControl(this, props));
|
|
40
62
|
const logger = new gd_eventlog_1.EventLogger('DaumClassic');
|
|
41
|
-
const commProps = Object.assign(Object.assign({}, getBikeProps(settings)), { logger });
|
|
63
|
+
const commProps = Object.assign(Object.assign({}, this.getBikeProps(settings)), { logger });
|
|
42
64
|
this.bike = new comms_1.default(commProps);
|
|
43
65
|
this.logger = logger;
|
|
44
66
|
this.name = PROTOCOL_NAME;
|
|
45
|
-
this.ignoreHrm = false;
|
|
46
|
-
this.ignorePower = false;
|
|
47
|
-
this.ignoreBike = false;
|
|
48
|
-
this.stopped = false;
|
|
49
|
-
this.started = false;
|
|
50
|
-
this.paused = undefined;
|
|
51
|
-
this.iv = undefined;
|
|
52
|
-
this.distanceInternal = undefined;
|
|
53
|
-
this.startPromise = undefined;
|
|
54
|
-
this.checkPromise = undefined;
|
|
55
67
|
this.initData();
|
|
56
68
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
69
|
+
getBikeProps(props) {
|
|
70
|
+
const { port, interface: ifaceName } = props;
|
|
71
|
+
let serial;
|
|
72
|
+
if (ifaceName && typeof ifaceName === 'string') {
|
|
73
|
+
serial = serial_interface_1.default.getInstance({ ifaceName });
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
serial = props.interface;
|
|
77
|
+
}
|
|
78
|
+
if (!serial || !serial.binding)
|
|
79
|
+
throw new Error(`unknonwn interface: ${ifaceName}`);
|
|
80
|
+
const path = `${port}`;
|
|
81
|
+
return { serial, path };
|
|
62
82
|
}
|
|
63
83
|
getName() {
|
|
64
84
|
return this.name;
|
|
65
85
|
}
|
|
66
86
|
setName(name) {
|
|
67
|
-
this.name = name
|
|
68
|
-
}
|
|
69
|
-
getPort() {
|
|
70
|
-
return this.bike.getPort();
|
|
87
|
+
this.name = name;
|
|
71
88
|
}
|
|
72
89
|
getProtocolName() {
|
|
73
90
|
return PROTOCOL_NAME;
|
|
74
91
|
}
|
|
75
|
-
getSupportedCyclingModes() {
|
|
76
|
-
const supported = super.getSupportedCyclingModes();
|
|
77
|
-
supported.push(daum_classic_1.default);
|
|
78
|
-
return supported;
|
|
79
|
-
}
|
|
80
|
-
getDefaultCyclingMode() {
|
|
81
|
-
return new daum_classic_1.default(this);
|
|
82
|
-
}
|
|
83
|
-
getSerialInterface() {
|
|
84
|
-
var _a;
|
|
85
|
-
return (_a = this.bike) === null || _a === void 0 ? void 0 : _a.serial;
|
|
86
|
-
}
|
|
87
|
-
check() {
|
|
88
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
89
|
-
if (this.isStopped())
|
|
90
|
-
return false;
|
|
91
|
-
if (this.checkPromise) {
|
|
92
|
-
this.logEvent({ message: "waiting for previous check device", port: this.getPort() });
|
|
93
|
-
try {
|
|
94
|
-
yield this.checkPromise;
|
|
95
|
-
}
|
|
96
|
-
catch (_a) { }
|
|
97
|
-
this.logEvent({ message: "previous check device completed", port: this.getPort() });
|
|
98
|
-
this.checkPromise = undefined;
|
|
99
|
-
}
|
|
100
|
-
this.checkPromise = this.performCheck();
|
|
101
|
-
try {
|
|
102
|
-
const res = yield this.checkPromise;
|
|
103
|
-
this.checkPromise = undefined;
|
|
104
|
-
return res;
|
|
105
|
-
}
|
|
106
|
-
catch (err) {
|
|
107
|
-
this.checkPromise = undefined;
|
|
108
|
-
throw err;
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
92
|
performCheck() {
|
|
113
93
|
return __awaiter(this, void 0, void 0, function* () {
|
|
114
94
|
var info = {};
|
|
115
|
-
|
|
95
|
+
const check = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
116
96
|
this.logEvent({ message: "checking device", port: this.getPort() });
|
|
117
|
-
const iv = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
118
|
-
this.logEvent({ message: "checking device failed", port: this.getPort(), reason: 'timeout' });
|
|
119
|
-
resolve(false);
|
|
120
|
-
}), 5000);
|
|
121
97
|
try {
|
|
122
|
-
|
|
98
|
+
yield this.stop();
|
|
99
|
+
const connected = yield (0, utils_1.waitWithTimeout)(this.connect(), 5000, () => {
|
|
100
|
+
this.logEvent({ message: "checking device failed", port: this.getPort(), reason: 'timeout' });
|
|
101
|
+
});
|
|
123
102
|
if (!connected) {
|
|
124
|
-
clearTimeout(iv);
|
|
125
103
|
resolve(false);
|
|
126
104
|
return;
|
|
127
105
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
info.
|
|
106
|
+
this.stopped = false;
|
|
107
|
+
const address = yield this.bike.getAddress();
|
|
108
|
+
info.bikeNo = address === null || address === void 0 ? void 0 : address.bike;
|
|
109
|
+
const version = yield this.bike.getVersion();
|
|
110
|
+
info.serialNo = version === null || version === void 0 ? void 0 : version.serialNo;
|
|
111
|
+
info.cockpit = version === null || version === void 0 ? void 0 : version.cockpit;
|
|
133
112
|
this.setName('Daum ' + info.cockpit);
|
|
134
|
-
this.
|
|
135
|
-
|
|
113
|
+
this.pause();
|
|
114
|
+
this.started = false;
|
|
136
115
|
this.logEvent({ message: "checking device success", port: this.getPort(), info });
|
|
137
116
|
resolve(true);
|
|
138
117
|
}
|
|
139
118
|
catch (err) {
|
|
140
|
-
|
|
141
|
-
this.logEvent({ message: "checking device failed", port: this.getPort(), reason: err.message || err });
|
|
119
|
+
this.logEvent({ message: "checking device failed", port: this.getPort(), reason: err.message });
|
|
142
120
|
resolve(false);
|
|
143
121
|
}
|
|
144
122
|
}));
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
this.logEvent({ message: 'relaunch of device' });
|
|
150
|
-
try {
|
|
151
|
-
yield this.launch(props, true);
|
|
152
|
-
return true;
|
|
153
|
-
}
|
|
154
|
-
catch (err) {
|
|
155
|
-
this.logEvent({ message: 'start result: error', error: err.message });
|
|
156
|
-
throw err;
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
start(props = {}) {
|
|
161
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
162
|
-
const isRelaunch = this.started;
|
|
163
|
-
const message = isRelaunch ? 'relaunch of device' : 'initial start of device';
|
|
164
|
-
this.logEvent({ message });
|
|
165
|
-
try {
|
|
166
|
-
yield this.launch(props, isRelaunch);
|
|
167
|
-
return true;
|
|
168
|
-
}
|
|
169
|
-
catch (err) {
|
|
170
|
-
this.logEvent({ message: 'start result: error', error: err.message });
|
|
171
|
-
throw err;
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
launch(props, isRelaunch = false) {
|
|
176
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
177
|
-
try {
|
|
178
|
-
if (!this.startPromise) {
|
|
179
|
-
if (isRelaunch) {
|
|
180
|
-
yield this.stop();
|
|
181
|
-
this.bike.resumeLogging();
|
|
182
|
-
}
|
|
183
|
-
this.startPromise = this.performStart(props, isRelaunch);
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
this.logEvent({ message: 'start already ongoing' });
|
|
187
|
-
}
|
|
188
|
-
yield this.startPromise;
|
|
189
|
-
this.startPromise = undefined;
|
|
190
|
-
if (!isRelaunch) {
|
|
191
|
-
try {
|
|
192
|
-
const version = yield this.bike.getVersion();
|
|
193
|
-
const { serialNo, cockpit } = version || {};
|
|
194
|
-
this.logEvent({ message: 'device info', deviceInfo: { serialNo, cockpit } });
|
|
195
|
-
}
|
|
196
|
-
catch (_a) { }
|
|
197
|
-
}
|
|
198
|
-
this.logEvent({ message: 'start result: success' });
|
|
199
|
-
this.started = true;
|
|
200
|
-
return true;
|
|
201
|
-
}
|
|
202
|
-
catch (err) {
|
|
203
|
-
this.logEvent({ message: 'start result: error', error: err.message });
|
|
204
|
-
this.startPromise = undefined;
|
|
205
|
-
this.started = false;
|
|
206
|
-
throw new Error(`could not start device, reason:${err.message}`);
|
|
207
|
-
}
|
|
123
|
+
return yield (0, utils_1.waitWithTimeout)(check, 5000, () => {
|
|
124
|
+
this.logEvent({ message: "checking device failed", port: this.getPort(), reason: 'Timeout' });
|
|
125
|
+
return false;
|
|
126
|
+
});
|
|
208
127
|
});
|
|
209
128
|
}
|
|
210
129
|
performStart(props = {}, isRelaunch = false) {
|
|
211
130
|
this.stopUpdatePull();
|
|
212
131
|
this.setBikeProps(props);
|
|
213
|
-
const user = this.
|
|
132
|
+
const user = this.getUser();
|
|
214
133
|
const { gear = DEFAULT_GEAR } = props;
|
|
215
134
|
this.initData();
|
|
216
135
|
let startState = {};
|
|
@@ -218,9 +137,7 @@ class DaumClassicAdapter extends DaumAdapter_1.default {
|
|
|
218
137
|
try {
|
|
219
138
|
this.logEvent({ message: 'start attempt', isRelaunch, isConnected: this.bike.isConnected() });
|
|
220
139
|
if (!isRelaunch && !this.bike.isConnected()) {
|
|
221
|
-
|
|
222
|
-
if (!connected)
|
|
223
|
-
throw new Error('Could not connect');
|
|
140
|
+
yield this.verifyConnection();
|
|
224
141
|
}
|
|
225
142
|
yield this.getBike().resetDevice();
|
|
226
143
|
if (!startState.setProg) {
|
|
@@ -251,13 +168,13 @@ class DaumClassicAdapter extends DaumAdapter_1.default {
|
|
|
251
168
|
if (startRequest.targetPower && startRequest.targetPower !== 25 && data.power === 25) {
|
|
252
169
|
throw new Error('invalid device response: runData');
|
|
253
170
|
}
|
|
254
|
-
this.
|
|
255
|
-
this.paused = false;
|
|
171
|
+
this.started = true;
|
|
256
172
|
this.startUpdatePull();
|
|
257
|
-
return
|
|
173
|
+
return true;
|
|
258
174
|
}
|
|
259
175
|
catch (err) {
|
|
260
176
|
this.logEvent({ message: 'start attempt failed', error: err.message });
|
|
177
|
+
this.started = false;
|
|
261
178
|
if (startState.checkRunData) {
|
|
262
179
|
startState = {};
|
|
263
180
|
}
|
|
@@ -269,9 +186,18 @@ class DaumClassicAdapter extends DaumAdapter_1.default {
|
|
|
269
186
|
return __awaiter(this, void 0, void 0, function* () {
|
|
270
187
|
if (this.stopped)
|
|
271
188
|
return;
|
|
189
|
+
yield this.verifyConnection();
|
|
272
190
|
return this.getBike().runData();
|
|
273
191
|
});
|
|
274
192
|
}
|
|
193
|
+
getDeviceInfo() {
|
|
194
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
195
|
+
if (this.stopped)
|
|
196
|
+
return;
|
|
197
|
+
const version = yield this.bike.getVersion();
|
|
198
|
+
return version || {};
|
|
199
|
+
});
|
|
200
|
+
}
|
|
275
201
|
}
|
|
276
202
|
DaumClassicAdapter.NAME = PROTOCOL_NAME;
|
|
277
203
|
exports.default = DaumClassicAdapter;
|
|
@@ -3,7 +3,11 @@ import { ClassicBikeResponse, DaumClassicCommsState, DaumClassicRequest, DaumCla
|
|
|
3
3
|
import SerialPortComms from '../../comms';
|
|
4
4
|
import { DeviceType } from '../../../types/device';
|
|
5
5
|
import { IncyclistBikeData } from '../../..';
|
|
6
|
-
|
|
6
|
+
import DaumSerialComms from '../types';
|
|
7
|
+
import { SerialCommProps } from '../../comm';
|
|
8
|
+
export default class Daum8008 extends SerialPortComms<DaumClassicCommsState, DaumClassicRequest, DaumClassicResponse> implements DaumSerialComms {
|
|
9
|
+
protected bikeNo: number;
|
|
10
|
+
constructor(props: SerialCommProps);
|
|
7
11
|
validatePath(path: string): string;
|
|
8
12
|
getDefaultLoggerName(): string;
|
|
9
13
|
onConnected(): void;
|
|
@@ -13,23 +17,25 @@ export default class Daum8008 extends SerialPortComms<DaumClassicCommsState, Dau
|
|
|
13
17
|
doSend(expected: number, payload: Uint8Array): Promise<DaumClassicResponse>;
|
|
14
18
|
send(request: DaumClassicRequest): Promise<DaumClassicResponse>;
|
|
15
19
|
sendCommand(logString: string, command: number[], expected: any): Promise<Uint8Array>;
|
|
16
|
-
checkCockpit(
|
|
20
|
+
checkCockpit(bike?: number): Promise<checkCockpitReponse>;
|
|
17
21
|
getAddress(): Promise<ClassicBikeResponse>;
|
|
18
|
-
getVersion(
|
|
19
|
-
resetDevice(
|
|
20
|
-
startProg(
|
|
21
|
-
stopProg(
|
|
22
|
-
setProg(progNo?: number,
|
|
23
|
-
setBikeType(bikeType: DeviceType,
|
|
24
|
-
setPerson(user?: User,
|
|
22
|
+
getVersion(bike?: number): Promise<GetVersionReponse>;
|
|
23
|
+
resetDevice(bike?: number): Promise<ClassicBikeResponse>;
|
|
24
|
+
startProg(bike?: number): Promise<ProgResponse>;
|
|
25
|
+
stopProg(bike?: number): Promise<ProgResponse>;
|
|
26
|
+
setProg(progNo?: number, bike?: number): Promise<SetProgResponse>;
|
|
27
|
+
setBikeType(bikeType: DeviceType, bike?: number): Promise<ClassicBikeResponse>;
|
|
28
|
+
setPerson(user?: User, bike?: number): Promise<{
|
|
25
29
|
bike: number;
|
|
26
30
|
age: number;
|
|
27
31
|
gender: number;
|
|
28
32
|
length: number;
|
|
29
33
|
weight: number;
|
|
30
34
|
}>;
|
|
31
|
-
runData(
|
|
32
|
-
setGear(gear: number,
|
|
33
|
-
setPower(power: number,
|
|
34
|
-
setSlope(slope: number,
|
|
35
|
+
runData(bike?: number): Promise<IncyclistBikeData>;
|
|
36
|
+
setGear(gear: number, bike?: number): Promise<SetGearRepsonse>;
|
|
37
|
+
setPower(power: number, bike?: number): Promise<SetPowerRepsonse>;
|
|
38
|
+
setSlope(slope: number, bike?: number): Promise<SetSlopeRepsonse>;
|
|
39
|
+
setTargetSlope(slope: number): Promise<void>;
|
|
40
|
+
setTargetPower(power: number): Promise<void>;
|
|
35
41
|
}
|
|
@@ -19,6 +19,10 @@ const utils_2 = require("./utils");
|
|
|
19
19
|
const ByteLength = require('@serialport/parser-byte-length');
|
|
20
20
|
const TIMEOUT_SEND = 2000;
|
|
21
21
|
class Daum8008 extends comms_1.default {
|
|
22
|
+
constructor(props) {
|
|
23
|
+
super(props);
|
|
24
|
+
this.bikeNo = 0;
|
|
25
|
+
}
|
|
22
26
|
validatePath(path) {
|
|
23
27
|
return path;
|
|
24
28
|
}
|
|
@@ -104,8 +108,9 @@ class Daum8008 extends comms_1.default {
|
|
|
104
108
|
return response.data;
|
|
105
109
|
});
|
|
106
110
|
}
|
|
107
|
-
checkCockpit(
|
|
111
|
+
checkCockpit(bike) {
|
|
108
112
|
return __awaiter(this, void 0, void 0, function* () {
|
|
113
|
+
const bikeNo = bike === undefined ? this.bikeNo : bike;
|
|
109
114
|
try {
|
|
110
115
|
const data = yield this.sendCommand(`checkCockpit(${bikeNo})`, [0x10, bikeNo], 3);
|
|
111
116
|
return { bike: data[1], version: data[2] };
|
|
@@ -120,48 +125,56 @@ class Daum8008 extends comms_1.default {
|
|
|
120
125
|
getAddress() {
|
|
121
126
|
return __awaiter(this, void 0, void 0, function* () {
|
|
122
127
|
const data = yield this.sendCommand(`getAddress()`, [0x11], 2);
|
|
128
|
+
this.bikeNo = data[1];
|
|
123
129
|
return { bike: data[1] };
|
|
124
130
|
});
|
|
125
131
|
}
|
|
126
|
-
getVersion(
|
|
132
|
+
getVersion(bike) {
|
|
127
133
|
return __awaiter(this, void 0, void 0, function* () {
|
|
134
|
+
const bikeNo = bike === undefined ? this.bikeNo : bike;
|
|
128
135
|
const data = yield this.sendCommand(`getVersion(${bikeNo})`, [0x73, bikeNo], 11);
|
|
129
136
|
return { bike: data[1], serialNo: (0, utils_2.getSerialNo)(data, 2, 8), cockpit: (0, utils_2.getCockpit)(data[10]) };
|
|
130
137
|
});
|
|
131
138
|
}
|
|
132
|
-
resetDevice(
|
|
139
|
+
resetDevice(bike) {
|
|
133
140
|
return __awaiter(this, void 0, void 0, function* () {
|
|
141
|
+
const bikeNo = bike === undefined ? this.bikeNo : bike;
|
|
134
142
|
const data = yield this.sendCommand(`resetDevice(${bikeNo})`, [0x12, bikeNo], 2);
|
|
135
143
|
return { bike: data[1] };
|
|
136
144
|
});
|
|
137
145
|
}
|
|
138
|
-
startProg(
|
|
146
|
+
startProg(bike) {
|
|
139
147
|
return __awaiter(this, void 0, void 0, function* () {
|
|
148
|
+
const bikeNo = bike === undefined ? this.bikeNo : bike;
|
|
140
149
|
const data = yield this.sendCommand(`startProg(${bikeNo})`, [0x21, bikeNo], 3);
|
|
141
150
|
return { bike: data[1], pedalling: data[2] > 0 };
|
|
142
151
|
});
|
|
143
152
|
}
|
|
144
|
-
stopProg(
|
|
153
|
+
stopProg(bike) {
|
|
145
154
|
return __awaiter(this, void 0, void 0, function* () {
|
|
155
|
+
const bikeNo = bike === undefined ? this.bikeNo : bike;
|
|
146
156
|
const data = yield this.sendCommand(`stopProg(${bikeNo})`, [0x22, bikeNo], 3);
|
|
147
157
|
return { bike: data[1], pedalling: data[2] > 0 };
|
|
148
158
|
});
|
|
149
159
|
}
|
|
150
|
-
setProg(progNo = 0,
|
|
160
|
+
setProg(progNo = 0, bike) {
|
|
151
161
|
return __awaiter(this, void 0, void 0, function* () {
|
|
162
|
+
const bikeNo = bike === undefined ? this.bikeNo : bike;
|
|
152
163
|
const data = yield this.sendCommand(`setProg(${bikeNo},${progNo})`, [0x23, bikeNo, progNo], 4);
|
|
153
164
|
return { bike: data[1], progNo: data[2], pedalling: data[3] !== 0 };
|
|
154
165
|
});
|
|
155
166
|
}
|
|
156
|
-
setBikeType(bikeType,
|
|
167
|
+
setBikeType(bikeType, bike) {
|
|
157
168
|
return __awaiter(this, void 0, void 0, function* () {
|
|
169
|
+
const bikeNo = bike === undefined ? this.bikeNo : bike;
|
|
158
170
|
const bikeVal = (0, utils_2.getBikeType)(bikeType);
|
|
159
171
|
const data = yield this.sendCommand(`setBikeType(${bikeNo},${bikeType})`, [0x69, bikeNo, 0, 0, bikeVal], 3);
|
|
160
172
|
return { bike: data[1] };
|
|
161
173
|
});
|
|
162
174
|
}
|
|
163
|
-
setPerson(user = {},
|
|
175
|
+
setPerson(user = {}, bike) {
|
|
164
176
|
return __awaiter(this, void 0, void 0, function* () {
|
|
177
|
+
const bikeNo = bike === undefined ? this.bikeNo : bike;
|
|
165
178
|
const age = user.age !== undefined ? user.age : utils_2.DEFAULT_AGE;
|
|
166
179
|
const gender = (0, utils_2.getGender)(user.sex);
|
|
167
180
|
const length = (0, utils_2.getLength)(user.length);
|
|
@@ -194,32 +207,46 @@ class Daum8008 extends comms_1.default {
|
|
|
194
207
|
return ({ bike: data[1], age, gender, length, weight });
|
|
195
208
|
});
|
|
196
209
|
}
|
|
197
|
-
runData(
|
|
210
|
+
runData(bike) {
|
|
198
211
|
return __awaiter(this, void 0, void 0, function* () {
|
|
212
|
+
const bikeNo = bike === undefined ? this.bikeNo : bike;
|
|
199
213
|
const data = yield this.sendCommand(`runData(${bikeNo})`, [0x40, bikeNo], 19);
|
|
200
214
|
return (0, utils_2.parseRunData)(data);
|
|
201
215
|
});
|
|
202
216
|
}
|
|
203
|
-
setGear(gear,
|
|
217
|
+
setGear(gear, bike) {
|
|
204
218
|
return __awaiter(this, void 0, void 0, function* () {
|
|
219
|
+
const bikeNo = bike === undefined ? this.bikeNo : bike;
|
|
205
220
|
const gearVal = (0, utils_2.between)(gear, 1, 28);
|
|
206
221
|
const data = yield this.sendCommand(`setGear(${bikeNo},${gearVal})`, [0x53, bikeNo, gearVal], 3);
|
|
207
222
|
return ({ bike: data[1], gear: data[2] });
|
|
208
223
|
});
|
|
209
224
|
}
|
|
210
|
-
setPower(power,
|
|
225
|
+
setPower(power, bike) {
|
|
211
226
|
return __awaiter(this, void 0, void 0, function* () {
|
|
227
|
+
const bikeNo = bike === undefined ? this.bikeNo : bike;
|
|
212
228
|
const powerVal = Math.round((0, utils_2.between)(power, 25, 800) / 5);
|
|
213
229
|
const data = yield this.sendCommand(`setPower(${bikeNo},${power})`, [0x51, bikeNo, powerVal], 3);
|
|
214
230
|
return ({ bike: data[1], power: data[2] * 5 });
|
|
215
231
|
});
|
|
216
232
|
}
|
|
217
|
-
setSlope(slope,
|
|
233
|
+
setSlope(slope, bike) {
|
|
218
234
|
return __awaiter(this, void 0, void 0, function* () {
|
|
235
|
+
const bikeNo = bike === undefined ? this.bikeNo : bike;
|
|
219
236
|
const cmd = (0, utils_2.buildSetSlopeCommand)(bikeNo, slope);
|
|
220
237
|
const data = yield this.sendCommand(`setSlope(${bikeNo},${slope})`, cmd, 6);
|
|
221
238
|
return ({ bike: data[1], slope });
|
|
222
239
|
});
|
|
223
240
|
}
|
|
241
|
+
setTargetSlope(slope) {
|
|
242
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
243
|
+
yield this.setSlope(slope);
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
setTargetPower(power) {
|
|
247
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
248
|
+
yield this.setPower(power);
|
|
249
|
+
});
|
|
250
|
+
}
|
|
224
251
|
}
|
|
225
252
|
exports.default = Daum8008;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
2
3
|
import { MockBindingInterface, MockPortBinding, CreatePortOptions } from '@serialport/binding-mock';
|
|
3
4
|
import { BindingInterface } from '@serialport/bindings-interface';
|
|
4
5
|
export type MockProps = {
|
|
@@ -65,11 +66,14 @@ export declare class DaumClassicSimulator {
|
|
|
65
66
|
_timeoutResponse: number;
|
|
66
67
|
_simulateNoReponseCnt: number;
|
|
67
68
|
_simulateIllegalResponseCnt: number;
|
|
69
|
+
openHandles: Array<NodeJS.Timeout>;
|
|
68
70
|
constructor();
|
|
69
71
|
reset(): void;
|
|
70
72
|
simulateTimeout(ms: number): void;
|
|
71
73
|
simulateNoResponse(cnt?: number): void;
|
|
72
74
|
simulateIllegalResponse(cnt?: number): void;
|
|
75
|
+
addHandle(handle: NodeJS.Timeout): void;
|
|
76
|
+
cleanup(): void;
|
|
73
77
|
isPedalling(): 0 | 1;
|
|
74
78
|
}
|
|
75
79
|
export declare class DaumClassicMockBinding extends MockPortBinding {
|
|
@@ -90,6 +90,7 @@ class DaumClassicSimulator {
|
|
|
90
90
|
this._timeoutResponse = 0;
|
|
91
91
|
this._simulateNoReponseCnt = 0;
|
|
92
92
|
this._simulateIllegalResponseCnt = 0;
|
|
93
|
+
this.openHandles = [];
|
|
93
94
|
for (let i = 0; i < 10; i++)
|
|
94
95
|
this.bikes.push(Object.assign({}, DEFAULT_BIKE_DATA));
|
|
95
96
|
this.reset();
|
|
@@ -117,6 +118,12 @@ class DaumClassicSimulator {
|
|
|
117
118
|
simulateIllegalResponse(cnt = 1) {
|
|
118
119
|
this._simulateIllegalResponseCnt += cnt;
|
|
119
120
|
}
|
|
121
|
+
addHandle(handle) {
|
|
122
|
+
this.openHandles.push(handle);
|
|
123
|
+
}
|
|
124
|
+
cleanup() {
|
|
125
|
+
this.openHandles.forEach(to => { clearTimeout(to); });
|
|
126
|
+
}
|
|
120
127
|
isPedalling() {
|
|
121
128
|
if (this.cadence && this.cadence > 0)
|
|
122
129
|
return 1;
|
|
@@ -180,9 +187,11 @@ class DaumClassicMockBinding extends binding_mock_1.MockPortBinding {
|
|
|
180
187
|
this.simulator._simulateNoReponseCnt--;
|
|
181
188
|
return;
|
|
182
189
|
}
|
|
183
|
-
const
|
|
184
|
-
if (handler)
|
|
185
|
-
setTimeout(() => { handler(payload); },
|
|
190
|
+
const toVal = this.simulator._timeoutResponse || 5;
|
|
191
|
+
if (handler) {
|
|
192
|
+
const to = setTimeout(() => { handler(payload); }, toVal);
|
|
193
|
+
this.simulator.addHandle(to);
|
|
194
|
+
}
|
|
186
195
|
}
|
|
187
196
|
catch (err) {
|
|
188
197
|
}
|
|
@@ -346,7 +355,8 @@ class DaumClassicMockBinding extends binding_mock_1.MockPortBinding {
|
|
|
346
355
|
if (bikeNo >= 0 && bikeNo < 10) {
|
|
347
356
|
this.simulator.targetPower = power;
|
|
348
357
|
this.simulator.isPowerMode = true;
|
|
349
|
-
setTimeout(() => { this.simulator.currentPower = power; }, 1000);
|
|
358
|
+
const to = setTimeout(() => { this.simulator.currentPower = power; }, 1000);
|
|
359
|
+
this.simulator.addHandle(to);
|
|
350
360
|
const response = Buffer.from([0x51, bikeNo, power]);
|
|
351
361
|
this.emitData(response);
|
|
352
362
|
}
|
|
@@ -1,25 +1,30 @@
|
|
|
1
|
-
import { SerialInterface } from '../..';
|
|
2
1
|
import { SerialDeviceSettings } from '../../adapter';
|
|
3
2
|
import { SerialCommProps } from '../../comm';
|
|
4
|
-
import DaumAdapter from '../DaumAdapter';
|
|
3
|
+
import DaumAdapter, { DaumControl } from '../DaumAdapter';
|
|
4
|
+
import Daum8i from './comms';
|
|
5
5
|
import { Daum8iDeviceProperties } from './types';
|
|
6
6
|
import { IncyclistBikeData } from '../../..';
|
|
7
|
-
export
|
|
7
|
+
export declare class DaumPremiumControl extends DaumControl<Daum8iDeviceProperties> {
|
|
8
|
+
getSupportedCyclingModes(): Array<any>;
|
|
9
|
+
}
|
|
10
|
+
export default class DaumPremiumAdapter extends DaumAdapter<DaumPremiumControl, SerialDeviceSettings, Daum8iDeviceProperties, Daum8i> {
|
|
8
11
|
static NAME: string;
|
|
9
12
|
commProps: SerialCommProps;
|
|
10
|
-
_startRetryTimeout: number;
|
|
11
13
|
constructor(settings: SerialDeviceSettings, props?: Daum8iDeviceProperties);
|
|
14
|
+
getBikeProps(props: SerialDeviceSettings): {
|
|
15
|
+
serial: any;
|
|
16
|
+
path: string;
|
|
17
|
+
};
|
|
12
18
|
getName(): string;
|
|
13
19
|
getUniqueName(): string;
|
|
14
|
-
getPort(): any;
|
|
15
20
|
getInterface(): string;
|
|
16
21
|
getProtocolName(): string;
|
|
17
|
-
getSerialInterface(): SerialInterface;
|
|
18
22
|
isEqual(settings: SerialDeviceSettings): boolean;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
performCheck(): Promise<boolean>;
|
|
24
|
+
getStartRetries(): number;
|
|
25
|
+
getStartRetryTimeout(): number;
|
|
26
|
+
performStart(props?: Daum8iDeviceProperties, _isRelaunch?: boolean): Promise<boolean>;
|
|
27
|
+
requiresProgramUpload(): boolean;
|
|
24
28
|
getCurrentBikeData(): Promise<IncyclistBikeData>;
|
|
29
|
+
getDeviceInfo(): Promise<any>;
|
|
25
30
|
}
|