import {ISiTargetMultiplexer} from '../SiStation/ISiTargetMultiplexer'; import * as utils from '../utils'; /* eslint-disable no-unused-vars,no-shadow */ export enum SiDeviceState { Closed = 0, Opening = 1, Opened = 2, Closing = 3, } /* eslint-enable no-unused-vars,no-shadow */ export interface ISiDeviceDriverData { driver: T; } export class DeviceClosedError extends utils.SiError {} export class SiDeviceStateChangeEvent extends utils.Event<'stateChange'> { constructor( public siDevice: ISiDevice>, public state: SiDeviceState, ) { super('stateChange'); } } export class SiDeviceReceiveEvent extends utils.Event<'receive'> { constructor( public siDevice: ISiDevice>, public uint8Data: number[], ) { super('receive'); } } export type SiDeviceEvents = { 'stateChange': SiDeviceStateChangeEvent, 'receive': SiDeviceReceiveEvent, }; export interface ISiDevice> extends utils.IEventTarget { name: string; ident: string; state: SiDeviceState; setState: (newState: SiDeviceState) => void; data: T; siTargetMultiplexer?: ISiTargetMultiplexer; open: () => Promise>; close: () => Promise>; receiveLoop: () => void; shouldStopReceivingBecauseOfError: (error: unknown) => boolean; receive: () => Promise; send: (buffer: number[]) => Promise; }