We are closed from December 18, 2024 to January 5, 2025. Orders placed during this time will be processed starting on January 6, 2025.

TypeScript driver

Overview

The instrument TypeScript driver is written in line with the instrument C++ driver.

Example

For the following C++ driver:

class LedBlinker {
    #...
    uint32_t get_leds() {
        return ctl.read<reg::led>();
    }
    #...
}

The matching TypeScript driver is:

class LedBlinker {
    private driver: Driver;
    private id: number;
    private cmds: HashTable<ICommand>;

    constructor (private client: Client) {
        this.driver = this.client.getDriver('LedBlinker');
        this.id = this.driver.id;
        this.cmds = this.driver.getCmds();
    }

    getLeds(cb: (value: number) => void): void {
        this.client.readUint32(Command(this.id, this.cmds['get_leds']),
                                 (value) => {cb(value)});
    }
}

Available functions

Write

send(command)

Example

C++ driver:

void set_led(uint32_t index, bool status) {
    ctl.write_bit_reg(reg::led, index, status);
}

TypeScript driver:

setLed(index:number, status: boolean): void {
    this.client.send(Command(this.id, this.cmds['set_led'], index, status));
}

Read unsigned-integers

readUint32(cmd: CmdMessage, fn: (x: number) => void): void

Example

C++ driver:

uint32_t get_leds() {
    return ctl.read<reg::led>();
}

TypeScript driver:

getLeds(cb: (value: number) => void): void {
    this.client.readUint32(Command(this.id, this.cmds['get_leds']), (value) => {cb(value)});
}

Read signed-integers

readInt32(cmd: CmdMessage, fn: (x: number) => void): void

Read arrays

readUint32Array(cmd: CmdMessage, fn: (x: Uint32Array) => void): void
readFloat32Array(cmd: CmdMessage, fn: (x: Float32Array) => void): void
readFloat64Array(cmd: CmdMessage, fn: (x: Float64Array) => void): void

Read vectors

readUint32Vector(cmd: CmdMessage, fn: (x: Uint32Array) => void): void
readFloat32Vector(cmd: CmdMessage, fn: (x: Float32Array) => void): void
readFloat64Vector(cmd: CmdMessage, fn: (x: Float64Array) => void): void

Example

C++ driver:

std::vector<float>& get_decimated_data(uint32_t decim_factor, uint32_t index_low, uint32_t index_high) {
    //...
}

TypeScript driver:

getDecimatedData(callback: (data: number[][], range: jquery.flot.range) => void): void {
    this.client.readFloat32Vector(
        Command(this.id, this.cmds['get_decimated_data'], 1, this.indexLow, this.indexHigh), (array) => {
            //...
            callback(data, range);
    });
}

Read booleans

readBool(cmd: CmdMessage, fn: (x: boolean) => void): void

Read tuples

readTuple(cmd: CmdMessage, format: string, fn: (x: any[]) => void): void

Available format: * 'I': unsigned 32-bit integer * 'i': signed 32-bit integer * 'B': unsigned 8-bit integer * 'b': signed 8-bit integer * 'f': 32-bit floating point * 'd': 64-bit double precision * '?': boolean

Example

C++ driver:

auto get_status() {
    //...
    return std::make_tuple(
        laser_on,
        current,
        measured_current,
        measured_power
    );
}

TypeScript driver:

getStatus(callback: (status: LaserStatus) => void): void {
    this.client.readTuple(Command(this.id, this.cmds['get_status']), '?fff',
                            (tup: [boolean, number, number, number]) => {
        //...
        callback(status);
    });
}

See also

[email protected]