1
0
Fork 0
A320-family/Nasal/Systems/Comm/CPDLC.nas

103 lines
No EOL
2.5 KiB
Text

# A3XX CPDLC
# Jonathan Redpath
# Copyright (c) 2020 Josh Davidson (Octal450)
var CPDLCmessage = {
new: func(text, response = 0) {
var cpdlcMessage = {parents: [CPDLCmessage] };
cpdlcMessage.text = text;
cpdlcMessage.response = response;
return cpdlcMessage;
},
};
var CPDLCnewMsgFlag = props.globals.getNode("/network/cpdlc/rx/new-message");
var CPDLCnewMsgAlert = props.globals.initNode("/network/cpdlc/new-message-ringtone", 0, "BOOL");
var CPDLCnewMsgLight = props.globals.initNode("/network/cpdlc/new-message-light", 0, "BOOL");
setlistener("/network/cpdlc/rx/new-message", func() {
if (CPDLCnewMsgFlag.getBoolValue()) {
# add to DCDU message buffer to display
ATCMSGRingCancel = 0;
var messageType = 0; # urgent or normal
ATCMSGRing(messageType);
ATCMsgFlashCancel = 0;
ATCMSGFlash();
# ATC MSG pushbutton: flashes, ringtone after 15 secs, therafter every 15 secs
# add DCDU prompts (wilco, etc) associated to message --> so the CPDLC message object must store the correct response for the actual message
}
}, 0, 1);
var ATCMSGRingCancel = 0;
var ATCMSGRing = func(messageType) {
print("Going to ring");
settimer(func() {
if (!ATCMSGRingCancel) {
print("Rang, will ring 15 seconds later again");
CPDLCnewMsgAlert.setBoolValue(0);
settimer(func() {
CPDLCnewMsgAlert.setBoolValue(1);
ATCMSGRing(messageType);
}, 0.1);
}
}, (messageType == 0 ? 15 : 5));
};
var ATCMsgFlashCancel = 0;
var ATCMSGFlash = func() {
CPDLCnewMsgLight.setBoolValue(!CPDLCnewMsgLight.getBoolValue());
settimer(func() {
if (!ATCMsgFlashCancel) {
ATCMSGFlash();
}
}, 0.2);
};
# issue fgcommand with cpdlc message to send
var prefixes = {
acPerf: "DUE TO A/C PERFORMANCE",
weather: "DUE TO WEATHER",
turbulence: "DUE TO TURBULENCE",
medical: "DUE TO MEDICAL",
technical: "DUE TO TECHNICAL",
discretion: "AT PILOTS DISCRETION",
};
var responses = {
w: "WILCO",
u: "UNABLE",
a: "AFFIRM",
n: "NEGATIVE",
r: "ROGER",
s: "STBY",
#o: "none?",
#y: "any?",
};
var freeText = {
new: func() {
return {parents: [freeText]};
},
selection: 9,
changed: 0,
getText: func() {
if (me.selection == 0) {
return prefixes["acPerf"];
} elsif (me.selection == 1) {
return prefixes["weather"];
} elsif (me.selection == 2) {
return prefixes["turbulence"];
} elsif (me.selection == 3) {
return prefixes["medical"];
} elsif (me.selection == 4) {
return prefixes["technical"];
} elsif (me.selection == 5) {
return prefixes["discretion"];
} else {
return "";
}
}
};
var freeTexts = [freeText.new(), freeText.new()];