incyclist-devices 1.4.6 → 1.4.7

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/Device.d.ts CHANGED
@@ -61,6 +61,7 @@ export default class DeviceAdapterBase implements DeviceAdapter {
61
61
  getPort(): string;
62
62
  getProtocol(): DeviceProtocol;
63
63
  getProtocolName(): string | undefined;
64
+ setCyclingMode(mode: CyclingMode | string, settings?: any): void;
64
65
  setIgnoreHrm(ignore: any): void;
65
66
  setIgnorePower(ignore: any): void;
66
67
  setIgnoreBike(ignore: any): void;
package/lib/Device.js CHANGED
@@ -18,6 +18,7 @@ class DeviceAdapterBase {
18
18
  getProtocolName() {
19
19
  return this.protocol ? this.protocol.getName() : undefined;
20
20
  }
21
+ setCyclingMode(mode, settings) { }
21
22
  setIgnoreHrm(ignore) { }
22
23
  setIgnorePower(ignore) { }
23
24
  setIgnoreBike(ignore) { }
@@ -99,6 +99,11 @@ class DaumClassicAdapter extends DaumAdapter_1.default {
99
99
  yield this.getBike().setPerson(user);
100
100
  startState.setPerson = true;
101
101
  }
102
+ if (!startState.setBikeType) {
103
+ const bikeType = this.getCyclingMode().getSetting('bikeType') || 'race';
104
+ yield this.getBike().setBikeType(bikeType.toLowerCase());
105
+ startState.setBikeType = true;
106
+ }
102
107
  if (!startState.startProg) {
103
108
  yield this.getBike().startProg();
104
109
  startState.startProg = true;
@@ -89,8 +89,10 @@ class DaumPremiumDevice extends DaumAdapter_1.default {
89
89
  const bikeType = this.getCyclingMode().getSetting('bikeType');
90
90
  if (!info.upload)
91
91
  info.upload = yield this.bike.programUpload(bikeType, route, props.onStatusUpdate);
92
- if (!info.started)
93
- info.started = yield this.bike.startProgram(route.programId);
92
+ if (!info.started) {
93
+ const programId = route ? route.programId : 0;
94
+ info.started = yield this.bike.startProgram(programId);
95
+ }
94
96
  }
95
97
  if (!info.person && this.getCyclingMode().getModeProperty('setPersonSupport')) {
96
98
  info.person = yield this.bike.setPerson(user);
@@ -1,5 +1,5 @@
1
1
  /// <reference types="node" />
2
- import { ReservedCommands, BikeType } from './utils';
2
+ import { ReservedCommands } from './utils';
3
3
  import { Queue } from '../../utils';
4
4
  import { EventLogger } from 'gd-eventlog';
5
5
  import { User } from "../../types/user";
@@ -96,10 +96,10 @@ declare class Daum8i {
96
96
  getPower(power: any): Promise<number>;
97
97
  setPerson(person: User): Promise<boolean>;
98
98
  programUploadInit(): Promise<boolean>;
99
- programUploadStart(bikeType: BikeType, route: Route): Promise<Uint8Array>;
99
+ programUploadStart(bikeType: string, route?: Route): Promise<Uint8Array>;
100
100
  programUploadSendBlock(epp: Uint8Array, offset: number): Promise<boolean>;
101
101
  programUploadDone(): Promise<boolean>;
102
- programUpload(bikeType: BikeType, route: Route, onStatusUpdate?: OnDeviceStartCallback): Promise<boolean>;
102
+ programUpload(bikeType: string, route: Route, onStatusUpdate?: OnDeviceStartCallback): Promise<boolean>;
103
103
  startProgram(programId?: number): Promise<boolean>;
104
104
  setGear(gear: any): Promise<number>;
105
105
  getGear(): Promise<number>;
@@ -710,7 +710,8 @@ class Daum8i {
710
710
  });
711
711
  }
712
712
  setPerson(person) {
713
- this.logger.logEvent({ message: 'setPerson() request' });
713
+ const { sex, age, length, weight } = person;
714
+ this.logger.logEvent({ message: 'setPerson() request', sex, age, length, weight });
714
715
  return this.sendReservedDaum8iCommand(utils_1.ReservedCommands.PERSON_SET, 'BF', (0, utils_1.getPersonData)(person))
715
716
  .then((res) => {
716
717
  const buffer = Buffer.from(res);
@@ -735,10 +736,12 @@ class Daum8i {
735
736
  }
736
737
  programUploadStart(bikeType, route) {
737
738
  const payload = Buffer.alloc(40);
738
- const epp = (0, utils_1.routeToEpp)(route);
739
+ const epp = route ? (0, utils_1.routeToEpp)(route) : undefined;
740
+ const eppLength = epp ? epp.length : 0;
741
+ const bikeTypeVal = (0, utils_1.getBikeType)(bikeType);
739
742
  payload.writeInt32LE(0, 0);
740
- payload.writeInt8(bikeType, 4);
741
- payload.writeInt8(bikeType, 5);
743
+ payload.writeInt8(bikeTypeVal, 4);
744
+ payload.writeInt8(0, 5);
742
745
  payload.writeInt16LE(0, 6);
743
746
  payload.writeInt32LE(0, 8);
744
747
  payload.writeInt32LE(0, 12);
@@ -749,8 +752,8 @@ class Daum8i {
749
752
  payload.writeInt16LE(0, 28);
750
753
  payload.writeInt16LE(0, 30);
751
754
  payload.writeInt32LE(7, 32);
752
- payload.writeInt32LE(epp.length, 36);
753
- this.logger.logEvent({ message: 'programUploadStart() request' });
755
+ payload.writeInt32LE(eppLength, 36);
756
+ this.logger.logEvent({ message: 'programUploadStart() request', bikeType, length: eppLength });
754
757
  return this.sendReservedDaum8iCommand(utils_1.ReservedCommands.PROGRAM_LIST_NEW_PROGRAM, 'BF', payload)
755
758
  .then((res) => {
756
759
  const buffer = Buffer.from(res);
@@ -801,22 +804,32 @@ class Daum8i {
801
804
  }
802
805
  programUpload(bikeType, route, onStatusUpdate) {
803
806
  return __awaiter(this, void 0, void 0, function* () {
804
- yield this.programUploadInit();
805
- const epp = yield this.programUploadStart(bikeType, route);
806
- let success = true;
807
- let done = false;
808
- let offset = 0;
809
- if (onStatusUpdate)
810
- onStatusUpdate(0, epp.length);
811
- while (success && !done) {
812
- success = yield this.programUploadSendBlock(epp, offset);
813
- offset += MAX_DATA_BLOCK_SIZE;
814
- done = offset >= epp.length;
815
- if (onStatusUpdate)
816
- onStatusUpdate(done ? epp.length : offset, epp.length);
807
+ try {
808
+ yield this.programUploadInit();
809
+ const epp = yield this.programUploadStart(bikeType, route);
810
+ if (epp) {
811
+ let success = true;
812
+ let done = false;
813
+ let offset = 0;
814
+ if (onStatusUpdate)
815
+ onStatusUpdate(0, epp.length);
816
+ while (success && !done) {
817
+ success = yield this.programUploadSendBlock(epp, offset);
818
+ offset += MAX_DATA_BLOCK_SIZE;
819
+ done = offset >= epp.length;
820
+ if (onStatusUpdate)
821
+ onStatusUpdate(done ? epp.length : offset, epp.length);
822
+ }
823
+ if (done) {
824
+ return yield this.programUploadDone();
825
+ }
826
+ }
827
+ else {
828
+ return yield this.programUploadDone();
829
+ }
817
830
  }
818
- if (done) {
819
- return yield this.programUploadDone();
831
+ catch (err) {
832
+ console.log('~~~ err', err);
820
833
  }
821
834
  return false;
822
835
  });
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
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;
7
- const user_1 = require("../../types/user");
8
7
  const win32filetime_1 = __importDefault(require("win32filetime"));
9
8
  const sum = (arr) => arr.reduce((a, b) => a + b, 0);
10
9
  function bin2esc(arr) {
@@ -14,29 +13,29 @@ function bin2esc(arr) {
14
13
  const res = [];
15
14
  arr.forEach(v => {
16
15
  switch (v) {
17
- case 18:
18
- res.push(34);
19
- res.push(18);
16
+ case 0x12:
17
+ res.push(0x22);
18
+ res.push(0x12);
20
19
  break;
21
- case 34:
22
- res.push(34);
23
- res.push(34);
20
+ case 0x22:
21
+ res.push(0x22);
22
+ res.push(0x22);
24
23
  break;
25
- case 1:
26
- res.push(34);
27
- res.push(17);
24
+ case 0x01:
25
+ res.push(0x22);
26
+ res.push(0x11);
28
27
  break;
29
- case 23:
30
- res.push(34);
31
- res.push(39);
28
+ case 0x17:
29
+ res.push(0x22);
30
+ res.push(0x27);
32
31
  break;
33
- case 6:
34
- res.push(34);
35
- res.push(32);
32
+ case 0x06:
33
+ res.push(0x22);
34
+ res.push(0x16);
36
35
  break;
37
- case 21:
38
- res.push(34);
39
- res.push(37);
36
+ case 0x15:
37
+ res.push(0x22);
38
+ res.push(0x25);
40
39
  break;
41
40
  default:
42
41
  res.push(v);
@@ -55,26 +54,29 @@ function esc2bin(arr) {
55
54
  if (escaped) {
56
55
  escaped = false;
57
56
  switch (v) {
58
- case 17:
59
- res.push(1);
57
+ case 0x11:
58
+ res.push(0x1);
60
59
  return;
61
- case 39:
62
- res.push(23);
60
+ case 0x27:
61
+ res.push(0x17);
63
62
  return;
64
- case 22:
65
- res.push(6);
63
+ case 0x16:
64
+ res.push(0x6);
66
65
  return;
67
- case 37:
68
- res.push(21);
66
+ case 0x25:
67
+ res.push(0x15);
69
68
  return;
70
- case 18:
71
- res.push(18);
69
+ case 0x12:
70
+ res.push(0x12);
71
+ return;
72
+ case 0x22:
73
+ res.push(0x22);
72
74
  return;
73
75
  default: res.push(v);
74
76
  }
75
77
  return;
76
78
  }
77
- if (v === 34) {
79
+ if (v === 0x22) {
78
80
  escaped = true;
79
81
  }
80
82
  else {
@@ -357,13 +359,13 @@ function getPersonData(user) {
357
359
  buffer.writeUInt8(0, offset);
358
360
  offset += 1;
359
361
  }
360
- buffer.writeInt32LE(user.sex === user_1.Gender.FEMALE ? 2 : 1, offset);
362
+ buffer.writeInt32LE(1, offset);
361
363
  offset += 4;
362
- buffer.writeInt32LE(user.age !== undefined ? user.age : 1, offset);
364
+ buffer.writeInt32LE(1, offset);
363
365
  offset += 4;
364
- buffer.writeInt32LE(user.length !== undefined ? user.length : 175, offset);
366
+ buffer.writeInt32LE(175, offset);
365
367
  offset += 4;
366
- buffer.writeFloatLE(user.weight !== undefined ? user.weight : 70, offset);
368
+ buffer.writeFloatLE(70, offset);
367
369
  offset += 4;
368
370
  buffer.writeFloatLE(0, offset);
369
371
  offset += 4;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "incyclist-devices",
3
- "version": "1.4.6",
3
+ "version": "1.4.7",
4
4
  "dependencies": {
5
5
  "@serialport/parser-byte-length": "^9.0.1",
6
6
  "@serialport/parser-delimiter": "^9.0.1",