Merge branch 'dev' into 3D
This commit is contained in:
commit
ff09501f37
8 changed files with 1235 additions and 939 deletions
|
@ -1830,7 +1830,11 @@
|
||||||
</groundradar>
|
</groundradar>
|
||||||
|
|
||||||
<iesi>
|
<iesi>
|
||||||
|
<att-reset type="double">false</att-reset>
|
||||||
<att-reset-cmd type="bool">false</att-reset-cmd>
|
<att-reset-cmd type="bool">false</att-reset-cmd>
|
||||||
|
<display>
|
||||||
|
<show-mach type="bool">false</show-mach>
|
||||||
|
</display>
|
||||||
</iesi>
|
</iesi>
|
||||||
|
|
||||||
<marker-beacon n="0">
|
<marker-beacon n="0">
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
|
|
||||||
# props.nas nodes
|
# props.nas nodes
|
||||||
var iesi_init = props.globals.initNode("/instrumentation/iesi/iesi-init", 0, "BOOL");
|
var iesi_init = props.globals.initNode("/instrumentation/iesi/iesi-init", 0, "BOOL");
|
||||||
var iesi_reset = props.globals.initNode("/instrumentation/iesi/att-reset", 0, "DOUBLE");
|
|
||||||
|
|
||||||
var pinPrograms = {
|
var pinPrograms = {
|
||||||
metricAltitude: 1,
|
metricAltitude: 1,
|
||||||
|
@ -29,6 +28,7 @@ var canvas_IESI = {
|
||||||
};
|
};
|
||||||
|
|
||||||
canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} );
|
canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} );
|
||||||
|
|
||||||
foreach(var key; obj.getKeys()) {
|
foreach(var key; obj.getKeys()) {
|
||||||
obj[key] = obj.group.getElementById(key);
|
obj[key] = obj.group.getElementById(key);
|
||||||
|
|
||||||
|
@ -46,37 +46,59 @@ var canvas_IESI = {
|
||||||
obj[key].set("clip-frame", canvas.Element.PARENT);
|
obj[key].set("clip-frame", canvas.Element.PARENT);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
obj.AI_horizon_trans = obj["AI_horizon"].createTransform();
|
obj.AI_horizon_trans = obj["AI_horizon"].createTransform();
|
||||||
obj.AI_horizon_rot = obj["AI_horizon"].createTransform();
|
obj.AI_horizon_rot = obj["AI_horizon"].createTransform();
|
||||||
|
|
||||||
obj._aiCenter = obj["AI_center"].getCenter();
|
obj._aiCenter = obj["AI_center"].getCenter();
|
||||||
|
|
||||||
obj._cachedInhg = -999;
|
obj._cachedInhg = -999;
|
||||||
|
obj._cachedMetric = pinPrograms.metricAltitude;
|
||||||
obj._cachedMode = nil;
|
obj._cachedMode = nil;
|
||||||
|
obj._cachedShowInhg = pinPrograms.showInHg;
|
||||||
obj._canReset = 0;
|
obj._canReset = 0;
|
||||||
obj._excessMotionInInit = 0;
|
obj._excessMotionInInit = 0;
|
||||||
obj._fastInit = 0;
|
obj._fastInit = 0;
|
||||||
obj._IESITime = 0;
|
obj._IESITime = 0;
|
||||||
obj._isNegativeAlt = 0;
|
obj._isNegativeAlt = 0;
|
||||||
obj._middleAltOffset = nil;
|
obj._middleAltOffset = nil;
|
||||||
obj._powerResult = 0;
|
obj.iesiInAlign = 0;
|
||||||
obj._roll = 0;
|
|
||||||
|
|
||||||
|
obj["IESI"].hide();
|
||||||
|
obj["IESI_Init"].show();
|
||||||
|
obj["ATTflag"].hide();
|
||||||
|
|
||||||
obj.update_items = [
|
obj.update_items = [
|
||||||
props.UpdateManager.FromHashValue("airspeed", 0.1, func(val) {
|
props.UpdateManager.FromHashValue("airspeedIESI", 0.1, func(val) {
|
||||||
obj["ASI_scale"].setTranslation(0, math.clamp(val - 30, 0, 490) * 8.295);
|
obj["ASI_scale"].setTranslation(0, math.clamp(val - 30, 0, 490) * 8.295);
|
||||||
}),
|
}),
|
||||||
props.UpdateManager.FromHashList(["altitude","altitude_ind"], 0.5, func(val) {
|
props.UpdateManager.FromHashValue("altitudeIESI", 0.5, func(val) {
|
||||||
val.altitude = math.clamp(val.altitude, -2000, 50000);
|
val = math.clamp(val, -2000, 50000);
|
||||||
if (val.altitude < 0) {
|
|
||||||
|
obj["ALT_meters"].setText(sprintf("%5.0f", math.round(val * 0.3048, 10)));
|
||||||
|
|
||||||
|
obj.middleAltText = roundaboutAlt(val / 100);
|
||||||
|
|
||||||
|
obj["ALT_five"].setText(sprintf("%03d", abs(obj.middleAltText + 10)));
|
||||||
|
obj["ALT_four"].setText(sprintf("%03d", abs(obj.middleAltText + 5)));
|
||||||
|
obj["ALT_three"].setText(sprintf("%03d", abs(obj.middleAltText)));
|
||||||
|
obj["ALT_two"].setText(sprintf("%03d", abs(obj.middleAltText - 5)));
|
||||||
|
obj["ALT_one"].setText(sprintf("%03d", abs(obj.middleAltText - 10)));
|
||||||
|
|
||||||
|
if (val < 0) {
|
||||||
obj["negText"].show();
|
obj["negText"].show();
|
||||||
obj._isNegativeAlt = 1;
|
obj._isNegativeAlt = 1;
|
||||||
} else {
|
} else {
|
||||||
obj["negText"].hide();
|
obj["negText"].hide();
|
||||||
obj._isNegativeAlt = 0;
|
obj._isNegativeAlt = 0;
|
||||||
}
|
}
|
||||||
|
}),
|
||||||
|
props.UpdateManager.FromHashValue("altitudeIESI", 0.1, func(val) {
|
||||||
|
val = math.clamp(val, -2000, 50000);
|
||||||
|
|
||||||
|
obj.altOffset = (val / 500) - int(val / 500);
|
||||||
|
|
||||||
obj.altOffset = (val.altitude / 500) - int(val.altitude / 500);
|
|
||||||
obj.middleAltText = roundaboutAlt(val.altitude / 100);
|
|
||||||
if (obj.altOffset > 0.5) {
|
if (obj.altOffset > 0.5) {
|
||||||
obj._middleAltOffset = -(obj.altOffset - 1) * 258.5528;
|
obj._middleAltOffset = -(obj.altOffset - 1) * 258.5528;
|
||||||
} else {
|
} else {
|
||||||
|
@ -85,23 +107,11 @@ var canvas_IESI = {
|
||||||
|
|
||||||
obj["ALT_scale"].setTranslation(0, -obj._middleAltOffset);
|
obj["ALT_scale"].setTranslation(0, -obj._middleAltOffset);
|
||||||
obj["ALT_scale"].update();
|
obj["ALT_scale"].update();
|
||||||
obj["ALT_five"].setText(sprintf("%03d", abs(obj.middleAltText+10)));
|
|
||||||
obj["ALT_four"].setText(sprintf("%03d", abs(obj.middleAltText+5)));
|
|
||||||
obj["ALT_three"].setText(sprintf("%03d", abs(obj.middleAltText)));
|
|
||||||
obj["ALT_two"].setText(sprintf("%03d", abs(obj.middleAltText-5)));
|
|
||||||
obj["ALT_one"].setText(sprintf("%03d", abs(obj.middleAltText-10)));
|
|
||||||
|
|
||||||
|
obj["ALT_tens"].setTranslation(0, num(right(sprintf("%02d", val), 2)) * 3.16);
|
||||||
if (val.altitude < 0 and val.altitude_ind > 20) {
|
}),
|
||||||
val.altitude_ind = 20;
|
props.UpdateManager.FromHashValue("altitude_indIESI", 0.5, func(val) {
|
||||||
} elsif (val.altitude > 0 and val.altitude_ind > 500) {
|
obj["ALT_digits"].setText(sprintf("%s", math.clamp(val, -20, 500)));
|
||||||
val.altitude_ind = 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
obj["ALT_digits"].setText(sprintf("%s", val.altitude_ind));
|
|
||||||
obj["ALT_meters"].setText(sprintf("%5.0f", math.round(val.altitude * 0.3048, 10)));
|
|
||||||
obj.altTens = num(right(sprintf("%02d", val.altitude), 2));
|
|
||||||
obj["ALT_tens"].setTranslation(0, obj.altTens * 3.16);
|
|
||||||
}),
|
}),
|
||||||
props.UpdateManager.FromHashValue("showMach", 1, func(val) {
|
props.UpdateManager.FromHashValue("showMach", 1, func(val) {
|
||||||
if (val) {
|
if (val) {
|
||||||
|
@ -115,16 +125,15 @@ var canvas_IESI = {
|
||||||
props.UpdateManager.FromHashValue("mach", 0.001, func(val) {
|
props.UpdateManager.FromHashValue("mach", 0.001, func(val) {
|
||||||
obj["ASI_mach"].setText(sprintf("%2.0f", math.clamp(val * 100, 0, 99)));
|
obj["ASI_mach"].setText(sprintf("%2.0f", math.clamp(val * 100, 0, 99)));
|
||||||
}),
|
}),
|
||||||
props.UpdateManager.FromHashValue("pitch", 0.025, func(val) {
|
props.UpdateManager.FromHashValue("iesiPitch", 0.025, func(val) {
|
||||||
obj.AI_horizon_trans.setTranslation(0, val * 16.74);
|
obj.AI_horizon_trans.setTranslation(0, val * 16.74);
|
||||||
}),
|
}),
|
||||||
props.UpdateManager.FromHashValue("roll", 0.025, func(val) {
|
props.UpdateManager.FromHashValue("roll", 0.025, func(val) {
|
||||||
obj._roll = -val * D2R;
|
obj.AI_horizon_rot.setRotation(-val * D2R, obj._aiCenter);
|
||||||
obj.AI_horizon_rot.setRotation(obj._roll, obj._aiCenter);
|
obj["AI_bank"].setRotation(-val * D2R);
|
||||||
obj["AI_bank"].setRotation(obj._roll);
|
|
||||||
}),
|
}),
|
||||||
props.UpdateManager.FromHashValue("skid", 0.1, func(val) {
|
props.UpdateManager.FromHashValue("skid", 0.1, func(val) {
|
||||||
if (abs(val) >= 84.99) {
|
if (abs(val) >= 85) {
|
||||||
obj["AI_slipskid"].hide();
|
obj["AI_slipskid"].hide();
|
||||||
} else {
|
} else {
|
||||||
obj["AI_slipskid"].setTranslation(-val, 0);
|
obj["AI_slipskid"].setTranslation(-val, 0);
|
||||||
|
@ -132,112 +141,174 @@ var canvas_IESI = {
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
obj.update_items_init = [
|
||||||
|
props.UpdateManager.FromHashList(["iesiAlignTime","elapsedTime"], 0.5, func(val) {
|
||||||
|
if (val.iesiAlignTime + 90 >= val.elapsedTime) {
|
||||||
|
obj.iesiInAlign = 1;
|
||||||
|
} else {
|
||||||
|
obj.iesiInAlign = 0;
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
props.UpdateManager.FromHashList(["iesiInAlign","iesiFastInit","irAlignFault"], 1, func(val) {
|
||||||
|
if (val.iesiInAlign) {
|
||||||
|
if (!val.iesiFastInit and val.irAlignFault) {
|
||||||
|
obj._excessMotionInInit = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
props.UpdateManager.FromHashList(["iesiExcessMotion","iesiFastInit","iesiInAlign"], 1, func(val) {
|
||||||
|
if (val.iesiInAlign) {
|
||||||
|
if (val.iesiFastInit) {
|
||||||
|
obj["IESI"].show();
|
||||||
|
obj["IESI_Init"].hide();
|
||||||
|
obj["AI_bank"].hide();
|
||||||
|
obj["AI_bank_center"].hide();
|
||||||
|
obj["AI_bank_scale"].hide();
|
||||||
|
obj["AI_horizon"].hide();
|
||||||
|
obj["AI_sky_bank"].hide();
|
||||||
|
obj["ATTflag_text"].setText("ATT 10s");
|
||||||
|
obj["ATTflag_text"].setColor(0,0,0);
|
||||||
|
obj["ATTflag_rect"].setScale(1.5,1);
|
||||||
|
obj["ATTflag_rect"].setTranslation(-250,0);
|
||||||
|
obj["ATTflag_rect"].setColorFill(1,1,0);
|
||||||
|
obj["ATTflag_rect"].setColor(1,1,0);
|
||||||
|
obj["ATTflag"].show();
|
||||||
|
obj["attRst"].hide();
|
||||||
|
obj["attRstRect"].hide();
|
||||||
|
} else {
|
||||||
|
obj["IESI"].hide();
|
||||||
|
obj["IESI_Init"].show();
|
||||||
|
obj["ATTflag"].hide();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!val.iesiExcessMotion) {
|
||||||
|
obj["IESI_Init"].hide();
|
||||||
|
obj["IESI"].show();
|
||||||
|
obj["AI_bank"].show();
|
||||||
|
obj["AI_bank_center"].show();
|
||||||
|
obj["AI_bank_scale"].show();
|
||||||
|
obj["AI_index"].show();
|
||||||
|
obj["AI_horizon"].show();
|
||||||
|
obj["AI_sky_bank"].show();
|
||||||
|
obj["ATTflag"].hide();
|
||||||
|
} else {
|
||||||
|
obj["IESI_Init"].hide();
|
||||||
|
obj["IESI"].show();
|
||||||
|
obj["AI_bank"].hide();
|
||||||
|
obj["AI_bank_center"].hide();
|
||||||
|
obj["AI_bank_scale"].hide();
|
||||||
|
obj["AI_horizon"].hide();
|
||||||
|
obj["AI_sky_bank"].hide();
|
||||||
|
obj["ATTflag_text"].setText("ATT");
|
||||||
|
obj["ATTflag_text"].setColor(1,0,0);
|
||||||
|
obj["ATTflag_rect"].setScale(1,1);
|
||||||
|
obj["ATTflag_rect"].setTranslation(0,0);
|
||||||
|
obj["ATTflag_rect"].setColorFill(0,0,0);
|
||||||
|
obj["ATTflag_rect"].setColor(0,0,0);
|
||||||
|
obj["ATTflag"].show();
|
||||||
|
obj["attRst"].show();
|
||||||
|
obj["attRstRect"].show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
];
|
||||||
|
|
||||||
|
obj.update_items_power = [
|
||||||
|
props.UpdateManager.FromHashList(["iesiPowered","iesiBrt"], 0.005, func(val) {
|
||||||
|
if (val.iesiPowered and val.iesiBrt > 0.01) {
|
||||||
|
obj.group.setVisible(1);
|
||||||
|
pts.Instrumentation.Iesi.lcdOn.setBoolValue(1);
|
||||||
|
} else {
|
||||||
|
obj.group.setVisible(0);
|
||||||
|
pts.Instrumentation.Iesi.lcdOn.setBoolValue(0);
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
props.UpdateManager.FromHashList(["iesiPowered","acconfig","iesiInit"], 1, func(val) {
|
||||||
|
if (val.iesiPowered) {
|
||||||
|
if (val.iesiInit) return;
|
||||||
|
obj.initIESI(val.acconfig);
|
||||||
|
} elsif (val.iesiInit) {
|
||||||
|
obj._canReset = 0;
|
||||||
|
obj._excessMotionInInit = 0;
|
||||||
|
obj._fastInit = 0;
|
||||||
|
iesi_init.setBoolValue(0);
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
];
|
||||||
return obj;
|
return obj;
|
||||||
},
|
},
|
||||||
getKeys: func() {
|
getKeys: func() {
|
||||||
return ["IESI","IESI_Init","attRst","attRstRect","att90s","ATTflag","ATTflag_rect","ATTflag_text","ALTwarn","SPDwarn","ASI_scale","ASI_mach","ASI_mach_decimal","AI_center","AI_index","AI_horizon","AI_sky_bank","AI_bank","AI_bank_center","AI_slipskid","ALT_scale","ALT_one","ALT_two","ALT_three","ALT_four","ALT_five","ALT_digits","ALT_tens","ALT_meters","QNH_setting","QNH_std","negText","negText2","AI_bank_scale","metricM","metricBox"];
|
return ["IESI","IESI_Init","attRst","attRstRect","att90s","ATTflag","ATTflag_rect","ATTflag_text","ALTwarn","SPDwarn","ASI_scale","ASI_mach","ASI_mach_decimal","AI_center","AI_index","AI_horizon","AI_sky_bank","AI_bank","AI_bank_center","AI_slipskid","ALT_scale","ALT_one","ALT_two","ALT_three","ALT_four","ALT_five","ALT_digits","ALT_tens","ALT_meters","QNH_setting","QNH_std","negText","negText2","AI_bank_scale","metricM","metricBox"];
|
||||||
},
|
},
|
||||||
alignFault: props.globals.getNode("/systems/navigation/align-fault"),
|
|
||||||
update: func(notification) {
|
update: func(notification) {
|
||||||
me._powerResult = me.updatePower(notification);
|
me.updatePower(notification);
|
||||||
if (me._powerResult == 0) { return; }
|
|
||||||
|
|
||||||
if (math.abs(notification.qnh_inhg - me._cachedInhg) > 0.005 or notification.altimeter_mode != me._cachedMode) {
|
foreach(var update_item; me.update_items_power)
|
||||||
me._cachedInhg = notification.qnh_inhg;
|
{
|
||||||
me._cachedMode = notification.altimeter_mode;
|
update_item.update(notification);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!me.group.getVisible()) { return; }
|
||||||
|
|
||||||
|
notification.iesiAlignTime = me._IESITime;
|
||||||
|
notification.iesiExcessMotion = me._excessMotionInInit;
|
||||||
|
notification.iesiFastInit = me._fastInit;
|
||||||
|
notification.iesiInAlign = me.iesiInAlign;
|
||||||
|
|
||||||
|
foreach(var update_item; me.update_items_init)
|
||||||
|
{
|
||||||
|
update_item.update(notification);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (math.abs(notification.qnh_inhg_iesi - me._cachedInhg) > 0.005 or notification.altimeter_mode_iesi != me._cachedMode or pinPrograms.showInHg != me._cachedShowInhg) {
|
||||||
|
me._cachedInhg = notification.qnh_inhg_iesi;
|
||||||
|
me._cachedMode = notification.altimeter_mode_iesi;
|
||||||
|
me._cachedShowInhg = pinPrograms.showInHg;
|
||||||
me.updateQNH(notification);
|
me.updateQNH(notification);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (me._IESITime + 90 >= notification.elapsedTime) {
|
if (me.iesiInAlign and !me._fastInit) return;
|
||||||
if (!me._fastInit and me.alignFault.getBoolValue()) {
|
|
||||||
me._excessMotionInInit = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (me._fastInit) {
|
|
||||||
me["IESI"].show();
|
|
||||||
me["IESI_Init"].hide();
|
|
||||||
me["AI_bank"].hide();
|
|
||||||
me["AI_bank_center"].hide();
|
|
||||||
me["AI_bank_scale"].hide();
|
|
||||||
me["AI_horizon"].hide();
|
|
||||||
me["AI_sky_bank"].hide();
|
|
||||||
me["ATTflag_text"].setText("ATT 10s");
|
|
||||||
me["ATTflag_text"].setColor(0,0,0);
|
|
||||||
me["ATTflag_rect"].setScale(1.5,1);
|
|
||||||
me["ATTflag_rect"].setTranslation(-250,0);
|
|
||||||
me["ATTflag_rect"].setColorFill(1,1,0);
|
|
||||||
me["ATTflag_rect"].setColor(1,1,0);
|
|
||||||
me["ATTflag"].show();
|
|
||||||
me["attRst"].hide();
|
|
||||||
me["attRstRect"].hide();
|
|
||||||
} else {
|
|
||||||
me["IESI"].hide();
|
|
||||||
me["IESI_Init"].show();
|
|
||||||
me["ATTflag"].hide();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (pinPrograms.metricAltitude) {
|
|
||||||
me["ALT_meters"].show();
|
|
||||||
me["metricM"].show();
|
|
||||||
me["metricBox"].show();
|
|
||||||
|
|
||||||
if (me._isNegativeAlt) {
|
|
||||||
me["negText2"].show();
|
|
||||||
} else {
|
|
||||||
me["negText2"].hide();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
me["ALT_meters"].hide();
|
|
||||||
me["metricM"].hide();
|
|
||||||
me["metricBox"].hide();
|
|
||||||
me["negText2"].hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!me._excessMotionInInit) {
|
|
||||||
me["IESI_Init"].hide();
|
|
||||||
me["IESI"].show();
|
|
||||||
me["AI_bank"].show();
|
|
||||||
me["AI_bank_center"].show();
|
|
||||||
me["AI_bank_scale"].show();
|
|
||||||
me["AI_index"].show();
|
|
||||||
me["AI_horizon"].show();
|
|
||||||
me["AI_sky_bank"].show();
|
|
||||||
me["ATTflag"].hide();
|
|
||||||
} else {
|
|
||||||
me["IESI_Init"].hide();
|
|
||||||
me["IESI"].show();
|
|
||||||
me["AI_bank"].hide();
|
|
||||||
me["AI_bank_center"].hide();
|
|
||||||
me["AI_bank_scale"].hide();
|
|
||||||
me["AI_horizon"].hide();
|
|
||||||
me["AI_sky_bank"].hide();
|
|
||||||
me["ATTflag_text"].setText("ATT");
|
|
||||||
me["ATTflag_text"].setColor(1,0,0);
|
|
||||||
me["ATTflag_rect"].setScale(1,1);
|
|
||||||
me["ATTflag_rect"].setTranslation(0,0);
|
|
||||||
me["ATTflag_rect"].setColorFill(0,0,0);
|
|
||||||
me["ATTflag_rect"].setColor(0,0,0);
|
|
||||||
me["ATTflag"].show();
|
|
||||||
me["attRst"].show();
|
|
||||||
me["attRstRect"].show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach(var update_item; me.update_items)
|
foreach(var update_item; me.update_items)
|
||||||
{
|
{
|
||||||
update_item.update(notification);
|
update_item.update(notification);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!me.iesiInAlign and pinPrograms.metricAltitude != me._cachedMetric) {
|
||||||
|
me._cachedMetric = pinPrograms.metricAltitude;
|
||||||
|
me.updateMetric(pinPrograms.metricAltitude);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pinPrograms.metricAltitude) {
|
||||||
|
if (me._isNegativeAlt) {
|
||||||
|
me["negText2"].show();
|
||||||
|
} else {
|
||||||
|
me["negText2"].hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
updateMetric: func(val) {
|
||||||
|
if (val) {
|
||||||
|
me["ALT_meters"].show();
|
||||||
|
me["metricM"].show();
|
||||||
|
me["metricBox"].show();
|
||||||
|
} else {
|
||||||
|
me["ALT_meters"].hide();
|
||||||
|
me["metricM"].hide();
|
||||||
|
me["metricBox"].hide();
|
||||||
|
me["negText2"].hide();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
updateQNH: func(notification) {
|
updateQNH: func(notification) {
|
||||||
if (notification.altimeter_mode) {
|
if (notification.altimeter_mode_iesi) {
|
||||||
me["QNH_setting"].hide();
|
me["QNH_setting"].hide();
|
||||||
me["QNH_std"].show();
|
me["QNH_std"].show();
|
||||||
} else {
|
} else {
|
||||||
if (pinPrograms.showInHg) {
|
if (pinPrograms.showInHg) {
|
||||||
me["QNH_setting"].setText(sprintf("%4.0f", notification.qnh_hpa) ~ "/" ~ sprintf("%2.2f", notification.qnh_inhg));
|
me["QNH_setting"].setText(sprintf("%4.0f", notification.qnh_hpa_iesi) ~ "/" ~ sprintf("%2.2f", notification.qnh_inhg_iesi));
|
||||||
} else {
|
} else {
|
||||||
me["QNH_setting"].setText(sprintf("%4.0f", notification.qnh_hpa));
|
me["QNH_setting"].setText(sprintf("%4.0f", notification.qnh_hpa_iesi));
|
||||||
}
|
}
|
||||||
me["QNH_std"].hide();
|
me["QNH_std"].hide();
|
||||||
me["QNH_setting"].show();
|
me["QNH_setting"].show();
|
||||||
|
@ -252,30 +323,13 @@ var canvas_IESI = {
|
||||||
} else if (me._IESITime + 90 < notification.elapsedTime and notification.iesiInit and !me._canReset) {
|
} else if (me._IESITime + 90 < notification.elapsedTime and notification.iesiInit and !me._canReset) {
|
||||||
me._canReset = 1;
|
me._canReset = 1;
|
||||||
}
|
}
|
||||||
|
},
|
||||||
if (notification.iesiPowered) {
|
initIESI: func(acconfig) {
|
||||||
if (notification.acconfig != 1 and notification.iesiInit != 1) {
|
iesi_init.setBoolValue(1);
|
||||||
iesi_init.setBoolValue(1);
|
if (!acconfig) {
|
||||||
me._IESITime = notification.elapsedTime - (me._fastInit ? 80 : 0);
|
me._IESITime = pts.Sim.Time.elapsedSec.getValue() - (me._fastInit ? 80 : 0);
|
||||||
} else if (notification.acconfig == 1 and notification.iesiInit != 1) {
|
|
||||||
iesi_init.setBoolValue(1);
|
|
||||||
me._IESITime = notification.elapsedTime - 87;
|
|
||||||
}
|
|
||||||
} elsif (notification.iesiInit) {
|
|
||||||
me._canReset = 0;
|
|
||||||
me._excessMotionInInit = 0;
|
|
||||||
me._fastInit = 0;
|
|
||||||
iesi_init.setBoolValue(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (notification.iesiPowered and notification.iesiBrt > 0.01) {
|
|
||||||
me.group.setVisible(1);
|
|
||||||
pts.Instrumentation.Iesi.lcdOn.setBoolValue(1);
|
|
||||||
return 1;
|
|
||||||
} else {
|
} else {
|
||||||
me.group.setVisible(0);
|
me._IESITime = pts.Sim.Time.elapsedSec.getValue() - 87;
|
||||||
pts.Instrumentation.Iesi.lcdOn.setBoolValue(0);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -308,40 +362,41 @@ var IESIRecipient =
|
||||||
var A320IESI = IESIRecipient.new("A320 IESI");
|
var A320IESI = IESIRecipient.new("A320 IESI");
|
||||||
emesary.GlobalTransmitter.Register(A320IESI);
|
emesary.GlobalTransmitter.Register(A320IESI);
|
||||||
|
|
||||||
|
# Emesary Frame Notifiaction Properties
|
||||||
var input = {
|
var input = {
|
||||||
"acconfig": "/systems/acconfig/autoconfig-running",
|
"acconfig": "/systems/acconfig/autoconfig-running",
|
||||||
"airspeed": "/instrumentation/airspeed-indicator[0]/indicated-speed-kt",
|
"airspeedIESI": "/instrumentation/airspeed-indicator[0]/indicated-speed-kt",
|
||||||
"altitude": "/instrumentation/altimeter[6]/indicated-altitude-ft",
|
"altitudeIESI": "/instrumentation/altimeter[6]/indicated-altitude-ft",
|
||||||
"altitude_ind": "/instrumentation/altimeter[6]/indicated-altitude-ft-pfd",
|
"altitude_indIESI": "/instrumentation/altimeter[6]/indicated-altitude-ft-pfd",
|
||||||
"altimeter_mode": "/instrumentation/altimeter[6]/std",
|
"altimeter_mode_iesi": "/instrumentation/altimeter[6]/std",
|
||||||
"attReset": "/instrumentation/iesi/att-reset",
|
"attReset": "/instrumentation/iesi/att-reset",
|
||||||
"iesiBrt": "/controls/lighting/DU/iesi",
|
"iesiBrt": "/controls/lighting/DU/iesi",
|
||||||
"iesiInit": "/instrumentation/iesi/iesi-init",
|
"iesiInit": "/instrumentation/iesi/iesi-init",
|
||||||
|
"iesiPitch": "/instrumentation/iesi/pitch-deg",
|
||||||
"iesiPowered": "/instrumentation/iesi/power/power-on",
|
"iesiPowered": "/instrumentation/iesi/power/power-on",
|
||||||
|
"irAlignFault": "/systems/navigation/align-fault",
|
||||||
"mach": "/instrumentation/airspeed-indicator/indicated-mach",
|
"mach": "/instrumentation/airspeed-indicator/indicated-mach",
|
||||||
"pitch": "/instrumentation/iesi/pitch-deg",
|
"qnh_hpa_iesi": "/instrumentation/altimeter[6]/setting-hpa",
|
||||||
"qnh_hpa": "/instrumentation/altimeter[6]/setting-hpa",
|
"qnh_inhg_iesi": "/instrumentation/altimeter[6]/setting-inhg",
|
||||||
"qnh_inhg": "/instrumentation/altimeter[6]/setting-inhg",
|
|
||||||
"roll": "/orientation/roll-deg",
|
"roll": "/orientation/roll-deg",
|
||||||
"skid": "/instrumentation/iesi/slip-skid",
|
|
||||||
"showMach": "/instrumentation/iesi/display/show-mach",
|
"showMach": "/instrumentation/iesi/display/show-mach",
|
||||||
|
"skid": "/instrumentation/iesi/slip-skid",
|
||||||
};
|
};
|
||||||
|
|
||||||
foreach (var name; keys(input)) {
|
foreach (var name; keys(input)) {
|
||||||
emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 IESI", name, input[name]));
|
emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 IESI", name, input[name]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Helper functions
|
||||||
var showIESI = func {
|
var showIESI = func {
|
||||||
var dlg = canvas.Window.new([512, 512], "dialog").set("resize", 1);
|
var dlg = canvas.Window.new([512, 512], "dialog").set("resize", 1);
|
||||||
dlg.setCanvas(A320IESI.MainScreen.canvas);
|
dlg.setCanvas(A320IESI.MainScreen.canvas);
|
||||||
}
|
}
|
||||||
|
|
||||||
var roundabout = func(x) {
|
var roundabout = func(x) {
|
||||||
var y = x - int(x);
|
return (x - int(x)) < 0.5 ? int(x) : 1 + int(x);
|
||||||
return y < 0.5 ? int(x) : 1 + int(x);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var roundaboutAlt = func(x) {
|
var roundaboutAlt = func(x) {
|
||||||
var y = x * 0.2 - int(x * 0.2);
|
return (x * 0.2 - int(x * 0.2)) < 0.5 ? 5 * int(x * 0.2) : 5 + 5 * int(x * 0.2);
|
||||||
return y < 0.5 ? 5 * int(x * 0.2) : 5 + 5 * int(x * 0.2);
|
|
||||||
};
|
};
|
|
@ -194,6 +194,25 @@ var canvas_lowerECAMPageApu =
|
||||||
}),
|
}),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
obj.updateItemsPower = [
|
||||||
|
props.UpdateManager.FromHashList(["du3Power","du4Power","du3InTest","du4InTest","ecamDuXfr","pageMatch"], 1, func(val) {
|
||||||
|
if (val.pageMatch) {
|
||||||
|
if (val.du4Power) {
|
||||||
|
obj.group.setVisible(val.du4InTest ? 0 : 1);
|
||||||
|
obj.test.setVisible(val.du4InTest ? 1 : 0);
|
||||||
|
} else if (val.ecamDuXfr and val.du3Power) {
|
||||||
|
obj.group.setVisible(val.du3InTest ? 0 : 1);
|
||||||
|
obj.test.setVisible(val.du3InTest ? 1 : 0);
|
||||||
|
} else {
|
||||||
|
obj.group.setVisible(0);
|
||||||
|
obj.test.setVisible(0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
obj.group.setVisible(0);
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
];
|
||||||
|
|
||||||
obj.updateItemsBottom = [
|
obj.updateItemsBottom = [
|
||||||
props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) {
|
props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) {
|
||||||
obj.units = val;
|
obj.units = val;
|
||||||
|
@ -269,7 +288,7 @@ var canvas_lowerECAMPageApu =
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
update: func(notification) {
|
update: func(notification) {
|
||||||
me.updatePower();
|
me.updatePower(notification);
|
||||||
|
|
||||||
if (me.test.getVisible() == 1) {
|
if (me.test.getVisible() == 1) {
|
||||||
me.updateTest(notification);
|
me.updateTest(notification);
|
||||||
|
@ -312,38 +331,16 @@ var canvas_lowerECAMPageApu =
|
||||||
|
|
||||||
me.updateBottom(notification);
|
me.updateBottom(notification);
|
||||||
},
|
},
|
||||||
updatePower: func() {
|
updatePower: func(notification) {
|
||||||
if (me.name == ecam.SystemDisplayController.displayedPage.name) {
|
if (me.name == ecam.SystemDisplayController.displayedPage.name) {
|
||||||
if (du4_lgt.getValue() > 0.01 and systems.ELEC.Bus.ac2.getValue() >= 110) {
|
notification.pageMatch = 1;
|
||||||
if (du4_test_time.getValue() + du4_test_amount.getValue() >= pts.Sim.Time.elapsedSec.getValue()) {
|
|
||||||
me.group.setVisible(0);
|
|
||||||
me.test.setVisible(1);
|
|
||||||
} else {
|
|
||||||
me.group.setVisible(1);
|
|
||||||
me.test.setVisible(0);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (pts.Modes.EcamDuXfr.getBoolValue()) {
|
|
||||||
if (du3_lgt.getValue() > 0.01 and systems.ELEC.Bus.acEss.getValue() >= 110) {
|
|
||||||
if (du3_test_time.getValue() + du3_test_amount.getValue() >= pts.Sim.Time.elapsedSec.getValue()) {
|
|
||||||
me.group.setVisible(0);
|
|
||||||
me.test.setVisible(1);
|
|
||||||
} else {
|
|
||||||
me.group.setVisible(1);
|
|
||||||
me.test.setVisible(0);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
me.group.setVisible(0);
|
|
||||||
me.test.setVisible(0);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
me.group.setVisible(0);
|
|
||||||
me.test.setVisible(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
me.group.setVisible(0);
|
notification.pageMatch = 0;
|
||||||
# don't hide the test group; just let whichever page is active control it
|
}
|
||||||
|
|
||||||
|
foreach(var update_item; me.updateItemsPower)
|
||||||
|
{
|
||||||
|
update_item.update(notification);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -73,8 +73,7 @@ var canvas_lowerECAM_base =
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
# Due to weirdness of the parents hash / me reference
|
# Due to weirdness of the parents hash / me reference
|
||||||
# you need to access it using me.Test_white rather than
|
# you need to access it using me.Test_white
|
||||||
# me["Test_white"]
|
|
||||||
updateTest: func(notification) {
|
updateTest: func(notification) {
|
||||||
if (du4_test_time.getValue() + 1 >= notification.elapsedTime) {
|
if (du4_test_time.getValue() + 1 >= notification.elapsedTime) {
|
||||||
me.Test_white.show();
|
me.Test_white.show();
|
||||||
|
|
|
@ -61,6 +61,11 @@ var input = {
|
||||||
gForceDisplay: "/ECAM/Lower/g-force-display",
|
gForceDisplay: "/ECAM/Lower/g-force-display",
|
||||||
hour: "/sim/time/utc/hour",
|
hour: "/sim/time/utc/hour",
|
||||||
minute: "/sim/time/utc/minute",
|
minute: "/sim/time/utc/minute",
|
||||||
|
du3Power: "/instrumentation/displays/du3/power-on",
|
||||||
|
du4Power: "/instrumentation/displays/du4/power-on",
|
||||||
|
du3InTest: "/instrumentation/displays/du3/test-active",
|
||||||
|
du4InTest: "/instrumentation/displays/du4/test-active",
|
||||||
|
ecamDuXfr: "/modes/ecam-du-xfr",
|
||||||
};
|
};
|
||||||
|
|
||||||
foreach (var name; keys(input)) {
|
foreach (var name; keys(input)) {
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -2631,26 +2631,26 @@
|
||||||
transform="scale(0.87678236,1.1405339)"
|
transform="scale(0.87678236,1.1405339)"
|
||||||
id="FMA_dh"
|
id="FMA_dh"
|
||||||
y="115.05846"
|
y="115.05846"
|
||||||
x="831.23047"
|
x="826.09802"
|
||||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
|
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.657577"
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
inkscape:label="#text983"><tspan
|
inkscape:label="#text983"><tspan
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577"
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.657577"
|
||||||
y="115.05846"
|
y="115.05846"
|
||||||
x="831.23047"
|
x="826.09802"
|
||||||
id="tspan4301"
|
id="tspan4301"
|
||||||
sodipodi:role="line">RADIO</tspan></text>
|
sodipodi:role="line">RADIO</tspan></text>
|
||||||
<text
|
<text
|
||||||
inkscape:label="#text983"
|
inkscape:label="#text983"
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:0.657577"
|
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:0.657577"
|
||||||
x="934.0097"
|
x="937.43134"
|
||||||
y="115.05846"
|
y="115.05846"
|
||||||
id="FMA_dhn"
|
id="FMA_dhn"
|
||||||
transform="scale(0.87678236,1.1405339)"><tspan
|
transform="scale(0.87678236,1.1405339)"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
id="tspan4305"
|
id="tspan4305"
|
||||||
x="934.0097"
|
x="937.43134"
|
||||||
y="115.05846"
|
y="115.05846"
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.657577">0250</tspan></text>
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:34px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#179ab7;fill-opacity:1;stroke-width:0.657577">0250</tspan></text>
|
||||||
<g
|
<g
|
||||||
|
|
Before Width: | Height: | Size: 349 KiB After Width: | Height: | Size: 349 KiB |
|
@ -29,16 +29,6 @@
|
||||||
|
|
||||||
</channel>
|
</channel>
|
||||||
|
|
||||||
<channel name="IESI" execrate="8">
|
|
||||||
|
|
||||||
<actuator name="/instrumentation/iesi/att-reset">
|
|
||||||
<input>/instrumentation/iesi/att-reset-cmd</input>
|
|
||||||
<rate_limit sense="incr">0.5</rate_limit>
|
|
||||||
<rate_limit sense="decr">100</rate_limit>
|
|
||||||
</actuator>
|
|
||||||
|
|
||||||
</channel>
|
|
||||||
|
|
||||||
<channel name="ADF" execrate="8">
|
<channel name="ADF" execrate="8">
|
||||||
|
|
||||||
<switch name="/instrumentation/adf[0]/power-supply">
|
<switch name="/instrumentation/adf[0]/power-supply">
|
||||||
|
@ -512,6 +502,12 @@
|
||||||
|
|
||||||
<channel name="IESI" execrate="8">
|
<channel name="IESI" execrate="8">
|
||||||
|
|
||||||
|
<actuator name="/instrumentation/iesi/att-reset">
|
||||||
|
<input>/instrumentation/iesi/att-reset-cmd</input>
|
||||||
|
<rate_limit sense="incr">0.5</rate_limit>
|
||||||
|
<rate_limit sense="decr">100</rate_limit>
|
||||||
|
</actuator>
|
||||||
|
|
||||||
<switch name="/instrumentation/iesi/display/show-mach">
|
<switch name="/instrumentation/iesi/display/show-mach">
|
||||||
<default value="0"/>
|
<default value="0"/>
|
||||||
<test logic="OR" value="1">
|
<test logic="OR" value="1">
|
||||||
|
@ -557,6 +553,7 @@
|
||||||
<product>
|
<product>
|
||||||
<value>4</value>
|
<value>4</value>
|
||||||
<property>/controls/lighting/DU/iesi</property>
|
<property>/controls/lighting/DU/iesi</property>
|
||||||
|
<property>/instrumentation/iesi/power/power-on</property>
|
||||||
</product>
|
</product>
|
||||||
</sum>
|
</sum>
|
||||||
</function>
|
</function>
|
||||||
|
@ -564,4 +561,82 @@
|
||||||
|
|
||||||
</channel>
|
</channel>
|
||||||
|
|
||||||
|
<channel name="DU Power" execrate="8">
|
||||||
|
|
||||||
|
<switch name="/instrumentation/displays/du3/power-command">
|
||||||
|
<default value="0"/>
|
||||||
|
<test logic="AND" value="1">
|
||||||
|
/systems/electrical/bus/ac-ess ge 110
|
||||||
|
/controls/lighting/DU/du3 ge 0.01
|
||||||
|
</test>
|
||||||
|
</switch>
|
||||||
|
|
||||||
|
<actuator name="/instrumentation/displays/du3/power-transient-timer">
|
||||||
|
<input>/instrumentation/displays/du3/power-command</input>
|
||||||
|
<rate_limit sense="decr">5</rate_limit>
|
||||||
|
<rate_limit sene="incr">100</rate_limit>
|
||||||
|
</actuator>
|
||||||
|
|
||||||
|
<switch name="/instrumentation/displays/du3/power-on">
|
||||||
|
<default value="0"/>
|
||||||
|
<test logic="OR" value="1">
|
||||||
|
/instrumentation/displays/du3/power-transient-timer ne 0
|
||||||
|
</test>
|
||||||
|
</switch>
|
||||||
|
|
||||||
|
<fcs_function name="/instrumentation/displays/du3/test-sum">
|
||||||
|
<function>
|
||||||
|
<sum>
|
||||||
|
<property>/instrumentation/du/du3-test-amount</property>
|
||||||
|
<property>/instrumentation/du/du3-test-time</property>
|
||||||
|
</sum>
|
||||||
|
</function>
|
||||||
|
</fcs_function>
|
||||||
|
|
||||||
|
<switch name="/instrumentation/displays/du3/test-active">
|
||||||
|
<default value="0"/>
|
||||||
|
<test logic="OR" value="1">
|
||||||
|
/instrumentation/displays/du3/test-sum ge /sim/time/elapsed-sec
|
||||||
|
</test>
|
||||||
|
</switch>
|
||||||
|
|
||||||
|
<switch name="/instrumentation/displays/du4/power-command">
|
||||||
|
<default value="0"/>
|
||||||
|
<test logic="AND" value="1">
|
||||||
|
/systems/electrical/bus/ac-2 ge 110
|
||||||
|
/controls/lighting/DU/du4 ge 0.01
|
||||||
|
</test>
|
||||||
|
</switch>
|
||||||
|
|
||||||
|
<actuator name="/instrumentation/displays/du4/power-transient-timer">
|
||||||
|
<input>/instrumentation/displays/du4/power-command</input>
|
||||||
|
<rate_limit sense="decr">5</rate_limit>
|
||||||
|
<rate_limit sene="incr">100</rate_limit>
|
||||||
|
</actuator>
|
||||||
|
|
||||||
|
<switch name="/instrumentation/displays/du4/power-on">
|
||||||
|
<default value="0"/>
|
||||||
|
<test logic="OR" value="1">
|
||||||
|
/instrumentation/displays/du4/power-transient-timer ne 0
|
||||||
|
</test>
|
||||||
|
</switch>
|
||||||
|
|
||||||
|
<fcs_function name="/instrumentation/displays/du4/test-sum">
|
||||||
|
<function>
|
||||||
|
<sum>
|
||||||
|
<property>/instrumentation/du/du4-test-amount</property>
|
||||||
|
<property>/instrumentation/du/du4-test-time</property>
|
||||||
|
</sum>
|
||||||
|
</function>
|
||||||
|
</fcs_function>
|
||||||
|
|
||||||
|
<switch name="/instrumentation/displays/du4/test-active">
|
||||||
|
<default value="0"/>
|
||||||
|
<test logic="OR" value="1">
|
||||||
|
/instrumentation/displays/du4/test-sum ge /sim/time/elapsed-sec
|
||||||
|
</test>
|
||||||
|
</switch>
|
||||||
|
|
||||||
|
</channel>
|
||||||
|
|
||||||
</system>
|
</system>
|
||||||
|
|
Loading…
Reference in a new issue