Timing is now updated via rolling average on all projector and camera actions. This data is reset when profile is changed. This data is stored in the settings.json and loaded on start so estimates will improve the more it is used.
This commit is contained in:
parent
7741134917
commit
5db5d477e4
|
@ -41,9 +41,16 @@ class Devices {
|
||||||
* local settings object.
|
* local settings object.
|
||||||
**/
|
**/
|
||||||
listener(event, arg) {
|
listener(event, arg) {
|
||||||
this.log.info(`Saving profile ${arg.profile}`, 'SETTINGS', false, false);
|
if (typeof arg.profile !== 'undefined') {
|
||||||
this.settings.update('profile', arg.profile);
|
this.log.info(`Saving profile ${arg.profile}`, 'SETTINGS', false, false);
|
||||||
this.settings.save();
|
this.settings.update('profile', arg.profile);
|
||||||
|
this.settings.save();
|
||||||
|
}
|
||||||
|
if (typeof arg.timing !== 'undefined') {
|
||||||
|
this.log.info(`Saving timing info`, 'SETTINGS', false, false);
|
||||||
|
this.settings.update('timing', arg.timing);
|
||||||
|
this.settings.save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -510,6 +517,9 @@ class Devices {
|
||||||
light,
|
light,
|
||||||
profile: this.settings.state.profile
|
profile: this.settings.state.profile
|
||||||
};
|
};
|
||||||
|
if (this.settings.state.timing) {
|
||||||
|
args.timing = this.settings.state.timing;
|
||||||
|
}
|
||||||
if (projector_second && projector_second.arduino) {
|
if (projector_second && projector_second.arduino) {
|
||||||
args.projector_second = projector_second;
|
args.projector_second = projector_second;
|
||||||
this.settings.update('projector_second', projector_second);
|
this.settings.update('projector_second', projector_second);
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -19,7 +19,8 @@ class Settings {
|
||||||
camera: {},
|
camera: {},
|
||||||
projector: {},
|
projector: {},
|
||||||
light: {},
|
light: {},
|
||||||
capper: {}
|
capper: {},
|
||||||
|
timing: {}
|
||||||
};
|
};
|
||||||
this.state = this.freshState();
|
this.state = this.freshState();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/settings/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,yBAA0B;AAC1B,6BAA8B;AAC9B,+BAAgC;AAEhC,MAAM,QAAQ;IAeb;;QAEI;IACJ;QAjBQ,SAAI,GAAW,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,uBAAuB,CAAC,CAAC;QAChE,iBAAY,GAAS;YAC5B,MAAM,EAAG;gBACR,IAAI,EAAG,IAAI;gBACX,OAAO,EAAG,IAAI;aACd;YACD,OAAO,EAAG,EAAE;YACZ,OAAO,EAAG,OAAO;YACjB,MAAM,EAAG,EAAE;YACX,SAAS,EAAG,EAAE;YACd,KAAK,EAAG,EAAE;YACV,MAAM,EAAG,EAAE;SACX,CAAA;QAMA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAEO,UAAU;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACtD,CAAC;IACD;;QAEI;IACI,KAAK,CAAC,QAAQ;QACrB,MAAM,GAAG,GAAY,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;QACxD,MAAM,MAAM,GAAa,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC7C,IAAI,CAAC,MAAM,EAAE;YACZ,IAAI;gBACH,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACpB;YAAC,OAAO,GAAG,EAAE;gBACb,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO,IAAI,CAAA;gBACtC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACnB;SACD;QACD,OAAO,IAAI,CAAA;IACZ,CAAC;IACD;;QAEI;IACG,KAAK,CAAC,IAAI;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI;YACH,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;SAC3C;QAAC,OAAO,GAAG,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACnB;IACF,CAAC;IACD;;QAEI;IACG,MAAM,CAAE,GAAY,EAAE,GAAS;QACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACvB,CAAC;IACD;;QAEI;IACG,GAAG,CAAE,GAAY;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IACD;;QAEI;IACG,GAAG;QACT,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IACD;;QAEI;IACG,KAAK,CAAC,OAAO;QACnB,IAAI,MAAM,CAAC;QACX,IAAI,GAAG,CAAC;QAER,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,MAAM,EAAE;YACX,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,yBAAyB;SACzB;aAAM;YACN,IAAI,CAAC,IAAI,EAAE,CAAC;SACZ;IACF,CAAC;IACD;;QAEI;IACG,KAAK,CAAC,KAAK;QACjB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE;YACX,IAAI;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC3B;YAAC,OAAO,GAAG,EAAE;gBACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACnB;SACD;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAAA,CAAC;CACF;AAED,MAAM,CAAC,OAAO,GAAG,IAAI,QAAQ,EAAE,CAAA"}
|
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/settings/index.ts"],"names":[],"mappings":"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"}
|
|
@ -80,6 +80,7 @@ cam.end = function (c, id, ms) {
|
||||||
}
|
}
|
||||||
gui.counterUpdate('cam2', cam.second.pos);
|
gui.counterUpdate('cam2', cam.second.pos);
|
||||||
}
|
}
|
||||||
|
timing.update(c, ms);
|
||||||
gui.counterUpdate('cam', cam.pos)
|
gui.counterUpdate('cam', cam.pos)
|
||||||
if (typeof cam.queue[id] !== 'undefined') {
|
if (typeof cam.queue[id] !== 'undefined') {
|
||||||
if (typeof cam.queue[id].callback !== 'undefined') {
|
if (typeof cam.queue[id].callback !== 'undefined') {
|
||||||
|
@ -182,6 +183,7 @@ cam.second.end = function (c, id, ms) {
|
||||||
cam.second.pos -= 1;
|
cam.second.pos -= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
timing.update(c, ms);
|
||||||
gui.counterUpdate('cam2', cam.second.pos)
|
gui.counterUpdate('cam2', cam.second.pos)
|
||||||
if (typeof cam.second.queue[id] !== 'undefined') {
|
if (typeof cam.second.queue[id] !== 'undefined') {
|
||||||
if (typeof cam.queue[id].callback !== 'undefined') {
|
if (typeof cam.queue[id].callback !== 'undefined') {
|
||||||
|
|
|
@ -86,6 +86,9 @@ class Devices {
|
||||||
timing.reset(p);
|
timing.reset(p);
|
||||||
//devices.profile(arg.profile)
|
//devices.profile(arg.profile)
|
||||||
}
|
}
|
||||||
|
if (arg && arg.timing) {
|
||||||
|
timing.restore(arg.timing);
|
||||||
|
}
|
||||||
if (arg.projector_second) {
|
if (arg.projector_second) {
|
||||||
//add second row of projector pads to grid
|
//add second row of projector pads to grid
|
||||||
proj.second.enable();
|
proj.second.enable();
|
||||||
|
@ -137,6 +140,7 @@ class Devices {
|
||||||
light.enable();
|
light.enable();
|
||||||
}
|
}
|
||||||
ipcRenderer.send('profile', { profile });
|
ipcRenderer.send('profile', { profile });
|
||||||
|
timing.store();
|
||||||
}
|
}
|
||||||
intval() {
|
intval() {
|
||||||
const url = $('#intval').val();
|
const url = $('#intval').val();
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -173,6 +173,7 @@ proj.second.end = function (c, id, ms) {
|
||||||
proj.second.pos -= 1;
|
proj.second.pos -= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
timing.update(c, ms);
|
||||||
gui.counterUpdate('proj2', proj.second.pos);
|
gui.counterUpdate('proj2', proj.second.pos);
|
||||||
if (typeof proj.second.queue[id] !== 'undefined') {
|
if (typeof proj.second.queue[id] !== 'undefined') {
|
||||||
if (typeof proj.second.queue[id].callback !== 'undefined') {
|
if (typeof proj.second.queue[id].callback !== 'undefined') {
|
||||||
|
|
|
@ -51,6 +51,8 @@ class Sequence {
|
||||||
$('#cmd_capper_off').addClass('active');
|
$('#cmd_capper_off').addClass('active');
|
||||||
$('#cmd_capper_on').removeClass('active');
|
$('#cmd_capper_on').removeClass('active');
|
||||||
}
|
}
|
||||||
|
this.stats();
|
||||||
|
timing.store();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return event.returnValue = true;
|
return event.returnValue = true;
|
||||||
|
@ -173,29 +175,13 @@ class Sequence {
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
console.dir(cfg);
|
|
||||||
//timing
|
//timing
|
||||||
for (let step of this.grid) {
|
for (let step of this.grid) {
|
||||||
if (!step)
|
if (!step)
|
||||||
continue;
|
continue;
|
||||||
c = step.cmd;
|
c = step.cmd;
|
||||||
if (c === cfg.cmd.camera_forward || c === cfg.cmd.camera_backward) {
|
ms += timing.get(c);
|
||||||
ms += cfg.arduino.cam.time;
|
ms += cfg.arduino.serialDelay;
|
||||||
ms += cfg.arduino.cam.delay;
|
|
||||||
ms += cfg.arduino.serialDelay;
|
|
||||||
}
|
|
||||||
if (c === cfg.cmd.projector_forward || c === cfg.cmd.projector_backward) {
|
|
||||||
ms += cfg.arduino.proj.time;
|
|
||||||
ms += cfg.arduino.proj.delay;
|
|
||||||
ms += cfg.arduino.serialDelay;
|
|
||||||
}
|
|
||||||
if (c === cfg.cmd.black_forward || c === cfg.cmd.black_backward) {
|
|
||||||
ms += cfg.arduino.black.before;
|
|
||||||
ms += cfg.arduino.black.after;
|
|
||||||
ms += cfg.arduino.cam.time;
|
|
||||||
ms += cfg.arduino.cam.delay;
|
|
||||||
ms += cfg.arduino.serialDelay;
|
|
||||||
}
|
|
||||||
ms += cfg.arduino.sequenceDelay;
|
ms += cfg.arduino.sequenceDelay;
|
||||||
if (c === cfg.cmd.camera_forward || c === cfg.cmd.black_forward) {
|
if (c === cfg.cmd.camera_forward || c === cfg.cmd.black_forward) {
|
||||||
cam_total++;
|
cam_total++;
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -3,13 +3,44 @@ let timing;
|
||||||
class Timing {
|
class Timing {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.data = {};
|
this.data = {};
|
||||||
|
this.fromArduino = {
|
||||||
|
'c': 'cam',
|
||||||
|
'3': 'cam2',
|
||||||
|
'4': 'cams',
|
||||||
|
'b': 'black',
|
||||||
|
'p': 'proj',
|
||||||
|
'w': 'proj2',
|
||||||
|
'x': 'projs'
|
||||||
|
};
|
||||||
|
this.fromCmd = {
|
||||||
|
'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'
|
||||||
|
};
|
||||||
}
|
}
|
||||||
reset(profile) {
|
reset(profile) {
|
||||||
const keys = Object.keys(profile);
|
const keys = Object.keys(profile);
|
||||||
const cmds = Object.keys(cfg.cmd);
|
const cmds = Object.keys(cfg.cmd);
|
||||||
let cam;
|
let cam;
|
||||||
let proj;
|
let proj;
|
||||||
|
let pad;
|
||||||
for (let key of keys) {
|
for (let key of keys) {
|
||||||
|
console.log(key);
|
||||||
if (key === 'label') {
|
if (key === 'label') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -17,37 +48,48 @@ class Timing {
|
||||||
cam = 0;
|
cam = 0;
|
||||||
cam += profile[key].time;
|
cam += profile[key].time;
|
||||||
cam += profile[key].delay;
|
cam += profile[key].delay;
|
||||||
for (let cmd of cmds) {
|
cam += profile[key].momentary;
|
||||||
if (cmd.indexOf('camera') !== -1 || cmd.indexOf('black') !== -1) {
|
pad = 0;
|
||||||
this.data[cfg.cmd[cmd]] = cam;
|
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;
|
||||||
}
|
}
|
||||||
else if (key === 'proj') {
|
else if (key === 'proj') {
|
||||||
proj = 0;
|
proj = 0;
|
||||||
proj += profile[key].time;
|
proj += profile[key].time;
|
||||||
proj += profile[key].delay;
|
proj += profile[key].delay;
|
||||||
for (let cmd of cmds) {
|
proj += profile[key].momentary;
|
||||||
if (cmd.indexOf('projector') !== -1) {
|
this.data['proj'] = proj;
|
||||||
this.data[cfg.cmd[cmd]] = proj;
|
this.data['proj2'] = proj;
|
||||||
}
|
this.data['projs'] = proj;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
restore(timing) {
|
||||||
|
this.data = timing;
|
||||||
|
}
|
||||||
//update with rolling average
|
//update with rolling average
|
||||||
update(cmd, ms) {
|
update(c, ms) {
|
||||||
if (typeof this.data[cmd] !== 'undefined') {
|
let cmd = this.fromArduino[c];
|
||||||
this.data[cmd] = (this.data[cmd] + ms) / 2;
|
if (typeof cmd !== 'undefined' && typeof this.data[cmd] !== 'undefined') {
|
||||||
|
this.data[cmd] = Math.round((this.data[cmd] + ms) / 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//get current value
|
//get current value
|
||||||
get(cmd) {
|
get(c) {
|
||||||
if (typeof this.data[cmd] !== 'undefined') {
|
const cmd = this.fromCmd[c];
|
||||||
|
if (typeof cmd !== 'undefined' && typeof this.data[cmd] !== 'undefined') {
|
||||||
return this.data[cmd];
|
return this.data[cmd];
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
store() {
|
||||||
|
ipcRenderer.send('profile', { timing: this.data });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
timing = new Timing();
|
timing = new Timing();
|
||||||
module.exports = timing;
|
module.exports = timing;
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{"version":3,"file":"timing.js","sourceRoot":"","sources":["../../src/lib/ui/timing.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,IAAI,MAAe,CAAC;AAMpB,MAAM,MAAM;IAIX;QAHQ,SAAI,GAAgB,EAE3B,CAAA;IAGD,CAAC;IAEM,KAAK,CAAE,OAAa;QAC1B,MAAM,IAAI,GAAc,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAc,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,GAAY,CAAC;QACjB,IAAI,IAAa,CAAC;QAClB,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;YACrB,IAAI,GAAG,KAAK,OAAO,EAAE;gBACpB,SAAQ;aACR;iBAAM,IAAI,GAAG,KAAK,KAAK,EAAE;gBACzB,GAAG,GAAG,CAAC,CAAC;gBACR,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACzB,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;gBAC1B,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;oBACrB,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;wBAChE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;qBAC9B;iBACD;aACD;iBAAM,IAAI,GAAG,KAAK,MAAM,EAAE;gBAC1B,IAAI,GAAG,CAAC,CAAC;gBACT,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;gBAC3B,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;oBACrB,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;wBACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;qBAC/B;iBACD;aACD;SACD;IACF,CAAC;IAED,6BAA6B;IACtB,MAAM,CAAE,GAAY,EAAE,EAAW;QACvC,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE;YAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;SAC3C;IACF,CAAC;IAED,mBAAmB;IACZ,GAAG,CAAE,GAAY;QACvB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE;YAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACtB;QACD,OAAO,CAAC,CAAC;IACV,CAAC;CACD;AAED,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAEtB,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC"}
|
{"version":3,"file":"timing.js","sourceRoot":"","sources":["../../src/lib/ui/timing.ts"],"names":[],"mappings":"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"}
|
|
@ -82,6 +82,9 @@ class Devices {
|
||||||
timing.reset(p);
|
timing.reset(p);
|
||||||
//devices.profile(arg.profile)
|
//devices.profile(arg.profile)
|
||||||
}
|
}
|
||||||
|
if (arg && arg.timing) {
|
||||||
|
timing.restore(arg.timing);
|
||||||
|
}
|
||||||
|
|
||||||
if (arg.projector_second) {
|
if (arg.projector_second) {
|
||||||
//add second row of projector pads to grid
|
//add second row of projector pads to grid
|
||||||
|
@ -127,7 +130,7 @@ class Devices {
|
||||||
const p : any = cfg.profiles[profile];
|
const p : any = cfg.profiles[profile];
|
||||||
const keys : any[] = Object.keys(p);
|
const keys : any[] = Object.keys(p);
|
||||||
for (let key of keys) {
|
for (let key of keys) {
|
||||||
cfg[key] = keys[key]
|
cfg[key] = keys[key];
|
||||||
}
|
}
|
||||||
timing.reset(p);
|
timing.reset(p);
|
||||||
if (typeof p.light !== 'undefined' && p.light === false) {
|
if (typeof p.light !== 'undefined' && p.light === false) {
|
||||||
|
@ -136,6 +139,8 @@ class Devices {
|
||||||
light.enable();
|
light.enable();
|
||||||
}
|
}
|
||||||
ipcRenderer.send('profile', { profile })
|
ipcRenderer.send('profile', { profile })
|
||||||
|
timing.store();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
intval () {
|
intval () {
|
||||||
|
|
|
@ -75,6 +75,8 @@ class Sequence {
|
||||||
$('#cmd_capper_off').addClass('active');
|
$('#cmd_capper_off').addClass('active');
|
||||||
$('#cmd_capper_on').removeClass('active');
|
$('#cmd_capper_on').removeClass('active');
|
||||||
}
|
}
|
||||||
|
this.stats();
|
||||||
|
timing.store();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return event.returnValue = true;
|
return event.returnValue = true;
|
||||||
|
@ -207,28 +209,13 @@ class Sequence {
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
console.dir(cfg);
|
|
||||||
//timing
|
//timing
|
||||||
for (let step of this.grid) {
|
for (let step of this.grid) {
|
||||||
if (!step) continue
|
if (!step) continue
|
||||||
c = step.cmd;
|
c = step.cmd;
|
||||||
if (c === cfg.cmd.camera_forward || c === cfg.cmd.camera_backward){
|
ms += timing.get(c);
|
||||||
ms += cfg.arduino.cam.time;
|
ms += cfg.arduino.serialDelay;
|
||||||
ms += cfg.arduino.cam.delay;
|
|
||||||
ms += cfg.arduino.serialDelay;
|
|
||||||
}
|
|
||||||
if (c === cfg.cmd.projector_forward || c === cfg.cmd.projector_backward){
|
|
||||||
ms += cfg.arduino.proj.time;
|
|
||||||
ms += cfg.arduino.proj.delay;
|
|
||||||
ms += cfg.arduino.serialDelay;
|
|
||||||
}
|
|
||||||
if (c === cfg.cmd.black_forward || c === cfg.cmd.black_backward){
|
|
||||||
ms += cfg.arduino.black.before;
|
|
||||||
ms += cfg.arduino.black.after;
|
|
||||||
ms += cfg.arduino.cam.time;
|
|
||||||
ms += cfg.arduino.cam.delay;
|
|
||||||
ms += cfg.arduino.serialDelay;
|
|
||||||
}
|
|
||||||
ms += cfg.arduino.sequenceDelay;
|
ms += cfg.arduino.sequenceDelay;
|
||||||
|
|
||||||
if (c === cfg.cmd.camera_forward || c === cfg.cmd.black_forward) {
|
if (c === cfg.cmd.camera_forward || c === cfg.cmd.black_forward) {
|
||||||
|
|
|
@ -7,9 +7,41 @@ interface TimingData {
|
||||||
}
|
}
|
||||||
|
|
||||||
class Timing {
|
class Timing {
|
||||||
private data : TimingData = {
|
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 () {
|
constructor () {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -19,6 +51,7 @@ class Timing {
|
||||||
const cmds : string[] = Object.keys(cfg.cmd);
|
const cmds : string[] = Object.keys(cfg.cmd);
|
||||||
let cam : number;
|
let cam : number;
|
||||||
let proj : number;
|
let proj : number;
|
||||||
|
let pad : number;
|
||||||
for (let key of keys) {
|
for (let key of keys) {
|
||||||
if (key === 'label') {
|
if (key === 'label') {
|
||||||
continue
|
continue
|
||||||
|
@ -26,38 +59,53 @@ class Timing {
|
||||||
cam = 0;
|
cam = 0;
|
||||||
cam += profile[key].time;
|
cam += profile[key].time;
|
||||||
cam += profile[key].delay;
|
cam += profile[key].delay;
|
||||||
for (let cmd of cmds) {
|
cam += profile[key].momentary;
|
||||||
if (cmd.indexOf('camera') !== -1 || cmd.indexOf('black') !== -1) {
|
pad = 0;
|
||||||
this.data[cfg.cmd[cmd]] = cam;
|
|
||||||
}
|
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
|
||||||
} else if (key === 'proj') {
|
} else if (key === 'proj') {
|
||||||
proj = 0;
|
proj = 0;
|
||||||
proj += profile[key].time;
|
proj += profile[key].time;
|
||||||
proj += profile[key].delay;
|
proj += profile[key].delay;
|
||||||
for (let cmd of cmds) {
|
proj += profile[key].momentary;
|
||||||
if (cmd.indexOf('projector') !== -1) {
|
this.data['proj'] = proj;
|
||||||
this.data[cfg.cmd[cmd]] = proj;
|
this.data['proj2'] = proj;
|
||||||
}
|
this.data['projs'] = proj;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public restore (timing : TimingData) {
|
||||||
|
this.data = timing;
|
||||||
|
}
|
||||||
|
|
||||||
//update with rolling average
|
//update with rolling average
|
||||||
public update (cmd : string, ms : number) {
|
public update (c : string, ms : number) {
|
||||||
if (typeof this.data[cmd] !== 'undefined') {
|
let cmd : string = this.fromArduino[c];
|
||||||
this.data[cmd] = (this.data[cmd] + ms) / 2;
|
if (typeof cmd !== 'undefined' && typeof this.data[cmd] !== 'undefined') {
|
||||||
|
this.data[cmd] = Math.round((this.data[cmd] + ms) / 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//get current value
|
//get current value
|
||||||
public get (cmd : string) {
|
public get (c : string) : number {
|
||||||
if (typeof this.data[cmd] !== 'undefined') {
|
const cmd : string = this.fromCmd[c];
|
||||||
|
if (typeof cmd !== 'undefined' && typeof this.data[cmd] !== 'undefined') {
|
||||||
return this.data[cmd];
|
return this.data[cmd];
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public store () {
|
||||||
|
ipcRenderer.send('profile', { timing : this.data })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
timing = new Timing();
|
timing = new Timing();
|
||||||
|
|
|
@ -53,9 +53,16 @@ class Devices {
|
||||||
* local settings object.
|
* local settings object.
|
||||||
**/
|
**/
|
||||||
private listener (event : any, arg : any){
|
private listener (event : any, arg : any){
|
||||||
this.log.info(`Saving profile ${arg.profile}`, 'SETTINGS', false, false);
|
if (typeof arg.profile !== 'undefined') {
|
||||||
this.settings.update('profile', arg.profile);
|
this.log.info(`Saving profile ${arg.profile}`, 'SETTINGS', false, false);
|
||||||
this.settings.save();
|
this.settings.update('profile', arg.profile);
|
||||||
|
this.settings.save();
|
||||||
|
}
|
||||||
|
if (typeof arg.timing !== 'undefined') {
|
||||||
|
this.log.info(`Saving timing info`, 'SETTINGS', false, false);
|
||||||
|
this.settings.update('timing', arg.timing);
|
||||||
|
this.settings.save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -503,6 +510,9 @@ class Devices {
|
||||||
light,
|
light,
|
||||||
profile: this.settings.state.profile
|
profile: this.settings.state.profile
|
||||||
}
|
}
|
||||||
|
if (this.settings.state.timing) {
|
||||||
|
args.timing = this.settings.state.timing
|
||||||
|
}
|
||||||
|
|
||||||
if (projector_second && projector_second.arduino) {
|
if (projector_second && projector_second.arduino) {
|
||||||
args.projector_second = projector_second
|
args.projector_second = projector_second
|
||||||
|
|
|
@ -16,7 +16,8 @@ class Settings {
|
||||||
camera : {},
|
camera : {},
|
||||||
projector : {},
|
projector : {},
|
||||||
light : {},
|
light : {},
|
||||||
capper : {}
|
capper : {},
|
||||||
|
timing : {}
|
||||||
}
|
}
|
||||||
public state : any;
|
public state : any;
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue