incyclist-devices 1.4.52 → 1.4.55
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/DeviceSupport.js +5 -1
- package/lib/ant/AntScanner.js +5 -1
- package/lib/ant/antfe/AntFEAdapter.d.ts +43 -2
- package/lib/ant/antfe/AntFEAdapter.js +75 -38
- package/lib/ant/antfe/ant-fe-erg-mode.d.ts +5 -0
- package/lib/ant/antfe/ant-fe-erg-mode.js +13 -0
- package/lib/ant/antfe/ant-fe-st-mode.d.ts +7 -0
- package/lib/ant/antfe/ant-fe-st-mode.js +52 -0
- package/lib/ble/ble-erg-mode.d.ts +2 -2
- package/lib/ble/ble-interface.js +1 -0
- package/lib/ble/ble-st-mode.d.ts +2 -2
- package/lib/ble/ble.d.ts +1 -0
- package/lib/ble/incyclist-protocol.js +6 -1
- package/lib/ble/wahoo-kickr.js +5 -1
- package/lib/daum/DaumAdapter.js +5 -1
- package/lib/daum/classic/DaumClassicProtocol.js +5 -1
- package/lib/daum/premium/DaumPremiumProtocol.js +5 -1
- package/lib/kettler/comms.d.ts +1 -0
- package/lib/kettler/ergo-racer/adapter.js +5 -1
- package/lib/kettler/ergo-racer/protocol.d.ts +1 -1
- package/lib/kettler/ergo-racer/protocol.js +5 -1
- package/lib/simulator/Simulator.d.ts +1 -1
- package/lib/simulator/Simulator.js +5 -1
- package/package.json +1 -1
package/lib/DeviceSupport.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
package/lib/ant/AntScanner.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -1,5 +1,41 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import AntAdapter from '../AntAdapter';
|
|
2
3
|
import { Queue } from '../../utils';
|
|
4
|
+
import CyclingMode, { IncyclistBikeData } from '../../CyclingMode';
|
|
5
|
+
export declare type AntFEDeviceData = {
|
|
6
|
+
DeviceID: number;
|
|
7
|
+
Temperature?: number;
|
|
8
|
+
ZeroOffset?: number;
|
|
9
|
+
SpinDownTime?: number;
|
|
10
|
+
EquipmentType?: 'Treadmill' | 'Elliptical' | 'StationaryBike' | 'Rower' | 'Climber' | 'NordicSkier' | 'Trainer' | 'General';
|
|
11
|
+
ElapsedTime?: number;
|
|
12
|
+
Distance?: number;
|
|
13
|
+
RealSpeed?: number;
|
|
14
|
+
VirtualSpeed?: number;
|
|
15
|
+
HeartRate?: number;
|
|
16
|
+
HeartRateSource?: 'HandContact' | 'EM' | 'ANT+';
|
|
17
|
+
State?: 'OFF' | 'READY' | 'IN_USE' | 'FINISHED';
|
|
18
|
+
CycleLength?: number;
|
|
19
|
+
Incline?: number;
|
|
20
|
+
Resistance?: number;
|
|
21
|
+
METs?: number;
|
|
22
|
+
CaloricBurnRate?: number;
|
|
23
|
+
Calories?: number;
|
|
24
|
+
_EventCount0x19?: number;
|
|
25
|
+
Cadence?: number;
|
|
26
|
+
AccumulatedPower?: number;
|
|
27
|
+
InstantaneousPower?: number;
|
|
28
|
+
AveragePower?: number;
|
|
29
|
+
TrainerStatus?: number;
|
|
30
|
+
TargetStatus?: 'OnTarget' | 'LowSpeed' | 'HighSpeed';
|
|
31
|
+
HwVersion?: number;
|
|
32
|
+
ManId?: number;
|
|
33
|
+
ModelNum?: number;
|
|
34
|
+
SwVersion?: number;
|
|
35
|
+
SerialNumber?: number;
|
|
36
|
+
PairedDevices?: any[];
|
|
37
|
+
RawData: Buffer;
|
|
38
|
+
};
|
|
3
39
|
export default class AntFEAdapter extends AntAdapter {
|
|
4
40
|
started: boolean;
|
|
5
41
|
starting: boolean;
|
|
@@ -8,6 +44,7 @@ export default class AntFEAdapter extends AntAdapter {
|
|
|
8
44
|
queue?: Queue<any>;
|
|
9
45
|
workerId?: any;
|
|
10
46
|
currentCmd?: any;
|
|
47
|
+
cyclingMode: CyclingMode;
|
|
11
48
|
constructor(DeviceID: any, port: any, stick: any, protocol: any);
|
|
12
49
|
isBike(): boolean;
|
|
13
50
|
isHrm(): boolean;
|
|
@@ -15,11 +52,15 @@ export default class AntFEAdapter extends AntAdapter {
|
|
|
15
52
|
getProfile(): string;
|
|
16
53
|
getName(): string;
|
|
17
54
|
getDisplayName(): string;
|
|
55
|
+
getSupportedCyclingModes(): Array<any>;
|
|
56
|
+
setCyclingMode(mode: string | CyclingMode, settings?: any): void;
|
|
57
|
+
getCyclingMode(): CyclingMode;
|
|
58
|
+
getDefaultCyclingMode(): CyclingMode;
|
|
18
59
|
onAttached(): void;
|
|
19
60
|
getLogData(data: any, excludeList: any): any;
|
|
20
|
-
onDeviceData(deviceData:
|
|
61
|
+
onDeviceData(deviceData: AntFEDeviceData): void;
|
|
62
|
+
mapData(deviceData: AntFEDeviceData): IncyclistBikeData;
|
|
21
63
|
onDeviceEvent(data: any): void;
|
|
22
|
-
updateData(data: any, deviceData: any): any;
|
|
23
64
|
transformData(bikeData: any): any;
|
|
24
65
|
start(props?: any): Promise<any>;
|
|
25
66
|
stop(): Promise<boolean>;
|
|
@@ -16,6 +16,8 @@ const gd_eventlog_1 = require("gd-eventlog");
|
|
|
16
16
|
const AntAdapter_1 = __importDefault(require("../AntAdapter"));
|
|
17
17
|
const utils_1 = require("../utils");
|
|
18
18
|
const utils_2 = require("../../utils");
|
|
19
|
+
const ant_fe_st_mode_1 = __importDefault(require("./ant-fe-st-mode"));
|
|
20
|
+
const ant_fe_erg_mode_1 = __importDefault(require("./ant-fe-erg-mode"));
|
|
19
21
|
const floatVal = (d) => d ? parseFloat(d) : d;
|
|
20
22
|
const intVal = (d) => d ? parseInt(d) : d;
|
|
21
23
|
const hex = (v) => Math.abs(v).toString(16).toUpperCase();
|
|
@@ -23,7 +25,8 @@ const TIMEOUT_ACK = 5000;
|
|
|
23
25
|
const TIMEOUT_START = 10000;
|
|
24
26
|
const TIMEOUT_ATTACH = 3000;
|
|
25
27
|
const DEFAULT_USER_WEIGHT = 75;
|
|
26
|
-
const DEFAULT_BIKE_WEIGHT =
|
|
28
|
+
const DEFAULT_BIKE_WEIGHT = 10;
|
|
29
|
+
const DEFAULT_BIKE_WEIGHT_MOUNTAIN = 14.5;
|
|
27
30
|
class AntFEAdapter extends AntAdapter_1.default {
|
|
28
31
|
constructor(DeviceID, port, stick, protocol) {
|
|
29
32
|
super(protocol);
|
|
@@ -54,6 +57,34 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
54
57
|
const hrmStr = ComputedHeartRate ? ` (${ComputedHeartRate})` : '';
|
|
55
58
|
return `${(0, utils_1.getBrand)(ManId)} FE ${DeviceID}${hrmStr}`;
|
|
56
59
|
}
|
|
60
|
+
getSupportedCyclingModes() {
|
|
61
|
+
return [ant_fe_st_mode_1.default, ant_fe_erg_mode_1.default];
|
|
62
|
+
}
|
|
63
|
+
setCyclingMode(mode, settings) {
|
|
64
|
+
let selectedMode;
|
|
65
|
+
if (typeof mode === 'string') {
|
|
66
|
+
const supported = this.getSupportedCyclingModes();
|
|
67
|
+
const CyclingModeClass = supported.find(M => { const m = new M(this); return m.getName() === mode; });
|
|
68
|
+
if (CyclingModeClass) {
|
|
69
|
+
this.cyclingMode = new CyclingModeClass(this, settings);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
selectedMode = this.getDefaultCyclingMode();
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
selectedMode = mode;
|
|
76
|
+
}
|
|
77
|
+
this.cyclingMode = selectedMode;
|
|
78
|
+
this.cyclingMode.setSettings(settings);
|
|
79
|
+
}
|
|
80
|
+
getCyclingMode() {
|
|
81
|
+
if (!this.cyclingMode)
|
|
82
|
+
this.cyclingMode = this.getDefaultCyclingMode();
|
|
83
|
+
return this.cyclingMode;
|
|
84
|
+
}
|
|
85
|
+
getDefaultCyclingMode() {
|
|
86
|
+
return new ant_fe_st_mode_1.default(this);
|
|
87
|
+
}
|
|
57
88
|
onAttached() {
|
|
58
89
|
this.logger.logEvent({ message: 'Device connected' });
|
|
59
90
|
this.connected = true;
|
|
@@ -74,8 +105,9 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
74
105
|
if (!this.lastUpdate || (Date.now() - this.lastUpdate) > this.updateFrequency) {
|
|
75
106
|
const logData = this.getLogData(deviceData, ['PairedDevices', 'RawData']);
|
|
76
107
|
this.logger.logEvent({ message: 'onDeviceData', data: logData });
|
|
77
|
-
|
|
78
|
-
|
|
108
|
+
let incyclistData = this.mapData(deviceData);
|
|
109
|
+
incyclistData = this.getCyclingMode().updateData(incyclistData);
|
|
110
|
+
const data = this.transformData(incyclistData);
|
|
79
111
|
this.onDataFn(data);
|
|
80
112
|
this.lastUpdate = Date.now();
|
|
81
113
|
}
|
|
@@ -84,6 +116,25 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
84
116
|
catch (err) {
|
|
85
117
|
}
|
|
86
118
|
}
|
|
119
|
+
mapData(deviceData) {
|
|
120
|
+
const data = {
|
|
121
|
+
isPedalling: false,
|
|
122
|
+
power: 0,
|
|
123
|
+
pedalRpm: undefined,
|
|
124
|
+
speed: 0,
|
|
125
|
+
heartrate: 0,
|
|
126
|
+
distanceInternal: 0,
|
|
127
|
+
slope: undefined,
|
|
128
|
+
time: undefined
|
|
129
|
+
};
|
|
130
|
+
data.speed = (deviceData.VirtualSpeed !== undefined ? deviceData.VirtualSpeed : (deviceData.RealSpeed || 0)) * 3.6;
|
|
131
|
+
data.slope = (deviceData.Incline !== undefined ? deviceData.Incline : data.slope);
|
|
132
|
+
data.power = (deviceData.InstantaneousPower !== undefined ? deviceData.InstantaneousPower : data.power);
|
|
133
|
+
data.time = (deviceData.ElapsedTime !== undefined ? deviceData.ElapsedTime : data.time);
|
|
134
|
+
data.pedalRpm = (deviceData.Cadence !== undefined ? deviceData.Cadence : data.pedalRpm);
|
|
135
|
+
data.isPedalling = data.pedalRpm > 0 || (data.pedalRpm === undefined && data.power > 0);
|
|
136
|
+
return data;
|
|
137
|
+
}
|
|
87
138
|
onDeviceEvent(data) {
|
|
88
139
|
try {
|
|
89
140
|
const cmdInfo = this.currentCmd;
|
|
@@ -127,43 +178,21 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
127
178
|
this.logger.logEvent({ message: 'Error', fn: 'parseEvent', event: { message: hex(data.message), code: hex(data.code) }, error: err.message || err });
|
|
128
179
|
}
|
|
129
180
|
}
|
|
130
|
-
updateData(data, deviceData) {
|
|
131
|
-
if (data.distanceOffs === undefined)
|
|
132
|
-
data.distanceOffs = 0;
|
|
133
|
-
data.speed = (deviceData.VirtualSpeed !== undefined ? deviceData.VirtualSpeed : deviceData.RealSpeed) * 3.6;
|
|
134
|
-
data.slope = (deviceData.Incline !== undefined ? deviceData.Incline : data.slope);
|
|
135
|
-
data.power = (deviceData.InstantaneousPower !== undefined ? deviceData.InstantaneousPower : data.power);
|
|
136
|
-
data.pedalRpm = (deviceData.Cadence !== undefined ? deviceData.Cadence : data.pedalRpm);
|
|
137
|
-
data.heartrate = (deviceData.HeartRate !== undefined ? deviceData.HeartRate : data.heartrate);
|
|
138
|
-
if (deviceData.Distance !== undefined && deviceData.Distance !== 0) {
|
|
139
|
-
data.distanceInternal = deviceData.Distance - data.distanceOffs;
|
|
140
|
-
data.distance = data.distanceInternal / 1000;
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
if (this.lastUpdate && deviceData.Cadence !== undefined && deviceData.Cadence > 0 && data.speed) {
|
|
144
|
-
const t = (Date.now() - this.lastUpdate) / 1000;
|
|
145
|
-
const prevDistance = data.distanceInternal || 0;
|
|
146
|
-
data.distanceInternal = Math.round(data.speed / 3.6 * t) + prevDistance;
|
|
147
|
-
data.distance = data.distanceInternal / 1000;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return data;
|
|
151
|
-
}
|
|
152
181
|
transformData(bikeData) {
|
|
153
182
|
if (bikeData === undefined)
|
|
154
183
|
return;
|
|
155
184
|
let distance = 0;
|
|
156
185
|
if (this.distanceInternal !== undefined && bikeData.distanceInternal !== undefined) {
|
|
157
|
-
distance =
|
|
186
|
+
distance = Math.round(bikeData.distanceInternal - this.distanceInternal);
|
|
158
187
|
}
|
|
159
188
|
if (bikeData.distanceInternal !== undefined)
|
|
160
189
|
this.distanceInternal = bikeData.distanceInternal;
|
|
161
190
|
let data = {
|
|
162
|
-
speed:
|
|
163
|
-
slope:
|
|
164
|
-
power:
|
|
165
|
-
cadence:
|
|
166
|
-
heartrate:
|
|
191
|
+
speed: bikeData.speed,
|
|
192
|
+
slope: bikeData.slope,
|
|
193
|
+
power: bikeData.power !== undefined ? Math.round(bikeData.power) : undefined,
|
|
194
|
+
cadence: bikeData.pedalRpm !== undefined ? Math.round(bikeData.pedalRpm) : undefined,
|
|
195
|
+
heartrate: bikeData.heartrate !== undefined ? Math.round(bikeData.heartrate) : undefined,
|
|
167
196
|
distance,
|
|
168
197
|
timestamp: Date.now()
|
|
169
198
|
};
|
|
@@ -186,7 +215,7 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
186
215
|
yield _super.start.call(this, props);
|
|
187
216
|
this.logger.logEvent({ message: 'start()', props });
|
|
188
217
|
const opts = props || {};
|
|
189
|
-
const { args = {} } = opts;
|
|
218
|
+
const { args = {}, user = {} } = opts;
|
|
190
219
|
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
191
220
|
if (this.ignoreHrm && this.ignoreBike && this.ignorePower) {
|
|
192
221
|
this.logger.logEvent({ message: 'start() not done: bike disabled' });
|
|
@@ -241,8 +270,13 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
241
270
|
yield this.sendTrackResistance(0.0);
|
|
242
271
|
status.trackResistanceSent = true;
|
|
243
272
|
}
|
|
273
|
+
const mode = this.getCyclingMode();
|
|
274
|
+
const bikeType = mode ? mode.getSetting('bikeType').toLowerCase() : 'race';
|
|
275
|
+
const defaultBikeWeight = bikeType === 'mountain' ? DEFAULT_BIKE_WEIGHT_MOUNTAIN : DEFAULT_BIKE_WEIGHT;
|
|
244
276
|
if (!status.userSent) {
|
|
245
|
-
|
|
277
|
+
const userWeight = args.userWeight || user.weight || DEFAULT_USER_WEIGHT;
|
|
278
|
+
const bikeWeight = args.bikeWeight || defaultBikeWeight;
|
|
279
|
+
yield this.sendUserConfiguration(userWeight, bikeWeight, args.wheelDiameter, args.gearRatio);
|
|
246
280
|
status.userSent = true;
|
|
247
281
|
}
|
|
248
282
|
this.started = true;
|
|
@@ -295,14 +329,17 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
295
329
|
}
|
|
296
330
|
sendUpdate(request) {
|
|
297
331
|
return __awaiter(this, void 0, void 0, function* () {
|
|
298
|
-
this.
|
|
332
|
+
if (this.paused)
|
|
333
|
+
return;
|
|
334
|
+
const update = this.getCyclingMode().sendBikeUpdate(request);
|
|
335
|
+
this.logger.logEvent({ message: 'send bike update requested', update, request });
|
|
299
336
|
try {
|
|
300
337
|
const isReset = (!request || request.reset || Object.keys(request).length === 0);
|
|
301
|
-
if (
|
|
302
|
-
yield (0, utils_2.runWithRetries)(() => __awaiter(this, void 0, void 0, function* () { return yield this.sendTrackResistance(
|
|
338
|
+
if (update.slope !== undefined) {
|
|
339
|
+
yield (0, utils_2.runWithRetries)(() => __awaiter(this, void 0, void 0, function* () { return yield this.sendTrackResistance(update.slope); }), 2, 100);
|
|
303
340
|
}
|
|
304
|
-
if (
|
|
305
|
-
yield (0, utils_2.runWithRetries)(() => __awaiter(this, void 0, void 0, function* () { return yield this.sendTargetPower(
|
|
341
|
+
if (update.targetPower !== undefined) {
|
|
342
|
+
yield (0, utils_2.runWithRetries)(() => __awaiter(this, void 0, void 0, function* () { return yield this.sendTargetPower(update.targetPower); }), 2, 100);
|
|
306
343
|
}
|
|
307
344
|
else if (request.maxPower !== undefined) {
|
|
308
345
|
if (this.data.power && this.data.power > request.maxPower)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const ble_erg_mode_1 = __importDefault(require("../../ble/ble-erg-mode"));
|
|
7
|
+
class AntFeERGCyclingMode extends ble_erg_mode_1.default {
|
|
8
|
+
constructor(adapter, props) {
|
|
9
|
+
super(adapter, props);
|
|
10
|
+
this.initLogger('AntERGMode');
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.default = AntFeERGCyclingMode;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import FtmsCyclingMode from "../../ble/ble-st-mode";
|
|
2
|
+
import { UpdateRequest } from "../../CyclingMode";
|
|
3
|
+
import { DeviceAdapter } from "../../Device";
|
|
4
|
+
export default class AntStCyclingMode extends FtmsCyclingMode {
|
|
5
|
+
constructor(adapter: DeviceAdapter, props?: any);
|
|
6
|
+
sendBikeUpdate(request: UpdateRequest): UpdateRequest;
|
|
7
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const ble_st_mode_1 = __importDefault(require("../../ble/ble-st-mode"));
|
|
7
|
+
class AntStCyclingMode extends ble_st_mode_1.default {
|
|
8
|
+
constructor(adapter, props) {
|
|
9
|
+
super(adapter, props);
|
|
10
|
+
this.initLogger('AntSTMode');
|
|
11
|
+
}
|
|
12
|
+
sendBikeUpdate(request) {
|
|
13
|
+
const getData = () => {
|
|
14
|
+
if (!this.data)
|
|
15
|
+
return {};
|
|
16
|
+
const { gear, pedalRpm, slope, power, speed } = this.data;
|
|
17
|
+
return { gear, pedalRpm, slope, power, speed };
|
|
18
|
+
};
|
|
19
|
+
const event = {};
|
|
20
|
+
if (this.data === undefined)
|
|
21
|
+
event.noData = true;
|
|
22
|
+
if (request.slope !== undefined && (event.noData || Math.abs(request.slope - this.data.slope) >= 0.1))
|
|
23
|
+
event.slopeUpdate = true;
|
|
24
|
+
if (this.prevRequest === undefined)
|
|
25
|
+
event.initialCall = true;
|
|
26
|
+
this.logger.logEvent({ message: "processing update request", request, prev: this.prevRequest, data: getData(), event });
|
|
27
|
+
let newRequest = {};
|
|
28
|
+
if (request.slope === undefined && request.targetPower === undefined && request.refresh && this.prevRequest) {
|
|
29
|
+
return this.prevRequest;
|
|
30
|
+
}
|
|
31
|
+
if (request.slope !== undefined) {
|
|
32
|
+
newRequest.slope = parseFloat(request.slope.toFixed(1));
|
|
33
|
+
this.data.slope = newRequest.slope;
|
|
34
|
+
}
|
|
35
|
+
if (request.targetPower !== undefined) {
|
|
36
|
+
newRequest.targetPower = request.targetPower;
|
|
37
|
+
}
|
|
38
|
+
if (request.minPower && request.maxPower && request.minPower === request.maxPower) {
|
|
39
|
+
newRequest.targetPower = request.minPower;
|
|
40
|
+
}
|
|
41
|
+
const prevData = this.data;
|
|
42
|
+
if (newRequest.targetPower === undefined && prevData && prevData.power) {
|
|
43
|
+
if (request.minPower !== undefined && prevData.power < request.minPower)
|
|
44
|
+
newRequest.targetPower = request.minPower;
|
|
45
|
+
if (request.maxPower !== undefined && prevData.power > request.maxPower)
|
|
46
|
+
newRequest.targetPower = request.maxPower;
|
|
47
|
+
}
|
|
48
|
+
this.prevRequest = JSON.parse(JSON.stringify(newRequest));
|
|
49
|
+
return newRequest;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.default = AntStCyclingMode;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import CyclingMode, { CyclingModeProperty, IncyclistBikeData, UpdateRequest } from "../CyclingMode";
|
|
2
|
+
import { DeviceAdapter } from "../Device";
|
|
2
3
|
import PowerBasedCyclingModeBase from "../modes/power-base";
|
|
3
|
-
import { FmAdapter } from "./fm";
|
|
4
4
|
export default class BleERGCyclingMode extends PowerBasedCyclingModeBase implements CyclingMode {
|
|
5
5
|
prevRequest: UpdateRequest;
|
|
6
6
|
hasBikeUpdate: boolean;
|
|
7
7
|
chain: number[];
|
|
8
8
|
cassette: number[];
|
|
9
|
-
constructor(adapter:
|
|
9
|
+
constructor(adapter: DeviceAdapter, props?: any);
|
|
10
10
|
getName(): string;
|
|
11
11
|
getDescription(): string;
|
|
12
12
|
getProperties(): CyclingModeProperty[];
|
package/lib/ble/ble-interface.js
CHANGED
|
@@ -346,6 +346,7 @@ class BleInterface extends ble_1.BleInterfaceClass {
|
|
|
346
346
|
return DeviceClasses;
|
|
347
347
|
}
|
|
348
348
|
createDevice(DeviceClass, peripheral, characteristics) {
|
|
349
|
+
this.logEvent({ message: 'trying to create device', peripheral: peripheral.address, characteristics });
|
|
349
350
|
const C = DeviceClass;
|
|
350
351
|
const device = new C({ peripheral });
|
|
351
352
|
const existingDevice = this.devices.find(i => i.device.id === device.id && i.device.getProfile() === device.getProfile());
|
package/lib/ble/ble-st-mode.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import CyclingMode, { CyclingModeProperty, IncyclistBikeData, UpdateRequest } from "../CyclingMode";
|
|
2
|
+
import { DeviceAdapter } from "../Device";
|
|
2
3
|
import PowerBasedCyclingModeBase from "../modes/power-base";
|
|
3
|
-
import { FmAdapter } from "./fm";
|
|
4
4
|
export default class FtmsCyclingMode extends PowerBasedCyclingModeBase implements CyclingMode {
|
|
5
5
|
prevRequest: UpdateRequest;
|
|
6
6
|
hasBikeUpdate: boolean;
|
|
7
|
-
constructor(adapter:
|
|
7
|
+
constructor(adapter: DeviceAdapter, props?: any);
|
|
8
8
|
getName(): string;
|
|
9
9
|
getDescription(): string;
|
|
10
10
|
getProperties(): CyclingModeProperty[];
|
package/lib/ble/ble.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -73,6 +77,7 @@ class BleProtocol extends DeviceProtocol_1.default {
|
|
|
73
77
|
return new hrm_1.HrmAdapter(fromDevice ? bleDevice : new hrm_1.default(props()), this);
|
|
74
78
|
case 'fm':
|
|
75
79
|
case 'smart trainer':
|
|
80
|
+
case 'wahoo smart trainer':
|
|
76
81
|
case 'fitness machine':
|
|
77
82
|
let device;
|
|
78
83
|
if (fromDevice)
|
package/lib/ble/wahoo-kickr.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
package/lib/daum/DaumAdapter.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
package/lib/kettler/comms.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -28,7 +28,7 @@ export default class KettlerRacerProtocol extends DeviceProtocolBase implements
|
|
|
28
28
|
isBike(): boolean;
|
|
29
29
|
isHrm(): boolean;
|
|
30
30
|
isPower(): boolean;
|
|
31
|
-
add(settings: DeviceSettings):
|
|
31
|
+
add(settings: DeviceSettings): import("../../DeviceProtocol").Device;
|
|
32
32
|
scan(props: KettlerRacerScanProps): void;
|
|
33
33
|
checkDevice(port: string): boolean;
|
|
34
34
|
doScan(port: string): Promise<void>;
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -51,7 +51,7 @@ export declare class Simulator extends DeviceAdapter {
|
|
|
51
51
|
export default class SimulatorProtocol extends DeviceProtocolBase {
|
|
52
52
|
static NAME: string;
|
|
53
53
|
constructor();
|
|
54
|
-
add(settings: SimulatorSettings):
|
|
54
|
+
add(settings: SimulatorSettings): Simulator;
|
|
55
55
|
getName(): string;
|
|
56
56
|
getInterfaces(): string[];
|
|
57
57
|
isBike(): boolean;
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|