import * as utils from '../utils'; import {ISiDevice, ISiDeviceDriverData} from './ISiDevice'; export interface ISiDeviceDriver> { name: string; open: (device: ISiDevice) => Promise; close: (device: ISiDevice) => Promise; receive: (device: ISiDevice) => Promise; send: (device: ISiDevice, buffer: number[]) => Promise; } export interface ISiDeviceDriverWithDetection< T extends ISiDeviceDriverData, U extends Array > extends ISiDeviceDriver { detect: (...args: U) => Promise>; } export class SiDeviceAddEvent< T extends ISiDeviceDriverData > extends utils.Event<'add'> { constructor( public siDevice: ISiDevice, ) { super('add'); } } export class SiDeviceRemoveEvent< T extends ISiDeviceDriverData > extends utils.Event<'remove'> { constructor( public siDevice: ISiDevice, ) { super('remove'); } } export type SiDeviceDriverWithAutodetectionEvents< T extends ISiDeviceDriverData > = { 'add': SiDeviceAddEvent, 'remove': SiDeviceRemoveEvent, }; export interface ISiDeviceDriverWithAutodetection< T extends ISiDeviceDriverData > extends ISiDeviceDriver, utils.IEventTarget> { startAutoDetection: () => Promise[]>; stopAutoDetection: () => Promise; }