|
|
|
|
import { BaseInterface } from "./base";
|
|
|
|
|
import { Variant, interface as iface } from "dbus-next";
|
|
|
|
|
const { method, property, Interface } = iface;
|
|
|
|
|
|
|
|
|
|
export class BaseApplication extends BaseInterface {
|
|
|
|
|
services = [];
|
|
|
|
|
|
|
|
|
|
constructor(bus, path) {
|
|
|
|
|
super(bus, path, "org.freedesktop.DBus.ObjectManager");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
addService(service) {
|
|
|
|
|
this.services.push(service);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@method({ outSignature: "a{oa{sa{sv}}}" })
|
|
|
|
|
GetManagedObjects(val) {
|
|
|
|
|
const reply = {};
|
|
|
|
|
for (const service of this.services) {
|
|
|
|
|
reply[service.path] = {
|
|
|
|
|
[service.$name]: service.getProperties(),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
for (const char of service.characteristics) {
|
|
|
|
|
reply[char.path] = {
|
|
|
|
|
[char.$name]: char.getProperties(),
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return reply;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export class BaseService extends BaseInterface {
|
|
|
|
|
@property({ signature: "s" })
|
|
|
|
|
UUID;
|
|
|
|
|
|
|
|
|
|
@property({ signature: "b" })
|
|
|
|
|
Primary;
|
|
|
|
|
|
|
|
|
|
@property({ signature: "ao" })
|
|
|
|
|
get Characteristics() {
|
|
|
|
|
return this.characteristics.map((c) => c.path);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
characteristics = [];
|
|
|
|
|
|
|
|
|
|
constructor(bus, path) {
|
|
|
|
|
super(bus, path, "org.bluez.GattService1");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
addCharacteristic(char) {
|
|
|
|
|
this.characteristics.push(char);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getProperties() {
|
|
|
|
|
return {
|
|
|
|
|
UUID: new Variant("s", this.UUID),
|
|
|
|
|
Primary: new Variant("b", this.Primary),
|
|
|
|
|
Characteristics: new Variant("ao", this.Characteristics),
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export class BaseCharacteritic extends BaseInterface {
|
|
|
|
|
@property({ signature: "o" })
|
|
|
|
|
Service;
|
|
|
|
|
|
|
|
|
|
@property({ signature: "s" })
|
|
|
|
|
UUID;
|
|
|
|
|
|
|
|
|
|
@property({ signature: "as" })
|
|
|
|
|
Flags;
|
|
|
|
|
|
|
|
|
|
@property({ signature: "b" })
|
|
|
|
|
Notifying = false;
|
|
|
|
|
|
|
|
|
|
@property({ signature: "ay" })
|
|
|
|
|
Value = [];
|
|
|
|
|
|
|
|
|
|
constructor(bus, path, service, uuid, flags) {
|
|
|
|
|
super(bus, path, "org.bluez.GattCharacteristic1");
|
|
|
|
|
this.UUID = uuid;
|
|
|
|
|
this.Flags = flags;
|
|
|
|
|
this.service = service;
|
|
|
|
|
this.Service = service.path;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@method({ inSignature: "a{sv}", outSignature: "ay" })
|
|
|
|
|
ReadValue(options) {
|
|
|
|
|
if (this.read) {
|
|
|
|
|
return this.read(options);
|
|
|
|
|
} else {
|
|
|
|
|
console.log("ReadValue not definied");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@method({ inSignature: "aya{sv}" })
|
|
|
|
|
WriteValue(value, options) {
|
|
|
|
|
if (this.write) {
|
|
|
|
|
this.write(value, options);
|
|
|
|
|
} else {
|
|
|
|
|
console.log("WriteValue not definied");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@method({})
|
|
|
|
|
StartNotify() {
|
|
|
|
|
if (this.startNotify) {
|
|
|
|
|
this.startNotify();
|
|
|
|
|
} else {
|
|
|
|
|
console.log("not definied");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@method({})
|
|
|
|
|
StopNotify() {
|
|
|
|
|
if (this.stopNotify) {
|
|
|
|
|
this.stopNotify();
|
|
|
|
|
} else {
|
|
|
|
|
console.log("not definied");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
notify(value) {
|
|
|
|
|
this.Value = value;
|
|
|
|
|
Interface.emitPropertiesChanged(this, { Value: value });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getProperties() {
|
|
|
|
|
return {
|
|
|
|
|
Service: new Variant("o", this.Service),
|
|
|
|
|
UUID: new Variant("s", this.UUID),
|
|
|
|
|
Flags: new Variant("as", this.Flags),
|
|
|
|
|
Value: new Variant("ay", []),
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|