incyclist-devices 1.4.14 → 1.4.15

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.
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CyclingModeBase = exports.CyclingModeProperyType = void 0;
3
4
  var CyclingModeProperyType;
4
5
  (function (CyclingModeProperyType) {
5
6
  CyclingModeProperyType["Integer"] = "Integer";
package/lib/Device.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_USER_WEIGHT = exports.DEFAULT_BIKE_WEIGHT = void 0;
3
4
  exports.DEFAULT_BIKE_WEIGHT = 10;
4
5
  exports.DEFAULT_USER_WEIGHT = 75;
5
6
  class DeviceAdapterBase {
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.INTERFACE = void 0;
3
4
  exports.INTERFACE = {
4
5
  SERIAL: 'serial',
5
6
  ANT: 'ant',
@@ -4,7 +4,7 @@ import DeviceProtocolBase, { INTERFACE, DeviceProtocol } from './DeviceProtocol'
4
4
  import SimulatorProtocol from './simulator/Simulator';
5
5
  import DaumPremiumProtocol from './daum/premium/DaumPremiumProtocol';
6
6
  import DaumClassicProtocol from './daum/classic/DaumClassicProtocol';
7
- import { KettlerRacerProtocol } from './kettler/ergo-racer/protocol';
7
+ import KettlerRacerProtocol from './kettler/ergo-racer/protocol';
8
8
  import { AntScanner } from './ant/AntScanner';
9
9
  import { CyclingModeProperyType } from './CyclingMode';
10
10
  declare const Protocols: {
@@ -1,34 +1,47 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
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
+ });
5
14
  var __importStar = (this && this.__importStar) || function (mod) {
6
15
  if (mod && mod.__esModule) return mod;
7
16
  var result = {};
8
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
9
- result["default"] = mod;
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);
10
19
  return result;
11
20
  };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
12
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.CyclingModeProperyType = exports.AntScanner = exports.Protocols = exports.Device = exports.INTERFACE = exports.DeviceRegistry = exports.DeviceProtocolBase = void 0;
13
26
  const DeviceRegistry_1 = __importDefault(require("./DeviceRegistry"));
14
27
  exports.DeviceRegistry = DeviceRegistry_1.default;
15
28
  const Device_1 = __importDefault(require("./Device"));
16
29
  exports.Device = Device_1.default;
17
30
  const DeviceProtocol_1 = __importStar(require("./DeviceProtocol"));
18
31
  exports.DeviceProtocolBase = DeviceProtocol_1.default;
19
- exports.INTERFACE = DeviceProtocol_1.INTERFACE;
32
+ Object.defineProperty(exports, "INTERFACE", { enumerable: true, get: function () { return DeviceProtocol_1.INTERFACE; } });
20
33
  const Simulator_1 = __importDefault(require("./simulator/Simulator"));
21
34
  const DaumPremiumProtocol_1 = __importDefault(require("./daum/premium/DaumPremiumProtocol"));
22
35
  const DaumClassicProtocol_1 = __importDefault(require("./daum/classic/DaumClassicProtocol"));
23
- const protocol_1 = require("./kettler/ergo-racer/protocol");
36
+ const protocol_1 = __importDefault(require("./kettler/ergo-racer/protocol"));
24
37
  const AntScanner_1 = require("./ant/AntScanner");
25
- exports.AntScanner = AntScanner_1.AntScanner;
38
+ Object.defineProperty(exports, "AntScanner", { enumerable: true, get: function () { return AntScanner_1.AntScanner; } });
26
39
  const CyclingMode_1 = require("./CyclingMode");
27
- exports.CyclingModeProperyType = CyclingMode_1.CyclingModeProperyType;
40
+ Object.defineProperty(exports, "CyclingModeProperyType", { enumerable: true, get: function () { return CyclingMode_1.CyclingModeProperyType; } });
28
41
  const Protocols = {
29
42
  SimulatorProtocol: Simulator_1.default,
30
43
  DaumClassicProtocol: DaumClassicProtocol_1.default,
31
44
  DaumPremiumProtocol: DaumPremiumProtocol_1.default,
32
- KettlerRacerProtocol: protocol_1.KettlerRacerProtocol,
45
+ KettlerRacerProtocol: protocol_1.default,
33
46
  };
34
47
  exports.Protocols = Protocols;
@@ -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.DEFAULT_UPDATE_FREQUENCY = void 0;
6
7
  const Device_1 = __importDefault(require("../Device"));
7
8
  exports.DEFAULT_UPDATE_FREQUENCY = 1000;
8
9
  class AntAdapter extends Device_1.default {
@@ -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,17 +27,11 @@ 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
  };
21
33
  Object.defineProperty(exports, "__esModule", { value: true });
34
+ exports.AntScanner = exports.AntProtocol = void 0;
22
35
  const gd_eventlog_1 = require("gd-eventlog");
23
36
  const DeviceProtocol_1 = __importStar(require("../DeviceProtocol"));
24
37
  const AntHrmAdapter_1 = __importDefault(require("./anthrm/AntHrmAdapter"));
@@ -52,7 +52,7 @@ class AntFEAdapter extends AntAdapter_1.default {
52
52
  getDisplayName() {
53
53
  const { DeviceID, ManId, ComputedHeartRate } = this.deviceData;
54
54
  const hrmStr = ComputedHeartRate ? ` (${ComputedHeartRate})` : '';
55
- return `${utils_1.getBrand(ManId)} FE ${DeviceID}${hrmStr}`;
55
+ return `${(0, utils_1.getBrand)(ManId)} FE ${DeviceID}${hrmStr}`;
56
56
  }
57
57
  onAttached() {
58
58
  this.logger.logEvent({ message: 'Device connected' });
@@ -225,7 +225,7 @@ class AntFEAdapter extends AntAdapter_1.default {
225
225
  trackResistanceSent: false,
226
226
  userSent: false,
227
227
  };
228
- utils_2.runWithRetries(() => __awaiter(this, void 0, void 0, function* () {
228
+ (0, utils_2.runWithRetries)(() => __awaiter(this, void 0, void 0, function* () {
229
229
  if (this.isStopped())
230
230
  resolve(false);
231
231
  try {
@@ -310,18 +310,18 @@ class AntFEAdapter extends AntAdapter_1.default {
310
310
  try {
311
311
  const isReset = (!request || request.reset || Object.keys(request).length === 0);
312
312
  if (request.slope !== undefined) {
313
- yield utils_2.runWithRetries(() => __awaiter(this, void 0, void 0, function* () { return yield this.sendTrackResistance(request.slope); }), 2, 100);
313
+ yield (0, utils_2.runWithRetries)(() => __awaiter(this, void 0, void 0, function* () { return yield this.sendTrackResistance(request.slope); }), 2, 100);
314
314
  }
315
315
  if (request.targetPower !== undefined) {
316
- yield utils_2.runWithRetries(() => __awaiter(this, void 0, void 0, function* () { return yield this.sendTargetPower(request.targetPower); }), 2, 100);
316
+ yield (0, utils_2.runWithRetries)(() => __awaiter(this, void 0, void 0, function* () { return yield this.sendTargetPower(request.targetPower); }), 2, 100);
317
317
  }
318
318
  else if (request.maxPower !== undefined) {
319
319
  if (this.data.power && this.data.power > request.maxPower)
320
- yield utils_2.runWithRetries(() => __awaiter(this, void 0, void 0, function* () { return yield this.sendTargetPower(request.maxPower); }), 2, 100);
320
+ yield (0, utils_2.runWithRetries)(() => __awaiter(this, void 0, void 0, function* () { return yield this.sendTargetPower(request.maxPower); }), 2, 100);
321
321
  }
322
322
  else if (request.minPower !== undefined) {
323
323
  if (this.data.power && this.data.power < request.minPower)
324
- yield utils_2.runWithRetries(() => __awaiter(this, void 0, void 0, function* () { return yield this.sendTargetPower(request.minPower); }), 2, 100);
324
+ yield (0, utils_2.runWithRetries)(() => __awaiter(this, void 0, void 0, function* () { return yield this.sendTargetPower(request.minPower); }), 2, 100);
325
325
  }
326
326
  }
327
327
  catch (err) {
@@ -406,7 +406,7 @@ class AntFEAdapter extends AntAdapter_1.default {
406
406
  this.currentCmd = this.queue.dequeue();
407
407
  this.currentCmd.tsStart = Date.now();
408
408
  const { msg, logStr } = this.currentCmd;
409
- this.logger.logEvent({ message: "sending", cmd: logStr, msg: utils_2.hexstr(msg), queueSize: this.queue.size() });
409
+ this.logger.logEvent({ message: "sending", cmd: logStr, msg: (0, utils_2.hexstr)(msg), queueSize: this.queue.size() });
410
410
  if (this.stick)
411
411
  this.stick.write(msg);
412
412
  }
@@ -43,7 +43,7 @@ class AntHrmAdapter extends AntAdapter_1.default {
43
43
  getDisplayName() {
44
44
  const { DeviceID, manID, ComputedHeartRate } = this.deviceData;
45
45
  const hrmStr = ComputedHeartRate ? ` (${ComputedHeartRate})` : '';
46
- return `${utils_1.getBrand(manID)} Hrm ${DeviceID}${hrmStr}`;
46
+ return `${(0, utils_1.getBrand)(manID)} Hrm ${DeviceID}${hrmStr}`;
47
47
  }
48
48
  onDeviceData(deviceData) {
49
49
  if (!this.started)
package/lib/ant/utils.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getBrand = (manId) => {
3
+ exports.getBrand = void 0;
4
+ const getBrand = (manId) => {
4
5
  if (manId === undefined)
5
6
  return "ANT+";
6
7
  switch (manId) {
@@ -19,3 +20,4 @@ exports.getBrand = (manId) => {
19
20
  return "ANT+";
20
21
  }
21
22
  };
23
+ exports.getBrand = getBrand;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.solveCubic = exports.IllegalArgumentException = void 0;
3
4
  const g = 9.80665;
4
5
  const rho = 1.2041;
5
6
  const cwABike = {
@@ -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
  };
@@ -296,16 +308,16 @@ class DaumAdapterBase extends Device_1.default {
296
308
  return;
297
309
  let distance = 0;
298
310
  if (this.distanceInternal !== undefined && this.daumRunData.distanceInternal !== undefined) {
299
- distance = utils_1.intVal(this.daumRunData.distanceInternal - this.distanceInternal);
311
+ distance = (0, utils_1.intVal)(this.daumRunData.distanceInternal - this.distanceInternal);
300
312
  }
301
313
  if (this.daumRunData.distanceInternal !== undefined)
302
314
  this.distanceInternal = this.daumRunData.distanceInternal;
303
315
  let data = {
304
- speed: utils_1.floatVal(this.daumRunData.speed),
305
- slope: utils_1.floatVal(this.daumRunData.slope),
306
- power: utils_1.intVal(this.daumRunData.power),
307
- cadence: utils_1.intVal(this.daumRunData.pedalRpm),
308
- heartrate: utils_1.intVal(this.daumRunData.heartrate),
316
+ speed: (0, utils_1.floatVal)(this.daumRunData.speed),
317
+ slope: (0, utils_1.floatVal)(this.daumRunData.slope),
318
+ power: (0, utils_1.intVal)(this.daumRunData.power),
319
+ cadence: (0, utils_1.intVal)(this.daumRunData.pedalRpm),
320
+ heartrate: (0, utils_1.intVal)(this.daumRunData.heartrate),
309
321
  distance,
310
322
  timestamp: Date.now(),
311
323
  deviceTime: this.daumRunData.time,
@@ -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.direction = void 0;
6
7
  const gd_eventlog_1 = require("gd-eventlog");
7
8
  const CyclingMode_1 = require("../CyclingMode");
8
9
  const calculations_1 = __importDefault(require("../calculations"));
@@ -86,7 +86,7 @@ class DaumClassicAdapter extends DaumAdapter_1.default {
86
86
  const { user } = props;
87
87
  this.initData();
88
88
  let startState = {};
89
- return utils_1.runWithRetries(() => __awaiter(this, void 0, void 0, function* () {
89
+ return (0, utils_1.runWithRetries)(() => __awaiter(this, void 0, void 0, function* () {
90
90
  try {
91
91
  if (!this.bike.isConnected())
92
92
  yield this.bike.saveConnect();
@@ -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
  };
@@ -52,9 +52,9 @@ class Daum8008 {
52
52
  }
53
53
  getUserWeight() {
54
54
  if (this.settings && this.settings.user && this.settings.user.weight)
55
- return utils_1.getWeight(this.settings.user.weight);
55
+ return (0, utils_1.getWeight)(this.settings.user.weight);
56
56
  else
57
- return utils_1.getWeight();
57
+ return (0, utils_1.getWeight)();
58
58
  }
59
59
  getBikeWeight() {
60
60
  if (this.settings && this.settings.weight) {
@@ -274,7 +274,7 @@ class Daum8008 {
274
274
  };
275
275
  this.queue.enqueue(cmdInfo);
276
276
  if (this.queue.size() > 1)
277
- this.logger.logEvent({ message: "sendCommand:adding:", cmd: logStr, hex: utils_1.hexstr(payload), queueSize: this.queue.size() });
277
+ this.logger.logEvent({ message: "sendCommand:adding:", cmd: logStr, hex: (0, utils_1.hexstr)(payload), queueSize: this.queue.size() });
278
278
  if (this.bikeCmdWorker === undefined) {
279
279
  this.startWorker();
280
280
  }
@@ -293,7 +293,7 @@ class Daum8008 {
293
293
  const parser = serialPort.pipe(new ByteLength({ length: expected }));
294
294
  parser.on('data', (data) => {
295
295
  let duration = Date.now() - this.cmdStart;
296
- this.logger.logEvent({ message: "sendCommand:received:", duration, hex: utils_1.hexstr(data), port: this.getPort() });
296
+ this.logger.logEvent({ message: "sendCommand:received:", duration, hex: (0, utils_1.hexstr)(data), port: this.getPort() });
297
297
  serialPort.unpipe();
298
298
  if (callbackErr !== undefined) {
299
299
  if (data[0] !== payload[0]) {
@@ -306,7 +306,7 @@ class Daum8008 {
306
306
  callback(data);
307
307
  done();
308
308
  });
309
- this.logger.logEvent({ message: "sendCommand:sending:", cmd: logStr, hex: utils_1.hexstr(payload), port: this.getPort() });
309
+ this.logger.logEvent({ message: "sendCommand:sending:", cmd: logStr, hex: (0, utils_1.hexstr)(payload), port: this.getPort() });
310
310
  this.cmdCurrent.start = this.cmdStart = Date.now();
311
311
  serialPort.write(payload);
312
312
  }
@@ -321,53 +321,53 @@ class Daum8008 {
321
321
  this.sendDaum8008Command(`checkCockpit(${bikeNo})`, [0x10, bikeNo], 3, (data) => resolve({ bike: data[1], version: data[2] }), (status, err) => {
322
322
  if (status === 408)
323
323
  return resolve({ bike: bikeNo, version: undefined });
324
- reject(utils_1.buildError(status, err));
324
+ reject((0, utils_1.buildError)(status, err));
325
325
  });
326
326
  });
327
327
  }
328
328
  getAddress() {
329
329
  return new Promise((resolve, reject) => {
330
- this.sendDaum8008Command(`getAddress()`, [0x11], 2, (data) => resolve({ bike: data[1] }), (status, err) => reject(utils_1.buildError(status, err)));
330
+ this.sendDaum8008Command(`getAddress()`, [0x11], 2, (data) => resolve({ bike: data[1] }), (status, err) => reject((0, utils_1.buildError)(status, err)));
331
331
  });
332
332
  }
333
333
  getVersion(bikeNo = 0) {
334
334
  return new Promise((resolve, reject) => {
335
- this.sendDaum8008Command(`getVersion(${bikeNo})`, [0x73, bikeNo], 11, (data) => resolve({ bike: data[1], serialNo: utils_1.hexstr(data, 2, 8), cockpit: utils_1.getCockpit(data[10]) }), (status, err) => reject(utils_1.buildError(status, err)));
335
+ this.sendDaum8008Command(`getVersion(${bikeNo})`, [0x73, bikeNo], 11, (data) => resolve({ bike: data[1], serialNo: (0, utils_1.hexstr)(data, 2, 8), cockpit: (0, utils_1.getCockpit)(data[10]) }), (status, err) => reject((0, utils_1.buildError)(status, err)));
336
336
  });
337
337
  }
338
338
  resetDevice(bikeNo = 0) {
339
339
  return new Promise((resolve, reject) => {
340
- this.sendDaum8008Command(`resetDevice(${bikeNo})`, [0x12, bikeNo], 2, (data) => resolve({}), (status, err) => reject(utils_1.buildError(status, err)));
340
+ this.sendDaum8008Command(`resetDevice(${bikeNo})`, [0x12, bikeNo], 2, (data) => resolve({}), (status, err) => reject((0, utils_1.buildError)(status, err)));
341
341
  });
342
342
  }
343
343
  startProg(bikeNo = 0) {
344
344
  return new Promise((resolve, reject) => {
345
- this.sendDaum8008Command(`startProg(${bikeNo})`, [0x21, bikeNo], 3, (data) => resolve({ bike: data[1], pedalling: data[2] > 0 }), (status, err) => reject(utils_1.buildError(status, err)));
345
+ this.sendDaum8008Command(`startProg(${bikeNo})`, [0x21, bikeNo], 3, (data) => resolve({ bike: data[1], pedalling: data[2] > 0 }), (status, err) => reject((0, utils_1.buildError)(status, err)));
346
346
  });
347
347
  }
348
348
  stopProg(bikeNo = 0) {
349
349
  return new Promise((resolve, reject) => {
350
- this.sendDaum8008Command(`stopProg(${bikeNo})`, [0x22, bikeNo], 3, (data) => resolve({ bike: data[1], pedalling: data[2] !== 0 }), (status, err) => reject(utils_1.buildError(status, err)));
350
+ this.sendDaum8008Command(`stopProg(${bikeNo})`, [0x22, bikeNo], 3, (data) => resolve({ bike: data[1], pedalling: data[2] !== 0 }), (status, err) => reject((0, utils_1.buildError)(status, err)));
351
351
  });
352
352
  }
353
353
  setProg(progNo = 0, bikeNo = 0) {
354
354
  return new Promise((resolve, reject) => {
355
- this.sendDaum8008Command(`setProg(${bikeNo},${progNo})`, [0x23, bikeNo, progNo], 4, (data) => resolve({ bike: data[1], progNo: data[2], pedalling: data[3] !== 0 }), (status, err) => reject(utils_1.buildError(status, err)));
355
+ this.sendDaum8008Command(`setProg(${bikeNo},${progNo})`, [0x23, bikeNo, progNo], 4, (data) => resolve({ bike: data[1], progNo: data[2], pedalling: data[3] !== 0 }), (status, err) => reject((0, utils_1.buildError)(status, err)));
356
356
  });
357
357
  }
358
358
  setBikeType(bikeType, bikeNo = 0) {
359
- const bikeVal = utils_1.getBikeType(bikeType);
359
+ const bikeVal = (0, utils_1.getBikeType)(bikeType);
360
360
  return new Promise((resolve, reject) => {
361
- this.sendDaum8008Command(`setBikeType(${bikeNo},${bikeType})`, [0x69, bikeNo, 0, 0, bikeVal], 3, (data) => resolve({}), (status, err) => reject(utils_1.buildError(status, err)));
361
+ this.sendDaum8008Command(`setBikeType(${bikeNo},${bikeType})`, [0x69, bikeNo, 0, 0, bikeVal], 3, (data) => resolve({}), (status, err) => reject((0, utils_1.buildError)(status, err)));
362
362
  });
363
363
  }
364
364
  setPerson(user = {}, bikeNo = 0) {
365
365
  const age = user.age !== undefined ? user.age : utils_1.DEFAULT_AGE;
366
- const gender = utils_1.getGender(user.sex);
367
- const length = utils_1.getLength(user.length);
366
+ const gender = (0, utils_1.getGender)(user.sex);
367
+ const length = (0, utils_1.getLength)(user.length);
368
368
  const maxPower = this.settings.maxPower === undefined ? 800 : this.settings.maxPower;
369
369
  const mUser = user.weight || this.getUserWeight();
370
- const weight = utils_1.getWeight(mUser) + this.getBikeWeight();
370
+ const weight = (0, utils_1.getWeight)(mUser) + this.getBikeWeight();
371
371
  var cmd = [0x24, bikeNo, 0];
372
372
  cmd.push(age);
373
373
  cmd.push(gender);
@@ -390,26 +390,26 @@ class Daum8008 {
390
390
  if (data[i] === 0 || data[i] === 80)
391
391
  return;
392
392
  }
393
- reject(utils_1.buildError(512, 'illegal response'));
393
+ reject((0, utils_1.buildError)(512, 'illegal response'));
394
394
  ok = false;
395
395
  }
396
396
  });
397
397
  if (ok)
398
398
  resolve({ bike: data[1], age, gender, length, weight });
399
- }, (status, err) => reject(utils_1.buildError(status, err)));
399
+ }, (status, err) => reject((0, utils_1.buildError)(status, err)));
400
400
  });
401
401
  }
402
402
  runData(bikeNo = 0) {
403
403
  return new Promise((resolve, reject) => {
404
404
  this.sendDaum8008Command(`runData(${bikeNo})`, [0x40, bikeNo], 19, (data) => {
405
405
  try {
406
- const parsed = utils_1.parseRunData(data);
406
+ const parsed = (0, utils_1.parseRunData)(data);
407
407
  resolve(parsed);
408
408
  }
409
409
  catch (e) {
410
- reject(utils_1.buildError(500, e));
410
+ reject((0, utils_1.buildError)(500, e));
411
411
  }
412
- }, (status, err) => reject(utils_1.buildError(status, err)));
412
+ }, (status, err) => reject((0, utils_1.buildError)(status, err)));
413
413
  });
414
414
  }
415
415
  setGear(gear, bikeNo = 0) {
@@ -419,7 +419,7 @@ class Daum8008 {
419
419
  if (gear > 28)
420
420
  gearVal = 28;
421
421
  return new Promise((resolve, reject) => {
422
- this.sendDaum8008Command(`setGear(${bikeNo},${gearVal})`, [0x53, bikeNo, gearVal], 3, (data) => resolve({ bike: data[1], gear: data[2] }), (status, err) => reject(utils_1.buildError(status, err)));
422
+ this.sendDaum8008Command(`setGear(${bikeNo},${gearVal})`, [0x53, bikeNo, gearVal], 3, (data) => resolve({ bike: data[1], gear: data[2] }), (status, err) => reject((0, utils_1.buildError)(status, err)));
423
423
  });
424
424
  }
425
425
  setPower(power, bikeNo = 0) {
@@ -434,7 +434,7 @@ class Daum8008 {
434
434
  if (power > 800)
435
435
  powerRequest = 800;
436
436
  const powerVal = Math.round(powerRequest / 5);
437
- this.sendDaum8008Command(`setPower(${bikeNo},${power})`, [0x51, bikeNo, powerVal], 3, (data) => resolve({ bike: data[1], power: (data[2] * 5) }), (status, err) => reject(utils_1.buildError(status, err)));
437
+ this.sendDaum8008Command(`setPower(${bikeNo},${power})`, [0x51, bikeNo, powerVal], 3, (data) => resolve({ bike: data[1], power: (data[2] * 5) }), (status, err) => reject((0, utils_1.buildError)(status, err)));
438
438
  });
439
439
  }
440
440
  setSlope(slope, bikeNo = 0) {
@@ -444,12 +444,12 @@ class Daum8008 {
444
444
  return;
445
445
  }
446
446
  const cmd = [0x55, bikeNo];
447
- const arr = utils_1.Float32ToIntArray(slope);
447
+ const arr = (0, utils_1.Float32ToIntArray)(slope);
448
448
  cmd.push(arr[3]);
449
449
  cmd.push(arr[2]);
450
450
  cmd.push(arr[1]);
451
451
  cmd.push(arr[0]);
452
- this.sendDaum8008Command(`setSlope(${bikeNo},${slope})`, cmd, 6, (data) => resolve({ bike: data[1], slope: slope }), (status, err) => reject(utils_1.buildError(status, err)));
452
+ this.sendDaum8008Command(`setSlope(${bikeNo},${slope})`, cmd, 6, (data) => resolve({ bike: data[1], slope: slope }), (status, err) => reject((0, utils_1.buildError)(status, err)));
453
453
  });
454
454
  }
455
455
  }
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Float32ToIntArray = exports.Float32ToHex = exports.hexstr = exports.buildError = exports.parseRunData = exports.getWeight = exports.getLength = exports.getGender = exports.getBikeType = exports.getCockpit = exports.DEFAULT_BIKE_WEIGHT = exports.DEFAULT_USER_WEIGHT = exports.DEFAULT_AGE = void 0;
3
4
  exports.DEFAULT_AGE = 30;
4
5
  exports.DEFAULT_USER_WEIGHT = 75;
5
6
  exports.DEFAULT_BIKE_WEIGHT = 10;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BIKE_TRAINING_STATE = exports.BIKE_INTERFACE = exports.ACTUAL_BIKE_TYPE = void 0;
3
4
  exports.ACTUAL_BIKE_TYPE = {
4
5
  ALLROUND: 'allround',
5
6
  RACE: 'race',
@@ -72,7 +72,7 @@ class DaumPremiumDevice extends DaumAdapter_1.default {
72
72
  const route = opts.route;
73
73
  var info = {};
74
74
  this.initData();
75
- return utils_1.runWithRetries(() => __awaiter(this, void 0, void 0, function* () {
75
+ return (0, utils_1.runWithRetries)(() => __awaiter(this, void 0, void 0, function* () {
76
76
  if (this.isStopped())
77
77
  return;
78
78
  try {
@@ -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
  };
@@ -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,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.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"));
@@ -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,9 +266,10 @@ 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);
272
+ }, 5000);
252
273
  if (!info.pcMode)
253
274
  info.pcMode = yield this.setClientMode();
254
275
  if (!info.id)
@@ -265,7 +286,9 @@ class KettlerRacerAdapter extends Device_1.default {
265
286
  resolve(info);
266
287
  }
267
288
  catch (err) {
268
- clearTimeout(iv);
289
+ this.logger.logEvent({ message: 'Error', error: err.message });
290
+ if (iv)
291
+ clearTimeout(iv);
269
292
  iv = undefined;
270
293
  reject(err);
271
294
  }
@@ -275,13 +298,18 @@ class KettlerRacerAdapter extends Device_1.default {
275
298
  start(props) {
276
299
  this.logger.logEvent({ message: 'start()' });
277
300
  var info = {};
278
- return utils_1.runWithRetries(() => __awaiter(this, void 0, void 0, function* () {
301
+ return (0, utils_1.runWithRetries)(() => __awaiter(this, void 0, void 0, function* () {
279
302
  try {
280
303
  if (!info.checkDone) {
281
304
  info.checkDone = yield this.check();
282
305
  }
283
- if (!info.started) {
284
- 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 });
285
313
  }
286
314
  try {
287
315
  yield this.setPower(100);
@@ -296,6 +324,7 @@ class KettlerRacerAdapter extends Device_1.default {
296
324
  return info.data;
297
325
  }
298
326
  catch (err) {
327
+ console.log('~~~ Error', err);
299
328
  try {
300
329
  yield this.reset();
301
330
  }
@@ -313,6 +342,7 @@ class KettlerRacerAdapter extends Device_1.default {
313
342
  startUpdatePull() {
314
343
  if (this.iv)
315
344
  return;
345
+ this.logger.logEvent({ message: 'start regular device update' });
316
346
  if (this.ignoreBike && this.ignoreHrm && this.ignorePower)
317
347
  return;
318
348
  const ivSync = setInterval(() => {
@@ -510,7 +540,7 @@ class KettlerRacerAdapter extends Device_1.default {
510
540
  }));
511
541
  }
512
542
  waitForOpened() {
513
- return utils_1.runWithRetries(() => {
543
+ return (0, utils_1.runWithRetries)(() => {
514
544
  return new Promise((resolve, reject) => {
515
545
  try {
516
546
  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;
@@ -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
  };
@@ -187,5 +199,5 @@ class KettlerRacerProtocol extends DeviceProtocol_1.default {
187
199
  return this.state === ScanState.SCANNING;
188
200
  }
189
201
  }
190
- exports.KettlerRacerProtocol = KettlerRacerProtocol;
202
+ exports.default = KettlerRacerProtocol;
191
203
  DeviceRegistry_1.default.register(new KettlerRacerProtocol());
@@ -1,15 +1,28 @@
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
+ });
2
14
  var __importStar = (this && this.__importStar) || function (mod) {
3
15
  if (mod && mod.__esModule) return mod;
4
16
  var result = {};
5
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
6
- result["default"] = mod;
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);
7
19
  return result;
8
20
  };
9
21
  var __importDefault = (this && this.__importDefault) || function (mod) {
10
22
  return (mod && mod.__esModule) ? mod : { "default": mod };
11
23
  };
12
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.Simulator = void 0;
13
26
  const DeviceProtocol_1 = __importStar(require("../DeviceProtocol"));
14
27
  const DeviceRegistry_1 = __importDefault(require("../DeviceRegistry"));
15
28
  const Device_1 = __importDefault(require("../Device"));
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RouteType = void 0;
3
4
  var RouteType;
4
5
  (function (RouteType) {
5
6
  RouteType["FREE_RIDE"] = "free ride";
package/lib/types/user.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Gender = void 0;
3
4
  var Gender;
4
5
  (function (Gender) {
5
6
  Gender["MALE"] = "M";
package/lib/utils.js CHANGED
@@ -9,9 +9,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.sleep = (ms) => {
12
+ exports.Queue = exports.hexstr = exports.intVal = exports.floatVal = exports.runWithRetries = exports.sleep = void 0;
13
+ const sleep = (ms) => {
13
14
  return new Promise(resolve => setTimeout(resolve, ms));
14
15
  };
16
+ exports.sleep = sleep;
15
17
  function runWithRetries(fn, maxRetries, timeBetween) {
16
18
  return new Promise((resolve, reject) => {
17
19
  let retries = 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "incyclist-devices",
3
- "version": "1.4.14",
3
+ "version": "1.4.15",
4
4
  "dependencies": {
5
5
  "@serialport/parser-byte-length": "^9.0.1",
6
6
  "@serialport/parser-delimiter": "^9.0.1",