diff --git a/events.lua b/events.lua
deleted file mode 100644
index 4f2ba31..0000000
--- a/events.lua
+++ /dev/null
@@ -1,44 +0,0 @@
--- 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-hardware/info.xml b/gns430-hardware/info.xml
new file mode 100644
index 0000000..c3746f2
--- /dev/null
+++ b/gns430-hardware/info.xml
@@ -0,0 +1 @@
+GenericGNS430 Hardware3e534a19-1714-4150-b1ec-4f760390ceecChristopher Costa Hardtfalsefalsefalsefalsetrue1110000PERSONALWINDOWSLINUXRASPBERRY_PIANDROIDMACHOME_USE_STANDARD
\ No newline at end of file
diff --git a/gns430-hardware/lib/buttons.lua b/gns430-hardware/lib/buttons.lua
new file mode 100644
index 0000000..c307abd
--- /dev/null
+++ b/gns430-hardware/lib/buttons.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)
+function log(buttonName, config)
+ print(buttonName)
+ print("default hw id: " .. arduino .. config.pin)
+ print("event: " .. config.event)
+ print("- - - - - - - - - - -")
+end
+
+-- add button with one event (press)
+function assign(buttonName, config)
+ local defaultHardwareId = arduino .. config.pin
+ hw_id = user_prop_add_hardware_id("Button " .. tostring(buttonName), defaultHardwareId, tostring(buttonName))
+ hw_button_add(tostring(hw_id), function()
+ event(config.event)
+ end)
+end
+
+-- add button with two events (press/release)
+function assignClr(buttonName, config)
+ local defaultHardwareId = arduino .. config.pin
+ hw_id = user_prop_add_hardware_id("Button " .. tostring(buttonName), defaultHardwareId, tostring(buttonName))
+
+ hw_button_add(tostring(hw_id), function()
+ timer_clear = timer_start(2000, function()
+ event(config.event2)
+ end)
+ end, function()
+ timer_stop(timer_clear)
+ event(config.event)
+ end)
+end
+
+function setupButtons()
+ for buttonName, config in pairs(buttons) do
+ log(buttonName, config)
+ if (buttonName == "CLR") then
+ assignClr(buttonName, config)
+ else
+ assign(buttonName, config)
+ end
+ end
+end
diff --git a/gns430-hardware/lib/encoders.lua b/gns430-hardware/lib/encoders.lua
new file mode 100644
index 0000000..57d099e
--- /dev/null
+++ b/gns430-hardware/lib/encoders.lua
@@ -0,0 +1,45 @@
+
+function logEncoder(knobName, config)
+ print(knobName)
+ print("default hw id A: " .. arduino .. config.pinA)
+ print("default hw id B: " .. arduino .. config.pinB)
+ print("event: " .. config.event)
+ print("- - - - - - - - - - -")
+end
+
+-- assign a string to a integer of encoder direction (0,1)
+function leftRight(direction)
+ return direction == 1 and "_Right" or "_Left"
+end
+
+local default_acceleration = 3
+local default_debounce = 4
+
+-- 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)
+function encoder(knobName, config)
+
+ type = "TYPE_1_DETENT_PER_PULSE"
+
+ local defaultPinA = arduino .. config.pinA
+ local hw_id_pin_a = user_prop_add_hardware_id("Encoder " .. knobName .. " pin A", defaultPinA, knobName .. " pin A")
+
+ local defaultPinB = arduino .. config.pinB
+ local hw_id_pin_b = user_prop_add_hardware_id("Encoder " .. knobName .. " pin B", defaultPinB, knobName .. " pin B")
+
+ hw_dial_add(
+ tostring(hw_id_pin_a),
+ tostring(hw_id_pin_b), type, default_acceleration, default_debounce, function(direction)
+ event(config.event .. leftRight(direction))
+ end)
+end
+
+function setupEncoders()
+ -- Run the four encoders through the assignment function
+ for knobName, config in pairs(knobs) do
+ logEncoder(knobName, config)
+ encoder(knobName, config)
+ end
+end
diff --git a/gns430-hardware/logic.lua b/gns430-hardware/logic.lua
new file mode 100644
index 0000000..d02d56c
--- /dev/null
+++ b/gns430-hardware/logic.lua
@@ -0,0 +1,107 @@
+arduino = "ARDUINO_MEGA2560_B_"
+
+function getHardwareId(pin)
+ arduinoChannel = "B" -- <== Change Arduino Channel here (assigned in air manager setup -> Home -> Flash)
+ return "ARDUINO_MEGA2560_" .. arduinoChannel .. "_" .. pin
+end
+
+function event(id)
+ print(id)
+ fs2020_event(id)
+end
+
+buttons = {
+ -- Left side Buttons
+ COMSWAP = {
+ pin = "D2",
+ event = "H:AS430_COMSWAP_Push"
+ },
+ NAVSWAP = {
+ pin = "D3",
+ event = "H:AS430_NAVSWAP_Push"
+ },
+ -- Lower Buttons
+ CDI = {
+ pin = "D4",
+ event = "TOGGLE_GPS_DRIVES_NAV1"
+ },
+ OBS = {
+ pin = "D5",
+ event = "H:AS430_OBS_Push"
+ },
+ MSG = {
+ pin = "D6",
+ event = "H:AS430_MSG_Push"
+ },
+ FPL = {
+ pin = "D7",
+ event = "H:AS430_FPL_Push"
+ },
+ PROC = {
+ pin = "D8",
+ event = "H:AS430_PROC_Push"
+ },
+ -- Right Side Buttons
+ DCT = {
+ pin = "D9",
+ event = "H:AS430_DirectTo_Push"
+ },
+ MENU = {
+ pin = "D10",
+ event = "H:AS430_MENU_Push"
+ },
+ CLR = {
+ pin = "D11",
+ event = "H:AS430_CLR_Push",
+ event2 = "H:AS430_CLR_Push_Long"
+ },
+ ENT = {
+ pin = "D12",
+ event = "H:AS430_ENT_Push"
+ },
+ -- Zoom Buttons
+ ZOOM = {
+ pin = "D13",
+ event = "H:AS430_RNG_Zoom"
+ },
+ DEZOOM = {
+ pin = "D14",
+ event = "H:AS430_RNG_Dezoom"
+ },
+ -- Knob Push Buttons
+ CVPUSH = {
+ pin = "D15",
+ event = "H:AS430_LeftSmallKnob_Push"
+ },
+ CRSRPUSH = {
+ pin = "D16",
+ event = "H:AS430_RightSmallKnob_Push"
+ }
+}
+
+knobs = {
+ CVBig = {
+ pinA = "D17",
+ pinB = "D18",
+ event = "H:AS430_LeftLargeKnob"
+ },
+ CVSmall = {
+ pinA = "D19",
+ pinB = "D20",
+ event = "H:AS430_LeftSmallKnob"
+ },
+ CRSRBig = {
+ pinA = "D21",
+ pinB = "D22",
+ event = "H:AS430_RightLargeKnob"
+ },
+ CRSRSmall = {
+ pinA = "D23",
+ pinB = "D24",
+ event = "H:AS430_RightSmallKnob"
+ }
+}
+
+-- run the setup
+setupButtons()
+setupEncoders()
diff --git a/gns430-hardware/preview.png b/gns430-hardware/preview.png
new file mode 100644
index 0000000..dce7312
Binary files /dev/null and b/gns430-hardware/preview.png differ
diff --git a/gns430-overlay.lua b/gns430-overlay.lua
deleted file mode 100644
index daeef16..0000000
--- a/gns430-overlay.lua
+++ /dev/null
@@ -1,343 +0,0 @@
--- 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)
diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000..b8b4b2c
--- /dev/null
+++ b/readme.md
@@ -0,0 +1,39 @@
+# 1. Create new temporary instrument
+In Air Manager, navigate to the `create/edit` tab.
+
+1. Click `New+` to create a new instument. Details don't matter as we delete this again later.
+2. Select the new Instrument in the list.
+3. Click "Folder" in the menu and find the folder `OPEN_DIRECTORY`.
+This is where insturments are installed.
+Pin it to the favorites in Explorer for easy access.
+4. You can delete the test instrument.
+
+# 2. Install the GNS430 Instrument
+1. Download this repository
+2. move the gns430-hardware folder into `OPEN_DIRECTORY``
+3. The Instrument is now installed.
+
+# 3. Use the Instrument in a Panel
+1. In AirManager, go to the `home` tab.
+2. Select the panel in the list on the left.
+3. Click `Instument+`in the Ribbon Menu.
+4. Find `GNS430 Hardware` and add it.
+5. Open the instrument list by click the triangle next to the panel in the list.
+6. Select `Generic - GNS430 Hardware`
+7. Scroll down to user properties and select the pins to which the cables were soldered.
+8. Have fun.
+
+# Hints
+## Arduino Channels
+Arduinos have assigned channels. This channel is selected whe flashing the arduino (Flash Menu).
+In Step #3, Channel 0 Corresponds to Channel A, 1 to B, 2 to C, and so forth.
+
+## Available Pins
+Do not use Pins D0 and D1, as they are used for serial communication between airmanager and the arduino.
+You can use Pins D2 and upwards.
+
+## Default assignment
+The Buttons and Encoders have a default assignment, which is loaded when adding the instrument.
+Changes to the selection are stored until the instrument is removed from the panel.
+It will reset to the default when the instrument is added again.
+