// ***************************************************************************** // * Config_SIOC ver 1.98 - By Manolo Vélez - www.opencockpits.com // ***************************************************************************** // // // Implementation of a 4 digits (one decimal, like 388.5) ADF1, // based on default FS9 ADF1 offsets in FSUIPC. // // Supports: // * two rotaries for frequency (each controlling two digits); // * four 7-segment displays Active frequency; // * four 7-segment displays Standby frequency; // * software controlled Decimal Point via an Output; // * full synchronisation with the aircraft panel, so changes made // in the panel by mouse or keyboard command will be taken care of. // // // The implementation is a bit complicated due to the fact that the FSUIPC // interface provides two offsets, representing 3+1 digits, // while we want to modify the digits, with our Rotaries, two by two. // // Author: Nico Kaan, The Netherlands, 2009 (c) // www.nicokaan.nl // //***************************************************************** Var 0 Value 0 { // init value for active display will automatically come from FSUIPC. // but define an init value for standby freq here: 385.5 &A1StbLow = 5 &A1StbHigh = 385 &A1StbHighR = DIV &A1StbHigh 10 CALL &CaA1StbLowR CALL &CaA1StbFreq } Var 1201 name X_A1ActHigh Link FSUIPC_INOUT Offset $034C Length 2 { L0 = FROMBCD &X_A1ActHigh &A1ActHigh = L0 &A1ActHighR = DIV &A1ActHigh 10 CALL &CaA1ActLowR CALL &CaA1ActFreq } Var 1202 name X_A1ActLow Link FSUIPC_INOUT Offset $0356 Length 2 { &A1ActLow = &X_A1ActLow CALL &CaA1ActLowR CALL &CaA1ActFreq } Var 1203 name A1ActHigh // FSUIPC active ADF value high: 3 digits Var 1204 name A1ActLow // FSUIPC active ADF value: 1 digit var 1205 name A1ActFreq // total (needed for display): 4 digits Var 1206 name A1StbHigh // FSUIPC standby ADF value high: 3 digits Var 1207 name A1StbLow // FSUIPC standby ADF value: 1 digit var 1208 name A1StbFreq // total (needed for display): 4 digits var 1209 name CaA1ActFreq Link Subrutine { L0 = &A1ActHigh * 10 // high * 10 &A1ActFreq = L0 + &A1ActLow // + decimal CALL &OutA1Act } var 1210 name CaA1StbFreq Link Subrutine { L0 = &A1StbHigh * 10 // high * 10 &A1StbFreq = L0 + &A1StbLow // + decimal CALL &OutA1Stb } Var 1211 name OutA1Act Link SUBRUTINE { &D_A1Act = &A1ActFreq &O_A1Dp = 1 } Var 1212 name OutA1Stb Link SUBRUTINE { &D_A1Stb = &A1StbFreq &O_A1Dp = 1 } Var 1213 name A1ActHighR // higher 2 digits controlled by rotarie Var 1214 name A1ActLowR // lower 2 digits controlled by rotarie Var 1215 name A1StbHighR // higher 2 digits controlled by rotarie Var 1216 name A1StbLowR // lower 2 digits controlled by rotarie var 1217 name CaA1ActLowR Link Subrutine { L0 = MOD &A1ActHigh 10 L0 = L0 * 10 &A1ActLowR = L0 + &A1ActLow } var 1218 name CaA1ActHigh Link Subrutine { L0 = DIV &A1ActLowR 10 L1 = &A1ActHighR * 10 &A1ActHigh = L0 + L1 } var 1219 name CaA1StbLowR Link Subrutine { L0 = MOD &A1StbHigh 10 L0 = L0 * 10 &A1StbLowR = L0 + &A1StbLow } var 1220 name CaA1StbHigh Link Subrutine { L0 = DIV &A1StbLowR 10 L1 = &A1StbHighR * 10 &A1StbHigh = L0 + L1 } Var 1221 name RO_A1StbHigh Link IOCARD_ENCODER Input 29 Aceleration 4 Type 2 { L0 = &RO_A1StbHigh * -1 // change direction (turning right should be plus) &A1StbHighR = ROTATE 20 99 L0 CALL &CaA1StbHigh CALL &CaA1StbFreq } Var 1222 name RO_A1StbLow Link IOCARD_ENCODER Input 27 Aceleration 4 Type 2 { L0 = &RO_A1StbLow * 5 // in steps of 5 &A1StbLowR = ROTATE 0 99 L0 &A1StbLow = MOD &A1StbLowR 10 CALL &CaA1StbHigh CALL &CaA1StbFreq } Var 1230 name Save var 1223 name FreqSwap Link IOCARD_SW Input 31 Type P { L0 = &A1ActHighR L1 = &A1ActLowR L2 = &A1ActHigh &Save = &A1ActLow &X_A1ActLow = &A1StbLow // decimal digit to fsuipc &X_A1ActHigh = TOBCD &A1StbHigh // higher 3 Digits in bcd to fsuipc &A1StbHighR = L0 &A1StbLowR = L1 &A1StbHigh = L2 &A1StbLow = &Save CALL &CaA1StbHigh CALL &CaA1StbFreq } Var 1224 name D_A1Act Link IOCARD_DISPLAY Digit 54 Numbers 4 Var 1225 name O_A1Dp Link IOCARD_OUT Output 19 Var 1226 name D_A1Stb Link IOCARD_DISPLAY Digit 49 Numbers 4