mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-04-27 19:43:39 +02:00
399 lines
15 KiB
ObjectPascal
399 lines
15 KiB
ObjectPascal
Unit webbluetooth;
|
|
|
|
{$MODE ObjFPC}
|
|
{$H+}
|
|
{$modeswitch externalclass}
|
|
|
|
interface
|
|
|
|
uses JS,web;
|
|
|
|
Type
|
|
// Forward class definitions
|
|
TJSBluetooth = Class;
|
|
TJSBluetoothPermissionResult = Class;
|
|
TJSValueEvent = Class;
|
|
TJSBluetoothDevice = Class;
|
|
TJSBluetoothManufacturerDataMap = Class;
|
|
TJSBluetoothServiceDataMap = Class;
|
|
TJSBluetoothAdvertisingEvent = Class;
|
|
TJSBluetoothRemoteGATTServer = Class;
|
|
TJSBluetoothRemoteGATTService = Class;
|
|
TJSBluetoothRemoteGATTCharacteristic = Class;
|
|
TJSBluetoothCharacteristicProperties = Class;
|
|
TJSBluetoothRemoteGATTDescriptor = Class;
|
|
TJSCharacteristicEventHandlers = Class;
|
|
TJSBluetoothDeviceEventHandlers = Class;
|
|
TJSServiceEventHandlers = Class;
|
|
TJSBluetoothUUID = Class;
|
|
TJSBluetoothDataFilterInit = Class;
|
|
TJSBluetoothLEScanFilterInit = Class;
|
|
TJSRequestDeviceOptions = Class;
|
|
TJSBluetoothPermissionDescriptor = Class;
|
|
TJSAllowedBluetoothDevice = Class;
|
|
TJSBluetoothPermissionData = Class;
|
|
TJSValueEventInit = Class;
|
|
TJSBluetoothAdvertisingEventInit = Class;
|
|
UUID = String;
|
|
// Union of DOMString, unsigned long
|
|
BluetoothServiceUUID = JSValue;
|
|
// Union of DOMString, unsigned long
|
|
BluetoothCharacteristicUUID = JSValue;
|
|
// Union of DOMString, unsigned long
|
|
BluetoothDescriptorUUID = JSValue;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothDataFilterInit
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSBluetoothDataFilterInit = class(TJSObject)
|
|
dataPrefix : TJSBufferSource;
|
|
mask : TJSBufferSource;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothLEScanFilterInit
|
|
--------------------------------------------------------------------}
|
|
|
|
TBluetoothServiceUUIDDynArray = Array of BluetoothServiceUUID;
|
|
TJSBluetoothLEScanFilterInit = class(TJSObject)
|
|
services : TBluetoothServiceUUIDDynArray;
|
|
name : String;
|
|
namePrefix : String;
|
|
manufacturerData : TJSObject;
|
|
serviceData : TJSObject;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSRequestDeviceOptions
|
|
--------------------------------------------------------------------}
|
|
|
|
TTJSBluetoothLEScanFilterInitDynArray = Array of TJSBluetoothLEScanFilterInit;
|
|
TJSRequestDeviceOptions = class(TJSObject)
|
|
filters : TTJSBluetoothLEScanFilterInitDynArray;
|
|
optionalServices : TBluetoothServiceUUIDDynArray;
|
|
acceptAllDevices : boolean;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothPermissionDescriptor
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSBluetoothPermissionDescriptor = class(TJSObject)
|
|
deviceId : String;
|
|
filters : TTJSBluetoothLEScanFilterInitDynArray;
|
|
optionalServices : TBluetoothServiceUUIDDynArray;
|
|
acceptAllDevices : boolean;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSAllowedBluetoothDevice
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSAllowedBluetoothDevice = class(TJSObject)
|
|
deviceId : String;
|
|
mayUseGATT : boolean;
|
|
allowedServices : JSValue;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothPermissionData
|
|
--------------------------------------------------------------------}
|
|
|
|
TTJSAllowedBluetoothDeviceDynArray = Array of TJSAllowedBluetoothDevice;
|
|
TJSBluetoothPermissionData = class(TJSObject)
|
|
allowedDevices : TTJSAllowedBluetoothDeviceDynArray;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSValueEventInit
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSValueEventInit = class(TJSObject)
|
|
value : JSValue;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothAdvertisingEventInit
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSValueDynArray = Array of JSValue;
|
|
TJSBluetoothAdvertisingEventInit = class(TJSObject)
|
|
device : TJSBluetoothDevice;
|
|
uuids : TJSValueDynArray;
|
|
name : String;
|
|
appearance : Cardinal;
|
|
txPower : byte;
|
|
rssi : byte;
|
|
manufacturerData : TJSObject;
|
|
serviceData : TJSObject;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetooth
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSBluetooth = class external name 'Bluetooth' (TJSEventTarget)
|
|
Private
|
|
FreferringDevice : TJSBluetoothDevice; external name 'referringDevice';
|
|
Public
|
|
onavailabilitychanged : TJSEventHandler;
|
|
function getAvailability: TJSPromise;
|
|
function requestDevice(options : TJSRequestDeviceOptions): TJSPromise; overload;
|
|
function requestDevice: TJSPromise; overload;
|
|
Property referringDevice : TJSBluetoothDevice Read FreferringDevice;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothPermissionResult
|
|
--------------------------------------------------------------------}
|
|
|
|
TTJSBluetoothDeviceDynArray = Array of TJSBluetoothDevice;
|
|
TJSBluetoothPermissionResult = class external name 'BluetoothPermissionResult' (TJSOBject)
|
|
Private
|
|
Public
|
|
devices : TTJSBluetoothDeviceDynArray;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSValueEvent
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSValueEvent = class external name 'ValueEvent' (TJSEvent)
|
|
Private
|
|
Fvalue : JSValue; external name 'value';
|
|
Public
|
|
Property value : JSValue Read Fvalue;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothDevice
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSBluetoothDevice = class external name 'BluetoothDevice'
|
|
Private
|
|
Fid : String; external name 'id';
|
|
Fname : String; external name 'name';
|
|
Fgatt : TJSBluetoothRemoteGATTServer; external name 'gatt';
|
|
FwatchingAdvertisements : boolean; external name 'watchingAdvertisements';
|
|
Public
|
|
function watchAdvertisements: TJSPromise;
|
|
Procedure unwatchAdvertisements;
|
|
Property id : String Read Fid;
|
|
Property name : String Read Fname;
|
|
Property gatt : TJSBluetoothRemoteGATTServer Read Fgatt;
|
|
Property watchingAdvertisements : boolean Read FwatchingAdvertisements;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothManufacturerDataMap
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSBluetoothManufacturerDataMap = class external name 'BluetoothManufacturerDataMap'
|
|
Private
|
|
Public
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothServiceDataMap
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSBluetoothServiceDataMap = class external name 'BluetoothServiceDataMap'
|
|
Private
|
|
Public
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothAdvertisingEvent
|
|
--------------------------------------------------------------------}
|
|
|
|
TUUIDDynArray = Array of UUID;
|
|
TJSBluetoothAdvertisingEvent = class external name 'BluetoothAdvertisingEvent' (TJSEvent)
|
|
Private
|
|
Fdevice : TJSBluetoothDevice; external name 'device';
|
|
Fuuids : TUUIDDynArray; external name 'uuids';
|
|
Fname : String; external name 'name';
|
|
Fappearance : Cardinal; external name 'appearance';
|
|
FtxPower : byte; external name 'txPower';
|
|
Frssi : byte; external name 'rssi';
|
|
FmanufacturerData : TJSBluetoothManufacturerDataMap; external name 'manufacturerData';
|
|
FserviceData : TJSBluetoothServiceDataMap; external name 'serviceData';
|
|
Public
|
|
Property device : TJSBluetoothDevice Read Fdevice;
|
|
Property uuids : TUUIDDynArray Read Fuuids;
|
|
Property name : String Read Fname;
|
|
Property appearance : Cardinal Read Fappearance;
|
|
Property txPower : byte Read FtxPower;
|
|
Property rssi : byte Read Frssi;
|
|
Property manufacturerData : TJSBluetoothManufacturerDataMap Read FmanufacturerData;
|
|
Property serviceData : TJSBluetoothServiceDataMap Read FserviceData;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothRemoteGATTServer
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSBluetoothRemoteGATTServer = class external name 'BluetoothRemoteGATTServer'
|
|
Private
|
|
Fdevice : TJSBluetoothDevice; external name 'device';
|
|
Fconnected : boolean; external name 'connected';
|
|
Public
|
|
function connect: TJSPromise;
|
|
Procedure disconnect;
|
|
function getPrimaryService(service : BluetoothServiceUUID): TJSPromise;
|
|
function getPrimaryServices(service : BluetoothServiceUUID): TJSPromise; overload;
|
|
function getPrimaryServices: TJSPromise; overload;
|
|
Property device : TJSBluetoothDevice Read Fdevice;
|
|
Property connected : boolean Read Fconnected;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothRemoteGATTService
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSBluetoothRemoteGATTService = class external name 'BluetoothRemoteGATTService'
|
|
Private
|
|
Fdevice : TJSBluetoothDevice; external name 'device';
|
|
Fuuid : UUID; external name 'uuid';
|
|
FisPrimary : boolean; external name 'isPrimary';
|
|
Public
|
|
function getCharacteristic(characteristic : BluetoothCharacteristicUUID): TJSPromise;
|
|
function getCharacteristics(characteristic : BluetoothCharacteristicUUID): TJSPromise; overload;
|
|
function getCharacteristics: TJSPromise; overload;
|
|
function getIncludedService(service : BluetoothServiceUUID): TJSPromise;
|
|
function getIncludedServices(service : BluetoothServiceUUID): TJSPromise; overload;
|
|
function getIncludedServices: TJSPromise; overload;
|
|
Property device : TJSBluetoothDevice Read Fdevice;
|
|
Property _uuid : UUID Read Fuuid;
|
|
Property isPrimary : boolean Read FisPrimary;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothRemoteGATTCharacteristic
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSBluetoothRemoteGATTCharacteristic = class external name 'BluetoothRemoteGATTCharacteristic'
|
|
Private
|
|
Fservice : TJSBluetoothRemoteGATTService; external name 'service';
|
|
Fuuid : UUID; external name 'uuid';
|
|
Fproperties : TJSBluetoothCharacteristicProperties; external name 'properties';
|
|
Fvalue : TJSDataView; external name 'value';
|
|
Public
|
|
function getDescriptor(descriptor : BluetoothDescriptorUUID): TJSPromise;
|
|
function getDescriptors(descriptor : BluetoothDescriptorUUID): TJSPromise; overload;
|
|
function getDescriptors: TJSPromise; overload;
|
|
function readValue: TJSPromise;
|
|
function writeValue(value : TJSBufferSource): TJSPromise;
|
|
function startNotifications: TJSPromise;
|
|
function stopNotifications: TJSPromise;
|
|
Property service : TJSBluetoothRemoteGATTService Read Fservice;
|
|
Property _uuid : UUID Read Fuuid;
|
|
Property properties : TJSBluetoothCharacteristicProperties Read Fproperties;
|
|
Property value : TJSDataView Read Fvalue;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothCharacteristicProperties
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSBluetoothCharacteristicProperties = class external name 'BluetoothCharacteristicProperties'
|
|
Private
|
|
Fbroadcast : boolean; external name 'broadcast';
|
|
Fread : boolean; external name 'read';
|
|
FwriteWithoutResponse : boolean; external name 'writeWithoutResponse';
|
|
Fwrite : boolean; external name 'write';
|
|
Fnotify : boolean; external name 'notify';
|
|
Findicate : boolean; external name 'indicate';
|
|
FauthenticatedSignedWrites : boolean; external name 'authenticatedSignedWrites';
|
|
FreliableWrite : boolean; external name 'reliableWrite';
|
|
FwritableAuxiliaries : boolean; external name 'writableAuxiliaries';
|
|
Public
|
|
Property broadcast : boolean Read Fbroadcast;
|
|
Property read : boolean Read Fread;
|
|
Property writeWithoutResponse : boolean Read FwriteWithoutResponse;
|
|
Property write : boolean Read Fwrite;
|
|
Property notify : boolean Read Fnotify;
|
|
Property indicate : boolean Read Findicate;
|
|
Property authenticatedSignedWrites : boolean Read FauthenticatedSignedWrites;
|
|
Property reliableWrite : boolean Read FreliableWrite;
|
|
Property writableAuxiliaries : boolean Read FwritableAuxiliaries;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothRemoteGATTDescriptor
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSBluetoothRemoteGATTDescriptor = class external name 'BluetoothRemoteGATTDescriptor'
|
|
Private
|
|
Fcharacteristic : TJSBluetoothRemoteGATTCharacteristic; external name 'characteristic';
|
|
Fuuid : UUID; external name 'uuid';
|
|
Fvalue : TJSDataView; external name 'value';
|
|
Public
|
|
function readValue: TJSPromise;
|
|
function writeValue(value : TJSBufferSource): TJSPromise;
|
|
Property characteristic : TJSBluetoothRemoteGATTCharacteristic Read Fcharacteristic;
|
|
Property _uuid : UUID Read Fuuid;
|
|
Property value : TJSDataView Read Fvalue;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSCharacteristicEventHandlers
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSCharacteristicEventHandlers = class external name 'CharacteristicEventHandlers'
|
|
Private
|
|
Public
|
|
oncharacteristicvaluechanged : TJSEventHandler;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothDeviceEventHandlers
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSBluetoothDeviceEventHandlers = class external name 'BluetoothDeviceEventHandlers'
|
|
Private
|
|
Public
|
|
ongattserverdisconnected : TJSEventHandler;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSServiceEventHandlers
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSServiceEventHandlers = class external name 'ServiceEventHandlers'
|
|
Private
|
|
Public
|
|
onserviceadded : TJSEventHandler;
|
|
onservicechanged : TJSEventHandler;
|
|
onserviceremoved : TJSEventHandler;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSBluetoothUUID
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSBluetoothUUID = class external name 'BluetoothUUID'
|
|
Private
|
|
Public
|
|
function getService(name : JSValue): UUID;
|
|
function getCharacteristic(name : JSValue): UUID;
|
|
function getDescriptor(name : JSValue): UUID;
|
|
function canonicalUUID(alias : NativeInt): UUID;
|
|
end;
|
|
|
|
{ --------------------------------------------------------------------
|
|
TJSNavigator
|
|
--------------------------------------------------------------------}
|
|
|
|
TJSNavigator = class external name 'Navigator'
|
|
Private
|
|
Fbluetooth : TJSBluetooth; external name 'bluetooth';
|
|
Public
|
|
Property bluetooth : TJSBluetooth Read Fbluetooth;
|
|
end;
|
|
|
|
implementation
|
|
|
|
|
|
end.
|