All files / sportident/src/SiDevice ISiDeviceDriver.ts

0% Statements 0/7
100% Branches 0/0
0% Functions 0/2
0% Lines 0/7

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56                                                                                                               
import * as utils from '../utils';
import {ISiDevice, ISiDeviceDriverData} from './ISiDevice';
 
export interface ISiDeviceDriver<T extends ISiDeviceDriverData<unknown>> {
    name: string;
    open: (device: ISiDevice<T>) => Promise<unknown>;
    close: (device: ISiDevice<T>) => Promise<unknown>;
    receive: (device: ISiDevice<T>) => Promise<number[]>;
    send: (device: ISiDevice<T>, buffer: number[]) => Promise<unknown>;
}
 
export interface ISiDeviceDriverWithDetection<
    T extends ISiDeviceDriverData<unknown>,
    U extends Array<unknown>
>
        extends ISiDeviceDriver<T>
{
    detect: (...args: U) => Promise<ISiDevice<T>>;
}
 
export class SiDeviceAddEvent<
    T extends ISiDeviceDriverData<unknown>
> extends utils.Event<'add'> {
    constructor(
                public siDevice: ISiDevice<T>,
    ) {
        super();
    }
}
export class SiDeviceRemoveEvent<
    T extends ISiDeviceDriverData<unknown>
> extends utils.Event<'remove'> {
    constructor(
                public siDevice: ISiDevice<T>,
    ) {
        super();
    }
}
 
export type SiDeviceDriverWithAutodetectionEvents<
    T extends ISiDeviceDriverData<unknown>
> = {
    'add': SiDeviceAddEvent<T>,
    'remove': SiDeviceRemoveEvent<T>,
};
 
export interface ISiDeviceDriverWithAutodetection<
    T extends ISiDeviceDriverData<unknown>
> extends
        ISiDeviceDriver<T>,
        utils.IEventTarget<SiDeviceDriverWithAutodetectionEvents<T>>
{
    startAutoDetection: () => Promise<ISiDevice<T>[]>;
    stopAutoDetection: () => Promise<unknown>;
}