140 lines
2.9 KiB
TypeScript
140 lines
2.9 KiB
TypeScript
'use strict';
|
|
|
|
let timing : Timing;
|
|
|
|
interface TimingData {
|
|
[key: string]: number;
|
|
}
|
|
|
|
class Timing {
|
|
public data : TimingData = {}
|
|
|
|
private fromArduino : any = {
|
|
'c' : 'cam',
|
|
'3' : 'cam2',
|
|
'4' : 'cams',
|
|
'b' : 'black',
|
|
'p' : 'proj',
|
|
'w' : 'proj2',
|
|
'x' : 'projs'
|
|
}
|
|
|
|
private fromCmd : any = {
|
|
'CF' : 'cam',
|
|
'CB' : 'cam',
|
|
'BF' : 'black',
|
|
'BB' : 'black',
|
|
'C2F': 'cam2',
|
|
'C2B': 'cam2',
|
|
'CCF' : 'cams',
|
|
'CCB' : 'cams',
|
|
'CFCB': 'cams',
|
|
'CBCF': 'cams',
|
|
'PF' : 'proj',
|
|
'PB' : 'proj',
|
|
'P2F' : 'proj2',
|
|
'P2B' : 'proj2',
|
|
'PPF' : 'projs',
|
|
'PPB' : 'projs',
|
|
'PFPB' : 'projs',
|
|
'PBPF' : 'projs'
|
|
}
|
|
|
|
constructor () {
|
|
|
|
}
|
|
|
|
public init () {
|
|
this.listen();
|
|
}
|
|
|
|
private listen () {
|
|
ipcRenderer.on('timing', this.timing.bind(this));
|
|
}
|
|
|
|
private timing (event : any, arg : any) {
|
|
if (arg.c) {
|
|
this.update(arg.c, parseInt(arg.ms), true);
|
|
}
|
|
}
|
|
|
|
public reset (profile : any) {
|
|
const keys : string[] = Object.keys(profile);
|
|
const cmds : string[] = Object.keys(cfg.cmd);
|
|
let cam : number;
|
|
let proj : number;
|
|
let pad : number;
|
|
for (let key of keys) {
|
|
if (key === 'label') {
|
|
continue
|
|
} else if (key === 'cam') {
|
|
cam = 0;
|
|
cam += profile[key].time;
|
|
cam += profile[key].delay;
|
|
cam += profile[key].momentary;
|
|
pad = 0;
|
|
|
|
if (typeof profile['black'] !== 'undefined' && typeof profile['black'].before !== 'undefined' && typeof profile['black'].after !== 'undefined') {
|
|
pad = (profile['black'].before + profile['black'].after);
|
|
}
|
|
|
|
this.data['cam'] = cam;
|
|
this.data['cam2'] = cam;
|
|
this.data['cams'] = cam;
|
|
this.data['black'] = cam + pad;
|
|
this.updateUI('#cam_time', cam);
|
|
} else if (key === 'proj') {
|
|
proj = 0;
|
|
proj += profile[key].time;
|
|
proj += profile[key].delay;
|
|
proj += profile[key].momentary;
|
|
this.data['proj'] = proj;
|
|
this.data['proj2'] = proj;
|
|
this.data['projs'] = proj;
|
|
this.updateUI('#proj_time', proj);
|
|
}
|
|
}
|
|
}
|
|
|
|
public restore (timing : TimingData) {
|
|
this.data = timing;
|
|
}
|
|
|
|
//update with rolling average
|
|
public update (c : string, ms : number, force : boolean = false) {
|
|
let cmd : string = this.fromArduino[c];
|
|
let id : string;
|
|
if (typeof cmd !== 'undefined' && typeof this.data[cmd] !== 'undefined') {
|
|
if (force) {
|
|
this.data[cmd] = ms;
|
|
} else {
|
|
this.data[cmd] = Math.round((this.data[cmd] + ms) / 2);
|
|
}
|
|
id = `#${cmd}_time`;
|
|
this.updateUI(id, this.data[cmd]);
|
|
}
|
|
}
|
|
|
|
public updateUI (id : string, ms : number) {
|
|
if ($(id).length) {
|
|
$(id).val(ms);
|
|
}
|
|
}
|
|
|
|
//get current value
|
|
public get (c : string) : number {
|
|
const cmd : string = this.fromCmd[c];
|
|
if (typeof cmd !== 'undefined' && typeof this.data[cmd] !== 'undefined') {
|
|
return this.data[cmd];
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
public store () {
|
|
ipcRenderer.send('profile', { timing : this.data })
|
|
}
|
|
}
|
|
|
|
timing = new Timing();
|
|
|
|
module.exports = timing; |