incyclist-devices 2.0.38 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/lib/adapters.d.ts +1 -1
  2. package/lib/antv2/adapter-factory.d.ts +4 -13
  3. package/lib/antv2/adapter.d.ts +16 -33
  4. package/lib/antv2/adapter.js +68 -112
  5. package/lib/antv2/ant-interface.d.ts +3 -11
  6. package/lib/antv2/ant-interface.js +1 -1
  7. package/lib/antv2/base/adapter.d.ts +62 -0
  8. package/lib/antv2/base/adapter.js +360 -0
  9. package/lib/antv2/base/ant-interface.d.ts +35 -0
  10. package/lib/antv2/base/ant-interface.js +285 -0
  11. package/lib/antv2/base/binding.d.ts +13 -0
  12. package/lib/antv2/base/binding.js +27 -0
  13. package/lib/antv2/cad/adapter.d.ts +10 -0
  14. package/lib/antv2/cad/adapter.js +25 -0
  15. package/lib/antv2/cad/index.d.ts +2 -0
  16. package/lib/antv2/cad/index.js +7 -0
  17. package/lib/antv2/consts.d.ts +2 -0
  18. package/lib/antv2/consts.js +5 -0
  19. package/lib/antv2/factories/adapter-factory.d.ts +14 -0
  20. package/lib/antv2/factories/adapter-factory.js +65 -0
  21. package/lib/antv2/factories/sensor-factory.d.ts +5 -0
  22. package/lib/antv2/factories/sensor-factory.js +22 -0
  23. package/lib/antv2/fe/adapter.d.ts +25 -26
  24. package/lib/antv2/fe/adapter.js +212 -218
  25. package/lib/antv2/hr/adapter.d.ts +6 -14
  26. package/lib/antv2/hr/adapter.js +7 -55
  27. package/lib/antv2/hr copy/adapter.d.ts +11 -0
  28. package/lib/antv2/hr copy/adapter.js +30 -0
  29. package/lib/antv2/hr copy/index.d.ts +2 -0
  30. package/lib/antv2/hr copy/index.js +7 -0
  31. package/lib/antv2/index.d.ts +5 -4
  32. package/lib/antv2/index.js +4 -2
  33. package/lib/antv2/pwr/adapter.d.ts +9 -29
  34. package/lib/antv2/pwr/adapter.js +20 -130
  35. package/lib/antv2/types.d.ts +23 -3
  36. package/lib/base/adpater.d.ts +42 -45
  37. package/lib/base/adpater.js +144 -110
  38. package/lib/base/consts.d.ts +4 -0
  39. package/lib/base/consts.js +9 -0
  40. package/lib/ble/adapter-factory.d.ts +4 -4
  41. package/lib/ble/base/adapter.d.ts +6 -24
  42. package/lib/ble/base/adapter.js +4 -94
  43. package/lib/ble/ble-interface.d.ts +2 -3
  44. package/lib/ble/cp/adapter.d.ts +6 -11
  45. package/lib/ble/cp/adapter.js +9 -12
  46. package/lib/ble/elite/adapter.d.ts +8 -8
  47. package/lib/ble/elite/adapter.js +6 -2
  48. package/lib/ble/fm/adapter.d.ts +11 -11
  49. package/lib/ble/fm/adapter.js +26 -20
  50. package/lib/ble/hr/adapter.d.ts +3 -4
  51. package/lib/ble/hr/adapter.js +2 -2
  52. package/lib/ble/tacx/adapter.d.ts +2 -3
  53. package/lib/ble/tacx/adapter.js +8 -8
  54. package/lib/ble/types.d.ts +1 -2
  55. package/lib/ble/wahoo/adapter.d.ts +2 -2
  56. package/lib/ble/wahoo/adapter.js +6 -6
  57. package/lib/ble/wahoo/comms.js +16 -16
  58. package/lib/factories/adapters.d.ts +7 -0
  59. package/lib/factories/adapters.js +49 -0
  60. package/lib/factories/index.d.ts +3 -0
  61. package/lib/factories/index.js +10 -0
  62. package/lib/factories/interfaces.d.ts +7 -0
  63. package/lib/factories/interfaces.js +27 -0
  64. package/lib/index.d.ts +8 -9
  65. package/lib/index.js +5 -8
  66. package/lib/interfaces.d.ts +1 -1
  67. package/lib/modes/ant-fe-adv-st-mode.d.ts +12 -0
  68. package/lib/modes/ant-fe-adv-st-mode.js +83 -0
  69. package/lib/modes/antble-erg.d.ts +31 -0
  70. package/lib/modes/antble-erg.js +28 -0
  71. package/lib/modes/antble-smarttrainer.d.ts +23 -0
  72. package/lib/modes/antble-smarttrainer.js +65 -0
  73. package/lib/modes/base.d.ts +29 -0
  74. package/lib/modes/{cycling-mode.js → base.js} +23 -26
  75. package/lib/modes/daum-classic-standard.d.ts +17 -0
  76. package/lib/modes/daum-classic-standard.js +54 -0
  77. package/lib/modes/daum-erg.d.ts +49 -0
  78. package/lib/{serial/daum/ERGCyclingMode.js → modes/daum-erg.js} +45 -73
  79. package/lib/modes/daum-power.d.ts +5 -0
  80. package/lib/{serial/daum/DaumPowerMeterCyclingMode.js → modes/daum-power.js} +1 -10
  81. package/lib/modes/daum-premium-standard.d.ts +24 -0
  82. package/lib/{serial/daum/premium/modes/daum-classic.js → modes/daum-premium-standard.js} +26 -38
  83. package/lib/modes/daum-smarttrainer.d.ts +83 -0
  84. package/lib/{serial/daum/SmartTrainerCyclingMode.js → modes/daum-smarttrainer.js} +23 -26
  85. package/lib/modes/kettler-erg.d.ts +44 -0
  86. package/lib/{serial/kettler/ergo-racer/modes/erg.js → modes/kettler-erg.js} +12 -23
  87. package/lib/modes/power-base.d.ts +28 -3
  88. package/lib/modes/power-base.js +184 -7
  89. package/lib/modes/power-meter.d.ts +11 -16
  90. package/lib/modes/power-meter.js +15 -54
  91. package/lib/modes/simulator.d.ts +38 -10
  92. package/lib/modes/simulator.js +14 -46
  93. package/lib/modes/{cycling-mode.d.ts → types.d.ts} +22 -30
  94. package/lib/modes/types.js +56 -0
  95. package/lib/serial/SinglePathScanner.d.ts +17 -0
  96. package/lib/serial/SinglePathScanner.js +87 -0
  97. package/lib/serial/adapter-factory.d.ts +8 -6
  98. package/lib/serial/adapter.d.ts +6 -11
  99. package/lib/serial/adapter.js +5 -2
  100. package/lib/serial/base/adapter.d.ts +17 -0
  101. package/lib/serial/base/adapter.js +67 -0
  102. package/lib/serial/base/comms.d.ts +62 -0
  103. package/lib/serial/base/comms.js +280 -0
  104. package/lib/serial/base/serial-interface.d.ts +36 -0
  105. package/lib/serial/base/serial-interface.js +288 -0
  106. package/lib/serial/base/serial-scanner.d.ts +16 -0
  107. package/lib/serial/base/serial-scanner.js +87 -0
  108. package/lib/serial/base/serialport.d.ts +17 -0
  109. package/lib/serial/base/serialport.js +87 -0
  110. package/lib/serial/comms.d.ts +2 -2
  111. package/lib/serial/daum/DaumAdapter.d.ts +26 -35
  112. package/lib/serial/daum/DaumAdapter.js +214 -161
  113. package/lib/serial/daum/classic/PROTOCOL_NAME.d.ts +2 -0
  114. package/lib/serial/daum/classic/PROTOCOL_NAME.js +5 -0
  115. package/lib/serial/daum/classic/adapter.d.ts +13 -26
  116. package/lib/serial/daum/classic/adapter.js +72 -176
  117. package/lib/serial/daum/classic/comms.d.ts +21 -17
  118. package/lib/serial/daum/classic/comms.js +41 -14
  119. package/lib/serial/daum/classic/consts.d.ts +2 -0
  120. package/lib/serial/daum/classic/consts.js +5 -0
  121. package/lib/serial/daum/classic/mock.d.ts +4 -0
  122. package/lib/serial/daum/classic/mock.js +18 -7
  123. package/lib/serial/daum/classic/types.d.ts +8 -10
  124. package/lib/serial/daum/classic/utils.d.ts +1 -2
  125. package/lib/serial/daum/consts.d.ts +0 -0
  126. package/lib/serial/daum/consts.js +0 -0
  127. package/lib/serial/daum/premium/adapter.d.ts +17 -15
  128. package/lib/serial/daum/premium/adapter.js +86 -109
  129. package/lib/serial/daum/premium/comms.d.ts +7 -7
  130. package/lib/serial/daum/premium/comms.js +25 -16
  131. package/lib/serial/daum/premium/mock.d.ts +5 -1
  132. package/lib/serial/daum/premium/mock.js +17 -7
  133. package/lib/serial/daum/premium/types.d.ts +32 -17
  134. package/lib/serial/daum/premium/types.js +8 -8
  135. package/lib/serial/daum/premium/utils.d.ts +2 -3
  136. package/lib/serial/daum/premium/utils.js +3 -3
  137. package/lib/serial/daum/types.d.ts +14 -0
  138. package/lib/serial/daum/types.js +13 -0
  139. package/lib/serial/factories/adapter-factory.d.ts +14 -0
  140. package/lib/serial/factories/adapter-factory.js +30 -0
  141. package/lib/serial/index.d.ts +8 -5
  142. package/lib/serial/index.js +15 -15
  143. package/lib/serial/kettler/comms.d.ts +1 -1
  144. package/lib/serial/kettler/ergo-racer/adapter.d.ts +11 -16
  145. package/lib/serial/kettler/ergo-racer/adapter.js +10 -12
  146. package/lib/serial/kettler/types.d.ts +8 -0
  147. package/lib/serial/kettler/types.js +2 -0
  148. package/lib/serial/serial-interface.d.ts +2 -32
  149. package/lib/serial/serial-interface.js +4 -78
  150. package/lib/serial/serial-scanner.d.ts +16 -0
  151. package/lib/serial/serial-scanner.js +87 -0
  152. package/lib/serial/serialport.d.ts +1 -13
  153. package/lib/serial/types.d.ts +45 -0
  154. package/lib/serial/types.js +9 -0
  155. package/lib/simulator/Simulator.d.ts +13 -19
  156. package/lib/simulator/Simulator.js +10 -51
  157. package/lib/types/Command.d.ts +8 -0
  158. package/lib/types/Command.js +2 -0
  159. package/lib/types/adapter.d.ts +34 -24
  160. package/lib/types/command.d.ts +0 -8
  161. package/lib/types/command.js +0 -2
  162. package/lib/types/data.d.ts +12 -1
  163. package/lib/types/device.d.ts +8 -23
  164. package/lib/types/device.js +9 -8
  165. package/lib/types/index.d.ts +6 -0
  166. package/lib/types/index.js +22 -0
  167. package/lib/types/route.d.ts +0 -19
  168. package/lib/types/route.js +0 -2
  169. package/lib/types/types.d.ts +8 -0
  170. package/lib/types/types.js +2 -0
  171. package/lib/utils/utils.d.ts +2 -1
  172. package/lib/utils/utils.js +22 -4
  173. package/package.json +3 -3
  174. package/lib/antv2/modes/ant-fe-adv-st-mode.d.ts +0 -9
  175. package/lib/antv2/modes/ant-fe-adv-st-mode.js +0 -51
  176. package/lib/antv2/modes/ant-fe-erg-mode.d.ts +0 -6
  177. package/lib/antv2/modes/ant-fe-erg-mode.js +0 -14
  178. package/lib/antv2/modes/ant-fe-st-mode.d.ts +0 -5
  179. package/lib/antv2/modes/ant-fe-st-mode.js +0 -13
  180. package/lib/modes/ble-erg-mode.d.ts +0 -18
  181. package/lib/modes/ble-erg-mode.js +0 -148
  182. package/lib/modes/ble-st-mode.d.ts +0 -15
  183. package/lib/modes/ble-st-mode.js +0 -96
  184. package/lib/serial/daum/DaumPowerMeterCyclingMode.d.ts +0 -8
  185. package/lib/serial/daum/ERGCyclingMode.d.ts +0 -26
  186. package/lib/serial/daum/SmartTrainerCyclingMode.d.ts +0 -42
  187. package/lib/serial/daum/classic/modes/daum-classic.d.ts +0 -13
  188. package/lib/serial/daum/classic/modes/daum-classic.js +0 -97
  189. package/lib/serial/daum/constants.d.ts +0 -19
  190. package/lib/serial/daum/constants.js +0 -22
  191. package/lib/serial/daum/premium/modes/daum-classic.d.ts +0 -14
  192. package/lib/serial/kettler/ergo-racer/modes/erg.d.ts +0 -25
@@ -12,14 +12,8 @@ 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.ControllableDevice = exports.DEFAULT_PROPS = exports.DEFAULT_USER_WEIGHT = exports.DEFAULT_BIKE_WEIGHT = void 0;
16
15
  const events_1 = __importDefault(require("events"));
17
- exports.DEFAULT_BIKE_WEIGHT = 10;
18
- exports.DEFAULT_USER_WEIGHT = 75;
19
- exports.DEFAULT_PROPS = {
20
- userWeight: exports.DEFAULT_USER_WEIGHT,
21
- bikeWeight: exports.DEFAULT_BIKE_WEIGHT
22
- };
16
+ const consts_1 = require("./consts");
23
17
  class IncyclistDevice extends events_1.default {
24
18
  constructor(settings, props) {
25
19
  super();
@@ -30,24 +24,40 @@ class IncyclistDevice extends events_1.default {
30
24
  this.started = false;
31
25
  this.stopped = false;
32
26
  this.paused = false;
27
+ this.user = {};
28
+ this.data = {};
29
+ this.cyclingMode = this.getDefaultCyclingMode();
33
30
  }
34
- connect() { throw new Error('not implemented'); }
35
- close() { throw new Error('not implemented'); }
36
- check() { throw new Error("Method not implemented."); }
37
- getLogger() { return undefined; }
38
- isControllable() {
39
- return false;
31
+ getLogger() { return this.logger; }
32
+ logEvent(event) {
33
+ if (!this.logger || this.paused)
34
+ return;
35
+ this.logger.logEvent(event);
36
+ const w = global.window;
37
+ if ((w === null || w === void 0 ? void 0 : w.DEVICE_DEBUG) || process.env.BLE_DEBUG || process.env.ANT_DEBUG) {
38
+ const logText = `~~~ ${this.getInterface()}: ${this.logger.getName()}`;
39
+ console.log(logText, event);
40
+ }
40
41
  }
41
- isEqual(settings) { throw new Error("Method not implemented."); }
42
- getCapabilities() { return this.capabilities; }
43
- hasCapability(capability) {
44
- return this.capabilities.find(c => c === capability) !== undefined;
42
+ getName() {
43
+ return this.settings.name;
45
44
  }
46
- addCapability(capability) {
47
- if (!this.capabilities.includes(capability))
48
- this.capabilities.push(capability);
45
+ getID() { throw new Error('not implemented'); }
46
+ getUniqueName() {
47
+ throw new Error("Method not implemented.");
49
48
  }
50
- update() { throw new Error("Method not implemented."); }
49
+ getDisplayName() {
50
+ return this.getName();
51
+ }
52
+ getSettings() {
53
+ return this.settings;
54
+ }
55
+ isSame(adapter) { throw new Error("Method not implemented."); }
56
+ isEqual(settings) { throw new Error("Method not implemented."); }
57
+ getInterface() {
58
+ return typeof this.settings.interface === 'string' ? this.settings.interface : this.settings.interface.getName();
59
+ }
60
+ check() { throw new Error("Method not implemented."); }
51
61
  start(props) { throw new Error("Method not implemented."); }
52
62
  stop() { throw new Error("Method not implemented."); }
53
63
  pause() {
@@ -62,15 +72,32 @@ class IncyclistDevice extends events_1.default {
62
72
  return true;
63
73
  });
64
74
  }
65
- logEvent(event) {
66
- if (!this.logger || this.paused)
67
- return;
68
- this.logger.logEvent(event);
69
- const w = global.window;
70
- if ((w === null || w === void 0 ? void 0 : w.DEVICE_DEBUG) || process.env.BLE_DEBUG || process.env.ANT_DEBUG) {
71
- const logText = '~~~ ' + this.logger.getName();
72
- console.log(logText, event);
75
+ connect() { throw new Error('not implemented'); }
76
+ close() { throw new Error('not implemented'); }
77
+ getControllerInfo() {
78
+ const a = this.constructor;
79
+ const config = a.controllers;
80
+ if (!config)
81
+ return undefined;
82
+ if (config.modes && config.modes.length > 0) {
83
+ if (!config.default)
84
+ config.default = config.modes[0];
85
+ return config;
73
86
  }
87
+ return undefined;
88
+ }
89
+ isControllable() {
90
+ if (!this.getControllerInfo())
91
+ return false;
92
+ return true;
93
+ }
94
+ getCapabilities() { return this.capabilities; }
95
+ hasCapability(capability) {
96
+ return this.capabilities.find(c => c === capability) !== undefined;
97
+ }
98
+ addCapability(capability) {
99
+ if (!this.capabilities.includes(capability))
100
+ this.capabilities.push(capability);
74
101
  }
75
102
  getMaxUpdateFrequency() {
76
103
  return this.updateFrequency;
@@ -78,34 +105,100 @@ class IncyclistDevice extends events_1.default {
78
105
  setMaxUpdateFrequency(value) {
79
106
  this.updateFrequency = value;
80
107
  }
81
- sendUpdate(request) { throw new Error("Method not implemented."); }
82
- getID() { throw new Error('not implemented'); }
83
- getDisplayName() {
84
- return this.getName();
108
+ update() { throw new Error("Method not implemented."); }
109
+ setCyclingMode(mode, settings, sendInitCommands) {
110
+ if (!this.isControllable())
111
+ return;
112
+ let selectedMode;
113
+ if (typeof mode === 'string') {
114
+ const supported = this.getSupportedCyclingModes();
115
+ const CyclingModeClass = supported.find(M => { const m = new M(this); return m.getName() === mode; });
116
+ if (CyclingModeClass) {
117
+ this.cyclingMode = new CyclingModeClass(this, settings);
118
+ return;
119
+ }
120
+ selectedMode = this.getDefaultCyclingMode();
121
+ }
122
+ else {
123
+ selectedMode = mode;
124
+ }
125
+ this.cyclingMode = selectedMode;
126
+ this.cyclingMode.setSettings(settings);
85
127
  }
86
- getName() {
87
- return this.settings.name;
128
+ getSupportedCyclingModes() {
129
+ if (!this.isControllable())
130
+ return [];
131
+ const config = this.getControllerInfo();
132
+ return config.modes;
88
133
  }
89
- getUniqueName() {
134
+ getCyclingMode() {
135
+ if (this.isControllable())
136
+ return this.cyclingMode;
137
+ }
138
+ getDefaultCyclingMode() {
139
+ if (!this.isControllable())
140
+ return;
141
+ const config = this.getControllerInfo();
142
+ const C = config.default;
143
+ try {
144
+ return new C(this);
145
+ }
146
+ catch (err) {
147
+ this.logEvent({ message: 'error', error: err.message, fn: 'getDefaultCyclingMode', stack: err.stack });
148
+ }
149
+ }
150
+ setBikeProps(props) {
151
+ const { user, userWeight } = props || {};
152
+ if (user)
153
+ this.setUser(user);
154
+ if (userWeight)
155
+ this.user.weight = userWeight;
156
+ const keys = Object.keys(props);
157
+ keys.forEach(k => {
158
+ const p = props[k];
159
+ if (p === null)
160
+ delete this.props[k];
161
+ else if (p !== undefined)
162
+ this.props[k] = p;
163
+ });
164
+ }
165
+ sendInitCommands() {
166
+ return __awaiter(this, void 0, void 0, function* () {
167
+ return false;
168
+ });
169
+ }
170
+ sendUpdate(request) {
171
+ if (!this.isControllable())
172
+ return;
90
173
  throw new Error("Method not implemented.");
91
174
  }
92
- getSettings() {
93
- return this.settings;
175
+ setUser(user) {
176
+ this.user = user;
177
+ if (!user.weight)
178
+ this.user.weight = consts_1.DEFAULT_USER_WEIGHT;
94
179
  }
95
- getInterface() {
96
- return typeof this.settings.interface === 'string' ? this.settings.interface : this.settings.interface.getName();
180
+ getUser() {
181
+ return this.user;
97
182
  }
98
- onData(callback) {
99
- this.onDataFn = callback;
183
+ getWeight() {
184
+ const { user = {}, props = consts_1.DEFAULT_PROPS } = this;
185
+ const userWeight = user.weight || props.userWeight || consts_1.DEFAULT_USER_WEIGHT;
186
+ const bikeWeight = props.bikeWeight || consts_1.DEFAULT_BIKE_WEIGHT;
187
+ return userWeight + bikeWeight;
100
188
  }
101
- canSendUpdate() {
189
+ isUpdateWithinFrequency() {
102
190
  const updateFrequency = this.getMaxUpdateFrequency();
103
191
  if (updateFrequency === -1 || updateFrequency === undefined)
104
192
  return true;
105
193
  return (!this.lastUpdate || (Date.now() - this.lastUpdate) > updateFrequency);
106
194
  }
195
+ canEmitData() {
196
+ if (this.paused || this.stopped)
197
+ return false;
198
+ return this.isUpdateWithinFrequency();
199
+ }
107
200
  emitData(data) {
108
- if (!this.canSendUpdate())
201
+ if (!this.canEmitData())
109
202
  return;
110
203
  if (this.onDataFn)
111
204
  this.onDataFn(data);
@@ -121,74 +214,15 @@ class IncyclistDevice extends events_1.default {
121
214
  isPaused() {
122
215
  return this.paused;
123
216
  }
217
+ getData() {
218
+ return this.data;
219
+ }
124
220
  hasDataListeners() {
125
221
  return this.onDataFn || this.listenerCount('data') > 0;
126
222
  }
127
- }
128
- exports.default = IncyclistDevice;
129
- class ControllableDevice extends IncyclistDevice {
130
- constructor(settings, props) {
131
- super(settings, props);
132
- this.cyclingMode = this.getDefaultCyclingMode();
133
- this.user = {};
134
- }
135
- isControllable() {
136
- return true;
137
- }
138
- setUser(user) {
139
- this.user = user;
140
- if (!user.weight)
141
- this.user.weight = exports.DEFAULT_USER_WEIGHT;
142
- }
143
- setBikeProps(props) {
144
- const { user, userWeight } = props || {};
145
- if (user)
146
- this.setUser(user);
147
- if (userWeight)
148
- this.user.weight = userWeight;
149
- const keys = Object.keys(props);
150
- keys.forEach(k => {
151
- const p = props[k];
152
- if (p === null)
153
- delete this.props[k];
154
- else if (p !== undefined)
155
- this.props[k] = p;
156
- });
157
- }
158
- getSupportedCyclingModes() { throw new Error('not implemented'); }
159
- getDefaultCyclingMode() { throw new Error('not implemented'); }
160
- setCyclingMode(mode, settings) {
161
- let selectedMode;
162
- if (typeof mode === 'string') {
163
- const supported = this.getSupportedCyclingModes();
164
- const CyclingModeClass = supported.find(M => { const m = new M(this); return m.getName() === mode; });
165
- if (CyclingModeClass) {
166
- this.cyclingMode = new CyclingModeClass(this, settings);
167
- return;
168
- }
169
- selectedMode = this.getDefaultCyclingMode();
170
- }
171
- else {
172
- selectedMode = mode;
173
- }
174
- this.cyclingMode = selectedMode;
175
- this.cyclingMode.setSettings(settings);
176
- }
177
- sendInitCommands() {
178
- return __awaiter(this, void 0, void 0, function* () {
179
- return true;
180
- });
181
- }
182
- getCyclingMode() {
183
- if (!this.cyclingMode)
184
- this.setCyclingMode(this.getDefaultCyclingMode());
185
- return this.cyclingMode;
186
- }
187
- getWeight() {
188
- const { user = {}, props = exports.DEFAULT_PROPS } = this;
189
- const userWeight = user.weight || props.userWeight || exports.DEFAULT_USER_WEIGHT;
190
- const bikeWeight = props.bikeWeight || exports.DEFAULT_BIKE_WEIGHT;
191
- return userWeight + bikeWeight;
223
+ onData(callback) {
224
+ this.onDataFn = callback;
192
225
  }
193
226
  }
194
- exports.ControllableDevice = ControllableDevice;
227
+ IncyclistDevice.controllers = {};
228
+ exports.default = IncyclistDevice;
@@ -0,0 +1,4 @@
1
+ import { DeviceProperties } from "../types";
2
+ export declare const DEFAULT_BIKE_WEIGHT = 10;
3
+ export declare const DEFAULT_USER_WEIGHT = 75;
4
+ export declare const DEFAULT_PROPS: DeviceProperties;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_PROPS = exports.DEFAULT_USER_WEIGHT = exports.DEFAULT_BIKE_WEIGHT = void 0;
4
+ exports.DEFAULT_BIKE_WEIGHT = 10;
5
+ exports.DEFAULT_USER_WEIGHT = 75;
6
+ exports.DEFAULT_PROPS = {
7
+ userWeight: exports.DEFAULT_USER_WEIGHT,
8
+ bikeWeight: exports.DEFAULT_BIKE_WEIGHT
9
+ };
@@ -1,6 +1,6 @@
1
- import { DeviceProperties } from "../types/device";
2
1
  import BleAdapter from "./base/adapter";
3
2
  import { BleDeviceSettings, BleProtocol } from "./types";
3
+ import { DeviceProperties } from "../types";
4
4
  import { BleComms } from "./base/comms";
5
5
  export interface BleAdapterInfo {
6
6
  protocol: BleProtocol;
@@ -10,7 +10,7 @@ export interface BleAdapterInfo {
10
10
  export default class BleAdapterFactory {
11
11
  static _instance: BleAdapterFactory;
12
12
  implementations: BleAdapterInfo[];
13
- instances: BleAdapter[];
13
+ instances: Array<BleAdapter>;
14
14
  static getInstance(): BleAdapterFactory;
15
15
  constructor();
16
16
  getAdapterInfo(protocol: BleProtocol): BleAdapterInfo;
@@ -22,9 +22,9 @@ export default class BleAdapterFactory {
22
22
  }): void;
23
23
  find(settings?: BleDeviceSettings): BleAdapter;
24
24
  register(protocol: BleProtocol, Adapter: typeof BleAdapter, Comm: typeof BleComms): void;
25
- getAllInstances(): BleAdapter[];
25
+ getAllInstances(): Array<BleAdapter>;
26
26
  getAllSupportedComms(): (typeof BleComms)[];
27
- getAllSupportedAdapters(): (typeof BleAdapter)[];
27
+ getAllSupportedAdapters(): Array<(typeof BleAdapter)>;
28
28
  getAllSupportedServices(): string[];
29
29
  getDeviceClasses(peripheral: any, props?: {
30
30
  protocol?: BleProtocol;
@@ -1,16 +1,12 @@
1
1
  import IncyclistDevice from "../../base/adpater";
2
- import CyclingMode, { IncyclistBikeData } from "../../modes/cycling-mode";
3
- import { Bike } from "../../types/adapter";
4
- import { DeviceData } from "../../types/data";
5
- import { DeviceProperties } from "../../types/device";
6
- import { User } from "../../types/user";
7
2
  import { BleComms } from "./comms";
8
3
  import BleInterface from "../ble-interface";
9
4
  import { BleDeviceProperties, BleDeviceSettings, BleStartProperties } from "../types";
10
- export default class BleAdapter extends IncyclistDevice {
5
+ import { IAdapter, IncyclistBikeData, IncyclistAdapterData, DeviceProperties } from "../../types";
6
+ export default class BleAdapter extends IncyclistDevice<BleDeviceProperties> {
11
7
  ble: BleInterface;
12
8
  deviceData: any;
13
- data: DeviceData;
9
+ data: IncyclistAdapterData;
14
10
  dataMsgCount: number;
15
11
  lastDataTS: number;
16
12
  device: BleComms;
@@ -20,7 +16,7 @@ export default class BleAdapter extends IncyclistDevice {
20
16
  close(): Promise<boolean>;
21
17
  getComms(): BleComms;
22
18
  isEqual(settings: BleDeviceSettings): boolean;
23
- isSame(adapter: BleAdapter): boolean;
19
+ isSame(adapter: IAdapter): boolean;
24
20
  isConnected(): boolean;
25
21
  resetData(): void;
26
22
  getInterface(): string;
@@ -28,8 +24,8 @@ export default class BleAdapter extends IncyclistDevice {
28
24
  getID(): string;
29
25
  getName(): string;
30
26
  onDeviceData(deviceData: any): void;
31
- mapData(deviceData: any): DeviceData | IncyclistBikeData;
32
- transformData(data: IncyclistBikeData): DeviceData;
27
+ mapData(deviceData: any): IncyclistAdapterData | IncyclistBikeData;
28
+ transformData(data: IncyclistBikeData): IncyclistAdapterData;
33
29
  getSettings(): BleDeviceSettings;
34
30
  setProperties(props: BleDeviceProperties): void;
35
31
  check(): Promise<boolean>;
@@ -38,17 +34,3 @@ export default class BleAdapter extends IncyclistDevice {
38
34
  pause(): Promise<boolean>;
39
35
  resume(): Promise<boolean>;
40
36
  }
41
- export declare class BleControllableAdapter extends BleAdapter implements Bike {
42
- cyclingMode: CyclingMode;
43
- user?: User;
44
- constructor(settings: BleDeviceSettings, props?: DeviceProperties);
45
- setUser(user: User): void;
46
- isControllable(): boolean;
47
- setBikeProps(props: DeviceProperties): void;
48
- getWeight(): number;
49
- getSupportedCyclingModes(): any[];
50
- getDefaultCyclingMode(): CyclingMode;
51
- setCyclingMode(mode: CyclingMode | string, settings?: any): void;
52
- sendInitCommands(): Promise<boolean>;
53
- getCyclingMode(): CyclingMode;
54
- }
@@ -1,27 +1,4 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
3
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
4
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -35,8 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
35
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
36
13
  };
37
14
  Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.BleControllableAdapter = void 0;
39
- const adpater_1 = __importStar(require("../../base/adpater"));
15
+ const adpater_1 = __importDefault(require("../../base/adpater"));
40
16
  const ble_interface_1 = __importDefault(require("../ble-interface"));
41
17
  const INTERFACE_NAME = 'ble';
42
18
  class BleAdapter extends adpater_1.default {
@@ -134,10 +110,10 @@ class BleAdapter extends adpater_1.default {
134
110
  this.dataMsgCount++;
135
111
  this.lastDataTS = Date.now();
136
112
  this.deviceData = Object.assign({}, deviceData);
137
- if (!this.started || !this.canSendUpdate())
113
+ if (!this.started || !this.canEmitData())
138
114
  return;
139
- this.logEvent({ message: 'onDeviceData', data: deviceData, isControllable: (this instanceof BleControllableAdapter) });
140
- if (this instanceof BleControllableAdapter) {
115
+ this.logEvent({ message: 'onDeviceData', data: deviceData, isControllable: this.isControllable() });
116
+ if (this.isControllable()) {
141
117
  const mappedData = this.mapData(deviceData);
142
118
  const incyclistData = this.getCyclingMode().updateData(mappedData);
143
119
  this.data = this.transformData(incyclistData);
@@ -232,69 +208,3 @@ class BleAdapter extends adpater_1.default {
232
208
  }
233
209
  }
234
210
  exports.default = BleAdapter;
235
- class BleControllableAdapter extends BleAdapter {
236
- constructor(settings, props) {
237
- super(settings, props);
238
- this.cyclingMode = this.getDefaultCyclingMode();
239
- this.user = {};
240
- }
241
- setUser(user) {
242
- this.user = user;
243
- if (!user.weight)
244
- this.user.weight = adpater_1.DEFAULT_USER_WEIGHT;
245
- }
246
- isControllable() {
247
- return true;
248
- }
249
- setBikeProps(props) {
250
- const { user, userWeight } = props || {};
251
- if (user)
252
- this.setUser(user);
253
- if (userWeight)
254
- this.user.weight = userWeight;
255
- const keys = Object.keys(props);
256
- keys.forEach(k => {
257
- const p = props[k];
258
- if (p === null)
259
- delete this.props[k];
260
- else if (p !== undefined)
261
- this.props[k] = p;
262
- });
263
- }
264
- getWeight() {
265
- const { user = {}, props = adpater_1.DEFAULT_PROPS } = this;
266
- const userWeight = user.weight || props.userWeight || adpater_1.DEFAULT_USER_WEIGHT;
267
- const bikeWeight = props.bikeWeight || adpater_1.DEFAULT_BIKE_WEIGHT;
268
- return userWeight + bikeWeight;
269
- }
270
- getSupportedCyclingModes() { throw new Error('not implemented'); }
271
- getDefaultCyclingMode() { throw new Error('not implemented'); }
272
- setCyclingMode(mode, settings) {
273
- let selectedMode;
274
- if (typeof mode === 'string') {
275
- const supported = this.getSupportedCyclingModes();
276
- const CyclingModeClass = supported.find(M => { const m = new M(this); return m.getName() === mode; });
277
- if (CyclingModeClass) {
278
- this.cyclingMode = new CyclingModeClass(this, settings);
279
- return;
280
- }
281
- selectedMode = this.getDefaultCyclingMode();
282
- }
283
- else {
284
- selectedMode = mode;
285
- }
286
- this.cyclingMode = selectedMode;
287
- this.cyclingMode.setSettings(settings);
288
- }
289
- sendInitCommands() {
290
- return __awaiter(this, void 0, void 0, function* () {
291
- return true;
292
- });
293
- }
294
- getCyclingMode() {
295
- if (!this.cyclingMode)
296
- this.setCyclingMode(this.getDefaultCyclingMode());
297
- return this.cyclingMode;
298
- }
299
- }
300
- exports.BleControllableAdapter = BleControllableAdapter;
@@ -4,9 +4,8 @@ import { EventLogger } from 'gd-eventlog';
4
4
  import BleAdapterFactory from './adapter-factory';
5
5
  import { BleInterfaceProps, BlePeripheral, BleDeviceSettings, BleProtocol, BleBinding, BleInterfaceState, BleScanProps, BleCharacteristic } from './types';
6
6
  import { BleComms } from './base/comms';
7
- import { IncyclistInterface } from '../types/interface';
7
+ import { IncyclistInterface, IncyclistScanProps } from '../types';
8
8
  import BleAdapter from './base/adapter';
9
- import { IncyclistScanProps } from '../types/device';
10
9
  import BlePeripheralCache from './peripheral-cache';
11
10
  import EventEmitter from 'events';
12
11
  export interface ScanState {
@@ -40,7 +39,7 @@ export default class BleInterface extends EventEmitter implements IncyclistInter
40
39
  logger: EventLogger;
41
40
  props: BleInterfaceProps;
42
41
  binding: BleBinding;
43
- connectedDevices: BleAdapter[];
42
+ connectedDevices: Array<BleAdapter>;
44
43
  sensorIsConnecting: boolean;
45
44
  emittingAdapters: {
46
45
  comms: BleComms;
@@ -1,22 +1,17 @@
1
- import CyclingMode from '../../modes/cycling-mode';
2
- import { IncyclistBikeData } from '../../modes/cycling-mode';
3
- import { BleControllableAdapter } from '../base/adapter';
4
- import { DeviceProperties } from '../../types/device';
1
+ import BleAdapter from '../base/adapter';
5
2
  import { PowerData } from './types';
6
- import { DeviceData } from '../../types/data';
7
3
  import { BleDeviceSettings } from '../types';
8
- import IncyclistDevice from '../../base/adpater';
9
- export default class PwrAdapter extends BleControllableAdapter {
4
+ import { DeviceProperties, IncyclistBikeData, IncyclistAdapterData, ControllerConfig, IAdapter } from '../../types';
5
+ export default class PwrAdapter extends BleAdapter {
6
+ protected static controllers: ControllerConfig;
10
7
  distanceInternal: number;
11
8
  constructor(settings: BleDeviceSettings, props?: DeviceProperties);
12
- isSame(device: IncyclistDevice): boolean;
9
+ isSame(device: IAdapter): boolean;
13
10
  getProfile(): string;
14
11
  getName(): string;
15
12
  getDisplayName(): string;
16
- getDefaultCyclingMode(): CyclingMode;
17
- getSupportedCyclingModes(): any[];
18
13
  mapData(deviceData: PowerData): IncyclistBikeData;
19
- transformData(bikeData: IncyclistBikeData): DeviceData;
14
+ transformData(bikeData: IncyclistBikeData): IncyclistAdapterData;
20
15
  sendUpdate(request: any): Promise<void>;
21
16
  stop(): Promise<boolean>;
22
17
  }
@@ -13,21 +13,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  const gd_eventlog_1 = require("gd-eventlog");
16
- const power_meter_1 = __importDefault(require("../../modes/power-meter"));
17
16
  const comm_1 = __importDefault(require("./comm"));
18
- const adapter_1 = require("../base/adapter");
19
- const capabilities_1 = require("../../types/capabilities");
20
- class PwrAdapter extends adapter_1.BleControllableAdapter {
17
+ const adapter_1 = __importDefault(require("../base/adapter"));
18
+ const types_1 = require("../../types");
19
+ const power_meter_1 = __importDefault(require("../../modes/power-meter"));
20
+ class PwrAdapter extends adapter_1.default {
21
21
  constructor(settings, props) {
22
22
  super(settings, props);
23
23
  this.distanceInternal = 0;
24
24
  this.logger = new gd_eventlog_1.EventLogger('Ble-CP');
25
25
  const { id, address, name } = settings;
26
26
  const logger = this.logger;
27
- const ble = this.ble;
28
27
  this.device = new comm_1.default({ id, address, name, logger });
29
28
  this.capabilities = [
30
- capabilities_1.IncyclistCapability.Power, capabilities_1.IncyclistCapability.Cadence, capabilities_1.IncyclistCapability.Speed
29
+ types_1.IncyclistCapability.Power, types_1.IncyclistCapability.Cadence, types_1.IncyclistCapability.Speed
31
30
  ];
32
31
  }
33
32
  isSame(device) {
@@ -47,12 +46,6 @@ class PwrAdapter extends adapter_1.BleControllableAdapter {
47
46
  const powerStr = power ? ` (${power})` : '';
48
47
  return `${name}${powerStr}`;
49
48
  }
50
- getDefaultCyclingMode() {
51
- return new power_meter_1.default(this);
52
- }
53
- getSupportedCyclingModes() {
54
- return [power_meter_1.default];
55
- }
56
49
  mapData(deviceData) {
57
50
  const data = {
58
51
  isPedalling: false,
@@ -108,4 +101,8 @@ class PwrAdapter extends adapter_1.BleControllableAdapter {
108
101
  });
109
102
  }
110
103
  }
104
+ PwrAdapter.controllers = {
105
+ modes: [power_meter_1.default],
106
+ default: power_meter_1.default
107
+ };
111
108
  exports.default = PwrAdapter;
@@ -1,19 +1,19 @@
1
- import BleAdapter, { BleControllableAdapter } from '../base/adapter';
2
- import CyclingMode, { IncyclistBikeData } from '../../modes/cycling-mode';
1
+ import BleAdapter from '../base/adapter';
2
+ import ICyclingMode from '../../modes/types';
3
3
  import { PowerData } from '../cp';
4
- import { DeviceProperties } from '../../types/device';
5
- import { DeviceData } from '../../types/data';
4
+ import { DeviceProperties, IncyclistAdapterData, IncyclistBikeData, ControllerConfig, IAdapter } from '../../types';
6
5
  import { BleDeviceSettings } from '../types';
7
- export default class BleEliteAdapter extends BleControllableAdapter {
6
+ export default class BleEliteAdapter extends BleAdapter {
7
+ protected static controllers: ControllerConfig;
8
8
  distanceInternal: number;
9
9
  constructor(settings: BleDeviceSettings, props?: DeviceProperties);
10
- isSame(device: BleAdapter): boolean;
10
+ isSame(device: IAdapter): boolean;
11
11
  getProfile(): string;
12
12
  getName(): string;
13
- getDefaultCyclingMode(): CyclingMode;
13
+ getDefaultCyclingMode(): ICyclingMode;
14
14
  getSupportedCyclingModes(): any[];
15
15
  mapData(deviceData: PowerData): IncyclistBikeData;
16
- transformData(bikeData: IncyclistBikeData): DeviceData;
16
+ transformData(bikeData: IncyclistBikeData): IncyclistAdapterData;
17
17
  start(props?: any): Promise<any>;
18
18
  sendUpdate(request: any): Promise<void>;
19
19
  }