{"version":3,"file":"HIDManager.js","sourceRoot":"","sources":["../../../TS/HID/HIDManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { HIDDeviceFound, ParseHIDDevice, HIDRequestDeviceOptions, HIDReport, HIDDeviceKey, HIDOpResult } from \"./HIDTypes.js\";\r\n\r\ntype DotNetReferenceType =\r\n {\r\n invokeMethod(methodIdentifier: string, ...args: any[]): T,\r\n invokeMethodAsync(methodIdentifier: string, ...args: any[]): Promise\r\n }\r\n\r\nexport class HIDManager\r\n{\r\n private hid: any = (navigator).hid; // The WebHID API root object\r\n private _hidReference: DotNetReferenceType | undefined = undefined;\r\n\r\n // All devices found on the last request\r\n // We keep a list of the most recent object because we can't serialize the \"real\" USBDevice to send back to C#\r\n // TODO: Find a better way to maintain it and keep consistent with the C# side...\r\n\r\n private _foundDevices: any[] = [];\r\n private _eventsRegistered: boolean = false;\r\n\r\n private _inputReportHandlers = new Map();\r\n\r\n public GetDevices = async (): Promise =>\r\n {\r\n let res: HIDOpResult = { success: true, message: \"\", hidDevicesFound: undefined };\r\n\r\n try\r\n {\r\n let devices = await this.hid.getDevices();\r\n let found: HIDDeviceFound[] = [];\r\n if (devices)\r\n {\r\n devices.forEach(d =>\r\n {\r\n found.push(ParseHIDDevice(d));\r\n this._foundDevices.push(d);\r\n });\r\n }\r\n\r\n res.hidDevicesFound = found;\r\n }\r\n catch (error)\r\n {\r\n res.success = false;\r\n res.message = error.message\r\n console.log(\"GetDevices error: \" + error.message);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n public RequestDevice = async (options: HIDRequestDeviceOptions): Promise =>\r\n {\r\n let res: HIDOpResult = { success: true, message: \"\", hidDevicesFound: undefined }\r\n function isEmpty(obj)\r\n {\r\n for (var prop in obj)\r\n {\r\n if (Object.prototype.hasOwnProperty.call(obj, prop))\r\n {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n try\r\n {\r\n let filters: any[] = [];\r\n let reqOptions: any = undefined;\r\n\r\n if (options && options != null && options.filters && options.filters != null && options.filters.length > 0)\r\n {\r\n options.filters.forEach(f =>\r\n {\r\n let filter: any = {};\r\n Object.keys(f).forEach(key =>\r\n {\r\n if (f[key] != null)\r\n {\r\n filter[key] = f[key];\r\n }\r\n });\r\n if (!isEmpty(filter))\r\n {\r\n filters.push(filter);\r\n }\r\n });\r\n\r\n if (filters.length > 0)\r\n {\r\n reqOptions = { filters: filters };\r\n }\r\n } else\r\n {\r\n reqOptions = { filters: [] };\r\n }\r\n\r\n let authorizedDevices = await this.hid.requestDevice(reqOptions);\r\n let authorizedDevice = authorizedDevices[0];\r\n\r\n res.hidDevicesFound = [ParseHIDDevice(authorizedDevice)];\r\n\r\n this._foundDevices.push(authorizedDevice);\r\n }\r\n catch (error)\r\n {\r\n res.success = false;\r\n res.message = error.message;\r\n\r\n console.log(\"RequestDevice error:\" + error.message);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n public OpenDevice = async (device: HIDDeviceFound): Promise =>\r\n {\r\n let res: HIDOpResult = { success: true, message: \"\", hidDevicesFound: [device] };\r\n\r\n try\r\n {\r\n let hidDevice = this.GetHIDDevice(device);\r\n\r\n if (!hidDevice)\r\n {\r\n res.success = false;\r\n res.message = \"Device not connected\";\r\n return res;\r\n }\r\n\r\n await hidDevice.open();\r\n\r\n hidDevice.addEventListener(\"inputreport\", (e) =>\r\n {\r\n if (this._inputReportHandlers.has(HIDDeviceKey(hidDevice)))\r\n {\r\n this._inputReportHandlers.get(HIDDeviceKey(hidDevice)).invokeMethodAsync('HandleInputReportAsync', {\r\n reportId: e.reportId,\r\n data: this.BufferToBase64(new Uint8Array(e.data.buffer))\r\n }).then();\r\n }\r\n });\r\n }\r\n catch (error)\r\n {\r\n res.success = false;\r\n res.message = error.message;\r\n console.log(\"OpenDevice error:\" + error.message);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n public CloseDevice = async (device: HIDDeviceFound): Promise =>\r\n {\r\n let res: HIDOpResult = { success: true, message: \"\", hidDevicesFound: undefined };\r\n\r\n try\r\n {\r\n let hidDevice = this.GetHIDDevice(device);\r\n if (!hidDevice)\r\n {\r\n res.success = false;\r\n res.message = \"Could not get HIDDevice\";\r\n return res;\r\n }\r\n\r\n if (this._inputReportHandlers.has(HIDDeviceKey(hidDevice)))\r\n {\r\n this._inputReportHandlers.delete(HIDDeviceKey(hidDevice));\r\n }\r\n\r\n await hidDevice.close();\r\n res.hidDevicesFound = [ParseHIDDevice(hidDevice)];\r\n }\r\n catch (error)\r\n {\r\n res.success = false;\r\n res.message = error.message;\r\n console.log(\"CloseDevice error: \" + error.message);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n public SendReport = async (device: HIDDeviceFound, reportId: number, data: string): Promise =>\r\n {\r\n let res: HIDOpResult = { success: true, message: \"\", hidDevicesFound: [device] };\r\n\r\n try\r\n {\r\n let hidDevice = this.GetHIDDevice(device);\r\n if (!hidDevice)\r\n {\r\n res.success = false;\r\n res.message = \"Device not connected\";\r\n return res;\r\n }\r\n\r\n await hidDevice.sendReport(reportId, data);\r\n }\r\n catch (error)\r\n {\r\n res.success = false;\r\n res.message = error.message;\r\n console.log(\"SendReport error: \" + error.message);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n public SetInputHandler = async (device: HIDDeviceFound, handler: any): Promise =>\r\n {\r\n let res: HIDOpResult = { success: true, message: \"\", hidDevicesFound: [device] };\r\n try\r\n {\r\n this._inputReportHandlers.set(HIDDeviceKey(device), handler);\r\n }\r\n catch (error)\r\n {\r\n res.success = false;\r\n res.message = error.message;\r\n console.log(\"SetInputHandler error: \" + error.message);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n private GetHIDDevice = (device: HIDDeviceFound): any =>\r\n {\r\n return this._foundDevices.find(\r\n d => d.vendorId == device.vendorId &&\r\n d.productId == device.productId);\r\n }\r\n\r\n private ConnectionStateChangedCallback = (event: any) =>\r\n {\r\n if (!this._hidReference) return;\r\n\r\n let method: string = \"\";\r\n\r\n let hidDevice = this.GetHIDDevice(event.device);\r\n\r\n if (event.type == \"disconnect\")\r\n {\r\n method = \"HandleDisconnect\";\r\n this._foundDevices = this._foundDevices.filter((d, index, arr) =>\r\n {\r\n return d.vendorId != hidDevice.vendorId &&\r\n d.productId != hidDevice.productId &&\r\n d.serialNumber != hidDevice.serialNumber;\r\n });\r\n }\r\n else if (event.type == \"connect\")\r\n {\r\n method = \"HandleConnect\";\r\n }\r\n else\r\n {\r\n console.warn(event);\r\n return;\r\n }\r\n\r\n this._hidReference.invokeMethodAsync(method, ParseHIDDevice(event.device));\r\n }\r\n\r\n public RegisterHIDEvents = (hid: DotNetReferenceType) =>\r\n {\r\n this._hidReference = hid;\r\n //TODO: Check why this event is not consistently being fired.\r\n if (!this._eventsRegistered)\r\n {\r\n this.hid.addEventListener(\"connect\", this.ConnectionStateChangedCallback);\r\n this.hid.addEventListener(\"disconnect\", this.ConnectionStateChangedCallback);\r\n this._eventsRegistered = true;\r\n }\r\n }\r\n\r\n public RemoveHIDEvents = (HID: DotNetReferenceType) =>\r\n {\r\n if (this._eventsRegistered)\r\n {\r\n this.hid.removeEventListener(\"connect\", this.ConnectionStateChangedCallback);\r\n this.hid.removeEventListener(\"disconnect\", this.ConnectionStateChangedCallback);\r\n }\r\n }\r\n\r\n private BufferToBase64 = (buf) =>\r\n {\r\n var binstr = Array.prototype.map.call(buf, (ch) =>\r\n {\r\n return String.fromCharCode(ch);\r\n }).join('');\r\n\r\n return btoa(binstr);\r\n }\r\n\r\n private Base64ToBuffer = (base64: string) =>\r\n {\r\n var binstr = atob(base64);\r\n var buf = new Uint8Array(binstr.length);\r\n\r\n Array.prototype.forEach.call(binstr, (ch, i) =>\r\n {\r\n buf[i] = ch.charCodeAt(0);\r\n });\r\n\r\n return buf;\r\n }\r\n}\r\n"]}