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.
Files changed (103) hide show
  1. package/lib/antv2/adapter-factory.d.ts +4 -2
  2. package/lib/antv2/adapter.d.ts +3 -20
  3. package/lib/antv2/adapter.js +2 -92
  4. package/lib/antv2/fe/adapter.d.ts +9 -5
  5. package/lib/antv2/fe/adapter.js +25 -14
  6. package/lib/antv2/hr/adapter.d.ts +2 -1
  7. package/lib/antv2/pwr/adapter.d.ts +9 -5
  8. package/lib/antv2/pwr/adapter.js +19 -8
  9. package/lib/antv2/types.d.ts +2 -1
  10. package/lib/base/adpater.d.ts +31 -13
  11. package/lib/base/adpater.js +84 -28
  12. package/lib/ble/adapter-factory.d.ts +10 -9
  13. package/lib/ble/base/adapter.d.ts +9 -20
  14. package/lib/ble/base/adapter.js +13 -69
  15. package/lib/ble/ble-interface.d.ts +5 -4
  16. package/lib/ble/cp/adapter.d.ts +5 -8
  17. package/lib/ble/cp/adapter.js +26 -10
  18. package/lib/ble/elite/adapter.d.ts +6 -5
  19. package/lib/ble/elite/adapter.js +26 -2
  20. package/lib/ble/fm/adapter.d.ts +10 -9
  21. package/lib/ble/fm/adapter.js +38 -11
  22. package/lib/ble/hr/adapter.d.ts +5 -3
  23. package/lib/ble/peripheral-cache.d.ts +3 -2
  24. package/lib/ble/tacx/adapter.d.ts +2 -2
  25. package/lib/ble/wahoo/adapter.d.ts +2 -2
  26. package/lib/index.d.ts +5 -5
  27. package/lib/index.js +4 -2
  28. package/lib/interfaces.d.ts +1 -1
  29. package/lib/modes/ant-fe-adv-st-mode.d.ts +12 -0
  30. package/lib/modes/ant-fe-adv-st-mode.js +83 -0
  31. package/lib/modes/antble-erg.d.ts +31 -0
  32. package/lib/modes/antble-erg.js +28 -0
  33. package/lib/modes/antble-smarttrainer.d.ts +23 -0
  34. package/lib/modes/antble-smarttrainer.js +65 -0
  35. package/lib/modes/base.d.ts +29 -0
  36. package/lib/modes/{cycling-mode.js → base.js} +23 -26
  37. package/lib/modes/daum-classic-standard.d.ts +16 -0
  38. package/lib/modes/daum-classic-standard.js +54 -0
  39. package/lib/modes/daum-erg.d.ts +49 -0
  40. package/lib/{serial/daum/ERGCyclingMode.js → modes/daum-erg.js} +45 -73
  41. package/lib/modes/daum-power.d.ts +5 -0
  42. package/lib/{serial/daum/DaumPowerMeterCyclingMode.js → modes/daum-power.js} +1 -10
  43. package/lib/modes/daum-premium-standard.d.ts +23 -0
  44. package/lib/{serial/daum/premium/modes/daum-classic.js → modes/daum-premium-standard.js} +26 -38
  45. package/lib/modes/daum-smarttrainer.d.ts +82 -0
  46. package/lib/{serial/daum/SmartTrainerCyclingMode.js → modes/daum-smarttrainer.js} +23 -26
  47. package/lib/modes/kettler-erg.d.ts +44 -0
  48. package/lib/{serial/kettler/ergo-racer/modes/erg.js → modes/kettler-erg.js} +12 -23
  49. package/lib/modes/power-base.d.ts +28 -3
  50. package/lib/modes/power-base.js +182 -5
  51. package/lib/modes/power-meter.d.ts +10 -16
  52. package/lib/modes/power-meter.js +15 -54
  53. package/lib/modes/simulator.d.ts +37 -10
  54. package/lib/modes/simulator.js +14 -46
  55. package/lib/modes/{cycling-mode.d.ts → types.d.ts} +22 -19
  56. package/lib/modes/types.js +56 -0
  57. package/lib/serial/adapter-factory.d.ts +7 -5
  58. package/lib/serial/adapter.d.ts +2 -2
  59. package/lib/serial/adapter.js +5 -2
  60. package/lib/serial/daum/DaumAdapter.d.ts +27 -24
  61. package/lib/serial/daum/DaumAdapter.js +200 -128
  62. package/lib/serial/daum/classic/adapter.d.ts +20 -21
  63. package/lib/serial/daum/classic/adapter.js +83 -157
  64. package/lib/serial/daum/classic/comms.d.ts +19 -13
  65. package/lib/serial/daum/classic/comms.js +39 -12
  66. package/lib/serial/daum/classic/mock.d.ts +4 -0
  67. package/lib/serial/daum/classic/mock.js +14 -4
  68. package/lib/serial/daum/premium/adapter.d.ts +16 -11
  69. package/lib/serial/daum/premium/adapter.js +98 -95
  70. package/lib/serial/daum/premium/comms.d.ts +4 -1
  71. package/lib/serial/daum/premium/comms.js +25 -17
  72. package/lib/serial/daum/premium/mock.d.ts +4 -0
  73. package/lib/serial/daum/premium/mock.js +15 -5
  74. package/lib/serial/daum/types.d.ts +11 -0
  75. package/lib/serial/daum/types.js +5 -0
  76. package/lib/serial/kettler/ergo-racer/adapter.d.ts +10 -8
  77. package/lib/serial/kettler/ergo-racer/adapter.js +17 -7
  78. package/lib/serial/serial-interface.js +1 -2
  79. package/lib/simulator/Simulator.d.ts +14 -17
  80. package/lib/simulator/Simulator.js +18 -47
  81. package/lib/types/adapter.d.ts +29 -8
  82. package/lib/types/adapter.js +68 -0
  83. package/lib/utils/utils.d.ts +1 -1
  84. package/package.json +3 -3
  85. package/lib/antv2/modes/ant-fe-adv-st-mode.d.ts +0 -9
  86. package/lib/antv2/modes/ant-fe-adv-st-mode.js +0 -51
  87. package/lib/antv2/modes/ant-fe-erg-mode.d.ts +0 -6
  88. package/lib/antv2/modes/ant-fe-erg-mode.js +0 -14
  89. package/lib/antv2/modes/ant-fe-st-mode.d.ts +0 -5
  90. package/lib/antv2/modes/ant-fe-st-mode.js +0 -13
  91. package/lib/modes/ble-erg-mode.d.ts +0 -18
  92. package/lib/modes/ble-erg-mode.js +0 -148
  93. package/lib/modes/ble-st-mode.d.ts +0 -15
  94. package/lib/modes/ble-st-mode.js +0 -96
  95. package/lib/serial/daum/DaumPowerMeterCyclingMode.d.ts +0 -8
  96. package/lib/serial/daum/ERGCyclingMode.d.ts +0 -26
  97. package/lib/serial/daum/SmartTrainerCyclingMode.d.ts +0 -42
  98. package/lib/serial/daum/classic/modes/daum-classic.d.ts +0 -13
  99. package/lib/serial/daum/classic/modes/daum-classic.js +0 -97
  100. package/lib/serial/daum/premium/modes/daum-classic.d.ts +0 -14
  101. package/lib/serial/kettler/ergo-racer/modes/erg.d.ts +0 -25
  102. /package/lib/serial/daum/{constants.d.ts → consts.d.ts} +0 -0
  103. /package/lib/serial/daum/{constants.js → consts.js} +0 -0
@@ -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,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
- }
File without changes
File without changes