set color for specific pedalboards and/or systemd services
This commit is contained in:
parent
a55c7a9929
commit
a5c6801a4b
7 changed files with 128 additions and 63 deletions
|
@ -27,19 +27,27 @@
|
|||
"host": "192.168.1.31",
|
||||
"port": 3000,
|
||||
"colors": {
|
||||
"BigMuffPi": {
|
||||
"enabled": "#008800",
|
||||
"bypassed": "002200"
|
||||
"pedalboards": {
|
||||
"Default": "#0F0F0F",
|
||||
"FUZZ": "0F0F00"
|
||||
},
|
||||
"Overdrive": {
|
||||
"enabled": "#888800",
|
||||
"bypassed": "#222200"
|
||||
"pedals": {
|
||||
"BigMuffPi": {
|
||||
"enabled": "#008800",
|
||||
"bypassed": "002200"
|
||||
},
|
||||
"Overdrive": {
|
||||
"enabled": "#888800",
|
||||
"bypassed": "#222200"
|
||||
},
|
||||
"StompBox_fuzz": {
|
||||
"enabled": "#7700AA",
|
||||
"bypassed": "#220022"
|
||||
}
|
||||
},
|
||||
"StompBox_fuzz": {
|
||||
"enabled": "#7700AA",
|
||||
"bypassed": "#220022"
|
||||
"systemd": {
|
||||
"jack-capture": "#660066"
|
||||
}
|
||||
},
|
||||
"Bypass": "#333333"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -20,7 +20,7 @@ function setEndpoint(url, get, post) {
|
|||
endpoint.POST = post;
|
||||
}
|
||||
endpoints.set(url, endpoint);
|
||||
logger.debug('set up endpoint \'' + url + '\' > ' + JSON.stringify(endpoint));
|
||||
logger.debug('set up endpoint \'' + url + '\' > GET: ' + (endpoint.GET !== undefined) + ', POST ' + (endpoint.POST !== undefined));
|
||||
}
|
||||
|
||||
function getEndpoints() {
|
||||
|
|
138
libs/blinky.js
138
libs/blinky.js
|
@ -1,9 +1,17 @@
|
|||
const logger = require('./logger.js');
|
||||
const { CONTROL_BYPASS } = require('./constants.js');
|
||||
const { httpPOST } = require('./util.js');
|
||||
const { CONTROL_BYPASS, SYSTEMD_STATE_ACTIVE } = require('./constants.js');
|
||||
const { httpPOST, httpGET } = require('./util.js');
|
||||
|
||||
const BLINKSTICK_SQUARE = 'square';
|
||||
const BLINKSTICK_STRIP = 'strip';
|
||||
|
||||
const COLOR_RANDOM = 'random';
|
||||
const COLOR_DEFAULT = '#333333';
|
||||
|
||||
let enabled;
|
||||
let isBypassActive;
|
||||
let fnIsBypassActive;
|
||||
|
||||
let animationsInProgress = {};
|
||||
|
||||
async function initialize() {
|
||||
enabled = global.config.blinky !== undefined &&
|
||||
|
@ -12,36 +20,60 @@ async function initialize() {
|
|||
global.config.blinky.port !== undefined;
|
||||
}
|
||||
|
||||
async function setActive(active) {
|
||||
async function getColor() {
|
||||
if (!enabled) {
|
||||
return;
|
||||
}
|
||||
logger.info('handling blinky event \'setActive\' (argument: \'' + active + '\')...');
|
||||
try {
|
||||
if (active) {
|
||||
return await httpGET(
|
||||
global.config.blinky.host,
|
||||
global.config.blinky.port,
|
||||
'color'
|
||||
);
|
||||
} catch (err) {
|
||||
logger.error('[blinky] ' + err);
|
||||
}
|
||||
}
|
||||
|
||||
async function poweroff(...blinksticks) {
|
||||
if (!enabled) {
|
||||
return;
|
||||
}
|
||||
if (blinksticks === undefined || blinksticks.length === 0) {
|
||||
blinksticks = [BLINKSTICK_SQUARE, BLINKSTICK_STRIP];
|
||||
}
|
||||
for (let index = 0; index < blinksticks.length; index++) {
|
||||
try {
|
||||
await httpPOST(
|
||||
global.config.blinky.host,
|
||||
global.config.blinky.port,
|
||||
'/set',
|
||||
{ blinkstick: 'square', color: '#0f0f0f' }
|
||||
'poweroff',
|
||||
{ blinkstick: blinksticks[index] }
|
||||
);
|
||||
logger.debug('[blinky] powered off blinkstick \'' + blinksticks[index]);
|
||||
} catch (err) {
|
||||
logger.error('[blinky] ' + err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function setPedalboardStatus(pedalboard) {
|
||||
try {
|
||||
if (!enabled || pedalboard === undefined) {
|
||||
return;
|
||||
}
|
||||
let mode = '/poweroff';
|
||||
await httpPOST(
|
||||
global.config.blinky.host,
|
||||
global.config.blinky.port,
|
||||
mode,
|
||||
{ blinkstick: 'square' }
|
||||
);
|
||||
await httpPOST(
|
||||
global.config.blinky.host,
|
||||
global.config.blinky.port,
|
||||
mode,
|
||||
{ blinkstick: 'strip' }
|
||||
'set',
|
||||
{
|
||||
blinkstick: BLINKSTICK_SQUARE,
|
||||
color: getPedalboardColor(pedalboard.title)
|
||||
}
|
||||
);
|
||||
logger.debug('[blinky] set status for pedalboard \'' + pedalboard.title + '\'');
|
||||
} catch (err) {
|
||||
logger.error('[BLINKY] ' + err);
|
||||
logger.error('[blinky] ' + err);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -50,8 +82,8 @@ async function setPedalStatus(pedal) {
|
|||
if (!enabled || pedal === undefined || pedal.controls === undefined) {
|
||||
return;
|
||||
}
|
||||
if (isBypassActive === undefined) {
|
||||
isBypassActive = require('./modep.js').isBypassActive;
|
||||
if (fnIsBypassActive === undefined) {
|
||||
fnIsBypassActive = require('./modep.js').isBypassActive;
|
||||
}
|
||||
for (let index = 0; index < pedal.controls.length; index++) {
|
||||
const bypass = pedal.controls[index];
|
||||
|
@ -63,23 +95,25 @@ async function setPedalStatus(pedal) {
|
|||
global.config.blinky.port,
|
||||
'set',
|
||||
{
|
||||
blinkstick: 'strip',
|
||||
blinkstick: BLINKSTICK_STRIP,
|
||||
index: pedal.id,
|
||||
color: getPedalColor(pedal.name, isBypassActive(bypass))
|
||||
color: getPedalColor(pedal.name, fnIsBypassActive(bypass))
|
||||
}
|
||||
);
|
||||
logger.debug('[blinky] set status for pedal \'' + pedal.name + '\'');
|
||||
}
|
||||
} catch (err) {
|
||||
logger.error('[BLINKY] ' + err);
|
||||
logger.error('[blinky] ' + err);
|
||||
}
|
||||
}
|
||||
|
||||
async function setStatus(pedals) {
|
||||
async function setStatus(pedalboard, pedals) {
|
||||
if (!enabled) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await httpPOST(global.config.blinky.host, global.config.blinky.port, '/poweroff', { blinkstick: 'strip' });
|
||||
setPedalboardStatus(pedalboard);
|
||||
await poweroff([BLINKSTICK_STRIP]);
|
||||
if (pedals === undefined || pedals.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
@ -98,38 +132,58 @@ async function setStatus(pedals) {
|
|||
}
|
||||
}
|
||||
} catch (err) {
|
||||
logger.error('[BLINKY] ' + err);
|
||||
logger.error('[blinky] ' + err);
|
||||
}
|
||||
}
|
||||
|
||||
async function setBypass(bypassActive) {
|
||||
if (!enabled) {
|
||||
async function setSystemdStatus(name, state) {
|
||||
if (name === undefined || state === undefined) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (!bypassActive) {
|
||||
return await setActive(true);
|
||||
let mode = 'set';
|
||||
let options = {
|
||||
blinkstick: BLINKSTICK_STRIP,
|
||||
color: animationsInProgress[name] || COLOR_DEFAULT
|
||||
};
|
||||
if (state === SYSTEMD_STATE_ACTIVE) {
|
||||
const result = await getColor([BLINKSTICK_SQUARE]);
|
||||
for (let index = 0; index < result.length; index++) {
|
||||
if (result[index].blinkstick !== options.blinkstick) {
|
||||
continue;
|
||||
}
|
||||
animationsInProgress[name] = result[index].leds[0]?.color || COLOR_RANDOM;
|
||||
mode = 'pulse';
|
||||
options.color = getSystemdColor(name);
|
||||
break;
|
||||
}
|
||||
await httpPOST(global.config.blinky.host, global.config.blinky.port, 'pulse', { blinkstick: 'square', color: '#660000' });
|
||||
} catch (err) {
|
||||
logger.error('[BLINKY] ' + err);
|
||||
}
|
||||
return await httpPOST(
|
||||
global.config.blinky.host,
|
||||
global.config.blinky.port,
|
||||
mode,
|
||||
options
|
||||
);
|
||||
}
|
||||
|
||||
function getPedalboardColor(name) {
|
||||
return global.config?.blinky?.colors?.pedalboards[name] || COLOR_RANDOM;
|
||||
}
|
||||
|
||||
function getPedalColor(name, bypassed) {
|
||||
let color;
|
||||
if (bypassed) {
|
||||
color = global.config.blinky?.colors[name]?.bypassed || global.config.blinky?.colors['Bypass'] || '#333333';
|
||||
} else {
|
||||
color = global.config.blinky?.colors[name]?.enabled || 'random';
|
||||
return global.config?.blinky?.colors?.pedals[name]?.bypassed || COLOR_DEFAULT;
|
||||
}
|
||||
return color;
|
||||
return global.config?.blinky?.colors?.pedals[name]?.enabled || COLOR_RANDOM;
|
||||
}
|
||||
|
||||
function getSystemdColor(name) {
|
||||
return global.config?.blinky?.colors?.systemd[name] || COLOR_RANDOM;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
initialize,
|
||||
setActive,
|
||||
setBypass,
|
||||
poweroff,
|
||||
setStatus,
|
||||
setPedalStatus
|
||||
setPedalStatus,
|
||||
setSystemdStatus
|
||||
}
|
|
@ -146,7 +146,7 @@ async function parseCurrentPedalboard(currentPedalboard) {
|
|||
const defaultPedalboard = await getDefaultPedalboard();
|
||||
if (defaultPedalboard.id === currentPedalboard.id) {
|
||||
cache.setCurrentPedals(pedals);
|
||||
blinky.setStatus(pedals);
|
||||
blinky.setStatus(currentPedalboard, pedals);
|
||||
return pedals;
|
||||
}
|
||||
let startTime = new Date();
|
||||
|
@ -155,8 +155,8 @@ async function parseCurrentPedalboard(currentPedalboard) {
|
|||
throw new Error('could not determine current pedalboard config file');
|
||||
}
|
||||
// FAKE DATA
|
||||
// let file = path.resolve(path.dirname(__dirname) + '/dev/' + currentPedalboard.uri.substring(currentPedalboard.uri.lastIndexOf('/') + 1));
|
||||
let file = path.resolve(currentPedalboard.uri.replace('file://', ''));
|
||||
let file = path.resolve(path.dirname(__dirname) + '/dev/' + currentPedalboard.uri.substring(currentPedalboard.uri.lastIndexOf('/') + 1));
|
||||
// let file = path.resolve(currentPedalboard.uri.replace('file://', ''));
|
||||
const data = await new Promise((resolve, reject) => {
|
||||
fs.readFile(file, (err, data) => {
|
||||
if (err) {
|
||||
|
@ -210,7 +210,7 @@ async function parseCurrentPedalboard(currentPedalboard) {
|
|||
}
|
||||
logger.debug('parsing current pedalboard file \'' + file + '\' took ' + util.timeDiff(startTime) + 'ms')
|
||||
cache.setCurrentPedals(pedals);
|
||||
blinky.setStatus(pedals);
|
||||
blinky.setStatus(currentPedalboard, pedals);
|
||||
return pedals;
|
||||
}
|
||||
|
||||
|
@ -241,6 +241,7 @@ async function setControl(control, value) {
|
|||
}
|
||||
control.midi.value = await osc.send(control.midi.controller, control.midi.channel, value);
|
||||
cache.updateControl(control);
|
||||
logger.info('set value for control \'' + control.name + '\' to \'' + value + '\'');
|
||||
}
|
||||
|
||||
async function setPedalboardById(pedalboardId) {
|
||||
|
@ -263,6 +264,7 @@ async function setPedalboard(pedalboard) {
|
|||
await reset();
|
||||
await util.httpPOST(global.config.modep.host, global.config.modep.port, '/pedalboard/load_bundle/?bundlepath=' + pedalboard.bundle);
|
||||
cache.setCurrentPedalboard(pedalboard);
|
||||
logger.info('set current pedalboard to \'' + pedalboard.title + '\'');
|
||||
return await parseCurrentPedalboard(pedalboard);
|
||||
}
|
||||
|
||||
|
@ -316,7 +318,6 @@ async function toggleBypass(pedalId) {
|
|||
pedalboardIdBypassOrigin = undefined;
|
||||
}
|
||||
await setPedalboardById(pedalboardId);
|
||||
blinky.setBypass(pedalboardId === defaultPedalboard.id);
|
||||
} catch (err) {
|
||||
throw new Error(err);
|
||||
}
|
||||
|
@ -334,6 +335,7 @@ async function toggleBypass(pedalId) {
|
|||
} catch (err) {
|
||||
throw new Error('could not toggle bypass for pedal ' + pedal.name + ' with id \'' + pedal.id + '\' > ' + err);
|
||||
}
|
||||
logger.info('toggled bypass for pedal \'' + pedal.name + '\'');
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
const logger = require('./logger.js');
|
||||
const api = require('./api.js');
|
||||
const blinky = require('./blinky.js');
|
||||
const http = require('http');
|
||||
|
||||
const ID = require('./constants.js').VARIABLE_ID;
|
||||
|
@ -13,7 +12,6 @@ async function start() {
|
|||
}
|
||||
server.listen(global.config.server.port, global.config.server.listen).on('listening', () => {
|
||||
logger.debug('server listening on ' + global.config.server.listen + ':' + global.config.server.port + '...');
|
||||
blinky.setActive(true);
|
||||
handleRequests();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
const logger = require('./logger.js');
|
||||
const commands = require('./commands.js');
|
||||
const constants = require('./constants.js');
|
||||
const blinky = require('./blinky.js');
|
||||
|
||||
async function getServiceState(name) {
|
||||
if (name === undefined) {
|
||||
|
@ -42,7 +43,9 @@ async function setServiceState(name, args) {
|
|||
state = constants.SYSTEMD_STATE_ACTIVE;
|
||||
}
|
||||
logger.debug('setting state of service \'' + name + '\' to \'' + state + '\'...');
|
||||
return { service: name, state: state, result: await commands.execute('systemctl', [command, name], true)};
|
||||
const result = await commands.execute('systemctl', [command, name], true);
|
||||
blinky.setSystemdStatus(name, state);
|
||||
return { service: name, state: state, result: result};
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
|
2
pbc.js
2
pbc.js
|
@ -40,7 +40,7 @@ function handleExit() {
|
|||
}
|
||||
|
||||
async function exit(err, code) {
|
||||
await blinky.setActive(false);
|
||||
await blinky.poweroff();
|
||||
if (code === undefined) {
|
||||
code = 0;
|
||||
if (err !== undefined) {
|
||||
|
|
Loading…
Reference in a new issue