{"version":3,"file":"BTManager.js","sourceRoot":"","sources":["../../../TS/BT/BTManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { BTDeviceFound, BTDeviceFilter, BTRequestDeviceOptions, ParseBTDevice, BTCharacteristicKey, BTDeviceKey, BTCharacteristic, BTOpResult } from \"./BTTypes.js\";\r\n\r\ntype DotNetReferenceType = {\r\n invokeMethod(methodIdentifier: string, ...args: any[]): T,\r\n invokeMethodAsync(methodIdentifier: string, ...args: any[]): Promise\r\n}\r\n\r\nexport class BTManager {\r\n private bt: any = (navigator).bluetooth; \r\n private _foundDevices: any[] = [];\r\n\r\n private _characteristicHandlers = new Map>();\r\n private _disconnectHandlers = new Map();\r\n private _listeners = new Map();\r\n\r\n public GetDevices = async (): Promise => {\r\n let res: BTOpResult = {success: true, message: \"\", btDevicesFound: []}\r\n try {\r\n let devices = await this.bt.getDevices();\r\n let found: BTDeviceFound[] = [];\r\n if (devices) {\r\n devices.forEach(d => {\r\n found.push(ParseBTDevice(d));\r\n this._foundDevices.push(d);\r\n });\r\n }\r\n res.btDevicesFound = found;\r\n }\r\n catch (error) {\r\n res.success = false;\r\n res.message = error.message;\r\n console.log(\"GetDevices error:\" + error);\r\n }\r\n return res;\r\n }\r\n\r\n public RequestDevice = async (options: BTRequestDeviceOptions): Promise => {\r\n let res: BTOpResult = { success: true, message: \"\", btDevicesFound: undefined };\r\n\r\n function isEmpty(obj) {\r\n for (var prop in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n let reqOptions: any = {};\r\n if (!options.acceptAllDevices) {\r\n reqOptions = { filters: [], services: [] };\r\n let loc = 0;\r\n\r\n try {\r\n\r\n let filters: any[] = [];\r\n\r\n loc = 1;\r\n if (options && options != null && options.filters && options.filters != null && options.filters.length > 0) {\r\n options.filters.forEach(f => {\r\n loc = 2;\r\n let filter: any = {};\r\n Object.keys(f).forEach(key => {\r\n if (f[key] != null) {\r\n filter[key] = f[key];\r\n }\r\n });\r\n loc = 3;\r\n if (!isEmpty(filter)) {\r\n filters.push(filter);\r\n }\r\n });\r\n loc = 4;\r\n if (filters.length > 0) {\r\n reqOptions.filters = filters;\r\n }\r\n }\r\n let services: string[] = [];\r\n\r\n loc = 5;\r\n if (options && options != null && options.optionalServices && options.optionalServices != null && options.optionalServices.length > 0) {\r\n options.optionalServices.forEach(f => {\r\n loc = 6;\r\n let service: string = f;\r\n if (!isEmpty(service)) {\r\n services.push(service);\r\n }\r\n });\r\n loc = 7;\r\n if (services.length > 0) {\r\n reqOptions.services = services;\r\n }\r\n }\r\n }\r\n catch (error) {\r\n res.success = false;\r\n res.message = error.message;\r\n console.log(\"RequestDevice - error at \" + loc + \":\" + error);\r\n return res;\r\n }\r\n }\r\n else {\r\n reqOptions = { acceptAllDevices: true };\r\n }\r\n\r\n let hidDevice: any = {};\r\n try {\r\n let authorizedDevice = await this.bt.requestDevice(reqOptions);\r\n hidDevice = ParseBTDevice(authorizedDevice);\r\n this._foundDevices.push(authorizedDevice);\r\n }\r\n catch (error) {\r\n res.success = false;\r\n res.message = error.message;\r\n console.log(\"bt.requestDevice error: \" + error);\r\n return res;\r\n }\r\n\r\n res.btDevicesFound = [ hidDevice ];\r\n return res;\r\n }\r\n\r\n public OpenDevice = async (device: BTDeviceFound, serviceId: string, characteristicId: string): Promise => {\r\n let res: BTOpResult = { success: true, message: \"\", btDevicesFound: [device]};\r\n\r\n try {\r\n let btDevice = this.GetBTDevice(device);\r\n if (!btDevice) {\r\n res.success = false;\r\n res.message = \"Couldn't get BTDevice\";\r\n console.log(\"OpenDevice: \" + res.message);\r\n return res;\r\n }\r\n\r\n if (btDevice.gatt.connected) {\r\n res.message = \"Device already open\";\r\n console.log(\"OpenDevice: \" + res.message);\r\n return res;\r\n }\r\n\r\n let conRes = await btDevice.gatt.connect();\r\n if (conRes.connected) {\r\n if (!this._listeners.has(BTDeviceKey(device) + \"disconnect\")) {\r\n btDevice.addEventListener('gattserverdisconnected', async (e) => {\r\n try {\r\n console.log(\"gattserverdisconnected\");\r\n\r\n if (this._disconnectHandlers.has(BTDeviceKey(device))) {\r\n let discoHandler = this._disconnectHandlers.get(BTDeviceKey(device));\r\n if (discoHandler !== undefined) {\r\n await discoHandler.invokeMethodAsync('OnDeviceDisconnected', device);\r\n }\r\n }\r\n else {\r\n console.log(\"No disconnect handler registered\");\r\n }\r\n }\r\n catch (error) {\r\n console.log(\"gattserverdisconnected error: \" + error);\r\n }\r\n });\r\n this._listeners.set(BTDeviceKey(device) + \"disconnect\", true);\r\n }\r\n else {\r\n //console.log(\"Listener already installed: \" + BTDeviceKey(device) + \"disconnect\");\r\n }\r\n res.btDevicesFound = [device];\r\n }\r\n else {\r\n res.success = false;\r\n res.message = \"Could not connect to gatt\";\r\n }\r\n }\r\n catch (error) {\r\n res.success = false;\r\n res.message = error.message;\r\n console.log(\"OpenDevice error: \" + error);\r\n }\r\n return res;\r\n }\r\n\r\n public OpenCharacteristic = async (device: BTDeviceFound, serviceId: string, characteristicId: string, handler: DotNetReferenceType): Promise => {\r\n let res: BTOpResult = { success: true, message: \"\", btDevicesFound: [device] };\r\n\r\n try {\r\n let btDevice = this.GetBTDevice(device);\r\n let service = await btDevice.gatt.getPrimaryService(serviceId);\r\n let characteristic = await service.getCharacteristic(characteristicId);\r\n await characteristic.startNotifications();\r\n\r\n if (!this._listeners.has(BTDeviceKey(device) + serviceId + characteristicId)) {\r\n this._listeners.set(BTDeviceKey(device) + serviceId + characteristicId, true);\r\n\r\n characteristic.addEventListener('characteristicvaluechanged', async (e) => {\r\n //console.log(\"characteristicvaluechanged\");\r\n if (!this._characteristicHandlers.get(BTDeviceKey(device))) {\r\n this._characteristicHandlers.set(BTDeviceKey(device), new Map());\r\n }\r\n let devHandlers = this._characteristicHandlers.get(BTDeviceKey(device))\r\n if (devHandlers !== undefined) {\r\n let handler = devHandlers.get(BTCharacteristicKey(e.target.service.uuid, e.target.uuid))\r\n if (handler !== undefined) {\r\n let btc: BTCharacteristic = { serviceId: e.target.service.uuid, characteristicId: e.target.uuid, data: this.BufferToBase64(new Uint8Array(e.target.value.buffer)) };\r\n await handler.invokeMethodAsync('OnCharacteristicChanged', btc);\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (!this._characteristicHandlers.get(BTDeviceKey(device))) {\r\n this._characteristicHandlers.set(BTDeviceKey(device), new Map());\r\n }\r\n let devHandlers = this._characteristicHandlers.get(BTDeviceKey(device));\r\n if (devHandlers !== undefined) {\r\n devHandlers.set(BTCharacteristicKey(serviceId, characteristicId), handler);\r\n }\r\n }\r\n catch (error) {\r\n res.success = false;\r\n res.message = error.message;\r\n console.log(\"OpenCharacteristic error: \" + error);\r\n }\r\n return res;\r\n }\r\n\r\n public SetDisconnectHandler = async (device: BTDeviceFound, handler: DotNetReferenceType): Promise => {\r\n let res: BTOpResult = { success: true, message: \"\", btDevicesFound: [device] };\r\n try {\r\n this._disconnectHandlers.set(BTDeviceKey(device), handler);\r\n }\r\n catch (error) {\r\n res.success = false;\r\n res.message = error.message;\r\n console.log(\"SetDisconnectHandler error: \" + error);\r\n }\r\n return res;\r\n }\r\n\r\n public CloseDevice = async (device: BTDeviceFound): Promise => {\r\n let res: BTOpResult = { success: true, message: \"\", btDevicesFound: [device] };\r\n\r\n try {\r\n let btDevice = this.GetBTDevice(device);\r\n if (!btDevice) {\r\n res.success = false;\r\n res.message = \"Couldn't get BTDevice\";\r\n return res;\r\n }\r\n\r\n if (this._disconnectHandlers.has(BTDeviceKey(device))) {\r\n this._disconnectHandlers.delete(BTDeviceKey(device));\r\n }\r\n\r\n if (this._characteristicHandlers.has(BTDeviceKey(device))) {\r\n this._characteristicHandlers.delete(BTDeviceKey(device));\r\n }\r\n\r\n btDevice.gatt.disconnect();\r\n }\r\n catch (error) {\r\n res.success = false;\r\n res.message = error.message;\r\n console.log(\"CloseDevice error:\" + error);\r\n }\r\n return res;\r\n }\r\n\r\n public WriteValue = async (device: BTDeviceFound, serviceId: string, characteristicId: string, data: string): Promise => {\r\n let res: BTOpResult = { success: true, message: \"\", btDevicesFound: [device] };\r\n\r\n try {\r\n let btDevice = this.GetBTDevice(device);\r\n\r\n if (!btDevice.gatt.connected) {\r\n throw \"Device is not connected\";\r\n }\r\n\r\n let service = await btDevice.gatt.getPrimaryService(serviceId);\r\n let characteristic = await service.getCharacteristic(characteristicId);\r\n //const buffer = this.Base64ToBuffer(data);\r\n //console.log(\"WriteValue data: \" + this.BufferToHexString(buffer));\r\n await characteristic.writeValueWithoutResponse(data);\r\n }\r\n catch (error) {\r\n res.success = false;\r\n res.message = error.message;\r\n console.log(\"WriteValue error: \" + error.message);\r\n }\r\n return res;\r\n }\r\n \r\n private GetBTDevice = (device: BTDeviceFound): any => {\r\n return this._foundDevices.find(\r\n d => d.id == device.id &&\r\n d.name == device.name );\r\n }\r\n\r\n private BufferToHexString = (buf): string => {\r\n var ua = new Uint8Array(buf);\r\n var val = \"\";\r\n var i = 0;\r\n while (i < ua.length) {\r\n if (ua[i] < 16) {\r\n val += \"0\";\r\n }\r\n val += ua[i].toString(16);\r\n i++;\r\n }\r\n return val;\r\n }\r\n \r\n private BufferToBase64 = (buf) => {\r\n var binstr = Array.prototype.map.call(buf, (ch) => {\r\n return String.fromCharCode(ch);\r\n }).join('');\r\n return btoa(binstr);\r\n }\r\n\r\n private Base64ToBuffer = (base64: string) => {\r\n var binstr = atob(base64);\r\n var buf = new Uint8Array(binstr.length);\r\n Array.prototype.forEach.call(binstr, (ch, i) => {\r\n buf[i] = ch.charCodeAt(0);\r\n });\r\n return buf;\r\n }\r\n}\r\n\r\n"]}