UNPKG

tethr

Version:

Controlls USB-connected cameras, webcam, and smartphone camera from browser

247 lines (246 loc) 12 kB
import EventEmitter from 'eventemitter3'; import { vec2 } from 'linearly'; import { Aperture, BatteryLevel, ConfigName, ConfigType, DriveMode, ExposureComp, ExposureMeteringMode, ExposureMode, FlashMode, FocalLength, FocusMeteringMode, FocusMode, FocusPeaking, FunctionalMode, ImageAspect, ImageQuality, ImageSize, ISO, ManualFocusOption, ShutterSpeed, WhiteBalance } from './configs'; import { TethrObject } from './TethrObject'; export type OperationResultStatus = 'ok' | 'unsupported' | 'invalid parameter' | 'busy' | 'general error'; export type OperationResult<T = void> = T extends void ? { status: OperationResultStatus; message?: string; } : { status: Exclude<OperationResultStatus, 'ok'>; message?: string; } | { status: 'ok'; value: T; }; export type ConfigDescOption<T> = { type: 'enum'; values: T[]; } | { type: 'range'; min: T; max: T; step: T; }; export type ConfigDesc<T> = { value: T | null; } & ({ writable: true; option: ConfigDescOption<T>; } | { writable: false; option?: ConfigDescOption<T>; }); export interface TakePhotoOption { doDownload?: boolean; } type EventTypes = { [N in ConfigName as `${N}Change`]: ConfigDesc<ConfigType[N]>; } & { change: [name: ConfigName, value: ConfigType[ConfigName]]; disconnect: void; progress: { progress: number; }; }; type ConfigSetters = { [N in ConfigName as `set${Capitalize<N>}`]: (value: ConfigType[N]) => Promise<OperationResult>; }; type ConfigGetters = { [N in ConfigName as `get${Capitalize<N>}`]: () => Promise<ConfigType[N] | null>; }; type ConfigDescGetters = { [N in ConfigName as `get${Capitalize<N>}Desc`]: () => Promise<ConfigDesc<ConfigType[N]>>; }; export type TethrDeviceType = 'ptpusb' | 'webcam'; export declare abstract class Tethr extends EventEmitter<EventTypes> implements ConfigSetters, ConfigGetters, ConfigDescGetters { constructor(); emit(eventName: keyof EventTypes, ...args: any[]): boolean; abstract open(): Promise<void>; abstract close(): Promise<void>; abstract get opened(): boolean; abstract get type(): TethrDeviceType; abstract get name(): string; setLog(log: boolean): void; /** * Export all writable configs to a plain object. */ exportConfigs(): Promise<Partial<ConfigType>>; /** * Apply all writable configs. */ importConfigs(configs: Partial<ConfigType>): Promise<void>; get<N extends ConfigName>(name: N): Promise<ConfigType[N] | null>; set<N extends ConfigName>(name: N, value: ConfigType[N]): Promise<OperationResult>; getDesc<N extends ConfigName>(name: N): Promise<ConfigDesc<ConfigType[N]>>; setAperture(value: Aperture): Promise<OperationResult>; getAperture(): Promise<Aperture | null>; getApertureDesc(): Promise<ConfigDesc<Aperture>>; setAutoFocusFrameCenter(value: vec2): Promise<OperationResult>; getAutoFocusFrameCenter(): Promise<vec2 | null>; getAutoFocusFrameCenterDesc(): Promise<ConfigDesc<vec2>>; setAutoFocusFrameSize(value: string): Promise<OperationResult>; getAutoFocusFrameSize(): Promise<string | null>; getAutoFocusFrameSizeDesc(): Promise<ConfigDesc<string>>; setBatteryLevel(value: BatteryLevel): Promise<OperationResult>; getBatteryLevel(): Promise<BatteryLevel | null>; getBatteryLevelDesc(): Promise<ConfigDesc<BatteryLevel>>; setBurstInterval(value: number): Promise<OperationResult>; getBurstInterval(): Promise<number | null>; getBurstIntervalDesc(): Promise<ConfigDesc<number>>; setBurstNumber(value: number): Promise<OperationResult>; getBurstNumber(): Promise<number | null>; getBurstNumberDesc(): Promise<ConfigDesc<number>>; setCanRunAutoFocus(value: boolean): Promise<OperationResult>; getCanRunAutoFocus(): Promise<boolean | null>; getCanRunAutoFocusDesc(): Promise<ConfigDesc<boolean>>; setCanRunManualFocus(value: boolean): Promise<OperationResult>; getCanRunManualFocus(): Promise<boolean | null>; getCanRunManualFocusDesc(): Promise<ConfigDesc<boolean>>; setCanStartLiveview(value: boolean): Promise<OperationResult>; getCanStartLiveview(): Promise<boolean | null>; getCanStartLiveviewDesc(): Promise<ConfigDesc<boolean>>; setCanTakePhoto(value: boolean): Promise<OperationResult>; getCanTakePhoto(): Promise<boolean | null>; getCanTakePhotoDesc(): Promise<ConfigDesc<boolean>>; setCaptureDelay(value: number): Promise<OperationResult>; getCaptureDelay(): Promise<number | null>; getCaptureDelayDesc(): Promise<ConfigDesc<number>>; setColorMode(value: string): Promise<OperationResult>; getColorMode(): Promise<string | null>; getColorModeDesc(): Promise<ConfigDesc<string>>; setColorTemperature(value: number): Promise<OperationResult>; getColorTemperature(): Promise<number | null>; getColorTemperatureDesc(): Promise<ConfigDesc<number>>; setCompressionSetting(value: number): Promise<OperationResult>; getCompressionSetting(): Promise<number | null>; getCompressionSettingDesc(): Promise<ConfigDesc<number>>; setContrast(value: number): Promise<OperationResult>; getContrast(): Promise<number | null>; getContrastDesc(): Promise<ConfigDesc<number>>; setDateTime(value: Date): Promise<OperationResult>; getDateTime(): Promise<Date | null>; getDateTimeDesc(): Promise<ConfigDesc<Date>>; setDestinationToSave(value: string): Promise<OperationResult>; getDestinationToSave(): Promise<string | null>; getDestinationToSaveDesc(): Promise<ConfigDesc<string>>; setDigitalZoom(value: number): Promise<OperationResult>; getDigitalZoom(): Promise<number | null>; getDigitalZoomDesc(): Promise<ConfigDesc<number>>; setDriveMode(value: DriveMode): Promise<OperationResult>; getDriveMode(): Promise<DriveMode | null>; getDriveModeDesc(): Promise<ConfigDesc<DriveMode>>; setExposureComp(value: ExposureComp): Promise<OperationResult>; getExposureComp(): Promise<string | null>; getExposureCompDesc(): Promise<ConfigDesc<ExposureComp>>; setExposureMeteringMode(value: ExposureMeteringMode): Promise<OperationResult>; getExposureMeteringMode(): Promise<ExposureMeteringMode | null>; getExposureMeteringModeDesc(): Promise<ConfigDesc<ExposureMeteringMode>>; setExposureMode(value: ExposureMode): Promise<OperationResult>; getExposureMode(): Promise<ExposureMode | null>; getExposureModeDesc(): Promise<ConfigDesc<ExposureMode>>; setFacingMode(value: string): Promise<OperationResult>; getFacingMode(): Promise<string | null>; getFacingModeDesc(): Promise<ConfigDesc<string>>; setFlashMode(value: FlashMode): Promise<OperationResult>; getFlashMode(): Promise<FlashMode | null>; getFlashModeDesc(): Promise<ConfigDesc<FlashMode>>; setFocalLength(value: FocalLength): Promise<OperationResult>; getFocalLength(): Promise<FocalLength | null>; getFocalLengthDesc(): Promise<ConfigDesc<FocalLength>>; setFocusDistance(value: number): Promise<OperationResult>; getFocusDistance(): Promise<number | null>; getFocusDistanceDesc(): Promise<ConfigDesc<number>>; setFocusMeteringMode(value: FocusMeteringMode): Promise<OperationResult>; getFocusMeteringMode(): Promise<FocusMeteringMode | null>; getFocusMeteringModeDesc(): Promise<ConfigDesc<FocusMeteringMode>>; setFocusMode(value: FocusMode): Promise<OperationResult>; getFocusMode(): Promise<FocusMode | null>; getFocusModeDesc(): Promise<ConfigDesc<FocusMode>>; setFocusPeaking(value: FocusPeaking): Promise<OperationResult>; getFocusPeaking(): Promise<FocusPeaking | null>; getFocusPeakingDesc(): Promise<ConfigDesc<FocusPeaking>>; setFunctionalMode(value: FunctionalMode): Promise<OperationResult>; getFunctionalMode(): Promise<FunctionalMode | null>; getFunctionalModeDesc(): Promise<ConfigDesc<FunctionalMode>>; setImageAspect(value: ImageAspect): Promise<OperationResult>; getImageAspect(): Promise<ImageAspect | null>; getImageAspectDesc(): Promise<ConfigDesc<ImageAspect>>; setImageQuality(value: ImageQuality): Promise<OperationResult>; getImageQuality(): Promise<string | null>; getImageQualityDesc(): Promise<ConfigDesc<string>>; setImageSize(value: ImageSize): Promise<OperationResult>; getImageSize(): Promise<string | null>; getImageSizeDesc(): Promise<ConfigDesc<ImageSize>>; setIso(value: ISO): Promise<OperationResult>; getIso(): Promise<ISO | null>; getIsoDesc(): Promise<ConfigDesc<ISO>>; setLiveview(value: MediaStream): Promise<OperationResult>; /** * Get the liveview stream when liveview is running. Use {@link getCanStartLiveview} to check if the camera supports this action, and {@link startLiveview} or {@link stopLiveview} to control liveview. */ getLiveview(): Promise<MediaStream | null>; getLiveviewDesc(): Promise<ConfigDesc<MediaStream>>; setLiveviewMagnifyRatio(value: number): Promise<OperationResult>; getLiveviewMagnifyRatio(): Promise<number | null>; getLiveviewMagnifyRatioDesc(): Promise<ConfigDesc<number>>; setLiveviewSize(value: string): Promise<OperationResult>; getLiveviewSize(): Promise<string | null>; getLiveviewSizeDesc(): Promise<ConfigDesc<string>>; setManualFocusOptions(value: ManualFocusOption[]): Promise<OperationResult>; getManualFocusOptions(): Promise<("near:2" | "near:1" | "near:3" | "far:2" | "far:1" | "far:3")[] | null>; getManualFocusOptionsDesc(): Promise<ConfigDesc<ManualFocusOption[]>>; setManufacturer(value: string): Promise<OperationResult>; getManufacturer(): Promise<string | null>; getManufacturerDesc(): Promise<ConfigDesc<string>>; setModel(value: string): Promise<OperationResult>; getModel(): Promise<string | null>; getModelDesc(): Promise<ConfigDesc<string>>; setSerialNumber(value: string): Promise<OperationResult>; getSerialNumber(): Promise<string | null>; getSerialNumberDesc(): Promise<ConfigDesc<string>>; setSharpness(value: number): Promise<OperationResult>; getSharpness(): Promise<number | null>; getSharpnessDesc(): Promise<ConfigDesc<number>>; setShutterSpeed(value: ShutterSpeed): Promise<OperationResult>; getShutterSpeed(): Promise<ShutterSpeed | null>; getShutterSpeedDesc(): Promise<ConfigDesc<ShutterSpeed>>; setShutterSound(value: number): Promise<OperationResult>; getShutterSound(): Promise<number | null>; getShutterSoundDesc(): Promise<ConfigDesc<number>>; setTimelapseInterval(value: number): Promise<OperationResult>; getTimelapseInterval(): Promise<number | null>; getTimelapseIntervalDesc(): Promise<ConfigDesc<number>>; setTimelapseNumber(value: number): Promise<OperationResult>; getTimelapseNumber(): Promise<number | null>; getTimelapseNumberDesc(): Promise<ConfigDesc<number>>; setWhiteBalance(value: WhiteBalance): Promise<OperationResult>; getWhiteBalance(): Promise<WhiteBalance | null>; getWhiteBalanceDesc(): Promise<ConfigDesc<WhiteBalance>>; /** * Runs auto focus. Use {@link getCanRunAutoFocus} to check if the camera supports this action. * @category Action */ runAutoFocus(): Promise<OperationResult>; /** * Runs manual focus. Use {@link getCanRunAutoFocus} to check if the camera supports this action. * @category Action */ runManualFocus(option: ManualFocusOption): Promise<OperationResult>; /** * Takes a photo. Use {@link getCanTakePhoto} to check if the camera supports this action. * @category Action */ takePhoto(option?: TakePhotoOption): Promise<OperationResult<TethrObject[]>>; /** * Starts liveview. Use {@link getCanStartLiveview} to check if the camera supports this action. * @category Action */ startLiveview(): Promise<OperationResult<MediaStream>>; /** * Stops liveview. * @category Action */ stopLiveview(): Promise<OperationResult>; } export {};