mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-09-01 21:20:13 +02:00
* Added webbluetooth unit
This commit is contained in:
parent
5964333408
commit
8bb4d30b8f
399
packages/rtl/webbluetooth.pas
Normal file
399
packages/rtl/webbluetooth.pas
Normal file
@ -0,0 +1,399 @@
|
||||
Unit webbluetooth;
|
||||
|
||||
{$MODE ObjFPC}
|
||||
{$H+}
|
||||
{$modeswitch externalclass}
|
||||
|
||||
interface
|
||||
|
||||
uses SysUtils, 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.
|
Loading…
Reference in New Issue
Block a user