mcopy/app/lib/ui/devices.js

227 lines
7.7 KiB
JavaScript

'use strict';
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
/// <reference path ="jquery.d.ts"/>
let devices;
class Devices {
constructor() {
this.id = 'devices';
}
init() {
this.listen();
this.profiles();
gui.overlay(true);
gui.spinner(true, 'Checking for connected devices...');
}
listen() {
ipcRenderer.on('ready', this.ready.bind(this));
ipcRenderer.on('intval', this.intvalCb.bind(this));
ipcRenderer.on('processing', this.processingCb.bind(this));
ipcRenderer.on('error_state', this.errorState.bind(this));
}
ready(event, arg) {
return __awaiter(this, void 0, void 0, function* () {
//console.dir(arg)
let opt;
let devs = [];
let notify = 'Connected to ';
let p;
if (arg.camera && arg.camera.exposure) {
$('#submit_cam_time').removeClass('hide');
$('#cam_time').removeAttr('readonly');
}
for (let i in arg) {
devs.push(arg[i].arduino);
if (arg[i].arduino && arg[i].arduino !== '/dev/fake') {
if (notify === 'Connected to ') {
notify += arg[i].arduino + ' ';
}
else {
notify += `& ${arg[i].arduino}`;
}
}
opt = $('<option>');
opt.val(`ARDUINO_${arg[i].arduino}`);
opt.text(arg[i].arduino);
$(`#${i}_device`).empty();
$(`#${i}_device`).append(opt);
}
if (notify !== 'Connected to ') {
gui.notify('DEVICES', notify);
}
else {
gui.notify('DEVICES', 'Connected to mock devices');
}
if (devs.length > 0) {
$('#devices').empty();
for (let i of devs) {
opt = $('<option>');
opt.val(i);
opt.text(i);
$('#devices').append(opt);
}
}
if (arg && arg.profile) {
$('#profile').val(arg.profile);
log.info(`Using configuration profile "${arg.profile}"`, 'DEVICES', true, true);
p = cfg.profiles[arg.profile];
if (typeof p.light !== 'undefined' && p.light === false) {
light.disable();
}
else {
light.enable();
}
timing.reset(p);
//devices.profile(arg.profile)
}
if (arg && arg.timing) {
timing.restore(arg.timing);
}
if (arg.projector_second) {
//add second row of projector pads to grid
proj.second.enable();
}
if (arg.camera_second) {
//add second row of camera pads to grid
cam.second.enable();
}
if (arg.capper) {
//add capper features to grid
capper.enable();
}
seq.set(0, cfg.cmd.camera_forward);
seq.set(1, cfg.cmd.projector_forward);
grid.state(0);
grid.state(1);
seq.stats();
//@ts-ignore
yield delay(1000);
try {
gui.spinner(false);
gui.overlay(false);
}
catch (err) {
log.error(err);
}
return event.returnValue = true;
});
}
profiles() {
const keys = Object.keys(cfg.profiles);
const elem = $('#profile');
let opt;
elem.empty();
for (let key of keys) {
opt = $('<option>');
opt.val(key);
opt.text(cfg.profiles[key].label);
elem.append(opt);
}
elem.on('change', (t) => {
const val = $('#profile').val();
this.profile(val);
});
}
profile(profile) {
log.info(`Changed configuration profile to "${profile}"`, 'DEVICES', true, true);
const p = cfg.profiles[profile];
const keys = Object.keys(p);
for (let key of keys) {
cfg[key] = keys[key];
}
timing.reset(p);
if (typeof p.light !== 'undefined' && p.light === false) {
light.disable();
}
else {
light.enable();
}
ipcRenderer.send('profile', { profile });
timing.store();
}
intval() {
const url = $('#intval').val();
let proceed = false;
let obj = {
connect: true,
url
};
if (url !== '' && typeof url !== 'undefined') {
proceed = confirm(`Are you sure you want to connect to INTVAL3 @ ${url}?`);
}
else {
alert('Cannot connect to INTVAL3 URL as entered.');
}
if (proceed) {
gui.overlay(true);
gui.spinner(true, `Connecting to INTVAL3 @ ${url}`);
ipcRenderer.send('intval', obj);
}
else {
$('#camera_type_arduino').prop('checked', 'checked');
$('#intval').removeClass('active');
}
}
intvalCb(evt, args) {
let state;
gui.spinner(false);
gui.overlay(false);
if (args.connected && args.connected === true) {
//success state
state = JSON.parse(args.state);
cam.pos = state.counter;
cam.dir = state.frame.dir;
$('#intval').val(args.url);
$('#intval').addClass('active');
$('#camera_type_intval').prop('checked', 'checked');
gui.notify('DEVICES', `Connected to INTVAL3 @ ${args.url}`);
gui.updateState();
}
else {
$('#camera_type_arduino').prop('checked', 'checked');
$('#intval').removeClass('active');
}
}
processing() {
const url = $('#processing').val();
let proceed = false;
let obj = {
url
};
if (url !== '' && typeof url !== 'undefined') {
proceed = confirm(`Are you sure you want to connect to Processing @ ${url}?`);
}
else {
alert('Cannot connect to Processing URL as entered.');
}
if (proceed) {
gui.overlay(true);
gui.spinner(true, `Connecting to Processing @ ${url}`);
ipcRenderer.send('processing', obj);
}
else {
$('#camera_type_arduino').prop('checked', 'checked');
$('#processing').removeClass('active');
}
}
processingCb() {
gui.spinner(false);
gui.overlay(false);
}
errorState() {
gui.spinner(false);
gui.overlay(false);
gui.notify('DEVICES', `Hardware error detected`);
gui.warn('Error', 'Hardware error detected. Please address before continuing.');
}
}
devices = new Devices();
module.exports = devices;
//# sourceMappingURL=devices.js.map