tethr
Version:
Controlls USB-connected cameras, webcam, and smartphone camera from browser
247 lines (246 loc) • 12 kB
TypeScript
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 {};