incyclist-devices 1.4.13 → 1.4.16

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.
@@ -12,6 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.Daum8iSerial = exports.Daum8iTcp = void 0;
15
16
  const constants_1 = require("../constants");
16
17
  const tcpserial_1 = __importDefault(require("./tcpserial"));
17
18
  const utils_1 = require("./utils");
@@ -407,7 +408,7 @@ class Daum8i {
407
408
  incoming = bufferData;
408
409
  }
409
410
  const response = [...incoming];
410
- this.logger.logEvent({ message: 'sendCommand:RECV', data: utils_1.hexstr(response) });
411
+ this.logger.logEvent({ message: 'sendCommand:RECV', data: (0, utils_1.hexstr)(response) });
411
412
  for (let i = 0; i < incoming.length; i++) {
412
413
  const getRemaining = () => {
413
414
  let remaining = '';
@@ -440,11 +441,11 @@ class Daum8i {
440
441
  }
441
442
  else if (c === 0x17) {
442
443
  const remaining = getRemaining();
443
- this.logger.logEvent({ message: "sendCommand:received:", duration: Date.now() - this.state.sending.tsRequest, port: portName, cmd: `${cmd} [${utils_1.hexstr(cmd)}]`, remaining: utils_1.hexstr(remaining) });
444
+ this.logger.logEvent({ message: "sendCommand:received:", duration: Date.now() - this.state.sending.tsRequest, port: portName, cmd: `${cmd} [${(0, utils_1.hexstr)(cmd)}]`, remaining: (0, utils_1.hexstr)(remaining) });
444
445
  this.state.waitingForEnd = false;
445
446
  const cmdStr = cmd.substring(0, cmd.length - 2);
446
447
  const checksumExtracted = cmd.slice(-2);
447
- const checksumCalculated = utils_1.checkSum(utils_1.getAsciiArrayFromStr(cmdStr), []);
448
+ const checksumCalculated = (0, utils_1.checkSum)((0, utils_1.getAsciiArrayFromStr)(cmdStr), []);
448
449
  if (checksumExtracted === checksumCalculated) {
449
450
  this.sendACK();
450
451
  if (this.state.sending && this.state.sending.responseCheckIv) {
@@ -486,8 +487,8 @@ class Daum8i {
486
487
  this.state.busy = true;
487
488
  }
488
489
  else {
489
- const message = utils_1.buildMessage(command, payload);
490
- this.logger.logEvent({ message: 'sendCommand:waiting', port: this.portName, cmd: command, hex: utils_1.hexstr(message) });
490
+ const message = (0, utils_1.buildMessage)(command, payload);
491
+ this.logger.logEvent({ message: 'sendCommand:waiting', port: this.portName, cmd: command, hex: (0, utils_1.hexstr)(message) });
491
492
  const busyWait = () => {
492
493
  return new Promise((done) => {
493
494
  let start = Date.now();
@@ -508,7 +509,7 @@ class Daum8i {
508
509
  };
509
510
  const res = yield busyWait();
510
511
  if (!res) {
511
- this.logger.logEvent({ message: 'sendCommand:busy timeout', port: this.portName, cmd: command, hex: utils_1.hexstr(message), duration: Date.now() - tsRequest });
512
+ this.logger.logEvent({ message: 'sendCommand:busy timeout', port: this.portName, cmd: command, hex: (0, utils_1.hexstr)(message), duration: Date.now() - tsRequest });
512
513
  return reject(new Error('BUSY timeout'));
513
514
  }
514
515
  this.state.busy = true;
@@ -526,10 +527,10 @@ class Daum8i {
526
527
  const portName = this.portName;
527
528
  this.state.received = [];
528
529
  try {
529
- const message = utils_1.buildMessage(command, payload);
530
+ const message = (0, utils_1.buildMessage)(command, payload);
530
531
  const start = Date.now();
531
532
  const timeout = start + this.getTimeoutValue();
532
- this.logger.logEvent({ message: "sendCommand:sending:", port: this.portName, cmd: command, hex: utils_1.hexstr(message) });
533
+ this.logger.logEvent({ message: "sendCommand:sending:", port: this.portName, cmd: command, hex: (0, utils_1.hexstr)(message) });
533
534
  this.state.writeBusy = true;
534
535
  if (!this.connected || port === undefined) {
535
536
  this.logger.logEvent({ message: "sendCommand:error: not connected", port: this.portName });
@@ -589,10 +590,10 @@ class Daum8i {
589
590
  buffer.writeUInt16LE(0, 2);
590
591
  }
591
592
  const cmdData = Uint8Array.from(buffer);
592
- return this.sendDaum8iCommand('M70', cmdType, utils_1.bin2esc(cmdData))
593
+ return this.sendDaum8iCommand('M70', cmdType, (0, utils_1.bin2esc)(cmdData))
593
594
  .then((res) => {
594
595
  const resData = Uint8Array.from(res, x => x.charCodeAt(0));
595
- const cmd = utils_1.esc2bin(resData);
596
+ const cmd = (0, utils_1.esc2bin)(resData);
596
597
  return cmd;
597
598
  });
598
599
  }
@@ -617,7 +618,7 @@ class Daum8i {
617
618
  else if (str === '7')
618
619
  deviceType = 'lyps';
619
620
  else
620
- throw (new Error(`unknown device type ${typeof str === 'string' ? utils_1.ascii(str.charAt(0)) : str}`));
621
+ throw (new Error(`unknown device type ${typeof str === 'string' ? (0, utils_1.ascii)(str.charAt(0)) : str}`));
621
622
  return deviceType;
622
623
  });
623
624
  }
@@ -632,7 +633,7 @@ class Daum8i {
632
633
  else if (str === '2')
633
634
  deviceType = constants_1.ACTUAL_BIKE_TYPE.MOUNTAIN;
634
635
  else {
635
- throw (new Error(`unknown actual device type ${typeof str === 'string' ? utils_1.ascii(str.charAt(0)) : str}`));
636
+ throw (new Error(`unknown actual device type ${typeof str === 'string' ? (0, utils_1.ascii)(str.charAt(0)) : str}`));
636
637
  }
637
638
  this.state.actualBikeType = deviceType;
638
639
  return deviceType;
@@ -674,12 +675,12 @@ class Daum8i {
674
675
  getTrainingData() {
675
676
  return this.sendDaum8iCommand('X70', 'AF', [])
676
677
  .then((data) => {
677
- const td = utils_1.parseTrainingData(data);
678
+ const td = (0, utils_1.parseTrainingData)(data);
678
679
  return td;
679
680
  });
680
681
  }
681
682
  setLoadControl(enabled) {
682
- const val = enabled ? utils_1.ascii('1') : utils_1.ascii('0');
683
+ const val = enabled ? (0, utils_1.ascii)('1') : (0, utils_1.ascii)('0');
683
684
  return this.sendDaum8iCommand('S20', 'BF', [val])
684
685
  .then((data) => {
685
686
  const res = data === '1';
@@ -713,7 +714,7 @@ class Daum8i {
713
714
  setPerson(person) {
714
715
  const { sex, age, length, weight } = person;
715
716
  this.logger.logEvent({ message: 'setPerson() request', sex, age, length, weight });
716
- return this.sendReservedDaum8iCommand(utils_1.ReservedCommands.PERSON_SET, 'BF', utils_1.getPersonData(person))
717
+ return this.sendReservedDaum8iCommand(utils_1.ReservedCommands.PERSON_SET, 'BF', (0, utils_1.getPersonData)(person))
717
718
  .then((res) => {
718
719
  const buffer = Buffer.from(res);
719
720
  const success = buffer.readInt16LE(0) === utils_1.ReservedCommands.PERSON_SET;
@@ -737,9 +738,9 @@ class Daum8i {
737
738
  }
738
739
  programUploadStart(bikeType, route) {
739
740
  const payload = Buffer.alloc(40);
740
- const epp = route ? utils_1.routeToEpp(route) : undefined;
741
+ const epp = route ? (0, utils_1.routeToEpp)(route) : undefined;
741
742
  const eppLength = epp ? epp.length : 0;
742
- const bikeTypeVal = utils_1.getBikeType(bikeType);
743
+ const bikeTypeVal = (0, utils_1.getBikeType)(bikeType);
743
744
  const wBits = route.lapMode ? DS_BITS_ENDLESS_RACE : DS_BITS_OFF;
744
745
  payload.writeInt32LE(0, 0);
745
746
  payload.writeInt8(bikeTypeVal, 4);
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getPersonData = exports.parseTrainingData = exports.routeToEpp = exports.getBikeType = exports.BikeType = exports.ReservedCommands = exports.Int32ToIntArray = exports.Int16ToIntArray = exports.Float32ToIntArray = exports.Float32ToHex = exports.getAsciiArrayFromStr = exports.asciiArrayToString = exports.charArrayToString = exports.ascii = exports.append = exports.getHex = exports.hexstr = exports.getMessageData = exports.buildMessage = exports.checkSum = exports.esc2bin = exports.bin2esc = void 0;
6
7
  const win32filetime_1 = __importDefault(require("win32filetime"));
7
8
  const sum = (arr) => arr.reduce((a, b) => a + b, 0);
8
9
  function bin2esc(arr) {
@@ -9,7 +9,7 @@ export declare type SerialCommsProps = {
9
9
  port: string;
10
10
  settings?: any;
11
11
  };
12
- declare enum SerialCommsState {
12
+ export declare enum SerialCommsState {
13
13
  Idle = 0,
14
14
  Connecting = 1,
15
15
  Connected = 2,
@@ -17,6 +17,11 @@ declare enum SerialCommsState {
17
17
  Disconnected = 4,
18
18
  Error = 5
19
19
  }
20
+ export declare enum SendState {
21
+ Idle = 0,
22
+ Sending = 1,
23
+ Receiving = 2
24
+ }
20
25
  export default class KettlerSerialComms<T extends Command> extends EventEmitter {
21
26
  private logger;
22
27
  private port;
@@ -27,12 +32,17 @@ export default class KettlerSerialComms<T extends Command> extends EventEmitter
27
32
  private worker;
28
33
  private sendState;
29
34
  private currentCmd;
35
+ private currentTimeout;
30
36
  private protocol;
31
37
  constructor(opts: SerialCommsProps);
32
38
  getPort(): string;
33
39
  setPort(port: any): void;
40
+ getLogger(): EventLogger;
34
41
  isConnected(): boolean;
35
42
  stateIn: (allowedStates: SerialCommsState[]) => boolean;
43
+ _setState(state: SerialCommsState): void;
44
+ _setSendState(state: SendState): void;
45
+ _setCurrentCmd(cmd: T): void;
36
46
  onPortOpen(): void;
37
47
  onPortClose(): Promise<void>;
38
48
  onPortError(err: any): void;
@@ -40,9 +50,9 @@ export default class KettlerSerialComms<T extends Command> extends EventEmitter
40
50
  close(): void;
41
51
  startWorker(): void;
42
52
  stopWorker(): void;
53
+ clearTimeout(): void;
43
54
  onData(data: string | Buffer): void;
44
55
  write(cmd: Command): void;
45
56
  sendNextCommand(): Command | undefined;
46
57
  send(cmd: Command): void;
47
58
  }
48
- export {};
@@ -12,10 +12,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.SendState = exports.SerialCommsState = void 0;
15
16
  const gd_eventlog_1 = require("gd-eventlog");
16
17
  const utils_1 = require("../utils");
17
18
  const events_1 = __importDefault(require("events"));
18
- const DEFAULT_RCV_TIMEOUT = 500;
19
+ const DEFAULT_RCV_TIMEOUT = 1500;
19
20
  const DEBUG_LOGGER = {
20
21
  log: (e, ...args) => console.log(e, ...args),
21
22
  logEvent: (event) => console.log(JSON.stringify(event))
@@ -28,13 +29,13 @@ var SerialCommsState;
28
29
  SerialCommsState[SerialCommsState["Disconnecting"] = 3] = "Disconnecting";
29
30
  SerialCommsState[SerialCommsState["Disconnected"] = 4] = "Disconnected";
30
31
  SerialCommsState[SerialCommsState["Error"] = 5] = "Error";
31
- })(SerialCommsState || (SerialCommsState = {}));
32
+ })(SerialCommsState = exports.SerialCommsState || (exports.SerialCommsState = {}));
32
33
  var SendState;
33
34
  (function (SendState) {
34
35
  SendState[SendState["Idle"] = 0] = "Idle";
35
36
  SendState[SendState["Sending"] = 1] = "Sending";
36
37
  SendState[SendState["Receiving"] = 2] = "Receiving";
37
- })(SendState || (SendState = {}));
38
+ })(SendState = exports.SendState || (exports.SendState = {}));
38
39
  const CRLF = '\r\n';
39
40
  class KettlerSerialComms extends events_1.default {
40
41
  constructor(opts) {
@@ -58,9 +59,21 @@ class KettlerSerialComms extends events_1.default {
58
59
  setPort(port) {
59
60
  this.port = port;
60
61
  }
62
+ getLogger() {
63
+ return this.logger;
64
+ }
61
65
  isConnected() {
62
66
  return this.state === SerialCommsState.Connected;
63
67
  }
68
+ _setState(state) {
69
+ this.state = state;
70
+ }
71
+ _setSendState(state) {
72
+ this.sendState = state;
73
+ }
74
+ _setCurrentCmd(cmd) {
75
+ this.currentCmd = cmd;
76
+ }
64
77
  onPortOpen() {
65
78
  this.logger.logEvent({ message: 'port opened', port: this.getPort() });
66
79
  this.state = SerialCommsState.Connected;
@@ -134,9 +147,16 @@ class KettlerSerialComms extends events_1.default {
134
147
  this.worker = undefined;
135
148
  }
136
149
  }
150
+ clearTimeout() {
151
+ if (this.currentTimeout) {
152
+ clearTimeout(this.currentTimeout);
153
+ this.currentTimeout = undefined;
154
+ }
155
+ }
137
156
  onData(data) {
138
- this.sendState = SendState.Idle;
157
+ this.clearTimeout();
139
158
  this.logger.logEvent({ message: "sendCommand:receiving:", data: data });
159
+ this.sendState = SendState.Idle;
140
160
  if (typeof data === 'string') {
141
161
  if (this.currentCmd.onResponse)
142
162
  this.currentCmd.onResponse(data);
@@ -150,7 +170,7 @@ class KettlerSerialComms extends events_1.default {
150
170
  write(cmd) {
151
171
  this.sendState = SendState.Sending;
152
172
  const { logStr, message, timeout = (this.settings.timeout || DEFAULT_RCV_TIMEOUT) } = cmd;
153
- const msg = typeof message === 'string' ? message : utils_1.hexstr(message);
173
+ const msg = typeof message === 'string' ? message : (0, utils_1.hexstr)(message);
154
174
  const onError = (err) => {
155
175
  this.logger.logEvent({ message: "sendCommand:error:", cmd: logStr, error: err.message, port: this.getPort() });
156
176
  if (cmd.onError)
@@ -166,7 +186,7 @@ class KettlerSerialComms extends events_1.default {
166
186
  this.sendState = SendState.Receiving;
167
187
  this.currentCmd = cmd;
168
188
  if (timeout) {
169
- setTimeout(() => {
189
+ this.currentTimeout = setTimeout(() => {
170
190
  if (this.sendState === SendState.Receiving) {
171
191
  onError(new Error("response timeout"));
172
192
  }
@@ -189,6 +209,7 @@ class KettlerSerialComms extends events_1.default {
189
209
  this.write(cmd);
190
210
  }
191
211
  send(cmd) {
212
+ this.logger.logEvent({ message: 'send()', cmd: cmd.logStr, port: this.getPort(), queueSize: this.queue.size() });
192
213
  this.queue.enqueue(cmd);
193
214
  }
194
215
  }
@@ -2,6 +2,7 @@ import { DeviceSettings } from "../../DeviceProtocol";
2
2
  import DeviceAdapterBase, { DeviceAdapter, DeviceData, Bike } from "../../Device";
3
3
  import { DeviceProtocol } from "../../DeviceProtocol";
4
4
  import { EventLogger } from "gd-eventlog";
5
+ import SerialComms from "../comms";
5
6
  import { Command } from "../../types/command";
6
7
  import CyclingMode, { IncyclistBikeData } from "../../CyclingMode";
7
8
  import { User } from "../../types/user";
@@ -33,7 +34,6 @@ export default class KettlerRacerAdapter extends DeviceAdapterBase implements De
33
34
  private ignorePower;
34
35
  private logger;
35
36
  private paused;
36
- private comms;
37
37
  private iv;
38
38
  private requests;
39
39
  private data;
@@ -41,6 +41,7 @@ export default class KettlerRacerAdapter extends DeviceAdapterBase implements De
41
41
  private kettlerData;
42
42
  private updateBusy;
43
43
  private requestBusy;
44
+ private comms;
44
45
  constructor(protocol: DeviceProtocol, settings: DeviceSettings);
45
46
  isBike(): boolean;
46
47
  isPower(): boolean;
@@ -52,6 +53,8 @@ export default class KettlerRacerAdapter extends DeviceAdapterBase implements De
52
53
  setIgnoreHrm(ignore: boolean): void;
53
54
  setIgnorePower(ignore: boolean): void;
54
55
  setIgnoreBike(ignore: boolean): void;
56
+ _getComms(): SerialComms<KettlerRacerCommand>;
57
+ _setComms(comms: SerialComms<KettlerRacerCommand>): void;
55
58
  getLogger(): EventLogger;
56
59
  getUserSettings(): User;
57
60
  getWeight(): number;
@@ -65,7 +68,7 @@ export default class KettlerRacerAdapter extends DeviceAdapterBase implements De
65
68
  startTraining(): Promise<string>;
66
69
  unknownSN(): Promise<string>;
67
70
  setBaudrate(baudrate: number): Promise<string>;
68
- setPower(power: number): Promise<string>;
71
+ setPower(power: number): Promise<KettlerBikeData>;
69
72
  getExtendedStatus(): Promise<KettlerExtendedBikeData>;
70
73
  getStatus(): Promise<KettlerBikeData>;
71
74
  getDB(): Promise<string>;
@@ -1,4 +1,23 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
2
21
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
22
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
23
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -8,13 +27,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
27
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
28
  });
10
29
  };
11
- var __importStar = (this && this.__importStar) || function (mod) {
12
- if (mod && mod.__esModule) return mod;
13
- var result = {};
14
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
15
- result["default"] = mod;
16
- return result;
17
- };
18
30
  var __importDefault = (this && this.__importDefault) || function (mod) {
19
31
  return (mod && mod.__esModule) ? mod : { "default": mod };
20
32
  };
@@ -61,6 +73,12 @@ class KettlerRacerAdapter extends Device_1.default {
61
73
  setIgnoreBike(ignore) {
62
74
  this.ignoreBike = ignore;
63
75
  }
76
+ _getComms() {
77
+ return this.comms;
78
+ }
79
+ _setComms(comms) {
80
+ this.comms = comms;
81
+ }
64
82
  getLogger() {
65
83
  return this.logger;
66
84
  }
@@ -93,7 +111,6 @@ class KettlerRacerAdapter extends Device_1.default {
93
111
  return this.send('setClientMode', 'CM').then(response => {
94
112
  this.logger.logEvent({ response });
95
113
  if (response === 'ACK' || response === 'RUN') {
96
- this.logger.logEvent({ response });
97
114
  return true;
98
115
  }
99
116
  else {
@@ -154,7 +171,10 @@ class KettlerRacerAdapter extends Device_1.default {
154
171
  }
155
172
  setPower(power) {
156
173
  return __awaiter(this, void 0, void 0, function* () {
157
- return yield this.send(`setPower(${power})`, `PW${power}`);
174
+ return this.send(`setPower(${power})`, `PW${power}`).then(response => {
175
+ const data = this.parseStatus(response);
176
+ return data;
177
+ });
158
178
  });
159
179
  }
160
180
  getExtendedStatus() {
@@ -246,134 +266,29 @@ class KettlerRacerAdapter extends Device_1.default {
246
266
  try {
247
267
  if (!info.opened)
248
268
  info.opened = yield this.waitForOpened();
249
- iv = setTimeout(() => __awaiter(this, void 0, void 0, function* () {
269
+ iv = setTimeout(() => {
270
+ this.logger.logEvent({ message: "check() timeout", port: this.getPort() });
250
271
  reject(new Error(`timeout`));
251
- }), 5000);
252
- try {
253
- yield this.getVersion();
254
- }
255
- catch (e) {
256
- this.logger.logEvent({ message: 'Error', error: e.message });
257
- }
272
+ }, 5000);
273
+ if (!info.pcMode)
274
+ info.pcMode = yield this.setClientMode();
275
+ if (!info.id)
276
+ info.id = yield this.getIdentifier();
277
+ if (!info.version)
278
+ info.version = yield this.getVersion();
258
279
  try {
259
280
  yield this.getInterface();
260
281
  }
261
282
  catch (e) {
262
283
  this.logger.logEvent({ message: 'Error', error: e.message });
263
284
  }
264
- try {
265
- yield this.getIdentifier();
266
- }
267
- catch (e) {
268
- this.logger.logEvent({ message: 'Error', error: e.message });
269
- }
270
- try {
271
- yield this.getExtendedStatus();
272
- }
273
- catch (e) {
274
- this.logger.logEvent({ message: 'Error', error: e.message });
275
- }
276
- try {
277
- yield this.getStatus();
278
- }
279
- catch (e) {
280
- this.logger.logEvent({ message: 'Error', error: e.message });
281
- }
282
- try {
283
- yield this.setClientMode();
284
- }
285
- catch (e) {
286
- this.logger.logEvent({ message: 'Error', error: e.message });
287
- }
288
- try {
289
- yield this.getVersion();
290
- }
291
- catch (e) {
292
- this.logger.logEvent({ message: 'Error', error: e.message });
293
- }
294
- try {
295
- yield this.getInterface();
296
- }
297
- catch (e) {
298
- this.logger.logEvent({ message: 'Error', error: e.message });
299
- }
300
- try {
301
- yield this.getIdentifier();
302
- }
303
- catch (e) {
304
- this.logger.logEvent({ message: 'Error', error: e.message });
305
- }
306
- try {
307
- yield this.getExtendedStatus();
308
- }
309
- catch (e) {
310
- this.logger.logEvent({ message: 'Error', error: e.message });
311
- }
312
- try {
313
- yield this.getStatus();
314
- }
315
- catch (e) {
316
- this.logger.logEvent({ message: 'Error', error: e.message });
317
- }
318
- try {
319
- yield this.setPower(100);
320
- }
321
- catch (e) {
322
- this.logger.logEvent({ message: 'Error', error: e.message });
323
- }
324
- try {
325
- yield this.reset();
326
- }
327
- catch (e) {
328
- this.logger.logEvent({ message: 'Error', error: e.message });
329
- }
330
- try {
331
- yield this.setComputerMode();
332
- }
333
- catch (e) {
334
- this.logger.logEvent({ message: 'Error', error: e.message });
335
- }
336
- try {
337
- yield this.getVersion();
338
- }
339
- catch (e) {
340
- this.logger.logEvent({ message: 'Error', error: e.message });
341
- }
342
- try {
343
- yield this.getInterface();
344
- }
345
- catch (e) {
346
- this.logger.logEvent({ message: 'Error', error: e.message });
347
- }
348
- try {
349
- yield this.getIdentifier();
350
- }
351
- catch (e) {
352
- this.logger.logEvent({ message: 'Error', error: e.message });
353
- }
354
- try {
355
- yield this.getExtendedStatus();
356
- }
357
- catch (e) {
358
- this.logger.logEvent({ message: 'Error', error: e.message });
359
- }
360
- try {
361
- yield this.getStatus();
362
- }
363
- catch (e) {
364
- this.logger.logEvent({ message: 'Error', error: e.message });
365
- }
366
- try {
367
- yield this.setPower(100);
368
- }
369
- catch (e) {
370
- this.logger.logEvent({ message: 'Error', error: e.message });
371
- }
372
285
  clearTimeout(iv);
373
286
  resolve(info);
374
287
  }
375
288
  catch (err) {
376
- clearTimeout(iv);
289
+ this.logger.logEvent({ message: 'Error', error: err.message });
290
+ if (iv)
291
+ clearTimeout(iv);
377
292
  iv = undefined;
378
293
  reject(err);
379
294
  }
@@ -382,22 +297,40 @@ class KettlerRacerAdapter extends Device_1.default {
382
297
  }
383
298
  start(props) {
384
299
  this.logger.logEvent({ message: 'start()' });
385
- const opts = props || {};
386
300
  var info = {};
387
- return utils_1.runWithRetries(() => __awaiter(this, void 0, void 0, function* () {
301
+ return (0, utils_1.runWithRetries)(() => __awaiter(this, void 0, void 0, function* () {
388
302
  try {
389
303
  if (!info.checkDone) {
390
304
  info.checkDone = yield this.check();
391
305
  }
392
- if (!info.started) {
393
- info.started = yield this.startTraining();
306
+ try {
307
+ if (!info.started) {
308
+ info.started = yield this.startTraining();
309
+ }
310
+ }
311
+ catch (e) {
312
+ this.logger.logEvent({ message: 'Error', error: e.message });
313
+ }
314
+ try {
315
+ yield this.setPower(100);
316
+ }
317
+ catch (e) {
318
+ this.logger.logEvent({ message: 'Error', error: e.message });
394
319
  }
395
320
  if (!info.data) {
396
- info.data = yield this.getStatus();
321
+ yield this.update();
322
+ info.data = this.data;
397
323
  }
398
324
  return info.data;
399
325
  }
400
326
  catch (err) {
327
+ console.log('~~~ Error', err);
328
+ try {
329
+ yield this.reset();
330
+ }
331
+ catch (e) {
332
+ this.logger.logEvent({ message: 'Error', error: e.message });
333
+ }
401
334
  throw (new Error(`could not start device, reason:${err.message}`));
402
335
  }
403
336
  }), 5, 1000)
@@ -409,6 +342,7 @@ class KettlerRacerAdapter extends Device_1.default {
409
342
  startUpdatePull() {
410
343
  if (this.iv)
411
344
  return;
345
+ this.logger.logEvent({ message: 'start regular device update' });
412
346
  if (this.ignoreBike && this.ignoreHrm && this.ignorePower)
413
347
  return;
414
348
  const ivSync = setInterval(() => {
@@ -496,14 +430,21 @@ class KettlerRacerAdapter extends Device_1.default {
496
430
  this.updateBusy = true;
497
431
  this.getStatus()
498
432
  .then((bikeData) => {
499
- this.kettlerData = bikeData;
500
- let data = this.mapData(bikeData);
501
- data = this.getCyclingMode().updateData(data);
502
- this.data = this.transformData(data, bikeData);
433
+ if (!bikeData)
434
+ return;
435
+ try {
436
+ this.kettlerData = bikeData;
437
+ let data = this.mapData(bikeData);
438
+ data = this.getCyclingMode().updateData(data);
439
+ this.data = this.transformData(data, bikeData);
440
+ }
441
+ catch (err) {
442
+ this.logger.logEvent({ message: 'bike update error', error: err.message });
443
+ }
503
444
  this.updateBusy = false;
504
445
  })
505
446
  .catch(err => {
506
- this.logger.logEvent({ message: 'bike update error', error: err.message, stack: err.stack });
447
+ this.logger.logEvent({ message: 'bike update error', error: err.message });
507
448
  this.updateBusy = false;
508
449
  });
509
450
  });
@@ -606,7 +547,7 @@ class KettlerRacerAdapter extends Device_1.default {
606
547
  }));
607
548
  }
608
549
  waitForOpened() {
609
- return utils_1.runWithRetries(() => {
550
+ return (0, utils_1.runWithRetries)(() => {
610
551
  return new Promise((resolve, reject) => {
611
552
  try {
612
553
  if (this.comms.isConnected()) {
@@ -17,7 +17,7 @@ export interface ScanDescription {
17
17
  state: ScanState;
18
18
  props: KettlerRacerScanProps;
19
19
  }
20
- export declare class KettlerRacerProtocol extends DeviceProtocolBase implements DeviceProtocol {
20
+ export default class KettlerRacerProtocol extends DeviceProtocolBase implements DeviceProtocol {
21
21
  private state;
22
22
  private logger;
23
23
  private activeScans;