incyclist-devices 2.3.39 → 2.3.42
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/antv2/fe/adapter.js +2 -2
- 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 +56 -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 +2 -2
|
@@ -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 {};
|
package/lib/antv2/fe/adapter.js
CHANGED
|
@@ -49,8 +49,8 @@ class AntFEAdapter extends adapter_1.default {
|
|
|
49
49
|
if (this.promiseStop)
|
|
50
50
|
return;
|
|
51
51
|
if (this.promiseSendUpdate !== undefined) {
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
yield this.promiseSendUpdate;
|
|
53
|
+
this.promiseSendUpdate = undefined;
|
|
54
54
|
}
|
|
55
55
|
let isReset = request.reset && Object.keys(request).length === 1;
|
|
56
56
|
const update = isReset ? this.getCyclingMode().getBikeInitRequest() : this.getCyclingMode().buildUpdate(request);
|
|
@@ -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,15 @@ 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
|
+
return { interface: DirectConnectInterface.INTERFACE_NAME, name, protocol, address, services };
|
|
73
79
|
}
|
|
74
|
-
catch (
|
|
80
|
+
catch (_c) {
|
|
75
81
|
return null;
|
|
76
82
|
}
|
|
77
83
|
}
|
|
@@ -81,6 +87,12 @@ class DirectConnectInterface extends events_1.default {
|
|
|
81
87
|
return null;
|
|
82
88
|
return this.createPeripheral(info.service);
|
|
83
89
|
}
|
|
90
|
+
addKnownDevice(settings) {
|
|
91
|
+
const announcement = this.createAnnouncementFromSettings(settings);
|
|
92
|
+
if (announcement) {
|
|
93
|
+
this.addService(announcement, 'known-device');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
84
96
|
getLogger() {
|
|
85
97
|
return this.logger;
|
|
86
98
|
}
|
|
@@ -243,15 +255,21 @@ class DirectConnectInterface extends events_1.default {
|
|
|
243
255
|
}
|
|
244
256
|
addService(service, source) {
|
|
245
257
|
var _a, _b;
|
|
258
|
+
const src = source === 'known-device' ? 'known-device' : 'mdns';
|
|
246
259
|
try {
|
|
247
260
|
service.transport = this.getName();
|
|
248
261
|
const existing = this.find(service);
|
|
249
262
|
if (existing) {
|
|
250
263
|
const idx = this.services.indexOf(existing);
|
|
251
264
|
this.services[idx] = { ts: Date.now(), service };
|
|
265
|
+
if (src !== 'known-device' && existing.source === 'known-device') {
|
|
266
|
+
this.services[idx].source = src;
|
|
267
|
+
this.logEvent({ message: 'device re-announced', device: service.name, announcement: service, source });
|
|
268
|
+
this.emitDevice(service);
|
|
269
|
+
}
|
|
252
270
|
}
|
|
253
271
|
else {
|
|
254
|
-
this.services.push({ ts: Date.now(), service });
|
|
272
|
+
this.services.push({ ts: Date.now(), service, source: src });
|
|
255
273
|
if (!((_a = service.serviceUUIDs) === null || _a === void 0 ? void 0 : _a.length))
|
|
256
274
|
return;
|
|
257
275
|
this.logEvent({ message: 'device announced', device: service.name, announcement: service, source });
|
|
@@ -306,6 +324,41 @@ class DirectConnectInterface extends events_1.default {
|
|
|
306
324
|
details.sort((a, b) => b.priority - a.priority);
|
|
307
325
|
return details[0].class;
|
|
308
326
|
}
|
|
327
|
+
createAnnouncementFromSettings(settings) {
|
|
328
|
+
if (settings.protocol && settings.address) {
|
|
329
|
+
const announcement = {
|
|
330
|
+
name: settings.name,
|
|
331
|
+
address: settings.address,
|
|
332
|
+
protocol: 'tcp',
|
|
333
|
+
port: DC_PORT,
|
|
334
|
+
type: DC_TYPE,
|
|
335
|
+
transport: 'wifi',
|
|
336
|
+
serviceUUIDs: this.getServiceUUIDs(settings),
|
|
337
|
+
};
|
|
338
|
+
return announcement;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
getServiceUUIDs(settings) {
|
|
342
|
+
if (settings.services && settings.services.length > 0) {
|
|
343
|
+
return settings.services.split(',').map(s => s.trim());
|
|
344
|
+
}
|
|
345
|
+
switch (settings.protocol) {
|
|
346
|
+
case 'fm':
|
|
347
|
+
return ['1826'];
|
|
348
|
+
case 'hr':
|
|
349
|
+
return ['180d'];
|
|
350
|
+
case 'wahoo':
|
|
351
|
+
return [consts_1.CSP, consts_2.WAHOO_ADVANCED_FTMS];
|
|
352
|
+
case 'cp':
|
|
353
|
+
return [consts_1.CSP];
|
|
354
|
+
case 'csc':
|
|
355
|
+
return [consts_1.CSC];
|
|
356
|
+
case 'zwift-play':
|
|
357
|
+
return ['0000000119ca465186e5fa29dcdd09d1'];
|
|
358
|
+
default:
|
|
359
|
+
return [];
|
|
360
|
+
}
|
|
361
|
+
}
|
|
309
362
|
getAdapterFactory() {
|
|
310
363
|
return ble_1.BleAdapterFactory.getInstance('wifi');
|
|
311
364
|
}
|
|
@@ -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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "incyclist-devices",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.42",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@protobuf-ts/runtime": "^2.11.1",
|
|
6
6
|
"@serialport/bindings-interface": "^1.2.2",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"bonjour-service": "^1.3.0",
|
|
27
27
|
"eslint": "^9.35.0",
|
|
28
28
|
"jest": "^30.1.3",
|
|
29
|
-
"npm": "^11.6.
|
|
29
|
+
"npm": "^11.6.4",
|
|
30
30
|
"protoc": "^32.1.0",
|
|
31
31
|
"ts-jest": "^29.4.1",
|
|
32
32
|
"typescript": "^5.9.2"
|