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
|
@@ -1,14 +0,0 @@
|
|
|
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("../../modes/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
|
-
AntFeERGCyclingMode.isERG = true;
|
|
14
|
-
exports.default = AntFeERGCyclingMode;
|
|
@@ -1,13 +0,0 @@
|
|
|
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("../../modes/ble-st-mode"));
|
|
7
|
-
class AntStCyclingMode extends ble_st_mode_1.default {
|
|
8
|
-
constructor(adapter, props) {
|
|
9
|
-
super(adapter, props);
|
|
10
|
-
this.initLogger('AntSimMode');
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.default = AntStCyclingMode;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { ControllableDeviceAdapter } from "..";
|
|
2
|
-
import CyclingMode, { CyclingModeProperty, IncyclistBikeData, UpdateRequest } from "./cycling-mode";
|
|
3
|
-
import PowerBasedCyclingModeBase from "./power-base";
|
|
4
|
-
export default class BleERGCyclingMode extends PowerBasedCyclingModeBase implements CyclingMode {
|
|
5
|
-
static isERG: boolean;
|
|
6
|
-
prevRequest: UpdateRequest;
|
|
7
|
-
hasBikeUpdate: boolean;
|
|
8
|
-
chain: number[];
|
|
9
|
-
cassette: number[];
|
|
10
|
-
constructor(adapter: ControllableDeviceAdapter, props?: any);
|
|
11
|
-
getName(): string;
|
|
12
|
-
getDescription(): string;
|
|
13
|
-
getProperties(): CyclingModeProperty[];
|
|
14
|
-
getProperty(name: string): CyclingModeProperty;
|
|
15
|
-
getBikeInitRequest(): UpdateRequest;
|
|
16
|
-
sendBikeUpdate(request: UpdateRequest): UpdateRequest;
|
|
17
|
-
updateData(bikeData: IncyclistBikeData): any;
|
|
18
|
-
}
|
|
@@ -1,148 +0,0 @@
|
|
|
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 cycling_mode_1 = require("./cycling-mode");
|
|
7
|
-
const power_base_1 = __importDefault(require("./power-base"));
|
|
8
|
-
const config = {
|
|
9
|
-
name: "ERG",
|
|
10
|
-
description: "Calculates speed based on power and slope. Power targets are set by workout or remain stable throughout the workout",
|
|
11
|
-
properties: [
|
|
12
|
-
{ key: 'bikeType', name: 'Bike Type', description: '', type: cycling_mode_1.CyclingModeProperyType.SingleSelect, options: ['Race', 'Mountain', 'Triathlon'], default: 'Race' },
|
|
13
|
-
{ key: 'startPower', name: 'Starting Power', description: 'Initial power in Watts at start of training', type: cycling_mode_1.CyclingModeProperyType.Integer, default: 50, min: 25, max: 800 },
|
|
14
|
-
]
|
|
15
|
-
};
|
|
16
|
-
const MIN_SPEED = 10;
|
|
17
|
-
class BleERGCyclingMode extends power_base_1.default {
|
|
18
|
-
constructor(adapter, props) {
|
|
19
|
-
super(adapter, props);
|
|
20
|
-
this.hasBikeUpdate = false;
|
|
21
|
-
this.initLogger('ERGMode');
|
|
22
|
-
}
|
|
23
|
-
getName() {
|
|
24
|
-
return config.name;
|
|
25
|
-
}
|
|
26
|
-
getDescription() {
|
|
27
|
-
return config.description;
|
|
28
|
-
}
|
|
29
|
-
getProperties() {
|
|
30
|
-
return config.properties;
|
|
31
|
-
}
|
|
32
|
-
getProperty(name) {
|
|
33
|
-
return config.properties.find(p => p.name === name);
|
|
34
|
-
}
|
|
35
|
-
getBikeInitRequest() {
|
|
36
|
-
const startPower = Number(this.getSetting('startPower'));
|
|
37
|
-
this.prevRequest = { targetPower: startPower };
|
|
38
|
-
return { targetPower: startPower };
|
|
39
|
-
}
|
|
40
|
-
sendBikeUpdate(request) {
|
|
41
|
-
const getData = () => {
|
|
42
|
-
if (!this.data)
|
|
43
|
-
return {};
|
|
44
|
-
const { pedalRpm, slope, power, speed } = this.data;
|
|
45
|
-
return { pedalRpm, slope, power, speed };
|
|
46
|
-
};
|
|
47
|
-
this.logger.logEvent({ message: "processing update request", request, prev: this.prevRequest, data: getData() });
|
|
48
|
-
let newRequest = {};
|
|
49
|
-
try {
|
|
50
|
-
if (!request || request.reset) {
|
|
51
|
-
this.prevRequest = {};
|
|
52
|
-
return request.reset ? { reset: true } : {};
|
|
53
|
-
}
|
|
54
|
-
if (Object.keys(request).length === 0 && this.prevRequest) {
|
|
55
|
-
request.targetPower = this.prevRequest.targetPower;
|
|
56
|
-
}
|
|
57
|
-
const prevData = this.data || {};
|
|
58
|
-
if (request.slope !== undefined) {
|
|
59
|
-
if (!this.data)
|
|
60
|
-
this.data = {};
|
|
61
|
-
this.data.slope = request.slope;
|
|
62
|
-
}
|
|
63
|
-
delete request.slope;
|
|
64
|
-
if (request.targetPowerDelta && this.prevRequest && this.prevRequest.targetPower) {
|
|
65
|
-
request.targetPower = this.prevRequest.targetPower + request.targetPowerDelta;
|
|
66
|
-
if (request.targetPower < 10)
|
|
67
|
-
request.targetPower = this.prevRequest.targetPower;
|
|
68
|
-
delete request.targetPowerDelta;
|
|
69
|
-
}
|
|
70
|
-
if (request.targetPower !== undefined) {
|
|
71
|
-
delete request.refresh;
|
|
72
|
-
newRequest.targetPower = Number(request.targetPower);
|
|
73
|
-
}
|
|
74
|
-
if (request.refresh && request.targetPower === undefined) {
|
|
75
|
-
delete request.refresh;
|
|
76
|
-
newRequest.targetPower = this.prevRequest.targetPower;
|
|
77
|
-
}
|
|
78
|
-
if (request.targetPower === undefined && request.maxPower !== undefined && request.minPower !== undefined && request.maxPower === request.minPower) {
|
|
79
|
-
request.targetPower = request.maxPower;
|
|
80
|
-
newRequest.targetPower = request.targetPower;
|
|
81
|
-
}
|
|
82
|
-
if (request.maxPower !== undefined) {
|
|
83
|
-
if (newRequest.targetPower !== undefined && newRequest.targetPower > request.maxPower) {
|
|
84
|
-
newRequest.targetPower = request.maxPower;
|
|
85
|
-
}
|
|
86
|
-
newRequest.maxPower = request.maxPower;
|
|
87
|
-
}
|
|
88
|
-
if (request.minPower !== undefined) {
|
|
89
|
-
if (newRequest.targetPower !== undefined && newRequest.targetPower < request.minPower) {
|
|
90
|
-
newRequest.targetPower = request.minPower;
|
|
91
|
-
}
|
|
92
|
-
newRequest.minPower = request.minPower;
|
|
93
|
-
if (prevData.power && prevData.power < request.minPower)
|
|
94
|
-
newRequest.targetPower = request.minPower;
|
|
95
|
-
}
|
|
96
|
-
if (Object.keys(newRequest).length === 0) {
|
|
97
|
-
if (this.prevRequest)
|
|
98
|
-
newRequest.targetPower = this.prevRequest.targetPower;
|
|
99
|
-
newRequest.refresh = true;
|
|
100
|
-
}
|
|
101
|
-
this.prevRequest = JSON.parse(JSON.stringify(newRequest));
|
|
102
|
-
}
|
|
103
|
-
catch (err) {
|
|
104
|
-
this.logger.logEvent({ message: "error", fn: 'sendBikeUpdate()', error: err.message || err, stack: err.stack });
|
|
105
|
-
}
|
|
106
|
-
return newRequest;
|
|
107
|
-
}
|
|
108
|
-
updateData(bikeData) {
|
|
109
|
-
const prevData = JSON.parse(JSON.stringify(this.data || {}));
|
|
110
|
-
const prevSpeed = prevData.speed;
|
|
111
|
-
const prevRequest = this.prevRequest || {};
|
|
112
|
-
const data = this.data || {};
|
|
113
|
-
const bikeType = this.getSetting('bikeType').toLowerCase();
|
|
114
|
-
try {
|
|
115
|
-
let power = bikeData.power || 0;
|
|
116
|
-
const slope = (prevData.slope !== undefined ? prevData.slope : prevRequest.slope || 0);
|
|
117
|
-
const distanceInternal = prevData.distanceInternal || 0;
|
|
118
|
-
const m = this.getWeight();
|
|
119
|
-
const t = this.getTimeSinceLastUpdate();
|
|
120
|
-
const { speed, distance } = this.calculateSpeedAndDistance(power, slope, m, t, { bikeType });
|
|
121
|
-
if (power === 0 && speed < MIN_SPEED) {
|
|
122
|
-
data.speed = Math.round(prevData.speed - 1) < 0 ? 0 : Math.round(prevData.speed - 1);
|
|
123
|
-
data.distanceInternal = distanceInternal + data.speed / 3.6 * t;
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
data.speed = (power === 0 && speed < MIN_SPEED) ? 0 : speed;
|
|
127
|
-
data.distanceInternal = (power === 0 && speed < MIN_SPEED) ? distanceInternal : distanceInternal + distance;
|
|
128
|
-
}
|
|
129
|
-
data.power = Math.round(power);
|
|
130
|
-
data.slope = slope;
|
|
131
|
-
data.pedalRpm = bikeData.pedalRpm || 0;
|
|
132
|
-
if (data.time !== undefined && data.speed > 0)
|
|
133
|
-
data.time += t;
|
|
134
|
-
else
|
|
135
|
-
data.time = 0;
|
|
136
|
-
data.heartrate = bikeData.heartrate;
|
|
137
|
-
data.isPedalling = bikeData.isPedalling;
|
|
138
|
-
}
|
|
139
|
-
catch (err) {
|
|
140
|
-
this.logger.logEvent({ message: 'error', fn: 'updateData()', error: err.message || err });
|
|
141
|
-
}
|
|
142
|
-
this.logger.logEvent({ message: "updateData result", data, bikeData, prevRequest, prevSpeed });
|
|
143
|
-
this.data = data;
|
|
144
|
-
return data;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
BleERGCyclingMode.isERG = true;
|
|
148
|
-
exports.default = BleERGCyclingMode;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { ControllableDeviceAdapter } from "..";
|
|
2
|
-
import CyclingMode, { CyclingModeProperty, IncyclistBikeData, UpdateRequest } from "../modes/cycling-mode";
|
|
3
|
-
import PowerBasedCyclingModeBase from "../modes/power-base";
|
|
4
|
-
export default class FtmsCyclingMode extends PowerBasedCyclingModeBase implements CyclingMode {
|
|
5
|
-
prevRequest: UpdateRequest;
|
|
6
|
-
hasBikeUpdate: boolean;
|
|
7
|
-
constructor(adapter: ControllableDeviceAdapter, props?: any);
|
|
8
|
-
getName(): string;
|
|
9
|
-
getDescription(): string;
|
|
10
|
-
getProperties(): CyclingModeProperty[];
|
|
11
|
-
getProperty(name: string): CyclingModeProperty;
|
|
12
|
-
getBikeInitRequest(): UpdateRequest;
|
|
13
|
-
sendBikeUpdate(request: UpdateRequest): UpdateRequest;
|
|
14
|
-
updateData(bikeData: IncyclistBikeData): any;
|
|
15
|
-
}
|
package/lib/modes/ble-st-mode.js
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
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 cycling_mode_1 = require("../modes/cycling-mode");
|
|
7
|
-
const power_base_1 = __importDefault(require("../modes/power-base"));
|
|
8
|
-
const config = {
|
|
9
|
-
name: "Smart Trainer",
|
|
10
|
-
description: "Calculates speed based on power and slope. Slope is set to the device",
|
|
11
|
-
properties: [
|
|
12
|
-
{ key: 'bikeType', name: 'Bike Type', description: '', type: cycling_mode_1.CyclingModeProperyType.SingleSelect, options: ['Race', 'Mountain', 'Triathlon'], default: 'Race' }
|
|
13
|
-
]
|
|
14
|
-
};
|
|
15
|
-
const MIN_SPEED = 10;
|
|
16
|
-
class FtmsCyclingMode extends power_base_1.default {
|
|
17
|
-
constructor(adapter, props) {
|
|
18
|
-
super(adapter, props);
|
|
19
|
-
this.hasBikeUpdate = false;
|
|
20
|
-
this.initLogger('FtmsMode');
|
|
21
|
-
}
|
|
22
|
-
getName() {
|
|
23
|
-
return config.name;
|
|
24
|
-
}
|
|
25
|
-
getDescription() {
|
|
26
|
-
return config.description;
|
|
27
|
-
}
|
|
28
|
-
getProperties() {
|
|
29
|
-
return config.properties;
|
|
30
|
-
}
|
|
31
|
-
getProperty(name) {
|
|
32
|
-
return config.properties.find(p => p.name === name);
|
|
33
|
-
}
|
|
34
|
-
getBikeInitRequest() {
|
|
35
|
-
this.prevRequest = { slope: 0 };
|
|
36
|
-
return { slope: 0 };
|
|
37
|
-
}
|
|
38
|
-
sendBikeUpdate(request) {
|
|
39
|
-
const getData = () => {
|
|
40
|
-
if (!this.data)
|
|
41
|
-
return {};
|
|
42
|
-
const { gear, pedalRpm, slope, power, speed } = this.data;
|
|
43
|
-
return { gear, pedalRpm, slope, power, speed };
|
|
44
|
-
};
|
|
45
|
-
this.logger.logEvent({ message: "processing update request", request, prev: this.prevRequest, data: getData() });
|
|
46
|
-
let newRequest = {};
|
|
47
|
-
if (request.slope === undefined && request.refresh && this.prevRequest) {
|
|
48
|
-
return this.prevRequest;
|
|
49
|
-
}
|
|
50
|
-
if (request.slope !== undefined) {
|
|
51
|
-
newRequest.slope = parseFloat(request.slope.toFixed(1));
|
|
52
|
-
this.data.slope = newRequest.slope;
|
|
53
|
-
}
|
|
54
|
-
this.prevRequest = JSON.parse(JSON.stringify(newRequest));
|
|
55
|
-
return newRequest;
|
|
56
|
-
}
|
|
57
|
-
updateData(bikeData) {
|
|
58
|
-
const prevData = JSON.parse(JSON.stringify(this.data || {}));
|
|
59
|
-
const prevSpeed = prevData.speed;
|
|
60
|
-
const prevRequest = this.prevRequest || {};
|
|
61
|
-
const data = this.data || {};
|
|
62
|
-
const bikeType = this.getSetting('bikeType').toLowerCase();
|
|
63
|
-
try {
|
|
64
|
-
let power = bikeData.power || 0;
|
|
65
|
-
const slope = (prevData.slope !== undefined ? prevData.slope : prevRequest.slope || 0);
|
|
66
|
-
const distanceInternal = prevData.distanceInternal || 0;
|
|
67
|
-
const m = this.getWeight();
|
|
68
|
-
const t = this.getTimeSinceLastUpdate();
|
|
69
|
-
const { speed, distance } = this.calculateSpeedAndDistance(power, slope, m, t, { bikeType });
|
|
70
|
-
if (power === 0 && speed < MIN_SPEED) {
|
|
71
|
-
data.speed = Math.round(prevData.speed - 1) < 0 ? 0 : Math.round(prevData.speed - 1);
|
|
72
|
-
data.distanceInternal = distanceInternal + data.speed / 3.6 * t;
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
data.speed = (power === 0 && speed < MIN_SPEED) ? 0 : speed;
|
|
76
|
-
data.distanceInternal = (power === 0 && speed < MIN_SPEED) ? distanceInternal : distanceInternal + distance;
|
|
77
|
-
}
|
|
78
|
-
data.power = Math.round(power);
|
|
79
|
-
data.slope = slope;
|
|
80
|
-
data.pedalRpm = bikeData.pedalRpm || 0;
|
|
81
|
-
if (data.time !== undefined)
|
|
82
|
-
data.time += t;
|
|
83
|
-
else
|
|
84
|
-
data.time = 0;
|
|
85
|
-
data.heartrate = bikeData.heartrate;
|
|
86
|
-
data.isPedalling = bikeData.isPedalling;
|
|
87
|
-
}
|
|
88
|
-
catch (err) {
|
|
89
|
-
this.logger.logEvent({ message: 'error', fn: 'updateData()', error: err.message || err });
|
|
90
|
-
}
|
|
91
|
-
this.logger.logEvent({ message: "updateData result", data, bikeData, prevRequest, prevSpeed });
|
|
92
|
-
this.data = data;
|
|
93
|
-
return data;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
exports.default = FtmsCyclingMode;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import CyclingMode, { UpdateRequest } from "../../modes/cycling-mode";
|
|
2
|
-
import PowerMeterCyclingMode from "../../modes/power-meter";
|
|
3
|
-
export default class DaumPowerMeterCyclingMode extends PowerMeterCyclingMode implements CyclingMode {
|
|
4
|
-
prevRequest: UpdateRequest;
|
|
5
|
-
hasBikeUpdate: boolean;
|
|
6
|
-
getBikeInitRequest(): UpdateRequest;
|
|
7
|
-
sendBikeUpdate(request: UpdateRequest): UpdateRequest;
|
|
8
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import CyclingMode, { CyclingModeProperty, IncyclistBikeData, UpdateRequest } from "../../modes/cycling-mode";
|
|
2
|
-
import PowerBasedCyclingModeBase from "../../modes/power-base";
|
|
3
|
-
import { ControllableDeviceAdapter } from "../..";
|
|
4
|
-
export type ERGEvent = {
|
|
5
|
-
rpmUpdated?: boolean;
|
|
6
|
-
gearUpdated?: boolean;
|
|
7
|
-
starting?: boolean;
|
|
8
|
-
tsStart?: number;
|
|
9
|
-
};
|
|
10
|
-
export default class ERGCyclingMode extends PowerBasedCyclingModeBase implements CyclingMode {
|
|
11
|
-
prevRequest: UpdateRequest;
|
|
12
|
-
hasBikeUpdate: boolean;
|
|
13
|
-
chain: number[];
|
|
14
|
-
cassette: number[];
|
|
15
|
-
event: ERGEvent;
|
|
16
|
-
static isERG: boolean;
|
|
17
|
-
constructor(adapter: ControllableDeviceAdapter, props?: any);
|
|
18
|
-
getName(): string;
|
|
19
|
-
getDescription(): string;
|
|
20
|
-
getProperties(): CyclingModeProperty[];
|
|
21
|
-
getProperty(name: string): CyclingModeProperty;
|
|
22
|
-
getBikeInitRequest(): UpdateRequest;
|
|
23
|
-
sendBikeUpdate(request: UpdateRequest): UpdateRequest;
|
|
24
|
-
updateData(bikeData: IncyclistBikeData): any;
|
|
25
|
-
calculateTargetPower(request: any, updateMode?: boolean): any;
|
|
26
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { EventLogger } from "gd-eventlog";
|
|
2
|
-
import CyclingMode, { CyclingModeProperty, IncyclistBikeData, Settings, UpdateRequest, CyclingModeBase } from "../../modes/cycling-mode";
|
|
3
|
-
import { ControllableDeviceAdapter } from "../..";
|
|
4
|
-
interface STUpdateRequest extends UpdateRequest {
|
|
5
|
-
calculatedPower?: number;
|
|
6
|
-
delta?: number;
|
|
7
|
-
enforced?: boolean;
|
|
8
|
-
belowMin?: boolean;
|
|
9
|
-
aboveMax?: boolean;
|
|
10
|
-
}
|
|
11
|
-
export declare enum direction {
|
|
12
|
-
up = "up",
|
|
13
|
-
down = "down"
|
|
14
|
-
}
|
|
15
|
-
interface STEvent {
|
|
16
|
-
gearUpdate?: direction;
|
|
17
|
-
rpmUpdate?: boolean;
|
|
18
|
-
targetNotReached?: number;
|
|
19
|
-
}
|
|
20
|
-
export default class SmartTrainerCyclingMode extends CyclingModeBase implements CyclingMode {
|
|
21
|
-
logger: EventLogger;
|
|
22
|
-
data?: IncyclistBikeData;
|
|
23
|
-
prevRequest?: STUpdateRequest;
|
|
24
|
-
prevUpdateTS: number;
|
|
25
|
-
chain: number[];
|
|
26
|
-
cassette: number[];
|
|
27
|
-
event: STEvent;
|
|
28
|
-
constructor(adapter: ControllableDeviceAdapter, props?: Settings);
|
|
29
|
-
getName(): string;
|
|
30
|
-
getDescription(): string;
|
|
31
|
-
getProperties(): CyclingModeProperty[];
|
|
32
|
-
getProperty(name: string): CyclingModeProperty;
|
|
33
|
-
getWeight(): number;
|
|
34
|
-
getBikeInitRequest(): STUpdateRequest;
|
|
35
|
-
useGearSimulation(): boolean;
|
|
36
|
-
getMinMaxGears(source: string): [number, number];
|
|
37
|
-
sendBikeUpdate(request: STUpdateRequest): STUpdateRequest;
|
|
38
|
-
updateData(bikeData: IncyclistBikeData): any;
|
|
39
|
-
calculateSpeed(gear: any, rpm: any, slope: any, bikeSpeed: any, props?: any): any;
|
|
40
|
-
calculateTargetPower(request: STUpdateRequest, speed?: number): STUpdateRequest;
|
|
41
|
-
}
|
|
42
|
-
export {};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import CyclingMode, { CyclingModeProperty, IncyclistBikeData, Settings, UpdateRequest } from "../../../../modes/cycling-mode";
|
|
2
|
-
import SmartTrainerCyclingMode from "../../SmartTrainerCyclingMode";
|
|
3
|
-
import { ControllableDevice } from "../../../../base/adpater";
|
|
4
|
-
export default class DaumClassicCyclingMode extends SmartTrainerCyclingMode implements CyclingMode {
|
|
5
|
-
constructor(adapter: ControllableDevice, props?: Settings);
|
|
6
|
-
getName(): string;
|
|
7
|
-
getDescription(): string;
|
|
8
|
-
getProperties(): CyclingModeProperty[];
|
|
9
|
-
getProperty(name: string): CyclingModeProperty;
|
|
10
|
-
getBikeInitRequest(): UpdateRequest;
|
|
11
|
-
sendBikeUpdate(request: UpdateRequest): UpdateRequest;
|
|
12
|
-
updateData(data: IncyclistBikeData): IncyclistBikeData;
|
|
13
|
-
}
|
|
@@ -1,97 +0,0 @@
|
|
|
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 gd_eventlog_1 = require("gd-eventlog");
|
|
7
|
-
const cycling_mode_1 = require("../../../../modes/cycling-mode");
|
|
8
|
-
const SmartTrainerCyclingMode_1 = __importDefault(require("../../SmartTrainerCyclingMode"));
|
|
9
|
-
const config = {
|
|
10
|
-
name: "Daum Classic",
|
|
11
|
-
description: "The device calculates speed and power based on slope. Incyclist will not modify any values recived from the device\nThis mode will not respect maximum power and/or workout limits",
|
|
12
|
-
properties: [
|
|
13
|
-
{ key: 'bikeType', name: 'Bike Type', description: '', type: cycling_mode_1.CyclingModeProperyType.SingleSelect, options: ['Race', 'Mountain'], default: 'Race' },
|
|
14
|
-
]
|
|
15
|
-
};
|
|
16
|
-
class DaumClassicCyclingMode extends SmartTrainerCyclingMode_1.default {
|
|
17
|
-
constructor(adapter, props) {
|
|
18
|
-
super(adapter, props);
|
|
19
|
-
this.logger = adapter ? adapter.getLogger() : undefined;
|
|
20
|
-
if (!this.logger)
|
|
21
|
-
this.logger = new gd_eventlog_1.EventLogger('DaumClassic');
|
|
22
|
-
}
|
|
23
|
-
getName() {
|
|
24
|
-
return config.name;
|
|
25
|
-
}
|
|
26
|
-
getDescription() {
|
|
27
|
-
return config.description;
|
|
28
|
-
}
|
|
29
|
-
getProperties() {
|
|
30
|
-
return config.properties;
|
|
31
|
-
}
|
|
32
|
-
getProperty(name) {
|
|
33
|
-
return config.properties.find(p => p.name === name);
|
|
34
|
-
}
|
|
35
|
-
getBikeInitRequest() {
|
|
36
|
-
return { slope: 0 };
|
|
37
|
-
}
|
|
38
|
-
sendBikeUpdate(request) {
|
|
39
|
-
const getData = () => {
|
|
40
|
-
if (!this.data)
|
|
41
|
-
return {};
|
|
42
|
-
const { gear, pedalRpm, slope, power, speed } = this.data;
|
|
43
|
-
return { gear, pedalRpm, slope, power, speed };
|
|
44
|
-
};
|
|
45
|
-
const event = Object.assign({}, this.event);
|
|
46
|
-
if (this.data === undefined)
|
|
47
|
-
event.noData = true;
|
|
48
|
-
if (request.slope !== undefined && (event.noData || Math.abs(request.slope - this.data.slope) >= 0.1))
|
|
49
|
-
event.slopeUpdate = true;
|
|
50
|
-
if (this.prevRequest === undefined)
|
|
51
|
-
event.initialCall = true;
|
|
52
|
-
this.logger.logEvent({ message: "processing update request", request, prev: this.prevRequest, data: getData(), event });
|
|
53
|
-
let newRequest = {};
|
|
54
|
-
if (request.slope === undefined && request.refresh && this.prevRequest) {
|
|
55
|
-
return this.prevRequest;
|
|
56
|
-
}
|
|
57
|
-
if (request.slope !== undefined) {
|
|
58
|
-
newRequest.slope = parseFloat(request.slope.toFixed(1));
|
|
59
|
-
this.data.slope = newRequest.slope;
|
|
60
|
-
}
|
|
61
|
-
this.prevRequest = JSON.parse(JSON.stringify(newRequest));
|
|
62
|
-
return newRequest;
|
|
63
|
-
}
|
|
64
|
-
updateData(data) {
|
|
65
|
-
try {
|
|
66
|
-
const prevData = this.data || {};
|
|
67
|
-
const prevRequest = this.prevRequest || {};
|
|
68
|
-
const bikeData = JSON.parse(JSON.stringify(data));
|
|
69
|
-
let power = bikeData.power || 0;
|
|
70
|
-
let slope = (prevData.slope !== undefined ? prevData.slope : prevRequest.slope || 0);
|
|
71
|
-
let speed = bikeData.speed || 0;
|
|
72
|
-
let distanceInternal = prevData.distanceInternal || 0;
|
|
73
|
-
let ts = Date.now();
|
|
74
|
-
if (bikeData.pedalRpm === 0 || bikeData.isPedalling === false) {
|
|
75
|
-
speed = 0;
|
|
76
|
-
power = 0;
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
const duration = this.prevUpdateTS === 0 ? 0 : ((ts - this.prevUpdateTS) / 1000);
|
|
80
|
-
let v = speed / 3.6;
|
|
81
|
-
distanceInternal += (v * duration);
|
|
82
|
-
}
|
|
83
|
-
data.speed = parseFloat(speed.toFixed(1));
|
|
84
|
-
data.power = Math.round(power);
|
|
85
|
-
data.slope = slope;
|
|
86
|
-
data.distanceInternal = distanceInternal;
|
|
87
|
-
this.logger.logEvent({ message: "updateData result", data, bikeData, prevRequest: this.prevRequest || {}, prevSpeed: prevData.speed, event: this.event });
|
|
88
|
-
this.data = JSON.parse(JSON.stringify(data));
|
|
89
|
-
this.prevUpdateTS = ts;
|
|
90
|
-
}
|
|
91
|
-
catch (err) {
|
|
92
|
-
this.logger.logEvent({ message: 'error', fn: 'updateData()', error: err.message || err });
|
|
93
|
-
}
|
|
94
|
-
return data;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
exports.default = DaumClassicCyclingMode;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export declare const ACTUAL_BIKE_TYPE: {
|
|
2
|
-
ALLROUND: string;
|
|
3
|
-
RACE: string;
|
|
4
|
-
MOUNTAIN: string;
|
|
5
|
-
TRIATHLON: string;
|
|
6
|
-
};
|
|
7
|
-
export declare const BIKE_INTERFACE: {
|
|
8
|
-
SERIAL: string;
|
|
9
|
-
ANT: string;
|
|
10
|
-
BLE: string;
|
|
11
|
-
BLUETOOTH: string;
|
|
12
|
-
TCPIP: string;
|
|
13
|
-
};
|
|
14
|
-
export declare const BIKE_TRAINING_STATE: {
|
|
15
|
-
IDLE: string;
|
|
16
|
-
STARTING: string;
|
|
17
|
-
BUSY: string;
|
|
18
|
-
STOPPING: string;
|
|
19
|
-
};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BIKE_TRAINING_STATE = exports.BIKE_INTERFACE = exports.ACTUAL_BIKE_TYPE = void 0;
|
|
4
|
-
exports.ACTUAL_BIKE_TYPE = {
|
|
5
|
-
ALLROUND: 'allround',
|
|
6
|
-
RACE: 'race',
|
|
7
|
-
MOUNTAIN: 'mountain',
|
|
8
|
-
TRIATHLON: 'triathlon'
|
|
9
|
-
};
|
|
10
|
-
exports.BIKE_INTERFACE = {
|
|
11
|
-
SERIAL: 'serial',
|
|
12
|
-
ANT: 'ant',
|
|
13
|
-
BLE: 'ble',
|
|
14
|
-
BLUETOOTH: 'bluetooth',
|
|
15
|
-
TCPIP: 'tcpip',
|
|
16
|
-
};
|
|
17
|
-
exports.BIKE_TRAINING_STATE = {
|
|
18
|
-
IDLE: 'idle',
|
|
19
|
-
STARTING: 'starting',
|
|
20
|
-
BUSY: 'busy',
|
|
21
|
-
STOPPING: 'stopping'
|
|
22
|
-
};
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import CyclingMode, { CyclingModeProperty, IncyclistBikeData, Settings, UpdateRequest } from "../../../../modes/cycling-mode";
|
|
2
|
-
import DaumPowerMeterCyclingMode from "../../DaumPowerMeterCyclingMode";
|
|
3
|
-
import { ControllableDeviceAdapter } from "../../../..";
|
|
4
|
-
export default class DaumClassicCyclingMode extends DaumPowerMeterCyclingMode implements CyclingMode {
|
|
5
|
-
constructor(adapter: ControllableDeviceAdapter, props?: Settings);
|
|
6
|
-
getName(): string;
|
|
7
|
-
getDescription(): string;
|
|
8
|
-
getProperties(): CyclingModeProperty[];
|
|
9
|
-
getProperty(name: string): CyclingModeProperty;
|
|
10
|
-
getBikeInitRequest(): UpdateRequest;
|
|
11
|
-
getSettings(): Settings;
|
|
12
|
-
getSetting(name: string): any;
|
|
13
|
-
updateData(data: IncyclistBikeData): IncyclistBikeData;
|
|
14
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import CyclingMode, { CyclingModeProperty, IncyclistBikeData, UpdateRequest } from '../../../../modes/cycling-mode';
|
|
2
|
-
import KettlerAdapter from "../adapter";
|
|
3
|
-
import PowerBasedCyclingModeBase from '../../../../modes/power-base';
|
|
4
|
-
export type ERGEvent = {
|
|
5
|
-
rpmUpdated?: boolean;
|
|
6
|
-
gearUpdated?: boolean;
|
|
7
|
-
starting?: boolean;
|
|
8
|
-
tsStart?: number;
|
|
9
|
-
};
|
|
10
|
-
export default class ERGCyclingMode extends PowerBasedCyclingModeBase implements CyclingMode {
|
|
11
|
-
static isERG: boolean;
|
|
12
|
-
prevRequest: UpdateRequest;
|
|
13
|
-
hasBikeUpdate: boolean;
|
|
14
|
-
chain: number[];
|
|
15
|
-
cassette: number[];
|
|
16
|
-
event: ERGEvent;
|
|
17
|
-
constructor(adapter: KettlerAdapter, props?: any);
|
|
18
|
-
getName(): string;
|
|
19
|
-
getDescription(): string;
|
|
20
|
-
getProperties(): CyclingModeProperty[];
|
|
21
|
-
getProperty(name: string): CyclingModeProperty;
|
|
22
|
-
getBikeInitRequest(): UpdateRequest;
|
|
23
|
-
sendBikeUpdate(request: UpdateRequest): UpdateRequest;
|
|
24
|
-
updateData(bikeData: IncyclistBikeData): any;
|
|
25
|
-
}
|