commit 9b2c46c776bfb05ff9f1846acc1ae046fd199c95 Author: Christopher Costa Hardt Date: Sun Dec 25 13:32:26 2022 +0100 init diff --git a/events.lua b/events.lua new file mode 100644 index 0000000..4f2ba31 --- /dev/null +++ b/events.lua @@ -0,0 +1,44 @@ +-- How to add Buttons: +-- https://siminnovations.com/wiki/index.php?title=Hw_button_add +-- hw_button_add(hw_id, pressed_callback, released_callback) + +-- How to select the arduino: +-- https://siminnovations.com/wiki/index.php?title=Hardware_id_list +-- ARDUINO_MEGA2560_B_D0 + +-- How to add Rotary Encoders: +-- https://siminnovations.com/wiki/index.php?title=Rotary_encoder_connection_tutorial +-- https://siminnovations.com/wiki/index.php?title=Hw_dial_add +-- hw_dial_add(hw_id_a, hw_id_b, callback) + +fs2020_event("H:AS430_COMSWAP_Push") +fs2020_event("H:AS430_NAVSWAP_Push") + +fs2020_event("TOGGLE_GPS_DRIVES_NAV1") +fs2020_event("H:AS430_OBS_Push") +fs2020_event("H:AS430_MSG_Push") +fs2020_event("H:AS430_FPL_Push") +fs2020_event("H:AS430_PROC_Push") + +fs2020_event("H:AS430_RNG_Dezoom") +fs2020_event("H:AS430_RNG_Zoom") + +fs2020_event("H:AS430_DirectTo_Push") +fs2020_event("H:AS430_MENU_Push") +fs2020_event("H:AS430_CLR_Push_Long") +fs2020_event("H:AS430_CLR_Push") +fs2020_event("H:AS430_ENT_Push") + +fs2020_event("H:AS430_LeftLargeKnob_Right") +fs2020_event("H:AS430_LeftLargeKnob_Left") + +fs2020_event("H:AS430_LeftSmallKnob_Right") +fs2020_event("H:AS430_LeftSmallKnob_Left") +fs2020_event("H:AS430_LeftSmallKnob_Push") + +fs2020_event("H:AS430_RightLargeKnob_Right") +fs2020_event("H:AS430_RightLargeKnob_Left") + +fs2020_event("H:AS430_RightSmallKnob_Right") +fs2020_event("H:AS430_RightSmallKnob_Left") +fs2020_event("H:AS430_RightSmallKnob_Push") diff --git a/gns430-overlay.lua b/gns430-overlay.lua new file mode 100644 index 0000000..daeef16 --- /dev/null +++ b/gns430-overlay.lua @@ -0,0 +1,343 @@ +-- Garmin GNS430 overlay for X-Plane -- +-- Message Raspberry Pi and tablet +if instrument_prop("PLATFORM") == "RASPBERRY_PI" or instrument_prop("PLATFORM") == "ANDROID" or instrument_prop("PLATFORM") == "IPAD" then + canvas_add(195, 40, 437, 239, function() + _rect(0,0,437,239) + _fill("black") + end) + canv_message = canvas_add(195, 40, 437, 239, function() + _rect(0,0,437,239) + _fill("blue") + _txt("THIS X-PLANE 11 AND FS2020 GPS OVERLAY", "font:roboto_bold.ttf; size:26; color: white; halign:center;", 218, 60) + _txt("WORKS ON THE DESKTOP ONLY", "font:roboto_bold.ttf; size:26; color: white; halign:center;", 218, 90) + _txt("BUTTONS AND DIALS STILL WORK", "font:roboto_bold.ttf; size:26; color: white; halign:center;", 218, 120) + _txt("CLICK HERE TO HIDE THIS MESSAGE", "font:roboto_bold.ttf; size:26; color: white; halign:center;", 218, 150) + end) + butn_hide = button_add(nil, nil, 195, 40, 437, 239, function() + visible(canv_message, false) + visible(butn_hide, false) + end) +end +-- Message desktop +pers_msg_read = persist_add("msg_read", false) +if (instrument_prop("PLATFORM") == "WINDOWS" or instrument_prop("PLATFORM") == "MAC" or instrument_prop("PLATFORM") == "LINUX") and not persist_get(pers_msg_read) then + canv_message = canvas_add(195, 40, 437, 239, function() + _rect(0,0,437,239) + _fill("blue") + _txt("THIS IS AN OVERLAY ONLY", "font:roboto_bold.ttf; size:26; color: white; halign:center;", 218, 60) + _txt("IT REQUIRES THE FLIGHTSIM GPS POP OUT", "font:roboto_bold.ttf; size:26; color: white; halign:center;", 218, 90) + _txt("SEE OUR WIKI FOR MORE INFORMATION", "font:roboto_bold.ttf; size:26; color: white; halign:center;", 218, 120) + _txt("CLICK HERE TO HIDE THIS MESSAGE", "font:roboto_bold.ttf; size:26; color: white; halign:center;", 218, 150) + end) + butn_hide = button_add(nil, nil, 195, 40, 437, 239, function() + visible(canv_message, false) + visible(butn_hide, false) + persist_put(pers_msg_read, true) + end) +end + +img_add_fullscreen("Garmin_430_2d.png") + +gps_no = user_prop_add_enum("Selected GPS unit","GPS 1,GPS 2","GPS 2","Select GPS Unit to control") +rxp_ctrl = user_prop_add_enum("Type","Default,Reality XP","Default","For X-Plane select default or Reality XP") +local g_unit = fif(user_prop_get(gps_no)=="GPS 1", 1, 2) +local g_unit_fsx = fif(user_prop_get(gps_no)=="GPS 1", 0, 8) +local g_ctrl = fif(user_prop_get(rxp_ctrl)=="Default", 1, 2) + +--volume dials +pwr_knob = dial_add("pwr_off.png", 50,36,38,38,function (position) + if position == 1 then + fsx_event("GPS_POWER_BUTTON", 4 + g_unit_fsx) + elseif position == -1 then + fsx_event("GPS_POWER_BUTTON", 2 + g_unit_fsx) + end +end) + +vvol_knob = dial_add("vvol.png", 50,109,38,38,function (position) + if position == 1 then + fsx_event("GPS_ACTIVATE_BUTTON", 4 + g_unit_fsx) + elseif position == -1 then + fsx_event("GPS_ACTIVATE_BUTTON", 2 + g_unit_fsx) + end +end) + +-- Buttons -- +button_com = button_add(nil, nil, 55,41,28,28,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_cvol") + else + xpl_command("RXP/GNS/PWR_PUSH_" .. g_unit) + end +end) + +button_vlc = button_add(nil, nil, 55,114,28,28,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_vvol") + else + xpl_command("RXP/GNS/VOL_PUSH_" .. g_unit) + end +end) + +button_swc = button_add(nil, nil, 135,50,38,60,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_com_ff") + else + xpl_command("RXP/GNS/CFLP_" .. g_unit) + end + fs2020_event("H:AS430_COMSWAP_Push") + + if g_unit_fsx == 0 then + fsx_event("COM_STBY_RADIO_SWAP") + elseif g_unit_fsx == 8 then + fsx_event("COM2_RADIO_SWAP") + end +end) + +button_swn = button_add(nil, nil, 135,133,38,60,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_nav_ff") + else + xpl_command("RXP/GNS/VFLP_" .. g_unit) + end + fs2020_event("H:AS430_NAVSWAP_Push") + + if g_unit_fsx == 0 then + fsx_event("NAV1_RADIO_SWAP") + elseif g_unit_fsx == 8 then + fsx_event("NAV2_RADIO_SWAP") + end +end) + +button_cdi = button_add(nil, nil, 204,290,58,34,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_cdi") + else + xpl_command("RXP/GNS/CDI_" .. g_unit) + end + fs2020_event("TOGGLE_GPS_DRIVES_NAV1") + fsx_event("GPS_NEAREST_BUTTON", g_unit_fsx) +end) + +button_obs = button_add(nil, nil, 295,290,58,34,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_obs") + else + xpl_command("RXP/GNS/OBS_" .. g_unit) + end + fs2020_event("H:AS430_OBS_Push") + fsx_event("GPS_OBS_BUTTON", g_unit_fsx) +end) + +button_msg = button_add(nil, nil, 384,290,58,34,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_msg") + else + xpl_command("RXP/GNS/MSG_" .. g_unit) + end + fs2020_event("H:AS430_MSG_Push") + fsx_event("GPS_MSG_BUTTON", g_unit_fsx) +end) + +button_fpl = button_add(nil, nil, 476,290,58,34,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_fpl") + else + xpl_command("RXP/GNS/FPL_" .. g_unit) + end + fs2020_event("H:AS430_FPL_Push") + fsx_event("GPS_FLIGHTPLAN_BUTTON", g_unit_fsx) +end) + +button_prc = button_add(nil, nil, 565,290,58,34,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_proc") + else + xpl_command("RXP/GNS/PROC_" .. g_unit) + end + fs2020_event("H:AS430_PROC_Push") + fsx_event("GPS_PROCEDURE_BUTTON", g_unit_fsx) +end) + +button_rup = button_add(nil, nil, 653,30,64,40,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_zoom_out") + else + xpl_command("RXP/GNS/RUP_" .. g_unit) + end + fs2020_event("H:AS430_RNG_Dezoom") + fsx_event("GPS_ZOOMOUT_BUTTON", g_unit_fsx) +end) + +button_rdn = button_add(nil, nil, 717,30,64,40,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_zoom_in") + else + xpl_command("RXP/GNS/RDN_" .. g_unit) + end + fs2020_event("H:AS430_RNG_Zoom") + fsx_event("GPS_ZOOMIN_BUTTON", g_unit_fsx) +end) + +button_dir = button_add(nil, nil, 652,80,58,38,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_direct") + else + xpl_command("RXP/GNS/DTO_" .. g_unit) + end + fs2020_event("H:AS430_DirectTo_Push") + fsx_event("GPS_DIRECTTO_BUTTON", g_unit_fsx) +end) + +button_men = button_add(nil, nil, 725,80,58,38,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_menu") + else + xpl_command("RXP/GNS/MNU_" .. g_unit) + end + fs2020_event("H:AS430_MENU_Push") + fsx_event("GPS_MENU_BUTTON", g_unit_fsx) +end) + +function callback_clr_down() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_clr", 1) + else + xpl_command("RXP/GNS/CLR_" .. g_unit, 1) + end + timer_clear = timer_start(2000, function() + fs2020_event("H:AS430_CLR_Push_Long") + fsx_event("GPS_CLEAR_ALL_BUTTON", g_unit_fsx) + end) +end +function callback_clr_up() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_clr", 0) + else + xpl_command("RXP/GNS/CLR_" .. g_unit, 0) + end + if timer_running(timer_clear) then + timer_stop(timer_clear) + fs2020_event("H:AS430_CLR_Push") + fsx_event("GPS_CLEAR_BUTTON", g_unit_fsx) + end +end + +button_clr = button_add(nil, nil, 652,130,58,38,callback_clr_down,callback_clr_up) + +button_ent = button_add(nil, nil, 725,130,58,38,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_ent") + else + xpl_command("RXP/GNS/ENT_" .. g_unit) + end + fs2020_event("H:AS430_ENT_Push") + fsx_event("GPS_ENTER_BUTTON", g_unit_fsx) +end) + +-- Dial PUSH C/V +dial_cv_big = dial_add(nil, 2,200,130,130,function(direction) + if direction == 1 then + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_coarse_up") + else + xpl_command("RXP/GNS/COM_OUTR_CW_" .. g_unit) + end + fs2020_event("H:AS430_LeftLargeKnob_Right") + fsx_event("GPS_BUTTON2", g_unit_fsx) + elseif direction == -1 then + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_coarse_down") + else + xpl_command("RXP/GNS/COM_OUTR_CCW_" .. g_unit) + end + fs2020_event("H:AS430_LeftLargeKnob_Left") + fsx_event("GPS_BUTTON3", g_unit_fsx) + end +end) + +dial_cv_sml = dial_add(nil, 28,228,78,78,function(direction) + if direction == 1 then + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_fine_up") + else + xpl_command("RXP/GNS/COM_INNR_CW_" .. g_unit) + end + fs2020_event("H:AS430_LeftSmallKnob_Right") + fsx_event("GPS_BUTTON4", g_unit_fsx) + elseif direction == -1 then + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_fine_down") + else + xpl_command("RXP/GNS/COM_INNR_CCW_" .. g_unit) + end + fs2020_event("H:AS430_LeftSmallKnob_Left") + fsx_event("GPS_BUTTON5", g_unit_fsx) + end +end) + +mouse_setting(dial_cv_sml, "CURSOR_LEFT", "ctr_cursor_ccw.png") +mouse_setting(dial_cv_sml, "CURSOR_RIGHT", "ctr_cursor_cw.png") + +button_pcv = button_add(nil, nil, 47,247,40,40,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_nav_com_tog") + else + xpl_command("RXP/GNS/COM_PUSH_" .. g_unit) + end + fs2020_event("H:AS430_LeftSmallKnob_Push") + fsx_event("GPS_BUTTON1", g_unit_fsx) +end) + +-- Dial PUSH CRSR +dial_cr_big = dial_add(nil, 668,196,130,130,function(direction) + if direction == 1 then + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_chapter_up") + else + xpl_command("RXP/GNS/GPS_OUTR_CW_" .. g_unit) + end + fs2020_event("H:AS430_RightLargeKnob_Right") + fsx_event("GPS_GROUP_KNOB_INC", g_unit_fsx) + elseif direction == -1 then + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_chapter_dn") + else + xpl_command("RXP/GNS/GPS_OUTR_CCW_" .. g_unit) + end + fs2020_event("H:AS430_RightLargeKnob_Left") + fsx_event("GPS_GROUP_KNOB_DEC", g_unit_fsx) + end +end) + +dial_cr_sml = dial_add(nil, 694,224,78,78,function(direction) + if direction == 1 then + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_page_up") + else + xpl_command("RXP/GNS/GPS_INNR_CW_" .. g_unit) + end + fs2020_event("H:AS430_RightSmallKnob_Right") + fsx_event("GPS_PAGE_KNOB_INC", g_unit_fsx) + elseif direction == -1 then + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_page_dn") + else + xpl_command("RXP/GNS/GPS_INNR_CCW_" .. g_unit) + end + fs2020_event("H:AS430_RightSmallKnob_Left") + fsx_event("GPS_PAGE_KNOB_DEC", g_unit_fsx) + end +end) + +mouse_setting(dial_cr_sml, "CURSOR_LEFT", "ctr_cursor_ccw.png") +mouse_setting(dial_cr_sml, "CURSOR_RIGHT", "ctr_cursor_cw.png") + +button_pcr = button_add(nil, nil, 713,243,40,40,function() + if g_ctrl == 1 then + xpl_command("sim/GPS/g430n" .. g_unit .. "_cursor") + else + xpl_command("RXP/GNS/GPS_PUSH_" .. g_unit) + end + fs2020_event("H:AS430_RightSmallKnob_Push") + fsx_event("GPS_CURSOR_BUTTON", g_unit_fsx) +end)