Bonjour
Christian,
je vais tenter une explication mais je serai certainement maladroit aussi, tous, n'hésitez pas à me corriger...
Lorsque une info n'est contenue que dans un seul bit (0 ou 1) il est tentant de la regrouper avec d'autres infos de même nature ( et de même taille) dans un octet pour faciliter son exploitation, avec par exemple :
les différents feux/lumières d'un avion: Strobes éteints ou allumés...0 ou 1, phare d'atterrissage éteint ou allumé...0 ou 1 etc...
La variable P3D "LIGHT ON STATES" est construite ainsi: son bit de poid le plus faible représente les "Nav lights", le second le Beacon etc.. jusqu'au dernier les "Cabin lights"
Si je ne m’intéresse qu'aux feux de Nav, à l'exclusion des autres, je dois appliquer un masque pour filtrer les bits qui ne m’intéressent pas et ne garder que celui le plus à droite dans la séquence. On applique alors un "&" logique à la variable LIGHT ON STATES avec la valeur 0x0001 et son résultat devient alors 0 ou 1 selon que les Navs soient allumés ou éteints.
Si je veux savoir comment sont les Cabin Lights, je fais la même manip avec la valeur 0x0200 et consulte la réponse (0 ou 512)...
Pour revenir à Air manager, je te suggère de t'abonner à la variable qui t'intéresse sous forme
"number" puis d'effectuer l'opération de masque pour enfin connaitre l'état de chaque bit...
Afin d'illustrer je te livre ci-dessous tel quel un script lua pour des afficheurs liés aux GPS Garmin 530 de RXP.
Je m'abonne à la variable locale
"L:rxp.gps.discrete_out" que j'utilise ensuite dans la fonction
"set_nav_source_fsx" avec différents masques:
0x00080000,
0x00080004,
0x00080010 etc..
Ais-je pu t'apporter une réponse utile ?
Bon courage
François
- Code: Tout sélectionner
img_add_fullscreen("nav_gps_annunciator_background.png")
img_vloc_light = img_add("vloc_light.png", 0, 0, 150, 90)
img_gps_light = img_add("gps_light.png", 0, 90, 150, 90)
img_term_light = img_add("term_light.png", 150, 0, 150, 90)
img_apr_light = img_add("apr_light.png", 150, 90, 150, 90)
img_wpt_light = img_add("wpt_light.png", 300, 0, 150, 90)
img_msg_light = img_add("msg_light.png", 300, 90, 150, 90)
img_intg_light = img_add("intg_light.png", 450, 90, 150, 90)
visible(img_vloc_light, false)
visible(img_gps_light, false)
visible(img_term_light, false)
visible(img_apr_light, false)
visible(img_wpt_light, false)
visible(img_msg_light, false)
visible(img_intg_light, false)
local test = 0
local state_test = false
p_mask = img_add_fullscreen("Bigdimoverlay_Emilie.png")
---------------------------------------------
-- Functions --
---------------------------------------------
opacity (p_mask, 0)
function dim_button_pressed()
opacity (p_mask, 1)
end
function dim_button_released()
opacity (p_mask, 0)
end
function test_button_pressed()
test = 1
print("bouton D30 press")
end
function test_button_released()
test = 0
print("bouton D30 released")
end
-- Function for FSX and Prepar3D
function set_nav_source_fsx(discrete_output, bus_volts)
power = bus_volts > 16
test_bit_instr_tst = math.floor( discrete_output & 0x00080000 )
print ("test_bit_instr_tst", test_bit_instr_tst)
if test_bit_instr_tst == 524288 or test == 1 then state_test = true else state_test = false
end
if state_test == true then
visible(img_vloc_light, power)
visible(img_gps_light, power)
visible(img_term_light, power)
visible(img_apr_light, power)
visible(img_wpt_light, power)
visible(img_msg_light, power)
visible(img_intg_light, power)
else
-- GPS source selected (if not vloc displayed)
test_bit_gps = math.floor( discrete_output & 0x00080004 )
-- print ("test_bit_gps", test_bit_gps)
if test_bit_gps == 4 then state_gps = true else state_gps = false
end
visible(img_vloc_light, not state_gps and power)
visible(img_gps_light, state_gps and power)
-- TERM displayed
test_bit_term = math.floor( discrete_output & 0x00080010 )
-- print ("test_bit_term", test_bit_term)
if test_bit_term == 32 then state_term = true else state_term = false
end
visible(img_term_light, state_term and power)
-- APR displayed
test_bit_apr = math.floor( discrete_output & 0x00080200 )
--print ("test_bit_apr", test_bit_apr)
if test_bit_apr == 128 then state_apr = true else state_apr = false
end
visible(img_apr_light, state_apr and power)
-- WPT displayed
test_bit_wpt = math.floor( discrete_output & 0x00080008 )
-- print ("test_bit_wpt", test_bit_wpt)
if test_bit_wpt == 16 then state_wpt = true else state_wpt = false
end
visible(img_wpt_light, state_wpt and power)
-- MSG displayed
test_bit_msg = math.floor( discrete_output & 0x00080100 )
--print ("test_bit_msg", test_bit_msg)
if test_bit_msg == 256 then state_msg = true else state_msg = false
end
visible(img_msg_light, state_msg and power)
-- INTG displayed
test_bit_intg = math.floor( discrete_output & 0x00080080 )
-- print ("test_bit_intg", test_bit_intg)
if test_bit_intg == 64 then state_intg = true else state_intg = false
end
visible(img_intg_light, state_intg and power)
end
end
fsx_variable_subscribe("L:rxp.gps.discrete_out", "number",
"ELECTRICAL MAIN BUS VOLTAGE", "Volts", set_nav_source_fsx)
-- Button function for GPS NAV switch
function button_GPS_NAV_SWITCH_pressed()
fsx_event("TOGGLE_GPS_DRIVES_NAV1")
end
--Button Hardware section
--++++++++++++++++++++++++++++--
--Xnn
hw_button_add("Button_GPS_NAV_SWITCH", button_GPS_NAV_SWITCH_pressed)
hw_button_add("Dim button", dim_button_pressed, dim_button_released)
hw_button_add("Test button", test_button_pressed, test_button_released)