Skip to content

Commit

Permalink
feat(atsu): missing request pages and automated report-functions #7074
Browse files Browse the repository at this point in the history
…(@55c2ab6a)
  • Loading branch information
2hwk committed Jun 23, 2022
1 parent 15f86c2 commit 372898b
Show file tree
Hide file tree
Showing 81 changed files with 8,362 additions and 1,850 deletions.
2 changes: 2 additions & 0 deletions .github/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,8 @@
1. [SOUND] Prevent autopilot disconnect from sounding on C+D spawn - @tricky_dicky (Richard Pilbery) and @saschl (saschl#9432)
1. [FMGC] Removed flight phase transition from TAKEOFF to PREFLIGHT - @beheh (Benedict Etzel)
1. [FMGC] Added flight phase transition to DONE when on ground > 30 s and engines off - @aguther (Andreas Guther)
1. [ATSU] Add FANS-C simulation for CPDLC - @Sven [de en] - (Sven Czarnian)
1. [ATSU] Add VDL3-simulation of datalink transport protocol - @Sven [de en] - (Sven Czarnian)

## 0.7.0

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,9 @@ const NXSystemMessages = {
noAtisReceived: new TypeIMessage("NO ATIS REPORT RECEIVED"),
noPreviousAtis: new TypeIMessage("NO PREVIOUS ATIS STORED"),
arptTypeAlreadyInUse: new TypeIMessage("ARPT/TYPE ALREADY USED"),
cancelAtisUpdate: new TypeIMessage("CANCEL UPDATE BEFORE")
cancelAtisUpdate: new TypeIMessage("CANCEL UPDATE BEFORE"),
keyNotActive: new TypeIMessage("KEY NOT ACTIVE"),
latLonAbreviated: new TypeIMessage("LAT/LON DISPL ABREVIATED"),
};

const NXFictionalMessages = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,24 +76,35 @@
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_AtisAutoUpdate.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_AtisMenu.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_Menu.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansA/A320_Neo_CDU_ATC_Menu.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansA/A320_Neo_CDU_ATC_ContactRequest.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansA/A320_Neo_CDU_ATC_ProcedureRequest.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansA/A320_Neo_CDU_ATC_Emergency.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansA/A320_Neo_CDU_ATC_Reports.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansA/A320_Neo_CDU_ATC_PositionReport.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansA/A320_Neo_CDU_ATC_LatRequest.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansA/A320_Neo_CDU_ATC_UsualRequest.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansA/A320_Neo_CDU_ATC_Text.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansA/A320_Neo_CDU_ATC_VertRequest.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansB/A320_Neo_CDU_ATC_Menu.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansB/A320_Neo_CDU_ATC_Request.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansB/A320_Neo_CDU_ATC_Emergency.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansB/A320_Neo_CDU_ATC_LatRequest.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansB/A320_Neo_CDU_ATC_VertRequest.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansB/A320_Neo_CDU_ATC_Text.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/FansB/A320_Neo_CDU_ATC_UsualRequest.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/MessageModify/A320_Neo_CDU_ATC_MessageModifyUM131.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_Connection.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_ConnectionNotification.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_ConnectionStatus.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_DepartReq.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_Emergency.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_MaxUplinkDelay.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_Message.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_MessagesRecord.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_MessageModify.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_MessageMonitoring.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_OceanicReq.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_PositionReport.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_FlightReq.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_ClearanceReq.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_SpeedReq.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_ReportAtis.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATC_Reports.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_Comm_Menu.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_ATSU_DatalinkStatus.js"></script>
<script type="text/html" import-script="/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/CDU/ATSU/A320_Neo_CDU_AOC_Init.js"></script>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ class Keypad {
this._mcdu = mcdu;
this._keys = {
"AIRPORT": () => mcdu.onAirport(),
"ATC": () => CDUAtcMenu.ShowPage1(mcdu),
"ATC": () => CDUAtcMenu.ShowPage(mcdu),
"DATA": () => CDUDataIndexPage.ShowPage1(mcdu),
"DIR": () => {
mcdu.eraseTemporaryFlightPlan();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,30 +92,31 @@ class A320_Neo_CDU_MainDisplay extends FMCMainDisplay {
AOCRequestAtis: 49,
AOCDepartRequest: 50,
ATCMenu: 51,
ATCRequest: 52,
ATCEdit: 53,
ATCText: 54,
ATCDepartReq: 55,
ATCOceanicReq: 56,
ATCAtis: 57,
ATCAtisAutoUpdate: 58,
ATCAtisView: 59,
ATCMessages: 60,
ATCReports: 61,
ATCPositionReport: 62,
ATCMessageModify: 63,
ATCConnection: 64,
ATCNotification: 65,
ATCConnectionStatus: 66,
ATSUMenu: 67,
ATSUDatalinkStatus: 68,
ClimbWind: 69,
CruiseWind: 70,
DescentWind: 71,
FixInfoPage: 72,
AOCRcvdMsgs: 73,
AOCSentMsgs: 74,
AOCFreeText: 75,
ATCModify: 52,
ATCAtis: 53,
ATCMessageRecord: 54,
ATCMessageMonitoring: 55,
ATCConnection: 56,
ATCNotification: 57,
ATCConnectionStatus: 58,
ATCPositionReport1: 59,
ATCPositionReport2: 60,
ATCPositionReport3: 61,
ATCFlightRequest: 62,
ATCUsualRequest: 63,
ATCGroundRequest: 64,
ATCReports: 65,
ATCEmergency: 66,
ATCComLastId: 67, // This is needed for automatic page changes triggered by DCDU
ATSUMenu: 68,
ATSUDatalinkStatus: 69,
ClimbWind: 70,
CruiseWind: 71,
DescentWind: 72,
FixInfoPage: 73,
AOCRcvdMsgs: 74,
AOCSentMsgs: 75,
AOCFreeText: 76,
};

// Handling of MCDU Sever connection attempts
Expand Down Expand Up @@ -955,6 +956,15 @@ class A320_Neo_CDU_MainDisplay extends FMCMainDisplay {
this.scratchpad.setText(value);
}

/**
* Tries to show the MODIFY page if the MCDU is in the ATC COM system
*/
tryToShowAtcModifyPage() {
if (this.page.Current >= this.page.ATCMenu && this.page.Current < this.page.ATCComLastId) {
CDUAtcMessageModify.ShowPage(this, this.atsu.modificationMessage);
}
}

/**
* General ATSU message handler which converts ATSU status codes to new MCDU messages
* @param code ATSU status code
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ class CDUAtcAtisAutoUpdate {

static ShowPage(mcdu) {
mcdu.clearDisplay();
mcdu.page.Current = mcdu.page.ATCAtisAutoUpdate;

let arrAtis = "{inop}\xa0[ ]/[ ]{end}";
let arrAtisState = "";
Expand Down Expand Up @@ -58,7 +57,7 @@ class CDUAtcAtisAutoUpdate {
return mcdu.getDelaySwitchPage();
};
mcdu.onLeftInput[5] = () => {
CDUAtcMenu.ShowPage2(mcdu);
CDUAtcMenu.ShowPage(mcdu);
};

mcdu.rightInputDelay[1] = () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ class CDUAtcAtisMenu {
return mcdu.getDelaySwitchPage();
};
mcdu.onLeftInput[5] = () => {
CDUAtcMenu.ShowPage2(mcdu);
CDUAtcMenu.ShowPage(mcdu);
};

for (let i = 0; i < 4; ++i) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
class CDUAtcClearanceReq {
static CreateDataBlock() {
return {
clearance: false
};
}

static CanSendData(data) {
return data.clearance;
}

static CreateRequest(mcdu) {
const retval = new Atsu.CpdlcMessage();
retval.Station = mcdu.atsu.atc.currentStation();
retval.Content.push(Atsu.CpdlcMessagesDownlink["DM25"][1].deepCopy());
retval.Content[0].Content[0].Value = "DEPARTURE";
return retval;
}

static ShowPage(mcdu, title, data = CDUAtcClearanceReq.CreateDataBlock()) {
mcdu.clearDisplay();
mcdu.page.Current = mcdu.page.ATCGroundRequest;

let addText = "ADD TEXT\xa0";
let clearance = "{cyan}{{end}CLEARANCE";
let transfer = ["{cyan}XFR TO\xa0{end}", "{cyan}DCDU\xa0{end}"];
let erase = ["\xa0ALL FIELDS", "\xa0ERASE"];
if (mcdu.atsu.atc.fansMode() !== Atsu.FansMode.FansA) {
clearance = "<DEPARTURE";
transfer = ["", ""];
erase = ["", ""];
addText = "";
} else if (data.clearance) {
clearance = "{cyan}\xa0CLEARANCE{end}";
transfer[1] = "{cyan}DCDU*{end}";
addText = "ADD TEXT>";
erase[1] = "*ERASE";
}

mcdu.setTemplate([
[`${title} REQ`],
[""],
[clearance],
[""],
[""],
[""],
[""],
[""],
[""],
[erase[0]],
[erase[1], addText],
["\xa0ATC MENU", transfer[0]],
["<RETURN", transfer[1]]
]);

mcdu.leftInputDelay[0] = () => {
return mcdu.getDelaySwitchPage();
};
mcdu.onLeftInput[0] = (value) => {
if (mcdu.atsu.atc.fansMode() !== Atsu.FansMode.FansA) {
CDUAtcDepartReq.ShowPage1(mcdu);
return;
} else if (value === FMCMainDisplay.clrValue) {
data.clearance = false;
} else {
data.clearance = true;
}

CDUAtcClearanceReq.ShowPage(mcdu, title, data);
};

mcdu.leftInputDelay[4] = () => {
return mcdu.getDelaySwitchPage();
};
mcdu.onLeftInput[4] = () => {
CDUAtcClearanceReq.ShowPage(mcdu, title);
};

mcdu.leftInputDelay[5] = () => {
return mcdu.getDelaySwitchPage();
};
mcdu.onLeftInput[5] = () => {
CDUAtcMenu.ShowPage(mcdu);
};

mcdu.rightInputDelay[4] = () => {
return mcdu.getDelaySwitchPage();
};
mcdu.onRightInput[4] = () => {
if (mcdu.atsu.atc.fansMode() === Atsu.FansMode.FansA && CDUAtcClearanceReq.CanSendData(data)) {
const message = CDUAtcClearanceReq.CreateRequest(mcdu);
CDUAtcTextFansA.ShowPage1(mcdu, [message]);
}
};

mcdu.rightInputDelay[5] = () => {
return mcdu.getDelaySwitchPage();
};
mcdu.onRightInput[5] = () => {
if (mcdu.atsu.atc.fansMode() === Atsu.FansMode.FansA && CDUAtcClearanceReq.CanSendData(data)) {
const message = CDUAtcClearanceReq.CreateRequest(mcdu);
mcdu.atsu.registerMessages([message]);
CDUAtcClearanceReq.ShowPage(mcdu, title);
}
};
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
class CDUAtcConnection {
static ShowPage(mcdu) {
mcdu.clearDisplay();
mcdu.page.Current = mcdu.page.ATCConnection;

mcdu.setTemplate([
["\xa0CONNECTION"],
[""],
Expand Down Expand Up @@ -35,14 +37,18 @@ class CDUAtcConnection {
return mcdu.getDelaySwitchPage();
};
mcdu.onLeftInput[5] = () => {
CDUAtcMenu.ShowPage1(mcdu);
CDUAtcMenu.ShowPage(mcdu);
};

mcdu.rightInputDelay[4] = () => {
return mcdu.getDelaySwitchPage();
};
mcdu.onRightInput[4] = () => {
CDUAtcMaxUplinkDelay.ShowPage(mcdu);
if (mcdu.atsu.atc.fansMode() === Atsu.FansMode.FansA) {
CDUAtcMaxUplinkDelay.ShowPage(mcdu);
} else {
mcdu.setScratchpadMessage(NXSystemMessages.keyNotActive);
}
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ class CDUAtcConnectionNotification {
[notificationMessage],
[notificationStatus],
[""],
["\xa0ATC MENU", "CONNECTION\xa0"],
["\xa0CONNECTION", "CONNECTION\xa0"],
["<RETURN", "STATUS>"]
]);

Expand Down Expand Up @@ -126,7 +126,7 @@ class CDUAtcConnectionNotification {
return mcdu.getDelaySwitchPage();
};
mcdu.onLeftInput[5] = () => {
CDUAtcMenu.ShowPage1(mcdu);
CDUAtcConnection.ShowPage(mcdu);
};

mcdu.rightInputDelay[1] = () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,15 @@ class CDUAtcConnectionStatus {
["\xa0SET OFF[color]inop"],
[""],
["", "ADS-C DETAIL>[color]inop"],
["\xa0ATC MENU", ""],
["\xa0CONNECTION", ""],
["<RETURN", "NOTIFICATION>"]
]);

mcdu.leftInputDelay[5] = () => {
return mcdu.getDelaySwitchPage();
};
mcdu.onLeftInput[5] = () => {
CDUAtcMenu.ShowPage1(mcdu);
CDUAtcConnection.ShowPage(mcdu);
};

mcdu.rightInputDelay[1] = () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ class CDUAtcDepartReq {

static ShowPage1(mcdu, store = CDUAtcDepartReq.CreateDataBlock()) {
mcdu.clearDisplay();
mcdu.page.Current = mcdu.page.ATCDepartReq;

if (store.firstCall && store.callsign === "") {
if (mcdu.atsu.flightNumber().length !== 0) {
Expand Down Expand Up @@ -128,9 +127,9 @@ class CDUAtcDepartReq {
}

// check if all required information are available to prepare the PDC message
let reqDisplButton = "{cyan}REQ DISPL\xa0{end}";
let reqDisplButton = "{cyan}DCDU\xa0{end}";
if (CDUAtcDepartReq.CanSendData(store)) {
reqDisplButton = "{cyan}REQ DISPL*{end}";
reqDisplButton = "{cyan}DCDU*{end}";
}

mcdu.setTemplate([
Expand All @@ -145,7 +144,7 @@ class CDUAtcDepartReq {
[freetext],
["", "MORE\xa0"],
["", "FREE TEXT>"],
["\xa0ATC MENU", "{cyan}ATC DEPART\xa0{end}"],
["\xa0GROUND REQ", "{cyan}XFR TO\xa0{end}"],
["<RETURN", reqDisplButton]
]);

Expand All @@ -164,9 +163,9 @@ class CDUAtcDepartReq {
} else {
mcdu.dataManager.GetAirportByIdent(airports[0]).then((from) => {
mcdu.dataManager.GetAirportByIdent(airports[1]).then((to) => {
if (from && to) {
store.from = from;
store.to = to;
if (from.ident && to.ident) {
store.from = from.ident;
store.to = to.ident;
CDUAtcDepartReq.ShowPage1(mcdu, store);
} else {
mcdu.setScratchpadMessage(NXSystemMessages.notInDatabase);
Expand All @@ -188,7 +187,7 @@ class CDUAtcDepartReq {
return mcdu.getDelaySwitchPage();
};
mcdu.onLeftInput[5] = () => {
CDUAtcMenu.ShowPage2(mcdu);
CDUAtcClearanceReq.ShowPage(mcdu, "GROUND");
};

mcdu.rightInputDelay[1] = () => {
Expand Down
Loading

0 comments on commit 372898b

Please sign in to comment.