incyclist-devices 1.4.97 → 1.4.98
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/ant/antfe/AntFEAdapter.d.ts +10 -5
- package/lib/ant/antfe/AntFEAdapter.js +52 -11
- package/lib/ble/fm.js +2 -2
- package/package.json +1 -1
|
@@ -70,9 +70,14 @@ export default class AntFEAdapter extends AntAdapter {
|
|
|
70
70
|
startWorker(): void;
|
|
71
71
|
stopWorker(): void;
|
|
72
72
|
sendFromQueue(): void;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
sendUserConfigurationNR(userWeight: any, bikeWeight: any, wheelDiameter: any, gearRatio: any): void;
|
|
74
|
+
sendUserConfiguration(userWeight: any, bikeWeight: any, wheelDiameter: any, gearRatio: any, withoutResponse?: boolean): Promise<unknown>;
|
|
75
|
+
sendBasicResistanceNR(resistance: any): void;
|
|
76
|
+
sendBasicResistance(resistance: any, withoutResponse?: boolean): Promise<unknown>;
|
|
77
|
+
sendTargetPowerNR(power: any): void;
|
|
78
|
+
sendTargetPower(power: any, withoutResponse?: boolean): Promise<unknown>;
|
|
79
|
+
sendWindResistanceNR(windCoeff: any, windSpeed: any, draftFactor: any): void;
|
|
80
|
+
sendWindResistance(windCoeff: any, windSpeed: any, draftFactor: any, withoutResponse?: boolean): Promise<unknown>;
|
|
81
|
+
sendTrackResistanceNR(slope: any, rrCoeff?: any): void;
|
|
82
|
+
sendTrackResistance(slope: any, rrCoeff?: any, withoutResponse?: boolean): Promise<unknown>;
|
|
78
83
|
}
|
|
@@ -20,12 +20,16 @@ const ant_fe_st_mode_1 = __importDefault(require("./ant-fe-st-mode"));
|
|
|
20
20
|
const ant_fe_erg_mode_1 = __importDefault(require("./ant-fe-erg-mode"));
|
|
21
21
|
const ant_fe_adv_st_mode_1 = __importDefault(require("./ant-fe-adv-st-mode"));
|
|
22
22
|
const hex = (v) => Math.abs(v).toString(16).toUpperCase();
|
|
23
|
-
const TIMEOUT_ACK =
|
|
23
|
+
const TIMEOUT_ACK = 1000;
|
|
24
24
|
const TIMEOUT_START = 10000;
|
|
25
25
|
const TIMEOUT_ATTACH = 3000;
|
|
26
26
|
const DEFAULT_USER_WEIGHT = 75;
|
|
27
27
|
const DEFAULT_BIKE_WEIGHT = 10;
|
|
28
28
|
const DEFAULT_BIKE_WEIGHT_MOUNTAIN = 14.5;
|
|
29
|
+
class MockLogger {
|
|
30
|
+
log(...args) { console.log('~~~~~Ant:', ...args); }
|
|
31
|
+
logEvent(event) { console.log('~~~~~Ant:' + event.message, event); }
|
|
32
|
+
}
|
|
29
33
|
class AntFEAdapter extends AntAdapter_1.default {
|
|
30
34
|
constructor(DeviceID, port, stick, protocol) {
|
|
31
35
|
super(protocol);
|
|
@@ -182,7 +186,7 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
182
186
|
return;
|
|
183
187
|
let distance = 0;
|
|
184
188
|
if (this.distanceInternal !== undefined && bikeData.distanceInternal !== undefined) {
|
|
185
|
-
distance =
|
|
189
|
+
distance = bikeData.distanceInternal - this.distanceInternal;
|
|
186
190
|
}
|
|
187
191
|
if (bikeData.distanceInternal !== undefined)
|
|
188
192
|
this.distanceInternal = bikeData.distanceInternal;
|
|
@@ -334,19 +338,21 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
334
338
|
this.logger.logEvent({ message: 'send bike update requested', update, request });
|
|
335
339
|
try {
|
|
336
340
|
const isReset = (!request || request.reset || Object.keys(request).length === 0);
|
|
341
|
+
if (isReset)
|
|
342
|
+
this.sendTrackResistanceNR(0);
|
|
337
343
|
if (update.slope !== undefined) {
|
|
338
|
-
|
|
344
|
+
this.sendTrackResistanceNR(update.slope);
|
|
339
345
|
}
|
|
340
346
|
if (update.targetPower !== undefined) {
|
|
341
|
-
|
|
347
|
+
this.sendTargetPowerNR(update.targetPower);
|
|
342
348
|
}
|
|
343
349
|
else if (request.maxPower !== undefined) {
|
|
344
350
|
if (this.data.power && this.data.power > request.maxPower)
|
|
345
|
-
|
|
351
|
+
this.sendTargetPowerNR(request.maxPower);
|
|
346
352
|
}
|
|
347
353
|
else if (request.minPower !== undefined) {
|
|
348
354
|
if (this.data.power && this.data.power < request.minPower)
|
|
349
|
-
|
|
355
|
+
this.sendTargetPowerNR(request.minPower);
|
|
350
356
|
}
|
|
351
357
|
}
|
|
352
358
|
catch (err) {
|
|
@@ -436,7 +442,10 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
436
442
|
this.stick.write(msg);
|
|
437
443
|
}
|
|
438
444
|
}
|
|
439
|
-
|
|
445
|
+
sendUserConfigurationNR(userWeight, bikeWeight, wheelDiameter, gearRatio) {
|
|
446
|
+
this.sendUserConfiguration(userWeight, bikeWeight, wheelDiameter, gearRatio, true);
|
|
447
|
+
}
|
|
448
|
+
sendUserConfiguration(userWeight, bikeWeight, wheelDiameter, gearRatio, withoutResponse = false) {
|
|
440
449
|
return new Promise((resolve, reject) => {
|
|
441
450
|
if (!this.connected)
|
|
442
451
|
reject(new Error('not connected'));
|
|
@@ -472,6 +481,10 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
472
481
|
payload.push(gr & 0xFF);
|
|
473
482
|
const Messages = this.protocol.getAnt().Messages;
|
|
474
483
|
let msg = Messages.acknowledgedData(payload);
|
|
484
|
+
if (withoutResponse) {
|
|
485
|
+
this.send(msg, logStr);
|
|
486
|
+
return resolve(true);
|
|
487
|
+
}
|
|
475
488
|
this.send(msg, logStr, (res, err) => {
|
|
476
489
|
if (err)
|
|
477
490
|
return reject(err);
|
|
@@ -479,7 +492,10 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
479
492
|
});
|
|
480
493
|
});
|
|
481
494
|
}
|
|
482
|
-
|
|
495
|
+
sendBasicResistanceNR(resistance) {
|
|
496
|
+
this.sendBasicResistance(resistance, true);
|
|
497
|
+
}
|
|
498
|
+
sendBasicResistance(resistance, withoutResponse = false) {
|
|
483
499
|
return new Promise((resolve, reject) => {
|
|
484
500
|
if (!this.connected)
|
|
485
501
|
reject(new Error('not connected'));
|
|
@@ -500,6 +516,10 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
500
516
|
payload.push(res & 0xFF);
|
|
501
517
|
const Messages = this.protocol.getAnt().Messages;
|
|
502
518
|
let msg = Messages.acknowledgedData(payload);
|
|
519
|
+
if (withoutResponse) {
|
|
520
|
+
this.send(msg, logStr);
|
|
521
|
+
return resolve(true);
|
|
522
|
+
}
|
|
503
523
|
this.send(msg, logStr, (res, err) => {
|
|
504
524
|
if (err)
|
|
505
525
|
return reject(err);
|
|
@@ -507,7 +527,10 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
507
527
|
});
|
|
508
528
|
});
|
|
509
529
|
}
|
|
510
|
-
|
|
530
|
+
sendTargetPowerNR(power) {
|
|
531
|
+
this.sendTargetPower(power, true);
|
|
532
|
+
}
|
|
533
|
+
sendTargetPower(power, withoutResponse = false) {
|
|
511
534
|
return new Promise((resolve, reject) => {
|
|
512
535
|
if (!this.connected)
|
|
513
536
|
reject(new Error('not connected'));
|
|
@@ -528,6 +551,10 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
528
551
|
payload.push((p >> 8) & 0xFF);
|
|
529
552
|
const Messages = this.protocol.getAnt().Messages;
|
|
530
553
|
let msg = Messages.acknowledgedData(payload);
|
|
554
|
+
if (withoutResponse) {
|
|
555
|
+
this.send(msg, logStr);
|
|
556
|
+
return resolve(true);
|
|
557
|
+
}
|
|
531
558
|
this.send(msg, logStr, (res, err) => {
|
|
532
559
|
if (err)
|
|
533
560
|
return reject(err);
|
|
@@ -535,7 +562,10 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
535
562
|
});
|
|
536
563
|
});
|
|
537
564
|
}
|
|
538
|
-
|
|
565
|
+
sendWindResistanceNR(windCoeff, windSpeed, draftFactor) {
|
|
566
|
+
this.sendWindResistance(windCoeff, windSpeed, draftFactor, true);
|
|
567
|
+
}
|
|
568
|
+
sendWindResistance(windCoeff, windSpeed, draftFactor, withoutResponse = false) {
|
|
539
569
|
return new Promise((resolve, reject) => {
|
|
540
570
|
if (!this.connected)
|
|
541
571
|
reject(new Error('not connected'));
|
|
@@ -566,6 +596,10 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
566
596
|
payload.push(df & 0xFF);
|
|
567
597
|
const Messages = this.protocol.getAnt().Messages;
|
|
568
598
|
let msg = Messages.acknowledgedData(payload);
|
|
599
|
+
if (withoutResponse) {
|
|
600
|
+
this.send(msg, logStr);
|
|
601
|
+
return resolve(true);
|
|
602
|
+
}
|
|
569
603
|
this.send(msg, logStr, (res, err) => {
|
|
570
604
|
if (err)
|
|
571
605
|
return reject(err);
|
|
@@ -573,7 +607,10 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
573
607
|
});
|
|
574
608
|
});
|
|
575
609
|
}
|
|
576
|
-
|
|
610
|
+
sendTrackResistanceNR(slope, rrCoeff) {
|
|
611
|
+
this.sendTrackResistance(slope, rrCoeff, true);
|
|
612
|
+
}
|
|
613
|
+
sendTrackResistance(slope, rrCoeff, withoutResponse = false) {
|
|
577
614
|
return new Promise((resolve, reject) => {
|
|
578
615
|
if (!this.connected)
|
|
579
616
|
reject(new Error('not connected'));
|
|
@@ -600,6 +637,10 @@ class AntFEAdapter extends AntAdapter_1.default {
|
|
|
600
637
|
payload.push(rr & 0xFF);
|
|
601
638
|
const Messages = this.protocol.getAnt().Messages;
|
|
602
639
|
let msg = Messages.acknowledgedData(payload);
|
|
640
|
+
if (withoutResponse) {
|
|
641
|
+
this.send(msg, logStr);
|
|
642
|
+
return resolve(true);
|
|
643
|
+
}
|
|
603
644
|
this.send(msg, logStr, (res, err) => {
|
|
604
645
|
if (err)
|
|
605
646
|
return reject(err);
|
package/lib/ble/fm.js
CHANGED
|
@@ -251,8 +251,8 @@ class BleFitnessMachineDevice extends ble_device_1.BleDevice {
|
|
|
251
251
|
this.data.totalDistance = (dvHigh << 8) + dvLow;
|
|
252
252
|
}
|
|
253
253
|
if (flags & IndoorBikeDataFlag.ResistanceLevelPresent) {
|
|
254
|
-
this.data.resistanceLevel = data.
|
|
255
|
-
offset +=
|
|
254
|
+
this.data.resistanceLevel = data.readInt16LE(offset);
|
|
255
|
+
offset += 2;
|
|
256
256
|
}
|
|
257
257
|
if (flags & IndoorBikeDataFlag.InstantaneousPowerPresent) {
|
|
258
258
|
this.data.instantaneousPower = data.readInt16LE(offset);
|