incyclist-devices 2.3.39 → 2.3.41
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/antv2/base/interface.d.ts +2 -1
- package/lib/antv2/base/interface.js +2 -0
- package/lib/ble/base/interface.d.ts +1 -0
- package/lib/ble/base/interface.js +2 -0
- package/lib/ble/types.d.ts +1 -0
- package/lib/direct-connect/base/interface.d.ts +4 -0
- package/lib/direct-connect/base/interface.js +60 -3
- package/lib/serial/base/serial-interface.d.ts +2 -1
- package/lib/serial/base/serial-interface.js +2 -0
- package/lib/types/interface.d.ts +1 -0
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@ import EventEmitter from "events";
|
|
|
2
2
|
import { EventLogger } from "gd-eventlog";
|
|
3
3
|
import { Channel, IAntDevice, IChannel, ISensor } from "incyclist-ant-plus";
|
|
4
4
|
import { AntDeviceSettings, AntScanProps, AntInterfaceProps } from "../types";
|
|
5
|
-
import { IncyclistInterface } from "../../types";
|
|
5
|
+
import { DeviceSettings, IncyclistInterface } from "../../types";
|
|
6
6
|
import AntDeviceBinding from "./binding";
|
|
7
7
|
type ChannelUsage = 'scan' | 'sensor';
|
|
8
8
|
interface ChannelInfo {
|
|
@@ -52,5 +52,6 @@ export default class AntInterface extends EventEmitter implements IncyclistInter
|
|
|
52
52
|
private blockChannel;
|
|
53
53
|
private unblockChannel;
|
|
54
54
|
stopSensor(sensor: ISensor): Promise<boolean>;
|
|
55
|
+
addKnownDevice(_settings: DeviceSettings): void;
|
|
55
56
|
}
|
|
56
57
|
export {};
|
|
@@ -94,6 +94,7 @@ export declare class BleInterface extends EventEmitter implements IBleInterface<
|
|
|
94
94
|
protected find(service: BlePeripheralAnnouncement): Announcement;
|
|
95
95
|
protected getAll(): Announcement[];
|
|
96
96
|
setDebug(enabled: boolean): void;
|
|
97
|
+
addKnownDevice(_settings: BleDeviceSettings): void;
|
|
97
98
|
protected connectBle(): Promise<boolean>;
|
|
98
99
|
protected waitForBleConnected(): Promise<boolean>;
|
|
99
100
|
protected onError(err: Error): void;
|
|
@@ -583,6 +583,8 @@ class BleInterface extends events_1.default {
|
|
|
583
583
|
setDebug(enabled) {
|
|
584
584
|
this.debug = enabled;
|
|
585
585
|
}
|
|
586
|
+
addKnownDevice(_settings) {
|
|
587
|
+
}
|
|
586
588
|
connectBle() {
|
|
587
589
|
return __awaiter(this, void 0, void 0, function* () {
|
|
588
590
|
this.currentBleState = this.getBinding().state;
|
package/lib/ble/types.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { InterfaceFactory } from "../../ble/base/types";
|
|
|
11
11
|
interface Announcement {
|
|
12
12
|
service: MulticastDnsAnnouncement;
|
|
13
13
|
ts: number;
|
|
14
|
+
source?: string;
|
|
14
15
|
}
|
|
15
16
|
export default class DirectConnectInterface extends EventEmitter implements IBleInterface<MulticastDnsAnnouncement> {
|
|
16
17
|
protected static _instance: DirectConnectInterface;
|
|
@@ -33,6 +34,7 @@ export default class DirectConnectInterface extends EventEmitter implements IBle
|
|
|
33
34
|
createPeripheral(announcement: MulticastDnsAnnouncement): IBlePeripheral;
|
|
34
35
|
createDeviceSetting(service: MulticastDnsAnnouncement): BleDeviceSettings;
|
|
35
36
|
createPeripheralFromSettings(settings: DeviceSettings): IBlePeripheral;
|
|
37
|
+
addKnownDevice(settings: BleDeviceSettings): void;
|
|
36
38
|
getLogger(): EventLogger;
|
|
37
39
|
setLogger(logger: EventLogger): void;
|
|
38
40
|
getName(): string;
|
|
@@ -66,6 +68,8 @@ export default class DirectConnectInterface extends EventEmitter implements IBle
|
|
|
66
68
|
logError(err: Error, fn: string, args?: any): void;
|
|
67
69
|
protected getProtocol(announcement: MulticastDnsAnnouncement): BleProtocol;
|
|
68
70
|
protected getBestDeviceMatch(DeviceClasses: (typeof TBleSensor)[]): typeof TBleSensor;
|
|
71
|
+
protected createAnnouncementFromSettings(settings: BleDeviceSettings): MulticastDnsAnnouncement;
|
|
72
|
+
protected getServiceUUIDs(settings: BleDeviceSettings): string[];
|
|
69
73
|
protected getAdapterFactory(): BleAdapterFactory<any>;
|
|
70
74
|
}
|
|
71
75
|
export declare class DirectConnectInterfaceFactory extends InterfaceFactory {
|
|
@@ -19,7 +19,10 @@ const task_1 = require("../../utils/task");
|
|
|
19
19
|
const peripheral_1 = require("./peripheral");
|
|
20
20
|
const ble_1 = require("../../ble");
|
|
21
21
|
const types_1 = require("../../ble/base/types");
|
|
22
|
+
const consts_1 = require("../../ble/consts");
|
|
23
|
+
const consts_2 = require("../../ble/wahoo/consts");
|
|
22
24
|
const DC_TYPE = 'wahoo-fitness-tnp';
|
|
25
|
+
const DC_PORT = 36866;
|
|
23
26
|
const DC_EXPIRATION_TIMEOUT = 10 * 1000 * 60;
|
|
24
27
|
let instanceId = 0;
|
|
25
28
|
class DirectConnectInterface extends events_1.default {
|
|
@@ -66,12 +69,16 @@ class DirectConnectInterface extends events_1.default {
|
|
|
66
69
|
return peripheral_1.DirectConnectPeripheral.create(announcement);
|
|
67
70
|
}
|
|
68
71
|
createDeviceSetting(service) {
|
|
72
|
+
var _a, _b;
|
|
69
73
|
try {
|
|
70
74
|
const name = service.name;
|
|
71
75
|
const protocol = this.getProtocol(service);
|
|
72
|
-
|
|
76
|
+
const address = service.address;
|
|
77
|
+
const services = (_b = (_a = service.serviceUUIDs) === null || _a === void 0 ? void 0 : _a.map(uuid => (0, ble_1.beautifyUUID)(uuid, false))) === null || _b === void 0 ? void 0 : _b.join(',');
|
|
78
|
+
console.log('# created device setting from announcement', name, service.serviceUUIDs, services);
|
|
79
|
+
return { interface: DirectConnectInterface.INTERFACE_NAME, name, protocol, address, services };
|
|
73
80
|
}
|
|
74
|
-
catch (
|
|
81
|
+
catch (_c) {
|
|
75
82
|
return null;
|
|
76
83
|
}
|
|
77
84
|
}
|
|
@@ -81,6 +88,12 @@ class DirectConnectInterface extends events_1.default {
|
|
|
81
88
|
return null;
|
|
82
89
|
return this.createPeripheral(info.service);
|
|
83
90
|
}
|
|
91
|
+
addKnownDevice(settings) {
|
|
92
|
+
const announcement = this.createAnnouncementFromSettings(settings);
|
|
93
|
+
if (announcement) {
|
|
94
|
+
this.addService(announcement, 'known-device');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
84
97
|
getLogger() {
|
|
85
98
|
return this.logger;
|
|
86
99
|
}
|
|
@@ -236,6 +249,7 @@ class DirectConnectInterface extends events_1.default {
|
|
|
236
249
|
const device = this.createDeviceSetting(service);
|
|
237
250
|
if (!device)
|
|
238
251
|
return;
|
|
252
|
+
console.log('# emitting device', device, service);
|
|
239
253
|
this.emit('device', device, service);
|
|
240
254
|
}
|
|
241
255
|
buildDeviceSettings(matching = []) {
|
|
@@ -243,15 +257,22 @@ class DirectConnectInterface extends events_1.default {
|
|
|
243
257
|
}
|
|
244
258
|
addService(service, source) {
|
|
245
259
|
var _a, _b;
|
|
260
|
+
console.log(`# DirectConnectInterface.addService from ${source}`, service.name, service.serviceUUIDs);
|
|
261
|
+
const src = source === 'known-device' ? 'known-device' : 'mdns';
|
|
246
262
|
try {
|
|
247
263
|
service.transport = this.getName();
|
|
248
264
|
const existing = this.find(service);
|
|
249
265
|
if (existing) {
|
|
250
266
|
const idx = this.services.indexOf(existing);
|
|
251
267
|
this.services[idx] = { ts: Date.now(), service };
|
|
268
|
+
if (src !== 'known-device' && existing.source === 'known-device') {
|
|
269
|
+
this.services[idx].source = src;
|
|
270
|
+
this.logEvent({ message: 'device re-announced', device: service.name, announcement: service, source });
|
|
271
|
+
this.emitDevice(service);
|
|
272
|
+
}
|
|
252
273
|
}
|
|
253
274
|
else {
|
|
254
|
-
this.services.push({ ts: Date.now(), service });
|
|
275
|
+
this.services.push({ ts: Date.now(), service, source: src });
|
|
255
276
|
if (!((_a = service.serviceUUIDs) === null || _a === void 0 ? void 0 : _a.length))
|
|
256
277
|
return;
|
|
257
278
|
this.logEvent({ message: 'device announced', device: service.name, announcement: service, source });
|
|
@@ -306,6 +327,42 @@ class DirectConnectInterface extends events_1.default {
|
|
|
306
327
|
details.sort((a, b) => b.priority - a.priority);
|
|
307
328
|
return details[0].class;
|
|
308
329
|
}
|
|
330
|
+
createAnnouncementFromSettings(settings) {
|
|
331
|
+
if (settings.protocol && settings.address) {
|
|
332
|
+
const announcement = {
|
|
333
|
+
name: settings.name,
|
|
334
|
+
address: settings.address,
|
|
335
|
+
protocol: 'tcp',
|
|
336
|
+
port: DC_PORT,
|
|
337
|
+
type: DC_TYPE,
|
|
338
|
+
transport: 'wifi',
|
|
339
|
+
serviceUUIDs: this.getServiceUUIDs(settings),
|
|
340
|
+
};
|
|
341
|
+
console.log('# created announcement from settings', announcement);
|
|
342
|
+
return announcement;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
getServiceUUIDs(settings) {
|
|
346
|
+
if (settings.services && settings.services.length > 0) {
|
|
347
|
+
return settings.services.split(',').map(s => s.trim());
|
|
348
|
+
}
|
|
349
|
+
switch (settings.protocol) {
|
|
350
|
+
case 'fm':
|
|
351
|
+
return ['1826'];
|
|
352
|
+
case 'hr':
|
|
353
|
+
return ['180d'];
|
|
354
|
+
case 'wahoo':
|
|
355
|
+
return [consts_1.CSP, consts_2.WAHOO_ADVANCED_FTMS];
|
|
356
|
+
case 'cp':
|
|
357
|
+
return [consts_1.CSP];
|
|
358
|
+
case 'csc':
|
|
359
|
+
return [consts_1.CSC];
|
|
360
|
+
case 'zwift-play':
|
|
361
|
+
return ['0000000119ca465186e5fa29dcdd09d1'];
|
|
362
|
+
default:
|
|
363
|
+
return [];
|
|
364
|
+
}
|
|
365
|
+
}
|
|
309
366
|
getAdapterFactory() {
|
|
310
367
|
return ble_1.BleAdapterFactory.getInstance('wifi');
|
|
311
368
|
}
|
|
@@ -2,7 +2,7 @@ import EventEmitter from "events";
|
|
|
2
2
|
import { BindingInterface } from "@serialport/bindings-interface";
|
|
3
3
|
import { SerialPortStream } from '@serialport/stream';
|
|
4
4
|
import { SerialDeviceSettings, SerialScannerProps, PortMapping, SerialInterfaceProps } from "../types";
|
|
5
|
-
import { IncyclistInterface } from "../../types";
|
|
5
|
+
import { DeviceSettings, IncyclistInterface } from "../../types";
|
|
6
6
|
import { EventLogger } from "gd-eventlog";
|
|
7
7
|
export default class SerialInterface extends EventEmitter implements IncyclistInterface {
|
|
8
8
|
ifaceName: string;
|
|
@@ -31,4 +31,5 @@ export default class SerialInterface extends EventEmitter implements IncyclistIn
|
|
|
31
31
|
closePort(path: string): Promise<Boolean>;
|
|
32
32
|
scan(props: SerialScannerProps): Promise<SerialDeviceSettings[]>;
|
|
33
33
|
stopScan(): Promise<boolean>;
|
|
34
|
+
addKnownDevice(_settings: DeviceSettings): void;
|
|
34
35
|
}
|
package/lib/types/interface.d.ts
CHANGED