1 contributor
var annunciationsClass = {
new: func {
var m = { parents : [ annunciationsClass ] };
m.registered = {}; # triggers identified by message
m.active = []; # currently active warnings and alerts, sorted by emergency level
m.devices = []; # PFD displays
foreach (var d; keys(flightdeck))
if (flightdeck[d].role == 'PFD')
append(m.devices, d);
foreach (var warnings; alerts.getChildren('warnings'))
foreach (var warning; warnings.getChildren('warning'))
m.register(warning);
data.timers.annunciations = maketimer(1.0, func call(m.activate, [], m));
data.timers.annunciations.start();
return m;
},
register: func (node) {
me.registered[node.getValue('message')] = {
trigger: compile(node.getValue('script')),
node: node,
};
},
del: func (message) {
if (contains(me.registered, message))
delete(me.registered, message);
if (contains(me.active, message))
delete(me.active, message);
},
activate: func {
size(me.registered) or return;
var score = {};
foreach (var a; keys(me.registered))
if (me.registered[a].trigger())
score[me.registered[a].node.getValue('message')] = me.registered[a].node.getValue('level');
if (size(score) > 1) {
var sorted_scores = sort(keys(score), func (a, b) {
if (score[a] <= score[b])
return 1; # greatest first
else
return -1;
});
}
else
var sorted_scores = keys(score);
me.active = sorted_scores;
var levels_bg = [ 'lightgrey', 'white', 'red' ];
var levels_fg = [ 'black' , 'black', 'yellow' ];
if (size(me.active)) {
var level = score[sorted_scores[0]];
if (level > 2) level = 2;
foreach (var d; me.devices) {
flightdeck[d].display.screenElements['SoftKey11-bg']
.setColorFill(flightdeck[d].display.colors[levels_bg[level]]);
flightdeck[d].display.screenElements['SoftKey11-text']
.setColor(flightdeck[d].display.colors[levels_fg[level]]);
flightdeck[d].display.updateSoftKeys();
}
}
else {
foreach (var d; me.devices) {
flightdeck[d].display.screenElements['SoftKey11-bg']
.setColorFill(flightdeck[d].display.colors.black);
flightdeck[d].display.screenElements['SoftKey11-text']
.setColor(flightdeck[d].display.colors.lightgrey);
flightdeck[d].display.updateSoftKeys();
}
}
},
};