incyclist-devices 2.2.9 → 2.3.0

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 (142) hide show
  1. package/lib/antv2/base/interface.js +2 -2
  2. package/lib/antv2/factories/index.d.ts +1 -0
  3. package/lib/antv2/factories/index.js +17 -0
  4. package/lib/antv2/fe/adapter.js +5 -4
  5. package/lib/antv2/index.d.ts +1 -0
  6. package/lib/antv2/index.js +12 -8
  7. package/lib/base/adpater.js +1 -1
  8. package/lib/ble/adapter-factory.d.ts +20 -24
  9. package/lib/ble/adapter-factory.js +13 -36
  10. package/lib/ble/base/adapter.d.ts +16 -5
  11. package/lib/ble/base/adapter.js +169 -52
  12. package/lib/ble/base/comms.d.ts +2 -74
  13. package/lib/ble/base/comms.js +3 -596
  14. package/lib/ble/base/interface.d.ts +96 -0
  15. package/lib/ble/base/interface.js +544 -0
  16. package/lib/ble/base/peripheral.d.ts +34 -0
  17. package/lib/ble/base/peripheral.js +286 -0
  18. package/lib/ble/base/sensor.d.ts +31 -0
  19. package/lib/ble/base/sensor.js +130 -0
  20. package/lib/ble/base/types.d.ts +7 -0
  21. package/lib/ble/base/types.js +7 -0
  22. package/lib/ble/bindings/mock.js +6 -0
  23. package/lib/ble/bindings/types.d.ts +3 -4
  24. package/lib/ble/ble-interface.d.ts +7 -4
  25. package/lib/ble/ble-interface.js +16 -2
  26. package/lib/ble/ble-peripheral.d.ts +1 -0
  27. package/lib/ble/ble-peripheral.js +7 -11
  28. package/lib/ble/consts.d.ts +0 -6
  29. package/lib/ble/consts.js +1 -7
  30. package/lib/ble/cp/adapter.d.ts +3 -3
  31. package/lib/ble/cp/adapter.js +12 -13
  32. package/lib/ble/cp/comm.d.ts +1 -1
  33. package/lib/ble/cp/comm.js +2 -2
  34. package/lib/ble/cp/index.d.ts +1 -1
  35. package/lib/ble/cp/index.js +2 -2
  36. package/lib/ble/cp/sensor.d.ts +27 -0
  37. package/lib/ble/cp/sensor.js +107 -0
  38. package/lib/ble/elite/comms.d.ts +1 -1
  39. package/lib/ble/elite/comms.js +2 -2
  40. package/lib/ble/factories/adapter-factory.d.ts +32 -0
  41. package/lib/ble/factories/adapter-factory.js +104 -0
  42. package/lib/ble/factories/index.d.ts +2 -0
  43. package/lib/ble/factories/index.js +18 -0
  44. package/lib/ble/factories/interface-factory.d.ts +7 -0
  45. package/lib/ble/factories/interface-factory.js +18 -0
  46. package/lib/ble/fm/adapter.d.ts +9 -4
  47. package/lib/ble/fm/adapter.js +104 -108
  48. package/lib/ble/fm/comms.d.ts +1 -1
  49. package/lib/ble/fm/comms.js +3 -3
  50. package/lib/ble/fm/consts.d.ts +93 -0
  51. package/lib/ble/fm/consts.js +55 -1
  52. package/lib/ble/fm/index.d.ts +1 -1
  53. package/lib/ble/fm/index.js +2 -2
  54. package/lib/ble/fm/sensor.d.ts +44 -0
  55. package/lib/ble/fm/sensor.js +384 -0
  56. package/lib/ble/hr/adapter.d.ts +3 -3
  57. package/lib/ble/hr/adapter.js +5 -8
  58. package/lib/ble/hr/comm.d.ts +1 -1
  59. package/lib/ble/hr/comm.js +2 -2
  60. package/lib/ble/hr/index.d.ts +1 -1
  61. package/lib/ble/hr/index.js +2 -2
  62. package/lib/ble/hr/sensor.d.ts +17 -0
  63. package/lib/ble/hr/sensor.js +52 -0
  64. package/lib/ble/index.d.ts +4 -3
  65. package/lib/ble/index.js +29 -13
  66. package/lib/ble/tacx/adapter.d.ts +4 -2
  67. package/lib/ble/tacx/adapter.js +26 -66
  68. package/lib/ble/tacx/comms.d.ts +1 -1
  69. package/lib/ble/tacx/comms.js +2 -2
  70. package/lib/ble/tacx/consts.d.ts +23 -0
  71. package/lib/ble/tacx/consts.js +27 -0
  72. package/lib/ble/tacx/index.d.ts +1 -1
  73. package/lib/ble/tacx/index.js +2 -2
  74. package/lib/ble/tacx/sensor.d.ts +63 -0
  75. package/lib/ble/tacx/sensor.js +596 -0
  76. package/lib/ble/types.d.ts +81 -52
  77. package/lib/ble/utils.d.ts +7 -2
  78. package/lib/ble/utils.js +84 -9
  79. package/lib/ble/wahoo/adapter.d.ts +2 -2
  80. package/lib/ble/wahoo/adapter.js +4 -72
  81. package/lib/ble/wahoo/comms.d.ts +1 -1
  82. package/lib/ble/wahoo/comms.js +2 -2
  83. package/lib/ble/wahoo/consts.d.ts +16 -0
  84. package/lib/ble/wahoo/consts.js +7 -0
  85. package/lib/ble/wahoo/index.d.ts +1 -1
  86. package/lib/ble/wahoo/index.js +2 -2
  87. package/lib/ble/wahoo/sensor.d.ts +48 -0
  88. package/lib/ble/wahoo/sensor.js +356 -0
  89. package/lib/direct-connect/base/comms.d.ts +3 -0
  90. package/lib/direct-connect/base/comms.js +7 -0
  91. package/lib/direct-connect/base/interface.d.ts +75 -0
  92. package/lib/direct-connect/base/interface.js +306 -0
  93. package/lib/direct-connect/base/peripheral.d.ts +50 -0
  94. package/lib/direct-connect/base/peripheral.js +413 -0
  95. package/lib/direct-connect/base/sensor.d.ts +3 -0
  96. package/lib/direct-connect/base/sensor.js +7 -0
  97. package/lib/direct-connect/bindings/index.d.ts +1 -0
  98. package/lib/direct-connect/bindings/index.js +17 -0
  99. package/lib/direct-connect/bindings/types.d.ts +36 -0
  100. package/lib/direct-connect/bindings/types.js +2 -0
  101. package/lib/direct-connect/consts.d.ts +17 -0
  102. package/lib/direct-connect/consts.js +20 -0
  103. package/lib/direct-connect/index.d.ts +3 -0
  104. package/lib/direct-connect/index.js +22 -0
  105. package/lib/direct-connect/messages/CharacteristicNotification.d.ts +12 -0
  106. package/lib/direct-connect/messages/CharacteristicNotification.js +23 -0
  107. package/lib/direct-connect/messages/DiscoverCharacteristics.d.ts +22 -0
  108. package/lib/direct-connect/messages/DiscoverCharacteristics.js +43 -0
  109. package/lib/direct-connect/messages/DiscoverServices.d.ts +15 -0
  110. package/lib/direct-connect/messages/DiscoverServices.js +33 -0
  111. package/lib/direct-connect/messages/EnableCharacteristicNotifications.d.ts +18 -0
  112. package/lib/direct-connect/messages/EnableCharacteristicNotifications.js +35 -0
  113. package/lib/direct-connect/messages/ReadCharacteristic.d.ts +18 -0
  114. package/lib/direct-connect/messages/ReadCharacteristic.js +34 -0
  115. package/lib/direct-connect/messages/WriteCharacteristic.d.ts +18 -0
  116. package/lib/direct-connect/messages/WriteCharacteristic.js +36 -0
  117. package/lib/direct-connect/messages/error.d.ts +5 -0
  118. package/lib/direct-connect/messages/error.js +18 -0
  119. package/lib/direct-connect/messages/factory.d.ts +6 -0
  120. package/lib/direct-connect/messages/factory.js +44 -0
  121. package/lib/direct-connect/messages/index.d.ts +9 -0
  122. package/lib/direct-connect/messages/index.js +25 -0
  123. package/lib/direct-connect/messages/message.d.ts +20 -0
  124. package/lib/direct-connect/messages/message.js +90 -0
  125. package/lib/direct-connect/types.d.ts +24 -0
  126. package/lib/direct-connect/types.js +9 -0
  127. package/lib/direct-connect/utils.d.ts +5 -0
  128. package/lib/direct-connect/utils.js +73 -0
  129. package/lib/factories/adapters.js +16 -4
  130. package/lib/factories/interfaces.d.ts +2 -1
  131. package/lib/factories/interfaces.js +10 -7
  132. package/lib/index.d.ts +5 -4
  133. package/lib/index.js +6 -2
  134. package/lib/serial/bindings/tcp.d.ts +5 -4
  135. package/lib/serial/bindings/tcp.js +16 -23
  136. package/lib/types/device.d.ts +2 -1
  137. package/lib/types/device.js +1 -0
  138. package/lib/utils/operation.d.ts +17 -0
  139. package/lib/utils/operation.js +20 -0
  140. package/lib/utils/task.d.ts +44 -0
  141. package/lib/utils/task.js +127 -0
  142. package/package.json +3 -1
@@ -0,0 +1,356 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const consts_1 = require("../../base/consts");
16
+ const consts_2 = require("../consts");
17
+ const consts_3 = require("./consts");
18
+ const sensor_1 = __importDefault(require("../fm/sensor"));
19
+ const utils_1 = require("../utils");
20
+ class BleWahooDevice extends sensor_1.default {
21
+ constructor(peripheral, props) {
22
+ super(peripheral, props);
23
+ this.prevCrankData = undefined;
24
+ this.currentCrankData = undefined;
25
+ this.timeOffset = 0;
26
+ this.tsPrevWrite = undefined;
27
+ this.prevSlope = undefined;
28
+ this.isRequestControlBusy = false;
29
+ this.weight = consts_1.DEFAULT_BIKE_WEIGHT + consts_1.DEFAULT_USER_WEIGHT;
30
+ this.data = {};
31
+ this.wahooCP = consts_3.WAHOO_ADVANCED_TRAINER_CP;
32
+ }
33
+ isMatching(serviceUUIDs) {
34
+ const uuids = serviceUUIDs.map(uuid => (0, utils_1.beautifyUUID)(uuid));
35
+ return uuids.includes((0, utils_1.beautifyUUID)(consts_2.CSP)) && uuids.includes((0, utils_1.beautifyUUID)(consts_3.WAHOO_ADVANCED_FTMS));
36
+ }
37
+ reset() {
38
+ this.data = {};
39
+ this.isSimMode = undefined;
40
+ this.simModeSettings = undefined;
41
+ }
42
+ getRequiredCharacteristics() {
43
+ return [consts_2.INDOOR_BIKE_DATA, consts_2.FTMS_STATUS, consts_2.CSP_MEASUREMENT, consts_2.HR_MEASUREMENT];
44
+ }
45
+ onData(characteristic, data) {
46
+ const hasData = super.onData(characteristic, data);
47
+ if (!hasData)
48
+ return false;
49
+ const uuid = characteristic.toLowerCase();
50
+ let res = undefined;
51
+ switch (uuid) {
52
+ case consts_2.CSP_MEASUREMENT:
53
+ res = this.parsePower(data);
54
+ break;
55
+ case consts_2.INDOOR_BIKE_DATA:
56
+ res = this.parseIndoorBikeData(data);
57
+ break;
58
+ case consts_2.HR_MEASUREMENT:
59
+ res = this.parseHrm(data);
60
+ break;
61
+ case consts_2.FTMS_STATUS:
62
+ res = this.parseFitnessMachineStatus(data);
63
+ break;
64
+ default:
65
+ this.logEvent({ message: 'data', uuid, data: data.toString('hex') });
66
+ break;
67
+ }
68
+ if (res) {
69
+ this.emit('data', res);
70
+ return false;
71
+ }
72
+ return true;
73
+ }
74
+ requestControl() {
75
+ return __awaiter(this, void 0, void 0, function* () {
76
+ if (this.hasControl)
77
+ return true;
78
+ this.logEvent({ message: 'requestControl' });
79
+ if (this.isRequestControlBusy)
80
+ return false;
81
+ this.isRequestControlBusy = true;
82
+ try {
83
+ const data = Buffer.alloc(2);
84
+ data.writeUInt8(0xEE, 0);
85
+ data.writeUInt8(0xFC, 1);
86
+ const res = yield this.writeWahooFtmsMessage(32, data, { timeout: 10000 });
87
+ if (res === true) {
88
+ this.hasControl = true;
89
+ }
90
+ else {
91
+ this.logEvent({ message: 'requestControl failed' });
92
+ }
93
+ }
94
+ catch (err) {
95
+ this.logEvent({ message: 'error', fn: 'requestControl()', error: err.message, stack: err.stack });
96
+ }
97
+ this.isRequestControlBusy = false;
98
+ return this.hasControl;
99
+ });
100
+ }
101
+ setTargetPower(power) {
102
+ return __awaiter(this, void 0, void 0, function* () {
103
+ this.logEvent({ message: 'setTargetPower', power, skip: (this.data.targetPower !== undefined && this.data.targetPower === power) });
104
+ if (this.data.targetPower !== undefined && this.data.targetPower === power)
105
+ return true;
106
+ const hasControl = yield this.requestControl();
107
+ if (!hasControl) {
108
+ this.logEvent({ message: 'setTargetPower failed', reason: 'control is disabled' });
109
+ return false;
110
+ }
111
+ return yield this.setErgMode(power);
112
+ });
113
+ }
114
+ setSlope(slope) {
115
+ return __awaiter(this, void 0, void 0, function* () {
116
+ this.logEvent({ message: 'setSlope', slope });
117
+ if (this.prevSlope !== undefined && slope === this.prevSlope)
118
+ return;
119
+ try {
120
+ if (!this.isSimMode) {
121
+ const { weight, crr, cw } = this;
122
+ const hasSimMode = yield this.setSimMode(weight, crr, cw);
123
+ if (!hasSimMode)
124
+ throw new Error('Sim Mode not enabled');
125
+ }
126
+ const res = yield this.setSimGrade(slope);
127
+ this.logEvent({ message: 'setSlope result', res });
128
+ this.prevSlope = slope;
129
+ return res;
130
+ }
131
+ catch (err) {
132
+ this.logEvent({ message: 'setSlope failed', reason: err.message || err });
133
+ this.prevSlope = undefined;
134
+ return false;
135
+ }
136
+ });
137
+ }
138
+ parseCrankData(crankData) {
139
+ if (!this.prevCrankData)
140
+ this.prevCrankData = { revolutions: 0, time: 0, cntUpdateMissing: -1 };
141
+ const c = this.currentCrankData = crankData;
142
+ const p = this.prevCrankData;
143
+ let rpm = this.data.cadence;
144
+ let hasUpdate = c.time !== p.time;
145
+ if (hasUpdate) {
146
+ let time = c.time - p.time;
147
+ let revs = c.revolutions - p.revolutions;
148
+ if (c.time < p.time) {
149
+ time += 0x10000;
150
+ this.timeOffset += 0x10000;
151
+ }
152
+ if (c.revolutions < p.revolutions)
153
+ revs += 0x10000;
154
+ rpm = 1024 * 60 * revs / time;
155
+ }
156
+ else if (p.cntUpdateMissing < 0 || p.cntUpdateMissing > 2) {
157
+ rpm = 0;
158
+ }
159
+ const cntUpdateMissing = p.cntUpdateMissing;
160
+ this.prevCrankData = this.currentCrankData;
161
+ if (hasUpdate)
162
+ this.prevCrankData.cntUpdateMissing = 0;
163
+ else
164
+ this.prevCrankData.cntUpdateMissing = cntUpdateMissing + 1;
165
+ return { rpm, time: this.timeOffset + c.time };
166
+ }
167
+ parsePower(_data) {
168
+ const data = Buffer.from(_data);
169
+ try {
170
+ let offset = 4;
171
+ const flags = data.readUInt16LE(0);
172
+ this.data.instantaneousPower = data.readUInt16LE(2);
173
+ if (flags & 0x1)
174
+ data.readUInt8(offset++);
175
+ if (flags & 0x4) {
176
+ offset += 2;
177
+ }
178
+ if (flags & 0x10) {
179
+ offset += 6;
180
+ }
181
+ if (flags & 0x20) {
182
+ const crankData = {
183
+ revolutions: data.readUInt16LE(offset),
184
+ time: data.readUInt16LE(offset + 2)
185
+ };
186
+ const { rpm, time } = this.parseCrankData(crankData);
187
+ this.data.cadence = rpm;
188
+ this.data.time = time;
189
+ }
190
+ }
191
+ catch (err) {
192
+ this.logEvent({ message: 'error', fn: 'parsePower', error: err.message, stack: err.stack });
193
+ }
194
+ const { instantaneousPower, cadence, time } = this.data;
195
+ return { instantaneousPower, cadence, time, raw: data.toString('hex') };
196
+ }
197
+ writeWahooFtmsMessage(requestedOpCode, data, props) {
198
+ return __awaiter(this, void 0, void 0, function* () {
199
+ try {
200
+ const opcode = Buffer.alloc(1);
201
+ opcode.writeUInt8(requestedOpCode, 0);
202
+ const message = Buffer.concat([opcode, data]);
203
+ this.logEvent({ message: 'wahoo cp:write', data: message.toString('hex') });
204
+ const res = yield this.write(this.wahooCP, message, props);
205
+ const responseData = Buffer.from(res);
206
+ const result = responseData.readUInt8(0);
207
+ return result === 1;
208
+ }
209
+ catch (err) {
210
+ this.logEvent({ message: 'wahoo cp:write failed', opCode: requestedOpCode, reason: err.message });
211
+ return false;
212
+ }
213
+ });
214
+ }
215
+ setPowerAdjusting() {
216
+ this.tsPrevWrite = Date.now();
217
+ }
218
+ isPowerAdjusting() {
219
+ if (this.tsPrevWrite === undefined)
220
+ return false;
221
+ if (this.tsPrevWrite < Date.now() - consts_3.ErgWriteDelay) {
222
+ this.tsPrevWrite = undefined;
223
+ return false;
224
+ }
225
+ return true;
226
+ }
227
+ setErgMode(power) {
228
+ return __awaiter(this, void 0, void 0, function* () {
229
+ this.logger.logEvent({ message: 'setErgMode', power });
230
+ try {
231
+ if (this.isPowerAdjusting())
232
+ return false;
233
+ const data = Buffer.alloc(2);
234
+ data.writeInt16LE(Math.round(power), 0);
235
+ const res = yield this.writeWahooFtmsMessage(66, data);
236
+ if (res === true) {
237
+ this.setPowerAdjusting();
238
+ this.data.targetPower = power;
239
+ this.isSimMode = false;
240
+ this.simModeSettings = undefined;
241
+ }
242
+ return res;
243
+ }
244
+ catch (err) {
245
+ this.logEvent({ message: 'error', fn: 'setErgMode', error: err.message || err, stack: err.stack });
246
+ return false;
247
+ }
248
+ });
249
+ }
250
+ setSimMode(weight, crr, cw) {
251
+ return __awaiter(this, void 0, void 0, function* () {
252
+ this.logger.logEvent({ message: 'setSimMode', weight, crr, cw });
253
+ try {
254
+ if (this.isSimMode && this.simModeSettings) {
255
+ if (weight === this.simModeSettings.weight &&
256
+ crr === this.simModeSettings.crr &&
257
+ cw === this.simModeSettings.cw)
258
+ return true;
259
+ }
260
+ const hasControl = yield this.requestControl();
261
+ if (!hasControl) {
262
+ this.logEvent({ message: 'setSimMode failed', reason: 'control is disabled' });
263
+ return false;
264
+ }
265
+ this.weight = weight;
266
+ this.crr = crr;
267
+ this.cw = cw;
268
+ const data = Buffer.alloc(6);
269
+ data.writeInt16LE(Math.round(weight * 100), 0);
270
+ data.writeInt16LE(Math.round(crr * 10000), 2);
271
+ data.writeInt16LE(Math.round(cw * 1000), 4);
272
+ const res = yield this.writeWahooFtmsMessage(67, data);
273
+ this.isSimMode = true;
274
+ this.simModeSettings = { weight, crr, cw };
275
+ return res;
276
+ }
277
+ catch (err) {
278
+ this.logEvent({ message: 'error', fn: 'setSimMode', error: err.message || err, stack: err.stack });
279
+ return false;
280
+ }
281
+ });
282
+ }
283
+ setSimCRR(crr) {
284
+ return __awaiter(this, void 0, void 0, function* () {
285
+ this.logger.logEvent({ message: 'setSimCRR', crr });
286
+ try {
287
+ const data = Buffer.alloc(2);
288
+ data.writeInt16LE(Math.round(crr * 10000), 0);
289
+ const res = yield this.writeWahooFtmsMessage(68, data);
290
+ return res;
291
+ }
292
+ catch (err) {
293
+ this.logEvent({ message: 'error', fn: 'setSimCRR', error: err.message || err, stack: err.stack });
294
+ return false;
295
+ }
296
+ });
297
+ }
298
+ setSimWindResistance(cw) {
299
+ return __awaiter(this, void 0, void 0, function* () {
300
+ this.logger.logEvent({ message: 'setSimWindResistance', cw });
301
+ try {
302
+ const data = Buffer.alloc(2);
303
+ data.writeInt16LE(Math.round(cw * 1000), 0);
304
+ const res = yield this.writeWahooFtmsMessage(69, data);
305
+ return res;
306
+ }
307
+ catch (err) {
308
+ this.logEvent({ message: 'error', fn: 'setSimWindResistance', error: err.message || err, stack: err.stack });
309
+ return false;
310
+ }
311
+ });
312
+ }
313
+ setSimGrade(slope) {
314
+ return __awaiter(this, void 0, void 0, function* () {
315
+ this.logger.logEvent({ message: 'setSimGrade', slope });
316
+ try {
317
+ let s = slope;
318
+ if (s < -100)
319
+ s = -100;
320
+ if (s > 100)
321
+ s = 100;
322
+ const slopeVal = Math.min(Math.round((1 + s / 100) * 65535 / 2.0), 65535);
323
+ const data = Buffer.alloc(2);
324
+ data.writeUInt16LE(slopeVal, 0);
325
+ const res = yield this.writeWahooFtmsMessage(70, data);
326
+ return res;
327
+ }
328
+ catch (err) {
329
+ this.logEvent({ message: 'error', fn: 'setSimGrade', error: err.message || err, stack: err.stack });
330
+ return false;
331
+ }
332
+ });
333
+ }
334
+ setSimWindSpeed(v) {
335
+ return __awaiter(this, void 0, void 0, function* () {
336
+ this.logger.logEvent({ message: 'setSimWindSpeed', v });
337
+ try {
338
+ const value = (Math.max(-32.767, Math.min(32.767, v)) + 32.767) * 1000;
339
+ const data = Buffer.alloc(2);
340
+ data.writeInt16LE(Math.round(value), 0);
341
+ const res = yield this.writeWahooFtmsMessage(71, data);
342
+ return res;
343
+ }
344
+ catch (err) {
345
+ this.logEvent({ message: 'error', fn: 'setSimWindSpeed', error: err.message || err, stack: err.stack });
346
+ return false;
347
+ }
348
+ });
349
+ }
350
+ }
351
+ BleWahooDevice.profile = 'Smart Trainer';
352
+ BleWahooDevice.protocol = 'wahoo';
353
+ BleWahooDevice.services = [consts_2.CSP, consts_3.WAHOO_ADVANCED_FTMS];
354
+ BleWahooDevice.characteristics = [consts_2.FTMS_FEATURE, consts_2.INDOOR_BIKE_DATA, consts_2.RES_LEVEL_RANGE, consts_2.POWER_RANGE, consts_2.FTMS_CP, consts_2.FTMS_STATUS, consts_3.WAHOO_ADVANCED_TRAINER_CP];
355
+ BleWahooDevice.detectionPriority = 5;
356
+ exports.default = BleWahooDevice;
@@ -0,0 +1,3 @@
1
+ import { BleComms } from "../../ble/base/comms";
2
+ export declare class DirectConnectComms extends BleComms {
3
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DirectConnectComms = void 0;
4
+ const comms_1 = require("../../ble/base/comms");
5
+ class DirectConnectComms extends comms_1.BleComms {
6
+ }
7
+ exports.DirectConnectComms = DirectConnectComms;
@@ -0,0 +1,75 @@
1
+ import EventEmitter from "events";
2
+ import { DeviceSettings, InterfaceProps } from "../../types";
3
+ import { EventLogger } from "gd-eventlog";
4
+ import { DirectConnectBinding, MulticastDnsAnnouncement } from "../bindings";
5
+ import { DirectConnectScanProps } from "../types";
6
+ import { BleDeviceSettings, BleProtocol, IBleInterface, IBlePeripheral } from '../../ble/types';
7
+ import { InteruptableTask, TaskState } from "../../utils/task";
8
+ import { BleAdapterFactory } from "../../ble";
9
+ import { TBleSensor } from "../../ble/base/sensor";
10
+ import { InterfaceFactory } from "../../ble/base/types";
11
+ interface Announcement {
12
+ service: MulticastDnsAnnouncement;
13
+ ts: number;
14
+ }
15
+ export default class DirectConnectInterface extends EventEmitter implements IBleInterface<MulticastDnsAnnouncement> {
16
+ protected static _instance: DirectConnectInterface;
17
+ static readonly INTERFACE_NAME: string;
18
+ protected logger: EventLogger;
19
+ protected props: InterfaceProps;
20
+ protected logEnabled: boolean;
21
+ protected binding: DirectConnectBinding;
22
+ protected debug: boolean;
23
+ protected logDisabled: boolean;
24
+ protected internalEvents: EventEmitter;
25
+ protected services: Announcement[];
26
+ protected scanTask: InteruptableTask<TaskState, DeviceSettings[]>;
27
+ protected matching?: Array<string>;
28
+ protected instance: number;
29
+ protected connected: boolean;
30
+ static getInstance(props?: InterfaceProps): DirectConnectInterface;
31
+ constructor(props: InterfaceProps);
32
+ createPeripheral(announcement: MulticastDnsAnnouncement): IBlePeripheral;
33
+ createDeviceSetting(service: MulticastDnsAnnouncement): BleDeviceSettings;
34
+ createPeripheralFromSettings(settings: DeviceSettings): IBlePeripheral;
35
+ getLogger(): EventLogger;
36
+ setLogger(logger: EventLogger): void;
37
+ getName(): string;
38
+ setBinding(binding: DirectConnectBinding): void;
39
+ getBinding(): DirectConnectBinding;
40
+ autoConnect(): void;
41
+ connect(reconnect?: boolean): Promise<boolean>;
42
+ disconnect(): Promise<boolean>;
43
+ isConnected(): boolean;
44
+ scan(props: DirectConnectScanProps): Promise<DeviceSettings[]>;
45
+ stopScan(): Promise<boolean>;
46
+ onScanDone(): DeviceSettings[];
47
+ pauseLogging(): void;
48
+ resumeLogging(): void;
49
+ isLoggingPaused(): boolean;
50
+ waitForPeripheral(settings: DeviceSettings): Promise<IBlePeripheral>;
51
+ protected reconnect(): Promise<void>;
52
+ protected isScanning(): boolean;
53
+ protected startScan(): Promise<void>;
54
+ private emitCachedDevices;
55
+ protected emitDevice(service: MulticastDnsAnnouncement): void;
56
+ protected buildDeviceSettings(matching?: string[]): {
57
+ interface: string;
58
+ name: string;
59
+ }[];
60
+ protected addService(service: MulticastDnsAnnouncement): void;
61
+ protected find(service: MulticastDnsAnnouncement): Announcement;
62
+ protected getAll(): Announcement[];
63
+ setDebug(enabled: boolean): void;
64
+ logEvent(event: any): void;
65
+ logError(err: Error, fn: string, args?: any): void;
66
+ protected getProtocol(announcement: MulticastDnsAnnouncement): BleProtocol;
67
+ protected getBestDeviceMatch(DeviceClasses: (typeof TBleSensor)[]): typeof TBleSensor;
68
+ protected getAdapterFactory(): BleAdapterFactory<any>;
69
+ }
70
+ export declare class DirectConnectInterfaceFactory extends InterfaceFactory {
71
+ protected iface: DirectConnectInterface;
72
+ constructor();
73
+ getInterface(): DirectConnectInterface;
74
+ }
75
+ export {};