@joergmittaglawo/dmvconfig
Version:
DMV Configuration scripts for Lawo V__matrix Distributed Multiviewers.
223 lines • 7.66 kB
JavaScript
;
/**
* Runs the Heads Configuration
* @packageDocumentation
*
* @version 0.0.0-alpha.0
* @date 2020-10-13
* @author Mittag, Jörg (Lawo) <joerg.mittag@lawo.com>
* @license SPDX-License-Identifier: MIT
*
* @changelog 2020-10-13 JMi Add support for tally rules
* @changelog 2020-10-10 JMi Add support for background images
* @changelog 2020-10-10 JMi Implement support for PPMs
* @changelog 2020-10-10 JMi Make unnecessary members optional
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.runHeadConfig = void 0;
/**
* Runs the Heads Configuration
*
* @param config The DMV Configuration
* @param master An open VMatrix connection to the cluster master
*/
async function runHeadConfig({ heads }, master) {
const tallyRulesDefault = [
{
level: 0,
priority: 2,
color: {
hue: 0,
saturation: 100,
lightness: 50,
opacity: 100,
},
},
{
level: 1,
priority: 0,
color: {
hue: 120,
saturation: 100,
lightness: 50,
opacity: 100,
},
},
{
level: 2,
priority: 1,
color: {
hue: 60,
saturation: 100,
lightness: 50,
opacity: 100,
},
},
];
console.log('Creating Heads');
/*
await Promise.all(
heads.map(
(_, idx) =>
master.multiviewer.global.configuration.head.create_row(
{
"name": `Head ${idx}`,
"index": idx,
}
)
)
);
*/
for (let idx = 0; idx < heads.length; idx++) {
await master.multiviewer.global.configuration.head.create_row({
name: `Head ${idx}`,
index: idx,
});
}
console.log('Configuring Heads and creating PIPs, clocks, and textboxes');
await Promise.all(heads.flatMap(({ standard: std, /* pips = 64, clocks: { analog = 4, digital = 4 } = { analog: 4, digital: 4 }, textboxes: text = 16, ppms = 8, images = 2,*/ streaming, tallyRules = tallyRulesDefault, }, head) => [
master.multiviewer.global.configuration.head.row(head).parameters.video_standard.write(std),
master.multiviewer.global.configuration.head.row(head).parameters.streaming.enable.write(!!streaming),
master.multiviewer.global.configuration.head.row(head).parameters.streaming.transport_format.write(streaming ?? 'ST2110_GPM'),
tallyRules.flatMap(({ level, priority, color }, rule) => {
const rules = master.multiviewer.global.configuration.head.row(head).parameters.tally_rules;
let tallyRule;
switch (rule) {
case 0:
tallyRule = rules.rule_0;
break;
case 1:
tallyRule = rules.rule_1;
break;
case 2:
tallyRule = rules.rule_2;
break;
case 3:
tallyRule = rules.rule_3;
break;
case 4:
tallyRule = rules.rule_4;
break;
case 5:
tallyRule = rules.rule_5;
break;
case 6:
tallyRule = rules.rule_6;
break;
case 7:
tallyRule = rules.rule_7;
break;
default:
throw new Error('Only 8 tally rules per head are allowed!');
}
return [
tallyRule.bit_id.write(level),
tallyRule.priority_id.write(priority),
tallyRule.colour.write(color),
];
}),
/* Array.from(
{ "length": pips },
(_, pip) =>
master.multiviewer.global.configuration.head.row(head).pip.create_row(
{
"name": `PIP ${pip}`,
"index": pip,
}
)
),
Array.from(
{ "length": analog },
(_, analog) =>
master.multiviewer.global.configuration.head.row(head).analog_clock.create_row(
{
"name": `Analog Clock ${analog}`,
"index": analog,
}
)
),
Array.from(
{ "length": digital },
(_, digital) =>
master.multiviewer.global.configuration.head.row(head).digital_clock.create_row(
{
"name": `Digital Clock ${digital}`,
"index": digital,
}
)
),
Array.from(
{ "length": text },
(_, text) =>
master.multiviewer.global.configuration.head.row(head).text_box.create_row(
{
"name": `Textbox ${text}`,
"index": text,
}
)
),
Array.from(
{ "length": ppms },
(_, ppm) =>
master.multiviewer.global.configuration.head.row(head).ppm.create_row(
{
"name": `PPM ${ppm}`,
"index": ppm,
}
)
),
Array.from(
{ "length": images },
(_, image) =>
master.multiviewer.global.configuration.head.row(head).image.create_row(
{
"name": `Image ${image}`,
"index": image,
}
)
), */
].flat((999 /* Infinity */))));
let head = -1;
for (const { pips = 64, clocks: { analog = 4, digital = 4 } = { analog: 4, digital: 4 }, textboxes: text = 16, ppms = 8, images = 2, } of heads) {
head++;
for (let i = 0; i < pips; i++) {
await master.multiviewer.global.configuration.head.row(head).pip.create_row({
name: `PIP ${i}`,
index: i,
});
}
for (let i = 0; i < analog; i++) {
await master.multiviewer.global.configuration.head.row(head).analog_clock.create_row({
name: `Analog Clock ${i}`,
index: i,
});
}
for (let i = 0; i < digital; i++) {
await master.multiviewer.global.configuration.head.row(head).digital_clock.create_row({
name: `Digital Clock ${i}`,
index: i,
});
}
for (let i = 0; i < text; i++) {
await master.multiviewer.global.configuration.head.row(head).text_box.create_row({
name: `Textbox ${i}`,
index: i,
});
}
for (let i = 0; i < ppms; i++) {
await master.multiviewer.global.configuration.head.row(head).ppm.create_row({
name: `PPM ${i}`,
index: i,
});
}
for (let i = 0; i < images; i++) {
await master.multiviewer.global.configuration.head.row(head).image.create_row({
name: `Image ${i}`,
index: i,
});
}
}
}
exports.runHeadConfig = runHeadConfig;
exports.default = runHeadConfig;
//# sourceMappingURL=heads.js.map