// ***************************************************************************** // * Opencockpits MCP V3 - By Manolo Vélez - www.opencockpits.com // * Adapted by Marty Bochane - Prosim // ***************************************************************************** // * FileName : prosim_mcp_V3.txt // * Date : 2013-02-14 // // // This SIOC script supports One MCP device, two EFIS devices and one CDU device // For this script to work, the following device numbers are expected: // // Device 0: MCP // Device 1: Efis Captain // Device 2: Efis CO // // Devices do not need to be present, but if they are, they should be configured for the above device numbers. // Configuration is done in the sioc.ini file with "master=" lines. // INITIALIZATION Var 0000, Value 0 { &SUB_BLINK = 0 &SUB_BLINK = TIMER 1, 0, 100 } // Start of MCP Device // DIGITS // These are the actual MCP values that are read and written by Prosim. They need to be whole values. Var 100, name D_COURSE1, Link IOCARD_DISPLAY, Digit 0, Numbers 3 Var 102, name D_IAS, Link IOCARD_DISPLAY, Digit 3, Numbers 3 Var 104, name D_HDG, Link IOCARD_DISPLAY, Digit 6, Numbers 3 Var 106, name D_ALT, Link IOCARD_DISPLAY, Digit 9, Numbers 5 Var 108, name D_VS, Link IOCARD_DISPLAY, Digit 14, Numbers 5 Var 110, name D_COURSE2, Link IOCARD_DISPLAY, Digit 19, Numbers 3 Var 112, Name VS_Trigger // Vertical Speed Trigger // This variable is set to 1 when the VS wheel is rotated while the VS display is blanked. // This can trigger a V/S mode if MCP altitude is different than current altitude. Var 114, name BRIGHT, Link IOCARD_DISPLAY, Digit 32, Numbers 3 // Bright control for digits Var 116, name D_IAS_IND, Link IOCARD_DISPLAY, Digit 22, Numbers 1 Var 118, name SUB_BLINK, Link SUBRUTINE { If &Inhibit_IAS = 0 { IF &O_IASSYMB = 0 { &D_IAS_IND = -999999 } ELSE { IF &O_IASSYMB = 1 { &D_IAS_IND = -999996 &D_IAS_IND = DELAY -999999 80 } IF &O_IASSYMB = 2 { &D_IAS_IND = 8 &D_IAS_IND = DELAY -999999 80 } } } } Var 120, name HDG_temp Var 122, name BANK_act // OUTPUTS // These are the lights on the MCP, written by Prosim Var 200, name DECIMAL { If &Inhibit_IAS = 0 // Do not place the decimal if the display is blanked { &IAS_DOT = &DECIMAL } } Var 201, name IAS_DOT, Link IOCARD_OUT, Output 20 Var 202, name O_N1, Link IOCARD_OUT, Output 21 Var 204, name O_AT, Link IOCARD_OUT, Output 22 Var 206, name O_SPEED, Link IOCARD_OUT, Output 23 Var 208, name O_LVLCHG, Link IOCARD_OUT, Output 24 Var 210, name O_VNAV, Link IOCARD_OUT, Output 25 Var 212, name O_HDGSEL, Link IOCARD_OUT, Output 26 Var 214, name O_APP, Link IOCARD_OUT, Output 27 Var 216, name O_VORLOC, Link IOCARD_OUT, Output 28 Var 218, name O_LNAV, Link IOCARD_OUT, Output 29 Var 220, name O_ALTHLD, Link IOCARD_OUT, Output 30 Var 222, name O_VS, Link IOCARD_OUT, Output 31 Var 224, name O_CWSA, Link IOCARD_OUT, Output 32 Var 226, name O_CMDA, Link IOCARD_OUT, Output 33 Var 228, name O_CWSB, Link IOCARD_OUT, Output 34 Var 230, name O_CMDB, Link IOCARD_OUT, Output 35 Var 232, name O_FD1, Link IOCARD_OUT, Output 37 Var 234, name O_FD2, Link IOCARD_OUT, Output 36 Var 236, name O_IASSYMB // Flashing A/B in IAS window, 0=No warning, 1=Flashing A, 2=Flashing B Var 238, name O_BACKLIGHT // Backlight: 1 = on, 0 = off // ROTARY ENCODERS // The rotary encoders control the MCP values. The actual rotary encoder variables are not read or written by Prosim. // The rotary encoders change the MCP values. Before doing this, they will check the associated inhibit variable, to // see if the display is not blanked. If the display is blanked, the rotary encoder does nothing. Var 300, name E_IAS, Link IOCARD_ENCODER, Input 0, Aceleration 4, Type 2 { If &Inhibit_IAS = 0 { L0 = -1 * V300 If &DECIMAL = 1 { V102 = LIMIT 50, 90, L0 } Else { V102 = LIMIT 110, 400, L0 } } } Var 302, name E_ALT, Link IOCARD_ENCODER, Input 2, Aceleration 4, Type 2 { If &Inhibit_Alt = 0 { L0 = -100 * V302 V106 = LIMIT 0 ,50000, L0 } } Var 304, name E_COURSE1, Link IOCARD_ENCODER, Input 4, Aceleration 4, Type 2 { If &Inhibit_OBS1 = 0 { L0 = V304 * -1 V100 = ROTATE 0, 359, L0 } } Var 306, name E_HDG, Link IOCARD_ENCODER, Input 6, Aceleration 4, Type 2 { If &Inhibit_HDG = 0 { If &Bank_act = 0 { L0 = &E_HDG * -1 &D_HDG = ROTATE 0, 359, L0 &HDG_temp = &D_HDG } If &I_BANK_SW = 1 { &D_HDG = &I_BANK_LIMIT L1 = &E_HDG * -5 &D_HDG = LIMIT 10, 30, L1 &I_BANK_LIMIT = &D_HDG } ELSE { &D_HDG = &HDG_temp } } } Var 308, name E_COURSE2, Link IOCARD_ENCODER, Input 9, Aceleration 4, Type 2 { If &Inhibit_OBS2 = 0 { L0 = V308 * -1 V110 = ROTATE 0, 359, L0 } } Var 310, name E_VS, Link IOCARD_ENCODER, Input 11, Aceleration 4, Type 2 { If &Inhibit_VS = 0 { L0 = V310 * -50 V108 = LIMIT -7000, 7000, L0 } Else { &VS_Trigger = 1 } } // Display Inhibit // Display inhibit variables signal the blanking of the displays. They are written by Prosim Var 320, name Inhibit_IAS { If V320 = 1 { &D_IAS = -999999 V201 = 0 } Else { V201 = &DECIMAL } } Var 322, name Inhibit_Alt { If V322 = 1 { &D_ALT = -999999 } } Var 324, name Inhibit_OBS1 { If V324 = 1 { &D_COURSE1 = -999999 } } Var 326, name Inhibit_HDG { If V326 = 1 { &D_HDG = -999999 } } Var 328, name Inhibit_OBS2 { If V328 = 1 { &D_COURSE2 = -999999 } } Var 330, name Inhibit_VS { If V330 = 1 { &D_VS = -999999 } } // SWITCHES // The MCP switches are read by Prosim Var 400, name I_CO, Link IOCARD_SW, Input 13 Var 402, name I_FD2, Link IOCARD_SW, Input 14 Var 404, name I_DISENGAGE, Link IOCARD_SW, Input 15 Var 406, name I_FD1, Link IOCARD_SW, Input 16 Var 408, name I_CWSB, Link IOCARD_SW, Input 18 Var 410, name I_CMDB, Link IOCARD_SW, Input 19 Var 412, name I_CWSA, Link IOCARD_SW, Input 20 Var 414, name I_CMDA, Link IOCARD_SW, Input 21 Var 416, name I_VS, Link IOCARD_SW, Input 22 Var 418, name I_ALTHLD, Link IOCARD_SW, Input 23 Var 420, name I_APP, Link IOCARD_SW, Input 24 Var 422, name I_VORLOC, Link IOCARD_SW, Input 25 Var 424, name I_LNAV, Link IOCARD_SW, Input 27 Var 426, name I_HDGSEL, Link IOCARD_SW, Input 28 Var 428, name I_LVLCHG, Link IOCARD_SW, Input 29 Var 430, name I_VNAV, Link IOCARD_SW, Input 30 Var 432, name I_SPEED, Link IOCARD_SW, Input 31 Var 434, name I_N1, Link IOCARD_SW, Input 32 Var 436, name I_AT, Link IOCARD_SW, Input 33 Var 438, name I_SPD_INTER, Link IOCARD_SW, Input 37 Var 440, name I_ALT_INTER, Link IOCARD_SW, Input 36 Var 442, name I_BANK_LIMIT, VALUE 10 Var 444, name I_BANK_SW, Link IOCARD_SW, Input 34 // Activate bank limit { If &I_BANK_SW = 1 { &Bank_act = 1 &D_HDG = &I_BANK_LIMIT } Else { &Bank_act = 0 &D_HDG = &HDG_temp } } //===================================================================== // End Of MCP device //===================================================================== // Start of EFIS Captain // Prosim reads from 500 - 522 Var 500, name I_E1_DISPMODE Var 501, name I_E1_ZOOM Var 502, name I_E1_NAV1 Var 503, name I_E1_NAV2 Var 504, name I_E1_STA, Link IOCARD_SW, Device 1, Input 27 Var 505, name I_E1_WPT, Link IOCARD_SW, Device 1, Input 28 Var 506, name I_E1_CTR, Link IOCARD_SW, Device 1, Input 29 Var 507, name I_E1_ARPT, Link IOCARD_SW, Device 1, Input 30 Var 508, name I_E1_TFC, Link IOCARD_SW, Device 1, Input 31 Var 509, name I_E1_DATA, Link IOCARD_SW, Device 1, Input 32 Var 510, name I_E1_POS, Link IOCARD_SW, Device 1, Input 33 Var 511, name I_E1_FPV, Link IOCARD_SW, Device 1, Input 34 Var 512, name I_E1_MTR, Link IOCARD_SW, Device 1, Input 38 Var 513, name I_E1_MINRST Var 514, name I_E1_QNHSTD Var 515, name I_E1_MINRADIO Var 516, name I_E1_MINBARO Var 517, name I_E1_CHANGEMIN Var 518, name I_E1_BAROHPA Var 519, name I_E1_BAROINCH Var 520, name I_E1_CHGBARO Var 521, name I_E1_TERR Var 522, name I_E1_WXR Var 523, Link IOCARD_SW, Device 1, Input 10 // VOR mode { If V523 = 1 { &I_E1_DISPMODE = 2 } } Var 524, Link IOCARD_SW, Device 1, Input 11 // MAP mode { If V524 = 1 { &I_E1_DISPMODE = 3 } } Var 525, Link IOCARD_SW, Device 1, Input 12 // PLAN mode { If V525 = 1 { &I_E1_DISPMODE = 4 } } Var 526, Link IOCARD_SW, Device 1, Input 0 // Range 5 { If V526 = 1 { &I_E1_ZOOM = 1 } } Var 527, Link IOCARD_SW, Device 1, Input 1 // Range 10 { If V527 = 1 { &I_E1_ZOOM = 2 } } Var 528, Link IOCARD_SW, Device 1, Input 2 // Range 20 { If V528 = 1 { &I_E1_ZOOM = 3 } } Var 529, Link IOCARD_SW, Device 1, Input 3 // Range 40 { If V529 = 1 { &I_E1_ZOOM = 4 } } Var 530, Link IOCARD_SW, Device 1, Input 4 // Range 80 { If V530 = 1 { &I_E1_ZOOM = 5 } } Var 531, Link IOCARD_SW, Device 1, Input 5 // Range 160 { If V531 = 1 { &I_E1_ZOOM = 6 } } Var 532, Link IOCARD_SW, Device 1, Input 6 // Range 320 { If V532 = 1 { &I_E1_ZOOM = 7 } } Var 533, Link IOCARD_SW, Device 1, Input 7 // Range 640 { If V533 = 1 { &I_E1_ZOOM = 8 } } Var 535, Link IOCARD_SW, Device 1, Input 36 // NAV 1 VOR { CALL &E1NAV1 } Var 536, Link IOCARD_SW, Device 1, Input 37 // NAV 1 ADF { CALL &E1NAV1 } var 537, name E1NAV1, Link SUBRUTINE { If V535 = 1 { &I_E1_NAV1 = 1 } Else { If V536 = 1 { &I_E1_NAV1 = 2 } Else { &I_E1_NAV1 = 0 } } } Var 538, Link IOCARD_SW, Device 1, Input 18 // NAV 2 VOR { CALL &E1NAV2 } Var 539, Link IOCARD_SW, Device 1, Input 19 // NAV 2 ADF { CALL &E1NAV2 } var 540, name E1NAV2, Link SUBRUTINE { If V538 = 1 { &I_E1_NAV2 = 1 } Else { If V539 = 1 { &I_E1_NAV2 = 2 } Else { &I_E1_NAV2 = 0 } } } Var 541, Link IOCARD_SW, Device 1, Input 9 // APP mode { If V541 = 1 { &I_E1_DISPMODE = 1 } } var 550, name Min1Moved Var 551, name Bar1Moved // Minimums knob push button Var 552, Link IOCARD_SW, Device 1, Input 25 { If V552 = 1 { &Min1Moved = 0 } Else { If &Min1Moved = 0 { &I_E1_MINRST = Toggle 0 } } } // QNH knob push button Var 553, Link IOCARD_SW, Device 1, Input 22 { If V553 = 1 { &Bar1Moved = 0 } Else { If &Bar1Moved = 0 { &I_E1_QNHSTD = Toggle 0 } } } // Minimums rotary encoder Var 554, Link IOCARD_ENCODER, Device 1, Input 23, Aceleration 4, Type 2 { &Min1Moved = 1 If V552 = 1 { If V554 > 0 { &I_E1_MINRADIO = Toggle 0 } Else { &I_E1_MINBARO = Toggle 0 } } Else { &I_E1_CHANGEMIN = V554 * -1 &I_E1_CHANGEMIN = 0 } } // QNH rotary encoder Var 555, Link IOCARD_ENCODER, Device 1, Input 20, Aceleration 4, Type 2 { &Bar1Moved = 1 If V553 = 1 { If V555 > 0 { &I_E1_BAROINCH = Toggle 0 } Else { &I_E1_BAROHPA = Toggle 0 } } Else { &I_E1_CHGBARO = V555 * -1 &I_E1_CHGBARO = 0 } } // End of EFIS Captain //===================================================================== //===================================================================== // Start of EFIS Copilot // Prosim reads from variable 600 to 622 Var 600, name I_E2_DISPMODE Var 601, name I_E2_ZOOM Var 602, name I_E2_NAV1 Var 603, name I_E2_NAV2 Var 604, name I_E2_STA, Link IOCARD_SW, Device 2, Input 27 Var 605, name I_E2_WPT, Link IOCARD_SW, Device 2, Input 28 Var 606, name I_E2_CTR, Link IOCARD_SW, Device 2, Input 29 Var 607, name I_E2_ARPT, Link IOCARD_SW, Device 2, Input 30 Var 608, name I_E2_TFC, Link IOCARD_SW, Device 2, Input 31 Var 609, name I_E2_DATA, Link IOCARD_SW, Device 2, Input 32 Var 610, name I_E2_POS, Link IOCARD_SW, Device 2, Input 33 Var 611, name I_E2_FPV, Link IOCARD_SW, Device 2, Input 34 Var 612, name I_E2_MTR, Link IOCARD_SW, Device 2, Input 38 Var 613, name I_E2_MINRST Var 614, name I_E2_QNHSTD Var 615, name I_E2_MINRADIO Var 616, name I_E2_MINBARO Var 617, name I_E2_CHANGEMIN Var 618, name I_E2_BAROHPA Var 619, name I_E2_BAROINCH Var 620, name I_E2_CHGBARO Var 621, name I_E2_TERR Var 622, name I_E2_WXR Var 623, Link IOCARD_SW, Device 2, Input 10 // VOR mode { If V623 = 1 { &I_E2_DISPMODE = 2 } } Var 624, Link IOCARD_SW, Device 2, Input 11 // MAP mode { If V624 = 1 { &I_E2_DISPMODE = 3 } } Var 625, Link IOCARD_SW, Device 2, Input 12 // PLAN mode { If V625 = 1 { &I_E2_DISPMODE = 4 } } Var 626, Link IOCARD_SW, Device 2, Input 0 // Range 5 { If V626 = 1 { &I_E2_ZOOM = 1 } } Var 627, Link IOCARD_SW, Device 2, Input 1 // Range 10 { If V627 = 1 { &I_E2_ZOOM = 2 } } Var 628, Link IOCARD_SW, Device 2, Input 2 // Range 20 { If V628 = 1 { &I_E2_ZOOM = 3 } } Var 629, Link IOCARD_SW, Device 2, Input 3 // Range 40 { If V629 = 1 { &I_E2_ZOOM = 4 } } Var 630, Link IOCARD_SW, Device 2, Input 4 // Range 80 { If V630 = 1 { &I_E2_ZOOM = 5 } } Var 631, Link IOCARD_SW, Device 2, Input 5 // Range 160 { If V631 = 1 { &I_E2_ZOOM = 6 } } Var 632, Link IOCARD_SW, Device 2, Input 6 // Range 320 { If V632 = 1 { &I_E2_ZOOM = 7 } } Var 633, Link IOCARD_SW, Device 2, Input 7 // Range 640 { If V633 = 1 { &I_E2_ZOOM = 8 } } Var 635, Link IOCARD_SW, Device 2, Input 36 // NAV 1 VOR { CALL &E2NAV1 } Var 636, Link IOCARD_SW, Device 2, Input 37 // NAV 1 ADF { CALL &E2NAV1 } var 637, name E2NAV1, Link SUBRUTINE { If V635 = 1 { &I_E2_NAV1 = 1 } Else { If V636 = 1 { &I_E2_NAV1 = 2 } Else { &I_E2_NAV1 = 0 } } } Var 638, Link IOCARD_SW, Device 2, Input 18 // NAV 2 VOR { CALL &E2NAV2 } Var 639, Link IOCARD_SW, Device 2, Input 19 // NAV 2 ADF { CALL &E2NAV2 } var 640, name E2NAV2, Link SUBRUTINE { If V638 = 1 { &I_E2_NAV2 = 1 } Else { If V639 = 1 { &I_E2_NAV2 = 2 } Else { &I_E2_NAV2 = 0 } } } Var 641, Link IOCARD_SW, Device 2, Input 9 // APP mode { If V641 = 1 { &I_E2_DISPMODE = 1 } } var 650, name Min2Moved Var 651, name Bar2Moved Var 652, Link IOCARD_SW, Device 2, Input 25 { If V652 = 1 { &Min2Moved = 0 } Else { If &Min2Moved = 0 { &I_E2_MINRST = Toggle 0 } } } Var 653, Link IOCARD_SW, Device 2, Input 22 { If V653 = 1 { &Bar2Moved = 0 } Else { If &Bar2Moved = 0 { &I_E2_QNHSTD = Toggle 0 } } } Var 654, Link IOCARD_ENCODER, Device 2, Input 23, Aceleration 4, Type 2 { &Min2Moved = 1 If V652 = 1 { If V654 > 0 { &I_E2_MINRADIO = Toggle 0 } Else { &I_E2_MINBARO = Toggle 0 } } Else { &I_E2_CHANGEMIN = V654 * -1 &I_E2_CHANGEMIN = 0 } } Var 655, Link IOCARD_ENCODER, Device 2, Input 20, Aceleration 4, Type 2 { &Bar2Moved = 1 If V653 = 1 { If V655 > 0 { &I_E2_BAROINCH = Toggle 0 } Else { &I_E2_BAROHPA = Toggle 0 } } Else { &I_E2_CHGBARO = V655 * -1 &I_E2_CHGBARO = 0 } } // End of EFIS Copilot //===================================================================== // Start CDU //===================================================================== Var 50, name CDUKey, Link USB_KEYS Var 51, name CDUExec Var 52, name CDUFail Var 53, name CDUMSG