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);
});
}