@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
TypeScript
/// <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>;
}