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,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 = __importDefault(require("../DaumAdapter"));
18
- const daum_classic_1 = __importDefault(require("./modes/daum-classic"));
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
- const getBikeProps = (props) => {
24
- const { port, interface: ifaceName } = props;
25
- let serial;
26
- if (ifaceName && typeof ifaceName === 'string') {
27
- serial = serial_interface_1.default.getInstance({ ifaceName });
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
- else {
30
- serial = props.interface;
53
+ getDefaultCyclingMode() {
54
+ return new daum_classic_standard_1.default(this.adapter);
31
55
  }
32
- if (!serial || !serial.binding)
33
- throw new Error(`unknonwn interface: ${ifaceName}`);
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
- setID(id) {
58
- this.id = id;
59
- }
60
- getID() {
61
- return this.id;
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 || PROTOCOL_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
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
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
- const connected = yield this.connect();
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
- const address = (yield this.bike.getAddress()) || {};
129
- info.bikeNo = address.bike;
130
- const version = (yield this.bike.getVersion()) || {};
131
- info.serialNo = version.serialNo;
132
- info.cockpit = version.cockpit;
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.setID(info.serialNo);
135
- clearTimeout(iv);
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
- clearTimeout(iv);
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
- startRide(props = {}) {
148
- return __awaiter(this, void 0, void 0, function* () {
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.user;
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
- const connected = yield this.connect();
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.stopped = false;
255
- this.paused = false;
171
+ this.started = true;
256
172
  this.startUpdatePull();
257
- return data;
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
- export default class Daum8008 extends SerialPortComms<DaumClassicCommsState, DaumClassicRequest, DaumClassicResponse> {
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(bikeNo?: number): Promise<checkCockpitReponse>;
20
+ checkCockpit(bike?: number): Promise<checkCockpitReponse>;
17
21
  getAddress(): Promise<ClassicBikeResponse>;
18
- getVersion(bikeNo?: number): Promise<GetVersionReponse>;
19
- resetDevice(bikeNo?: number): Promise<ClassicBikeResponse>;
20
- startProg(bikeNo?: number): Promise<ProgResponse>;
21
- stopProg(bikeNo?: number): Promise<ProgResponse>;
22
- setProg(progNo?: number, bikeNo?: number): Promise<SetProgResponse>;
23
- setBikeType(bikeType: DeviceType, bikeNo?: number): Promise<ClassicBikeResponse>;
24
- setPerson(user?: User, bikeNo?: number): Promise<{
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(bikeNo?: number): Promise<IncyclistBikeData>;
32
- setGear(gear: number, bikeNo?: number): Promise<SetGearRepsonse>;
33
- setPower(power: number, bikeNo?: number): Promise<SetPowerRepsonse>;
34
- setSlope(slope: number, bikeNo?: number): Promise<SetSlopeRepsonse>;
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(bikeNo = 0) {
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(bikeNo = 0) {
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(bikeNo = 0) {
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(bikeNo = 0) {
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(bikeNo = 0) {
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, bikeNo = 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, bikeNo = 0) {
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 = {}, bikeNo = 0) {
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(bikeNo = 0) {
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, bikeNo = 0) {
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, bikeNo = 0) {
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, bikeNo = 0) {
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 to = this.simulator._timeoutResponse || 5;
184
- if (handler)
185
- setTimeout(() => { handler(payload); }, to);
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 default class DaumPremiumAdapter extends DaumAdapter<SerialDeviceSettings, Daum8iDeviceProperties> {
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
- getSupportedCyclingModes(): Array<any>;
20
- check(): Promise<boolean>;
21
- startRide(props?: Daum8iDeviceProperties): Promise<boolean>;
22
- start(props?: Daum8iDeviceProperties): Promise<boolean>;
23
- launch(props?: Daum8iDeviceProperties, isRelaunch?: boolean): Promise<boolean>;
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
  }