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