import { Aperture, DriveMode, ExposureMode, ImageSize, ISO, WhiteBalance } from '../configs';
import { DeviceInfo } from '../DeviceInfo';
import { DatatypeCode } from '../PTPDatacode';
import { PTPDevice, PTPEvent } from '../PTPDevice';
import { ConfigDesc, OperationResult, TakePhotoOption, Tethr } from '../Tethr';
import { TethrObject, TethrObjectInfo } from '../TethrObject';
import { TethrStorage } from '../TethrStorage';
type DevicePropScheme<T, D extends DatatypeCode> = {
    devicePropCode: number;
    datatypeCode: D;
    decode: (data: DataViewTypeForDatatypeCode<D>) => T | null;
    encode: (value: T) => DataViewTypeForDatatypeCode<D> | null;
};
type DataViewTypeForDatatypeCode<D extends DatatypeCode> = D extends DatatypeCode.String ? string : D extends DatatypeCode.Uint64 ? bigint : D extends DatatypeCode.Int64 ? bigint : D extends DatatypeCode.Uint128 ? bigint : D extends DatatypeCode.Int128 ? bigint : number;
export declare class TethrPTPUSB extends Tethr {
    readonly device: PTPDevice;
    protected _opened: boolean;
    constructor(device: PTPDevice);
    open(): Promise<void>;
    close(): Promise<void>;
    get opened(): boolean;
    get type(): 'ptpusb';
    get name(): string;
    setLog(log: boolean): void;
    setAperture(value: Aperture): Promise<{
        status: import("../Tethr").OperationResultStatus;
        message?: string | undefined;
    }>;
    getApertureDesc(): Promise<ConfigDesc<number | "auto">>;
    getBatteryLevelDesc(): Promise<ConfigDesc<number | "ac" | "low">>;
    getCanTakePhotoDesc(): Promise<ConfigDesc<boolean>>;
    setCaptureDelay(value: number): Promise<{
        status: import("../Tethr").OperationResultStatus;
        message?: string | undefined;
    }>;
    getCaptureDelayDesc(): Promise<ConfigDesc<number>>;
    setDriveMode(value: DriveMode): Promise<{
        status: import("../Tethr").OperationResultStatus;
        message?: string | undefined;
    }>;
    getDriveModeDesc(): Promise<ConfigDesc<"normal" | "burst" | "timelapse">>;
    setExposureComp(value: string): Promise<{
        status: import("../Tethr").OperationResultStatus;
        message?: string | undefined;
    }>;
    getExposureCompDesc(): Promise<ConfigDesc<string>>;
    setExposureMode(value: ExposureMode): Promise<{
        status: import("../Tethr").OperationResultStatus;
        message?: string | undefined;
    }>;
    getExposureModeDesc(): Promise<ConfigDesc<"video" | "C2" | "C1" | "C3" | `vendor:${string}` | "P" | "A" | "S" | "M" | "creative" | "action" | "portrait">>;
    setImageSize(value: ImageSize): Promise<{
        status: import("../Tethr").OperationResultStatus;
        message?: string | undefined;
    }>;
    getImageSizeDesc(): Promise<ConfigDesc<string>>;
    setIso(value: ISO): Promise<{
        status: import("../Tethr").OperationResultStatus;
        message?: string | undefined;
    }>;
    getIsoDesc(): Promise<ConfigDesc<number | "auto">>;
    getManufacturerDesc(): Promise<ConfigDesc<string>>;
    getModelDesc(): Promise<ConfigDesc<string>>;
    setWhiteBalance(value: WhiteBalance): Promise<{
        status: import("../Tethr").OperationResultStatus;
        message?: string | undefined;
    }>;
    getWhiteBalanceDesc(): Promise<ConfigDesc<"auto" | `vendor:${string}` | "auto cool" | "auto warm" | "auto ambience" | "daylight" | "shade" | "cloud" | "incandescent" | "fluorescent" | "tungsten" | "flash" | "underwater" | "manual" | "custom">>;
    setTimelapseNumber(value: number): Promise<{
        status: import("../Tethr").OperationResultStatus;
        message?: string | undefined;
    }>;
    getTimelapseNumberDesc(): Promise<ConfigDesc<number>>;
    setTimelapseInterval(value: number): Promise<{
        status: import("../Tethr").OperationResultStatus;
        message?: string | undefined;
    }>;
    getTimelapseIntervalDesc(): Promise<ConfigDesc<number>>;
    takePhoto({ doDownload }?: TakePhotoOption): Promise<OperationResult<TethrObject[]>>;
    protected setDevicePropValue<T, D extends DatatypeCode>({ devicePropCode, datatypeCode, encode, value, }: Omit<DevicePropScheme<T, D>, 'decode'> & {
        value: T;
    }): Promise<OperationResult>;
    protected getDevicePropDesc<T, D extends DatatypeCode>({ devicePropCode, datatypeCode, decode, }: Omit<DevicePropScheme<T, D>, 'encode'>): Promise<ConfigDesc<T>>;
    private isDevicePropSupported;
    protected getDeviceInfo(): Promise<DeviceInfo>;
    protected getObjectHandles(storageId?: number): Promise<number[]>;
    protected getObjectInfo(id: number): Promise<TethrObjectInfo>;
    protected getObject(objectID: number): Promise<ArrayBuffer>;
    protected getStorages(): Promise<TethrStorage[]>;
    protected onDevicePropChanged: (event: PTPEvent) => Promise<void>;
    protected getConfigNameByCode(code: number): keyof import("../configs").ConfigType | null;
    protected getObjectFormatNameByCode(code: number): string;
    static getDeviceInfo(device: PTPDevice): Promise<DeviceInfo>;
}
export {};
