UNPKG

@huddly/device-api-usb

Version:

Huddly SDK device api which uses node-usb wrapper responsible for handling the transport layer of the communication and discovering the physical device/camera

77 lines (76 loc) 2.78 kB
/// <reference types="node" /> import { EventEmitter } from 'events'; import { usb } from 'usb'; import { InEndpoint, OutEndpoint } from 'usb/dist/usb/endpoint'; import { Interface } from 'usb/dist/usb/interface'; import ITransport from '@huddly/sdk-interfaces/lib/interfaces/ITransport'; export default class NodeUsbTransport extends EventEmitter implements ITransport { private readonly MAX_PACKET_SIZE; private readonly VSC_INTERFACE_CLASS; private readonly READ_STATES; private readonly className; private _device; private isPollingActive; private hlinkProtocolVersion; /***** Read Event Loop Helper Variables ******/ private readLoopChunks; private currentBufferReadSize; private expectedReadBufferSize; private currentStateOfReadLoop; /** * A boolean representation of the device being opened and its corresponding * vsc interface claimed for channeling the communication. * * @private * @type {boolean} * @memberof NodeUsbTransport */ private deviceClaimed; vscInterface: Interface; inEndpoint: InEndpoint; outEndpoint: OutEndpoint; /** * Getter method for device class attribute. * * @type {*} * @memberof NodeUsbTransport */ get device(): usb.Device; /** * Set method for device class attribute. * * @memberof NodeUsbTransport */ set device(device: usb.Device); constructor(device: usb.Device); init(): Promise<void>; initEventLoop(): void; performHlinkHandshake(): Promise<void>; readLoopReset(): void; private parseAndEmitFullyRetrievedMessage; private continueReadLogic; private onDataRetrievedHandler; startListen(): void; receiveMessage(msg: string, timeout?: number): Promise<any>; write(cmd: string, payload?: any): Promise<any>; splitAndSendPayloadInChunks(payload: Buffer): Promise<void>; subscribe(command: string): Promise<any>; unsubscribe(command: string): Promise<any>; readChunk(packetSize?: number): Promise<any>; sendChunk(chunk: Buffer): Promise<void>; /********* Teardown Methods *********/ stopUsbEndpointPoll(): Promise<void>; stopEventLoop(): Promise<void>; releaseEndpoints(): Promise<void>; close(): Promise<any>; /********* EventEmitter Overrides *********/ once(eventName: string, listener: any): this; on(eventName: string, listener: any): this; removeListener(eventName: string, listener: any): this; removeAllListeners(eventName?: string): this; /********* DEPRECATED/LEGACY METHODS *********/ receive(): Promise<Buffer>; read(receiveMsg?: string, timeout?: number): Promise<any>; setEventLoopReadSpeed(timeout?: number): void; clear(): Promise<void>; }