PDA

View Full Version : XPNDR Code Problem



Jerrymc3
08-16-2014, 11:26 PM
I built my Transponder with Open Cockpits Displays and 2 rotary encoders. The high digits are working fine but the low digits stay at 00. The encoder works fine in the SIOC Monitor. Display digit numbers are correct. It must be something in my code:

Var 0251, Value 12 // High digits
{
CALL &XPNDRCALC
}

Var 0252, Value 0 // Low digits
{
CALL &XPNDRCALC
}

Var 0253, name INPXPNDRHigh, Link IOCARD_ENCODER, Input 124, Aceleration 1, Type 2 // Input High
{
L0 = &INPXPNDRHigh * 1 // -1 will change direction of rotation
V0251 = V0251 + L0
V0251 = ROTATE 0 ,77 ,L0
}

Var 0254, name INPXPNDRLow, Link IOCARD_ENCODER, Input 118, Aceleration 1, Type 2 // Input Low
{
L0 = &INPXPNDRLow * 1 // -1 will change direction of rotation
V0252 = V0252 + L0
V0252 = ROTATE 0 ,77 ,L0 // numbers will range from 0 to 77 then bac
}

Var 0255, Link IOCARD_SW, Input 63 // VFR button
{
&XPNDRDISP = 1200 // VFR Code CH 7000 USA 1200 Germany 0021
&XPNDRTOFS = TOBCD &XPNDRDISP
}

Var 0256, name XPNDRDISP, Link IOCARD_DISPLAY, Digit 123, Numbers 4 // Display
{
L0 = &XPNDRDISP
}

Var 0257, name XPNDRTOFS, Link FSUIPC_INOUT, Offset $0354, Length 2 // XPNDR
{
L0 = &XPNDRDISP
}

Var 0258, name XPNDRIN, Value 7000 // XPNDR Input from FS

Var 0259, Link FSUIPC_OUT, Offset $7B93, Length 4 // IDT button for Squawkbox

Var 0260, Link IOCARD_SW, Input 113 // IDT button
{
V0259 = V0260
}

Var 0261, name XPNDRCALC, Link SUBRUTINE // Code calculation
{
L0 = V0251 * 100
L1 = V0252 + L0
&XPNDRTOFS = TOBCD L0
&XPNDRDISP = L0
}



This is what happens in the IOCPConsole when I rotate the High Digits, then the Low Digits:

HIGH DIGITS

253=1 - INPXPNDRHigh
251=11 - High digits
257=4352 - XPNDRTOFS
256=1100 - XPNDRDISP
251=12 - High digits
257=4608 - XPNDRTOFS
256=1200 - XPNDRDISP
253=0 - INPXPNDRHigh

251=13 - High digits
257=4864 - XPNDRTOFS
256=1300 - XPNDRDISP
251=14 - High digits
257=5120 - XPNDRTOFS
256=1400 - XPNDRDISP
253=0 - INPXPNDRHigh

253=1 - INPXPNDRHigh
251=15 - High digits
257=5376 - XPNDRTOFS
256=1500 - XPNDRDISP
251=16 - High digits
257=5632 - XPNDRTOFS
256=1600 - XPNDRDISP
253=0 - INPXPNDRHigh

253=1 - INPXPNDRHigh
251=17 - High digits
257=5888 - XPNDRTOFS
256=1700 - XPNDRDISP
251=18 - High digits
257=6144 - XPNDRTOFS
256=1800 - XPNDRDISP
253=0 - INPXPNDRHigh
257=4096 - XPNDRTOFS

LOW DIGITS

254=1 - INPXPNDRLow
252=75 - Low digits
252=76 - Low digits
254=0 - INPXPNDRLow

254=1 - INPXPNDRLow
252=77 - Low digits
252=0 - Low digits
254=0 - INPXPNDRLow

254=1 - INPXPNDRLow
252=1 - Low digits
252=2 - Low digits
254=0 - INPXPNDRLow

254=1 - INPXPNDRLow
252=3 - Low digits
252=4 - Low digits
254=0 - INPXPNDRLow

It doesn't seem to be sending the Low Digits to FS. Am I using the wrong code for a two encoder XPNDR?


Jerry

Westozy
08-17-2014, 07:55 PM
Hi Jerry,
I am also using the OC transponder with Prosim and have it working perfectly. I know very little of SIOC but my mate Ken programmed it for me. The left encoder changes the first two digits and the right encoder changes the second pair. Also the TA/RA rotary switch is working correctly. I will get my .ini file text and post it here tomorrow or Wednesday. You might be able to extract the relevant code!

Cheers Gwyn

fordgt40
08-18-2014, 06:42 AM
Jerry

If you step through your code and the monitor log, you will see that the XPNDRCALC sub routine does not include the value of the low digits before calling the &XPNDRDISP function,

You need to add the low digits value within the XPNDRCALC sub routine.

Change the line &XPNDRDISP = L0 to &XPNDRDISP = L1

There may be other errors as I have not exhaustively checked the code :p

David

Westozy
08-18-2014, 06:50 PM
Hi guys, hope your quick fix works Dave!

Here is the code that has all my OC radios working great with Prosim...


// ****************
// Date: 19/03/2012
// ****************


// *****************
// Start Transponder
// *****************


Var 7100, name fs_atc, Link FSUIPC_OUT Offset $0354 Length 2 // SetATC


Var 7101 name XPDRFreqLow Value 00
Var 7102 name XPDRFreqHigh value 12
Var 7103 name XPDRFreq Value 1200


Var 7104, Value 0 // INIT
{
&atc_dsp = 1200
&fs_atc = 4608
&ATC_DIS_ATC = 1
if &I_XPNDR = 0
{
&ATC_DIS_1 = 1
&ATC_DIS_2 = 0
}
}


Var 7105, name ATC_E_RIGHT, Link IOCARD_ENCODER, device 10, Input 10, Aceleration 1, Type 2
{
L0 = &ATC_E_RIGHT * -1
&XPDRFreqLow = ROTATE 0 77 L0
CALL &CalcXPDRFreqL L0
}


Var 7106, name ATC_E_LEFT, Link IOCARD_ENCODER, device 10, Input 5, Aceleration 1, Type 2
{
L0 = &ATC_E_LEFT * -1
&XPDRFreqHigh = ROTATE 0 77 L0
CALL &CalcXPDRFreqH L0
}


Var 7107 name OutXPDRFreq Link SUBRUTINE
{
L0 = TOBCD &XPDRFreq
// &fs_atc = L0
&atc_dsp = &XPDRFreq
}


Var 7108 name CalcXPDRFreqL Link SUBRUTINE
{
L0 = &XPDRFreqLow
L2 = DIV L0 10
L1 = MOD L0 10
IF L1 = 8
{
IF &CalcXpdrFreqL > 0
{
L2 = L2 + 1
L1 = 0
}
ELSE
{
L1 = 6
}
}
ELSE
{
IF L1 = 9
{
IF &CalcXpdrFreqL > 0
{
L2 = L2 + 1
L1 = 1
}
ELSE
{
L1 = 7
}
}
}
L0 = L2 * 10
&XPDRFreqLow = L0 + L1


L2 = &XPDRFreqHigh * 100
L1 = &XPDRFreqLow
&XPDRFreq = L1 + L2
CALL &OutXPDRFreq
}


Var 7109 name CalcXPDRFreqH Link SUBRUTINE
{
L0 = &XPDRFreqHigh
L2 = DIV L0 10
L1 = MOD L0 10
IF L1 = 8
{
IF &CalcXpdrFreqH > 0
{
L2 = L2 + 1
L1 = 0
}
ELSE
{
L1 = 6
}
}
ELSE
{
IF L1 = 9
{
IF &CalcXpdrFreqH > 0
{
L2 = L2 + 1
L1 = 1
}
ELSE
{
L1 = 7
}
}
}
L0 = L2 * 10
&XPDRFreqHigh = L0 + L1


L2 = &XPDRFreqHigh * 100
L1 = &XPDRFreqLow
&XPDRFreq = L1 + L2
CALL &OutXPDRFreq
}


var 7110, name atc_act
{
if &atc_act <> &atc_dsp
{
&atc_dsp = &atc_act
}
}


Var 7111, name atc_dsp, Link IOCARD_DISPLAY, device 10, Digit 0, Numbers 4
Var 7112, name ATC_D_FAIL, Link IOCARD_DISPLAY, device 10, Digit 4, Numbers 1
Var 7113, name ATC_DIS_ATC, Link IOCARD_OUT, device 10, Output 20
Var 7114, name ATC_DIS_1, Link IOCARD_OUT, device 10, Output 21
Var 7115, name ATC_DIS_2, Link IOCARD_OUT, device 10, Output 22
Var 7116, name ATC_LED_FAIL, Link IOCARD_OUT, device 10, Output 23


Var 7117, name I_XPNDR, Link IOCARD_SW, device 10, Input 7
{
if &I_XPNDR = 0
{
&ATC_DIS_1 = 1
&ATC_DIS_2 = 0
}
ELSE
{
&ATC_DIS_1 = 0
&ATC_DIS_2 = 1
}
}


Var 7118, name I_ALTSRC, Link IOCARD_SW, device 10, Input 9
{
if &I_ALTSRC = 1
{
&atc_dsp = 8888
&ATC_D_FAIL = -999997
&ATC_LED_FAIL = 1
&ATC_DIS_ATC = 1
&ATC_DIS_1 = 1
&ATC_DIS_2 = 1
}
ELSE
{
&atc_dsp = &atc_act
&ATC_D_FAIL = -999999
&ATC_LED_FAIL = 0
&ATC_DIS_ATC = 1
if &I_XPNDR = 0
{
&ATC_DIS_1 = 1
&ATC_DIS_2 = 0
}
else
{
&ATC_DIS_1 = 0
&ATC_DIS_2 = 1
}
CALL &OutXPDRFreq
}
}


Var 7119, name I_R_STB, Link IOCARD_SW, device 10, Input 0
Var 7120, name I_R_ALT, Link IOCARD_SW, device 10, Input 1
Var 7121, name I_R_XPN, Link IOCARD_SW, device 10, Input 2
Var 7122, name I_R_TAO, Link IOCARD_SW, device 10, Input 3
Var 7123, name I_R_TAR, Link IOCARD_SW, device 10, Input 4


Var 7124, name I_IDENT, Link IOCARD_SW, device 10, Input 12
{
if &I_IDENT = 1
{
&sb3_ident = 1
}
else
{
&sb3_ident = 0
}
}


Var 7125, name sb3_ident, LINK FSUIPC_INOUT, Offset $7b93, Length 1 // Squawkbox Ident push
{
if &sb3_ident = 1
{
&ATC_LED_FAIL = 1
}
else
{
&ATC_LED_FAIL = 0
}
}


Var 7126, name sb_connect, LINK FSUIPC_INOUT, Offset $7b81, Length 1 // Squawkbox connected
{
if &sb_connect = 1
{
&ATC_DIS_2 = 1
}
ELSE
{
&ATC_DIS_2 = 0
}
}


// ***************
// End Transponder
// ***************




// **********
// Start NAV1
// **********


var 7200,value 0
{
&nav1_ent = 108
&nav1_dec = 0
&nav1_act = 10800
}


var 7201, name nav1_ent


var 7202, name nav1_dec


var 7203, name nav1_dec_enc, link IOCARD_ENCODER, input 4, type 2, aceleration 1, device 7
{
l0 = &nav1_dec_enc * 50
l1 = &nav1_dec + l0
if l1 < 0
{
l1 = 950
}
if l1 > 950
{
l1 = 0
}
&nav1_dec = l1
call &sub_d_nav1
}


var 7204, name nav1_ent_enc, link IOCARD_ENCODER, input 0, type 2, aceleration 1, device 7
{
l0 = &nav1_ent_enc * -1
&nav1_ent = rotate 108,117,l0
call &sub_d_nav1
}


var 7205, name nav1_id,link IOCARD_DISPLAY, digit 5, numbers 5, device 7


var 7206, name sub_d_nav1, link SUBRUTINE
{
l0 = &nav1_ent * 100
l1 = div &nav1_dec 10
&nav1_id = l0 + l1
}


var 7207, name nav1_act_pt, link IOCARD_OUT, output 20, device 7
var 7208, name nav1_stb_pt, link IOCARD_OUT, output 21, device 7


var 7209, name nav1_tfr_sw, link IOCARD_SW, input 6, device 7
{
if &nav1_tfr_sw = 1
{
l0 = &nav1_ent * 100
l1 = div &nav1_dec 10
l0 = l0 + l1
l1 = div &nav1_act 100
l2 = mod &nav1_act 100
&nav1_act = l0
&nav1_ent = l1
l0 = mod l2 10
l2 = l2 * 10
if l0 > 0
{
l2 = l2 + 5
}
&nav1_dec = l2
call &sub_d_nav1
&nav1_id2 = &nav1_act
}
}


var 7210, name nav1_test_sw, link IOCARD_SW, input 2, device 7
{
if &nav1_test_sw = 1
{
&nav1_id = 88888
&nav1_id2 = 88888
}
else
{
CALL &sub_d_nav1
&nav1_id2 = &nav1_act_pro
}
}


var 7211, name nav1_act


var 7212, name nav1_id2,link IOCARD_DISPLAY, digit 0, numbers 5, device 7
{
if &nav1_id2 > 0
{
&xp_nav1 = &nav1_id2
}
}


var 7213, name xp_nav1, value 10800
{
l0 = &xp_nav1 - 10000
&fnav1 = tobcd l0
}


var 7214, name nav1_act_pro
{
if &nav1_id <> &nav1_act_pro
{
&nav1_id2 = &nav1_act_pro
&nav1_act = &nav1_act_pro
}
}


Var 7215, Link FSUIPC_OUT, name fnav1, Offset $0350, Length 2 // NAV1 Active


// ********
// End NAV1
// ********


// **********
// Start NAV2
// **********


var 7300,value 0
{
&nav2_ent = 108
&nav2_dec = 0
&nav2_act = 10800
}


var 7301, name nav2_ent


var 7302, name nav2_dec


var 7303, name nav2_dec_enc, link IOCARD_ENCODER, input 4, type 2, aceleration 1, device 8
{
l0 = &nav2_dec_enc * 50
l1 = &nav2_dec + l0
if l1 < 0
{
l1 = 950
}
if l1 > 950
{
l1 = 0
}
&nav2_dec = l1
call &sub_d_nav2
}


var 7304, name nav2_ent_enc, link IOCARD_ENCODER, input 0, type 2, aceleration 1, device 8
{
l0 = &nav2_ent_enc * -1
&nav2_ent = rotate 108,117,l0
call &sub_d_nav2
}


var 7305, name nav2_id,link IOCARD_DISPLAY, digit 5, numbers 5, device 8


var 7306, name sub_d_nav2, link SUBRUTINE
{
l0 = &nav2_ent * 100
l1 = div &nav2_dec 10
&nav2_id = l0 + l1
}


var 7307, name nav2_act_pt, link IOCARD_OUT, output 20, device 8
var 7308, name nav2_stb_pt, link IOCARD_OUT, output 21, device 8


var 7309, name nav2_tfr_sw, link IOCARD_SW, input 6, device 8
{
if &nav2_tfr_sw = 1
{
l0 = &nav2_ent * 100
l1 = div &nav2_dec 10
l0 = l0 + l1
l1 = div &nav2_act 100
l2 = mod &nav2_act 100
&nav2_act = l0
&nav2_ent = l1
l0 = mod l2 10
l2 = l2 * 10
if l0 > 0
{
l2 = l2 + 5
}
&nav2_dec = l2
call &sub_d_nav2
&nav2_id2 = &nav2_act
}
}


var 7310, name nav2_test_sw, link IOCARD_SW, input 2, device 8
{
if &nav2_test_sw = 1
{
&nav2_id = 88888
&nav2_id2 = 88888
}
else
{
CALL &sub_d_nav2
&nav2_id2 = &nav2_act_pro
}
}


var 7311, name nav2_act


var 7312, name nav2_id2,link IOCARD_DISPLAY, digit 0, numbers 5, device 8
{
if &nav2_id2 > 0
{
&xp_nav2 = &nav2_id2
}
}


var 7313, name xp_nav2, value 10800
{
l0 = &xp_nav2 - 10000
&fnav2 = tobcd l0
}


var 7314, name nav2_act_pro
{
if &nav2_id <> &nav2_act_pro
{
&nav2_id2 = &nav2_act_pro
&nav2_act = &nav2_act_pro
}
}


Var 7315, Link FSUIPC_OUT, name fnav2, Offset $0352, Length 2 // NAV1 Active


// ********
// End NAV2
// ********




// **********
// Start COM1
// **********




Var 7400,value 0
{
&ent_com1 = 118
&dec_com1 = 0
&act_com1 = 118000
&enc_com1 = 1


}




Var 7401, name enc_com1
{
if &enc_com1 = 1
{
&io_pt_com1 = 1
&io_pt2_com1 = 1
call &sub_d_com1
&id2_com1 = &act_com1
}
else
{
&io_pt_com1 = 0
&io_pt2_com1 = 0
&id_com1 = -999999
&id2_com1 = -999999
}
}


Var 7402, name ent_com1


Var 7403, name dec_com1


Var 7404, name ie_dec_com1, link IOCARD_ENCODER, input 4, type 2, aceleration 1, device 9
{
if &enc_com1 = 1
{
l0 = &ie_dec_com1 * 25
l1 = &dec_com1 + l0
if l1 < 0
{
l1 = 975
}
if l1 > 975
{
l1 = 0
}
&dec_com1 = l1
call &sub_d_com1
}
}


Var 7405, name ie_ent_com1, link IOCARD_ENCODER, input 0, type 2, aceleration 1, device 9
{
if &enc_com1 = 1
{
l0 = &ie_ent_com1 * -1
&ent_com1 = rotate 118,136,l0
call &sub_d_com1
}
}




Var 7406, name id_com21,link IOCARD_DISPLAY, digit 6, numbers 6, device 9
{
&stb = div &id_com1 10
}


Var 7407, name sub_d_com1, link SUBRUTINE
{
l0 = &ent_com1 * 1000
&id_com1 = l0 + &dec_com1
}


Var 7408, name io_pt_com1, link IOCARD_OUT, output 20, device 9


Var 7409, name ii_sw_com1, link IOCARD_SW, input 6, device 9
{
if &ii_sw_com1 = 1
{
if &enc_com1 = 1
{
l0 = &ent_com1 * 1000
l0 = l0 + &dec_com1
l1 = div &act_com1 1000
l2 = mod &act_com1 1000
&act_com1 = l0
&ent_com1 = l1
&dec_com1 = l2
call &sub_d_com1
&id2_com1 = &act_com1
}
}
}


Var 7410, name act_com1


Var 7411, name id2_com21,link IOCARD_DISPLAY, digit 0, numbers 6, device 9
{
if &id2_com1 > 0
{
&xp_com1 = div &id2_com1 10
}
}


Var 7412, name io_pt2_com1, link IOCARD_OUT, output 21, device 9


Var 7413, name xp_com1, value 11800


Var 7414, name stb


Var 7415, name id_com1
{
&id_com21 = &id_com1
}


Var 7416, name id2_com1
{
&id2_com21 = &id2_com1
}


Var 7417, name ii_sw_tfr, link IOCARD_SW, input 2, device 9
{
if &ii_sw_tfr = 1
{
&id_com21 = 888888
&id2_com21 = 888888
}
else
{
&id_com21 = &id_com1
&id2_com21 = &id2_com1
}
}


// ********
// End COM1
// ********


// **********
// Start COM2
// **********


Var 7500,value 0
{
&ent_com2 = 118
&dec_com2 = 0
&act_com2 = 118000
&enc_com2 = 1
}




Var 7501, name enc_com2
{
if &enc_com2 = 1
{
&io_pt_com2 = 1
&io_pt2_com2 = 1
call &sub_d_com2
&id2_com2 = &act_com2
}
else
{
&io_pt_com2 = 0
&io_pt2_com2 = 0
&id_com2 = -999999
&id2_com2 = -999999
}
}


Var 7502, name ent_com2


Var 7503, name dec_com2


Var 7504, name ie_dec_com2, link IOCARD_ENCODER, input 4, type 2, aceleration 1, device 12
{
if &enc_com2 = 1
{
l0 = &ie_dec_com2 * 25
l1 = &dec_com2 + l0
if l1 < 0
{
l1 = 975
}
if l1 > 975
{
l1 = 0
}
&dec_com2 = l1
call &sub_d_com2
}
}


Var 7505, name ie_ent_com2, link IOCARD_ENCODER, input 0, type 2, aceleration 1, device 12
{
if &enc_com2 = 1
{
l0 = &ie_ent_com2 * -1
&ent_com2 = rotate 118,136,l0
call &sub_d_com2
}
}


Var 7506, name id_com22,link IOCARD_DISPLAY, digit 6, numbers 6, device 12
{
&stb2 = div &id_com2 10
}


Var 7507, name sub_d_com2, link SUBRUTINE
{
l0 = &ent_com2 * 1000
&id_com2 = l0 + &dec_com2
}


Var 7508, name io_pt_com2, link IOCARD_OUT, output 20, device 12


Var 7509, name ii_sw_com2, link IOCARD_SW, input 6, device 12
{
if &ii_sw_com2 = 1
{
if &enc_com2 = 1
{
l0 = &ent_com2 * 1000
l0 = l0 + &dec_com2
l1 = div &act_com2 1000
l2 = mod &act_com2 1000
&act_com2 = l0
&ent_com2 = l1
&dec_com2 = l2
call &sub_d_com2
&id2_com2 = &act_com2
}
}
}


Var 7510, name act_com2


Var 7511, name id2_com22,link IOCARD_DISPLAY, digit 0, numbers 6, device 12
{
if &id2_com2 > 0
{
&xp_com2 = div &id2_com2 10
}
}


Var 7512, name io_pt2_com2, link IOCARD_OUT, output 21, device 12


Var 7513, name xp_com2, value 11800




Var 7514, name stb2


Var 7515, name id_com2
{
&id_com22 = &id_com2
}


Var 7516, name id2_com2
{
&id2_com22 = &id2_com2
}


Var 7517, name ii_sw_tfr2, link IOCARD_SW, input 2, device 12
{
if &ii_sw_tfr2 = 1
{
&id_com22 = 888888
&id2_com22 = 888888
}
else
{
&id_com22 = &id_com2
&id2_com22 = &id2_com2
}
}
// ********
// End COM2
// ********


// ****
// ADF1
// ****


Var 7600 Value 0
{
&A1StbLow = 5
&A1StbHigh = 385
CALL &CaA1StbFreq
}


Var 7601 name X_A1ActHigh Link FSUIPC_INOUT Offset $034C Length 2
{
L0 = FROMBCD &X_A1ActHigh
&A1ActHigh = L0
CALL &CaA1ActFreq
}


Var 7602 name X_A1ActLow Link FSUIPC_INOUT Offset $0356 Length 2
{
&A1ActLow = &X_A1ActLow
CALL &CaA1ActFreq
}


Var 7603 name A1ActHigh // FSUIPC active ADF1 value high: 3 digits
Var 7604 name A1ActLow // FSUIPC active ADF1 value: 1 digit
Var 7605 name A1ActFreq // total (needed for display): 4 digits


Var 7606 name A1StbHigh // FSUIPC standby ADF1 value high: 3 digits
Var 7607 name A1StbLow // FSUIPC standby ADF1 value: 1 digit
Var 7608 name A1StbFreq // total (needed for display): 4 digits


Var 7609 name CaA1ActFreq Link Subrutine
{
L0 = &A1ActHigh * 10 // high * 10
&A1ActFreq = L0 + &A1ActLow // + decimal
CALL &OutA1Act
}


Var 7610 name CaA1StbFreq Link Subrutine
{
L0 = &A1StbHigh * 10 // high * 10
&A1StbFreq = L0 + &A1StbLow // + decimal
CALL &OutA1Stb
}


Var 7611 name OutA1Act Link SUBRUTINE
{
&D_A1Act = &A1ActFreq
&O_A1ActDp = 1
}


Var 7612 name OutA1Stb Link SUBRUTINE
{
&D_A1Stb = &A1StbFreq
&O_A1StbDp = 1
}


Var 7613 name RO_A1StbHigh, Link IOCARD_ENCODER, device 11, Input 0, Aceleration 4, Type 2
{
L0 = &RO_A1StbHigh * -1 // change direction (turning right should be plus)
&A1StbHigh = ROTATE 100 999 L0
CALL &CaA1StbFreq
}


Var 7614 name RO_A1StbLow, Link IOCARD_ENCODER, device 11, Input 4, Aceleration 1, Type 2
{
L0 = &RO_A1StbLow * 1 // in steps of 5
&A1StbLow = ROTATE 0 9 L0
CALL &CaA1StbFreq
}


Var 7615 name FreqSwap1, Link IOCARD_SW, device 11, Input 6, Type P
{
L0 = &A1ActHigh
L1 = &A1ActLow


&X_A1ActLow = &A1StbLow // decimal digit to fsuipc
&X_A1ActHigh = TOBCD &A1StbHigh // higher 3 Digits in bcd to fsuipc

&A1StbHigh = L0
&A1StbLow = L1


CALL &CaA1StbFreq
}


Var 7616 name D_A1Act, Link IOCARD_DISPLAY, device 11, Digit 0, Numbers 5
Var 7617 name O_A1ActDp, Link IOCARD_OUT, device 11, Output 20


Var 7618 name D_A1Stb, Link IOCARD_DISPLAY, device 11, Digit 5, Numbers 5
Var 7619 name O_A1StbDp, Link IOCARD_OUT, device 11, Output 21


// ********
// End ADF1
// ********


// **********
// Start ADF2
// **********


Var 7700 Value 0
{
&A2StbLow = 5
&A2StbHigh = 385
CALL &CaA2StbFreq
}


Var 7701 name X_A2ActHigh Link FSUIPC_INOUT Offset $02D4 Length 2
{
L0 = FROMBCD &X_A2ActHigh
&A2ActHigh = L0
CALL &CaA2ActFreq
}


Var 7702 name X_A2ActLow Link FSUIPC_INOUT Offset $02D6 Length 2
{
&A2ActLow = &X_A2ActLow
CALL &CaA2ActFreq
}


Var 7703 name A2ActHigh // FSUIPC active ADF2 value high: 3 digits
Var 7704 name A2ActLow // FSUIPC active ADF2 value: 1 digit
var 7705 name A2ActFreq // total (needed for display): 4 digits


Var 7706 name A2StbHigh // FSUIPC standby ADF2 value high: 3 digits
Var 7707 name A2StbLow // FSUIPC standby ADF2 value: 1 digit
var 7708 name A2StbFreq // total (needed for display): 4 digits


var 7709 name CaA2ActFreq Link Subrutine
{
L0 = &A2ActHigh * 10 // high * 10
&A2ActFreq = L0 + &A2ActLow // + decimal
CALL &OutA2Act
}


var 7710 name CaA2StbFreq Link Subrutine
{
L0 = &A2StbHigh * 10 // high * 10
&A2StbFreq = L0 + &A2StbLow // + decimal
CALL &OutA2Stb
}


Var 7711 name OutA2Act Link SUBRUTINE
{
&D_A2Act = &A2ActFreq
&O_A2ActDp = 1
}


Var 7712 name OutA2Stb Link SUBRUTINE
{
&D_A2Stb = &A2StbFreq
&O_A2StbDp = 1
}


Var 7713 name RO_A2StbHigh, Link IOCARD_ENCODER, Device 13, Input 0, Aceleration 4, Type 2
{
L0 = &RO_A2StbHigh * -1 // change direction (turning right should be plus)
&A2StbHigh = ROTATE 100 999 L0
CALL &CaA2StbFreq
}


Var 7714 name RO_A2StbLow, Link IOCARD_ENCODER, Device 13, Input 4, Aceleration 1, Type 2
{
L0 = &RO_A2StbLow * 1 // in steps of 5
&A2StbLow = ROTATE 0 9 L0
CALL &CaA2StbFreq
}


var 7715 name FreqSwap2, Link IOCARD_SW, Device 13, Input 6, Type P
{
L0 = &A2ActHigh
L1 = &A2ActLow


&X_A2ActLow = &A2StbLow // decimal digit to fsuipc
&X_A2ActHigh = TOBCD &A2StbHigh // higher 3 Digits in bcd to fsuipc

&A2StbHigh = L0
&A2StbLow = L1


CALL &CaA2StbFreq
}


Var 7716 name D_A2Act, Link IOCARD_DISPLAY, Device 13, Digit 0, Numbers 5
Var 7717 name O_A2ActDp, Link IOCARD_OUT, Device 13, Output 20


Var 7718 name D_A2Stb, Link IOCARD_DISPLAY, Device 13, Digit 5, Numbers 5
Var 7719 name O_A2StbDp, Link IOCARD_OUT, Device 13, Output 21


// ********
// End ADF2
// ********






// ***************
// blanking radios
// ***************


Var 9999 // Configure this variable in ProSim Configuration-Numerical-Volt BattBus field
{
IF V9999 = 0
{
&nav1_id = -999999
&nav1_id2 = -999999
&nav1_act_pt = 0
&nav1_stb_pt = 0
&nav2_id = -999999
&nav2_id2 = -999999
&nav2_act_pt = 0
&nav2_stb_pt = 0
&id_com21 = -999999
&id2_com21 = -999999
&io_pt_com1 = 0
&io_pt2_com1 = 0
&id_com22 = -999999
&id2_com22 = -999999
&io_pt_com2 = 0
&io_pt2_com2 = 0
&D_A1Act = -999999
&D_A1Stb = -999999
&O_A1ActDp = 0
&O_A1StbDp = 0
&D_A2Act = -999999
&D_A2Stb = -999999
&O_A2ActDp = 0
&O_A2StbDp = 0
&atc_dsp = -999999
&ATC_DIS_ATC = 0
&ATC_DIS_1 = 0
&ATC_DIS_2 = 0
}
ELSE
{
CALL &sub_d_nav1
&nav1_id2 = &nav1_act_pro
&nav1_act_pt = 1
&nav1_stb_pt = 1
CALL &sub_d_nav2
&nav2_id2 = &nav2_act_pro
&nav2_act_pt = 1
&nav2_stb_pt = 1
&id_com21 = &id_com1
&id2_com21 = &id2_com1
&io_pt_com1 = 1
&io_pt2_com1 = 1
&id_com22 = &id_com2
&id2_com22 = &id2_com2
&io_pt_com2 = 1
&io_pt2_com2 = 1
CALL V7611
CALL V7612
CALL V7711
CALL V7712
&atc_dsp = &atc_act
&ATC_DIS_ATC = 1
if &I_XPNDR = 0
{
&ATC_DIS_1 = 1
&ATC_DIS_2 = 0
}
else
{
&ATC_DIS_1 = 0
&ATC_DIS_2 = 1
}
}
}



Cheers Gwyn

Jerrymc3
08-20-2014, 10:12 AM
Thanks for the input guys. It's going to be a few days before I get time to work on it again but I will let you know if I get it working right.

Jerrymc3
08-25-2014, 08:07 AM
Gwyn

Copied your transponder code and inserted my inputs/outputs. Seems to be working fine but I haven't actually tried it in FSX yet. I was sick part of the weekend and didn't have enough time. Thanks for your help.

Jerry

Westozy
08-25-2014, 10:34 PM
Gwyn

Copied your transponder code and inserted my inputs/outputs. Seems to be working fine but I haven't actually tried it in FSX yet. I was sick part of the weekend and didn't have enough time. Thanks for your help.

Jerry

I hope it goes well for you!

Cheers Gwyn

Jerrymc3
12-14-2014, 12:14 AM
Never hurts to go back and try again. I tried your transponder code almost four months ago inserting my inputs but it still wouldn't show up on the FSX XPNDR so I gave up for a while. Tonight I decided to try again and I found this little problem with your code:


Var 7107 name OutXPDRFreq Link SUBRUTINE
{
L0 = TOBCD &XPDRFreq
// &fs_atc = L0
&atc_dsp = &XPDRFreqp
}

Removed the // and now it works in FS and my PM FMC. Please accept a belated Thank you Gwyn


Jerry

Jerrymc3
12-14-2014, 11:43 AM
I hope it goes well for you!

Cheers Gwyn

Gwyn

You wouldn't happen to have a properly working EFIS BARO code would you? My code increases/decreases the QNH in increments of .03 rather than .01.
Often I have to press B to get the correct Barometric pressure. Kind of spoils the realism.

Jerry

Westozy
12-14-2014, 10:02 PM
Gwyn

You wouldn't happen to have a properly working EFIS BARO code would you? My code increases/decreases the QNH in increments of .03 rather than .01.
Often I have to press B to get the correct Barometric pressure. Kind of spoils the realism.

Jerry

Hi Jerry, I have CPFlight MCP and EFIS units so no OC code sorry!

Cheers Gwyn

fordgt40
12-15-2014, 05:15 AM
Jerry

Why not post your code. That should not be too difficult to fix - famous last words!:)

David

Jerrymc3
12-15-2014, 02:09 PM
David

Here's my EFIS Code. I haven't finished my FO EFIS so I just left that on DEVICE 12 which doesn't exist. Guess that's ok.

// *****************************************************************************
// * Config_SIOC ver 4.3 - By Manuel Velez - www.opencockpits.com (http://www.opencockpits.com)
// *****************************************************************************
// * FileName : PM_B747_EFIS.txt
// * Date : 6/11/2013


Var 0026, name I_5, Link IOCARD_SW, Input 37
{
IF &I_5 = 1
{
&PM_RANG = 0
}
}

Var 0027, name I_10, Link IOCARD_SW, Input 55
{
IF &I_10 = 1
{
&PM_RANG = 1
}
}

Var 0028, name I_20, Link IOCARD_SW, Input 58
{
IF &I_20 = 1
{
&PM_RANG = 2
}
}

Var 0029, name I_40, Link IOCARD_SW, Input 57
{
IF &I_40 = 1
{
&PM_RANG = 3
}
}

Var 0030, name I_80, Link IOCARD_SW, Input 61
{
IF &I_80 = 1
{
&PM_RANG = 4
}
}

Var 0031, name I_160, Link IOCARD_SW, Input 54
{
IF &I_160 = 1
{
&PM_RANG = 5
}
}

Var 0032, name I_320, Link IOCARD_SW, Input 60
{
IF &I_320 = 1
{
&PM_RANG = 6
}
}

Var 0033, name I_640, Link IOCARD_SW, Input 59
{
IF &I_640 = 1
{
&PM_RANG = 7
}
}

Var 0034, name I_APP, Link IOCARD_SW, Input 46
{
IF &I_APP = 1
{
&PM_MODO = 5
}
}

Var 0035, name I_VOR, Link IOCARD_SW, Input 47
{
IF &I_VOR = 1
{
&PM_MODO = 3
}
}

Var 0036, name I_MAP, Link IOCARD_SW, Input 49
{
IF &I_MAP = 1
{
&PM_MODO = 1
}
}

Var 0037, name I_PLN, Link IOCARD_SW, Input 48
{
IF &I_PLN = 1
{
&PM_MODO = 4
}
}

Var 0038, name I_S1, Link IOCARD_SW, Input 38
{
IF &I_S1 = 1
{
&PM_MODO = 90 // STA
}
}

Var 0039, name I_S2, Link IOCARD_SW, Input 40
{
IF &I_S2 = 1
{
&PM_MODO = 93 // WPT
}
}

Var 0040, name I_S3, Link IOCARD_SW, Input 53
{
IF &I_S3 = 1
{
&PM_MODO = 6 // CTR
}
}

Var 0041, name I_S4, Link IOCARD_SW, Input 39
{
IF &I_S4 = 1
{
&PM_MODO = 94 // ARPT
}
}

Var 0042, name I_S5, Link IOCARD_SW, Input 6
{
IF &I_S5 = 1
{
&PM_MODO = 82 // TERR
}
}

Var 0043, name I_S6, Link IOCARD_SW, Input 62
{
IF &I_S6 = 1
{
&PM_MODO = 54 // TFC
}
}

Var 0044, name I_S7, Link IOCARD_SW, Input 37
{
IF &I_S7 = 1
{
&PM_MODO = 72 // WXR
}
}

Var 0045, name I_SR1, Link IOCARD_SW, Input 50
{
IF &I_SR1 = 1
{
&PM_MODO = 14 // FPV
}
}

Var 0046, name I_SR2, Link IOCARD_SW, Input 70
{
IF &I_SR2 = 1
{
&PM_MODO = 26 // MTRS
}
}

Var 0047, name I_BARONSW, Link IOCARD_SW, Input 51, Type P
{
IF &I_BARONSW = 1
{
&COD_ELAN = 49
}
ELSE
{
&COD_ELAN = 49
}
}

Var 0048, name I_MINSW, Link IOCARD_SW, Input 41
{
IF &I_MINSW = 1
{
&SUB_DH = 3000
}
}

Var 0049, name I_VOR1, Link IOCARD_SW, Input 42
{
IF &I_VOR1 = 1
{
&PM_MODO = 75
}
ELSE
{
IF &I_ADF1 = 0
{
&PM_MODO = 73
}
}
}

Var 0050, name I_ADF1, Link IOCARD_SW, Input 36
{
IF &I_ADF1 = 1
{
&PM_MODO = 74
}
ELSE
{
IF &I_VOR1 = 0
{
&PM_MODO = 73
}
}
}

Var 0051, name I_VOR2, Link IOCARD_SW, Input 52
{
IF &I_VOR2 = 1
{
&PM_MODO = 78
}
ELSE
{
IF &I_ADF2 = 0
{
&PM_MODO = 76
}
}
}

Var 0052, name I_ADF2, Link IOCARD_SW, Input 45
{
IF &I_ADF2 = 1
{
&PM_MODO = 77
}
ELSE
{
IF &I_VOR2 = 0
{
&PM_MODO = 76
}
}
}

Var 0053, name E_BARO, Link IOCARD_ENCODER, Input 65, Aceleration 1, Type 2
{
L0 = &E_BARO * -1
&SUB_BAR = &SUB_BAR + L0
}

Var 0054, name E_MIN, Link IOCARD_ENCODER, Input 63, Aceleration 1, Type 2
{
L0 = &E_MIN * 100
&SUB_DH = &SUB_DH + L0
}

Var 0055, name SUB_DH, Link SUBRUTINE
{
IF &SUB_DH > 20000
{
&SUB_DH = 20000
}
IF &SUB_DH < 0
{
&SUB_DH = 0
}
L0 = DIV &SUB_DH ,100
&PM_DH = L0
}

Var 0056, name SUB_BAR, Link SUBRUTINE
{
L0 = &SUB_BAR * 16
&FS_QNH = L0
}

Var 0057, name SUB2_DH, Link SUBRUTINE
{
IF &SUB2_DH > 20000
{
&SUB2_DH = 20000
}
IF &SUB2_DH < 0
{
&SUB2_DH = 0
}
L0 = DIV &SUB2_DH ,100
&PM2_DH = L0
}

Var 0058, name SUB2_BAR, Link SUBRUTINE
{
L0 = &SUB2_BAR * 16
&FS2_QNH = L0
}

Var 0059, name COD_ELAN, Link FSUIPC_INOUT, Offset $04F2, Length 2

Var 0060, name PM_MODO, Link FSUIPC_INOUT, Offset $04F4, Length 2 // PM_EFIS_MODO

Var 0061, name PM_RANG, Link FSUIPC_OUT, Offset $04F8, Length 2 // PM_EFIS_RANG

Var 0062, name PM_DH, Link FSUIPC_OUT, Offset $04FA, Length 2 // PM_EFIS_DH

Var 0063, name FS_QNH, Link FSUIPC_OUT, Offset $0330, Length 2 // FS_QNH_MB

Var 0064, name PM2_RANG, Link FSUIPC_OUT, Offset $5524, Length 2 // PM_EFIS_RANG FO

Var 0065, name PM2_DH, Link FSUIPC_OUT, Offset $5532, Length 2 // PM_EFIS_DH FO

Var 0066, name FS2_QNH, Link FSUIPC_OUT, Offset $552E, Length 2 // FS_QNH_MB FO

Var 0067, name I2_5, Link IOCARD_SW, Device 12, Input 0
{
IF &I2_5 = 1
{
&PM2_RANG = 0
}
}

Var 0068, name I2_10, Link IOCARD_SW, Device 12, Input 1
{
IF &I2_10 = 1
{
&PM2_RANG = 1
}
}

Var 0069, name I2_20, Link IOCARD_SW, Device 12, Input 2
{
IF &I2_20 = 1
{
&PM2_RANG = 2
}
}

Var 0070, name I2_40, Link IOCARD_SW, Device 12, Input 3
{
IF &I2_40 = 1
{
&PM2_RANG = 3
}
}

Var 0071, name I2_80, Link IOCARD_SW, Device 12, Input 4
{
IF &I2_80 = 1
{
&PM2_RANG = 4
}
}

Var 0072, name I2_160, Link IOCARD_SW, Device 12, Input 5
{
IF &I2_160 = 1
{
&PM2_RANG = 5
}
}

Var 0073, name I2_320, Link IOCARD_SW, Device 12, Input 6
{
IF &I2_320 = 1
{
&PM2_RANG = 6
}
}

Var 0074, name I2_640, Link IOCARD_SW, Device 12, Input 7
{
IF &I2_640 = 1
{
&PM2_RANG = 7
}
}

Var 0075, name I2_APP, Link IOCARD_SW, Device 12, Input 9
{
IF &I2_APP = 1
{
&PM_MODO = 105
}
}

Var 0076, name I2_VOR, Link IOCARD_SW, Device 12, Input 10
{
IF &I2_VOR = 1
{
&PM_MODO = 103
}
}

Var 0077, name I2_MAP, Link IOCARD_SW, Device 12, Input 11
{
IF &I2_MAP = 1
{
&PM_MODO = 101
}
}

Var 0078, name I2_PLN, Link IOCARD_SW, Device 12, Input 12
{
IF &I2_PLN = 1
{
&PM_MODO = 104
}
}

Var 0079, name I2_S1, Link IOCARD_SW, Device 12, Input 27
{
IF &I2_S1 = 1
{
&PM_MODO = 90 // STA
}
}

Var 0080, name I2_S2, Link IOCARD_SW, Device 12, Input 28
{
IF &I2_S2 = 1
{
&PM_MODO = 93 // WPT
}
}

Var 0081, name I2_S3, Link IOCARD_SW, Device 12, Input 29
{
IF &I2_S3 = 1
{
&PM_MODO = 6 // CTR
}
}

Var 0082, name I2_S4, Link IOCARD_SW, Device 12, Input 30
{
IF &I2_S4 = 1
{
&PM_MODO = 94 // ARPT
}
}

Var 0083, name I2_S5, Link IOCARD_SW, Device 12, Input 31
{
IF &I2_S5 = 1
{
}
}

Var 0084, name I2_S6, Link IOCARD_SW, Device 12, Input 32
{
IF &I2_S6 = 1
{
&PM_MODO = 95 // DATA
}
}

Var 0085, name I2_S7, Link IOCARD_SW, Device 12, Input 33
{
IF &I2_S7 = 1
{
&PM_MODO = 96 // POS
}
}

Var 0086, name I2_SR1, Link IOCARD_SW, Device 12, Input 34
{
IF &I2_SR1 = 1
{
&PM_MODO = 14 // FPV
}
}

Var 0087, name I2_SR2, Link IOCARD_SW, Device 12, Input 38
{
IF &I2_SR2 = 1
{
&PM_MODO = 126 // MTRS
}
}

Var 0088, name I2_BARONSW, Link IOCARD_SW, Device 12, Input 22
{
IF &I2_BARONSW = 1
{
&SUB2_BAR = 1013
L0 = 1013 * 16
L0 = L0 + 1
&FS2_QNH = L0
}
}

Var 0089, name I2_MINSW, Link IOCARD_SW, Device 12, Input 25
{
IF &I2_MINSW = 1
{
&SUB2_DH = 3000
}
}

Var 0090, name I2_VOR1, Link IOCARD_SW, Device 12, Input 36
{
IF &I2_VOR1 = 1
{
&PM_MODO = 175
}
ELSE
{
IF &I2_ADF1 = 0
{
&PM_MODO = 173
}
}
}

Var 0091, name I2_ADF1, Link IOCARD_SW, Device 12, Input 37
{
IF &I2_ADF1 = 1
{
&PM_MODO = 174
}
ELSE
{
IF &I2_VOR1 = 0
{
&PM_MODO = 173
}
}
}

Var 0092, name I2_VOR2, Link IOCARD_SW, Device 12, Input 18
{
IF &I2_VOR2 = 1
{
&PM_MODO = 178
}
ELSE
{
IF &I2_ADF2 = 0
{
&PM_MODO = 176
}
}
}

Var 0093, name I2_ADF2, Link IOCARD_SW, Device 12, Input 19
{
IF &I2_ADF2 = 1
{
&PM_MODO = 177
}
ELSE
{
IF &I2_VOR2 = 0
{
&PM_MODO = 176
}
}
}

Var 0094, name E2_BARO, Link IOCARD_ENCODER, Device 12, Input 20, Aceleration 1, Type 2
{
L0 = &E2_BARO * 1
&SUB2_BAR = &SUB2_BAR + L0
}

Var 0095, name E2_MIN, Link IOCARD_ENCODER, Device 12, Input 23, Aceleration 1, Type 2
{
L0 = &E2_MIN * 100
&SUB2_DH = &SUB2_DH + L0
}

fordgt40
12-15-2014, 05:42 PM
Hi Jerry

Just saw your code, but I am away from home for the next day or so. Will respond then with either changes to your code or a copy of mine!

David

Jerrymc3
12-15-2014, 09:24 PM
Hi Jerry

Just saw your code, but I am away from home for the next day or so. Will respond then with either changes to your code or a copy of mine!

David

Thanks David, looking forward to your reply

Jerry

fordgt40
12-18-2014, 07:51 AM
Hi Jerry

I cannot categorically say your code is wrong, as my setup is down at present and I cannot run a simulation to check the values of &E_Baro. However, I attach my code for the Baro function, which I know works ok. The switch Barohpa switches the display between metric and imperial units.


Var 1370, name BAROHPA, Link IOCARD_SW, input 101


Var 1390, name E_BARO, Link IOCARD_ENCODER, input 102, Aceleration 1, Type 2
{
IF &BAROHPA = 1
{
L0 = &E_BARO * -16
&FS_QNH = &FS_QNH + L0
}
ELSE
{
L0 = &E_BARO * -4
&FS_QNH = &FS_QNH + L0
}
}


Var 1440, name FS_QNH, Link FSUIPC_INOUT, Offset $0330, Length 2 // FS_QNH


Any probs then let me know

David

Jerrymc3
12-19-2014, 07:47 PM
David

I tried disabling my BARO code and inserting yours with my inputs but when I try to compile I get an error message "Access violation at address 004400752 in module'config_sioc.exe'. Read of address 00000024. I forgot to mention that I'm using Project Magenta GC, CDU, MCP and pmSystems software. I didn't realize that PM uses their own offsets to Read/Write to the FS EFIS. I guess I need to post this question in their forum unless you're familiar with their programing. Thanks for your help.

Jerry

Jerrymc3
01-13-2015, 03:27 PM
Hi Jerry

I cannot categorically say your code is wrong, as my setup is down at present and I cannot run a simulation to check the values of &E_Baro. However, I attach my code for the Baro function, which I know works ok. The switch Barohpa switches the display between metric and imperial units.


Var 1370, name BAROHPA, Link IOCARD_SW, input 101


Var 1390, name E_BARO, Link IOCARD_ENCODER, input 102, Aceleration 1, Type 2
{
IF &BAROHPA = 1
{
L0 = &E_BARO * -16
&FS_QNH = &FS_QNH + L0
}
ELSE
{
L0 = &E_BARO * -4
&FS_QNH = &FS_QNH + L0
}
}


Var 1440, name FS_QNH, Link FSUIPC_INOUT, Offset $0330, Length 2 // FS_QNH


Any probs then let me know

David
David
You probably thought this subject was dead. I didn't mention that I do most of my flying in the USA, hence I use in. rather than HPA. I decided to do some flying in Europe so I changed over to HPA and the digits change correctly so I guess the problem has something to do with converting to in. I have no idea how to fix that.

Jerry

fordgt40
01-16-2015, 05:41 PM
Hi Jerry

I will look at it this weekend and get back to you

David

fordgt40
01-18-2015, 04:23 PM
Hi Jerry

I have fired up my sim and checked the code I sent you. It all works ok both in metric and imperial units. I am also using the same FSUIPC offset as you ie 0330. So, I do not understand why the code does not run on your machine. Did you cut and paste my code into yours, if so, then delete the new code and enter my code by hand as sometimes cutting and pasting can introduce additional control characters.

Else, have you tried using the iocpconsole function to see your variable values and also use the log command. Then you will see how the values change when the encoder is turned and it should be evident what is happening, so you can then change the code accordingly. I agree that I think your sioc code to convert the 0330 offset value is wrong, but by using the iocpconsole function it should be readily apparent where the code is going wrong

David

Jerrymc3
01-19-2015, 10:57 AM
Thanks David. I'll try those suggestions when I have time and get back to you.

Jerry