THATCHI,
I see your prototype, but am still not understanding the logic for inputs with encoders. this is the LUA scripst I am using:
--SPD
ipc.writeSW(0x66C0, ipc.readLvar("L:AB_AP_Speed_Select"))
ipc.writeSW(0x66C6, ipc.readLvar("L:AB_AP_Mach_Select")))*100)
--HDG
ipc.writeUW(0x66C8, ipc.readLvar("L:AB_AP_HDG_Select")*182.0444444444444)
ipc.writeUW(0x66D1, ipc.readLvar("Autopilot_TRK_set")*182)
--ALT
ipc.writeUW(0x66D5, ipc.readLvar("L:AB_AP_ALT_Select"))
--VS
ipc.writeSW(0x66C2,ipc.readLvar("L:AB_AP_Vs_Select2"))
ipc.writeSW(0x66C4,ipc.readLvar("L:AB_AP_FPA_Select2")*10)
--HDG/TRK
ipc.writeSW(0x66CC,ipc.readLvar("AB_AP_HDGTRK"))
--SPD/MACH
ipc.writeSW(0x66CE,ipc.readLvar("AB_AP_SPDMACH"))
while 1 do
--HDG/TRK
HdgTrkLvar=ipc.readLvar("AB_AP_HDGTRK")
HdgTrkOffset=ipc.readSW(0x66CC)
if HdgTrkOffset~= HdgTrkLvar then
--ipc.writeLvar("AB_AP_HDGTRK",HdgTrkOffset)
ipc.writeSW(0x66CC,ipc.readLvar("AB_AP_HDGTRK"))
end
--SPD/MACH
SpdMachLvar=ipc.readLvar("AB_AP_SPDMACH")
SpdMachOffset=ipc.readSW(0x66CE)
if SpdMachOffset ~= SpdMachLvar then
--ipc.writeLvar("AB_AP_SPDMACH",SpdMachOffset)
ipc.writeSW(0x66CE,ipc.readLvar("AB_AP_SPDMACH"))
end
--
SPDmode_cur = ipc.readLvar("L:AB_AP_SPDmode_set") --0x66D9
HDGmode_cur = ipc.readLvar("L:AB_AP_HDGmode_set") -- 0x66DA
-- Selected / Managed Display
if SPDmode_cur ~= SPDmode_pre then
SPDmode_pre = SPDmode_cur
if SPDmode_cur == 1 then
ipc.writeUB(0x66D9,SPDmode_cur) --managed
else
ipc.writeUB(0x66D9,SPDmode_cur) --selected
end
end
if HDGmode_cur ~= HDGmode_pre then
HDGmode_pre = HDGmode_cur
if HDGmode_cur == 1 then
ipc.writeUB(0x66DA,HDGmode_cur) --managed
else
ipc.writeUB(0x66DA,HDGmode_cur) --selected
end
end
ipc.sleep(20)
--SPD
SpdMachVar = ipc.readLvar("AB_AP_SPDMACH")
if SpdMachVar == 0 then
SpdLvar = ipc.readLvar("L:AB_AP_Speed_Select")
SpdOffset=ipc.readSW(0x66C0)
if SpdOffset > 399 then
ipc.writeSW(0x66C0, 399)
elseif SpdOffset < 100 then
ipc.writeSW(0x66C0, 100)
end
if SpdOffset~=SpdLvar then
ipc.writeLvar("L:AB_AP_Speed_Select",SpdOffset)
end
elseif SpdMachVar == 1 then
--MachLvar = ipc.readLvar("L:AB_AP_Mach_Select")*100
MachLvar= tonumber(string.format("%.2f", ipc.readLvar("L:AB_AP_Mach_Select")))
MachLvar=MachLvar*100
MachOffset=ipc.readSW(0x66C6)
if MachOffset < 10 then
ipc.writeSW(0x66C6, 10)
elseif MachOffset > 84 then
ipc.writeSW(0x66C6, 84)
end
if MachOffset ~= MachLvar then
ipc.writeLvar("L:AB_AP_Mach_Select",MachOffset/100)
end
end
ipc.sleep(20)
--HDG
AB_hdgtrk = ipc.readLvar("L:AB_AP_HDGTRK")
HdgLvar=ipc.readLvar("L:AB_AP_HDG_Select")*182.0444444444444
HdgOffset = ipc.readUW(0x66C8)
TrkLvar=ipc.readLvar("Autopilot_TRK_set")*182.0444444444444
TrkOffset = ipc.readUW(0x66D1)
if AB_hdgtrk == 0 then
if HdgOffset ~= HdgLvar then
currentValue =(ipc.readUW(0x66C8))*0.0054931640625
ipc.writeLvar("L:AB_AP_HDG_Select", currentValue)
end
else
if TrkOffset ~= TrkLvar then
currentValue = ipc.readUW(0x66D1)*0.0054931640625
ipc.writeLvar("Autopilot_TRK_set", currentValue)
end
end
ipc.sleep(20)
--ALT
AltLvar=ipc.readLvar("L:AB_AP_ALT_Select")
AltOffset=ipc.readUW(0x66D5)
if AltOffset < 100 then
ipc.writeUW(0x66D5,100)
elseif AltOffset >49000 and AltOffset < 55000 then
ipc.writeUW(0x66D5,49000)
elseif AltOffset > 55000 then
ipc.writeUW(0x66D5,100)
end
if AltOffset~=AltLvar then
ipc.writeLvar("L:AB_AP_ALT_Select",AltOffset)
end
ipc.sleep(20)
--VS
if ipc.readLvar("AB_AP_HDGTRK") == 0 then
VsHdgLvar=ipc.readLvar("L:AB_AP_Vs_Select2")
VsHdgOffset=ipc.readSW(0x66C2)
if VsHdgOffset < -60 then
ipc.writeSW(0x66C2,-60)
elseif VsHdgOffset > 60 then
ipc.writeSW(0x66C2,60)
end
if VsHdgOffset ~=VsHdgLvar then
ipc.writeLvar("L:AB_AP_Vs_Select2", VsHdgOffset)
end
else
VsTrkLvar=ipc.readLvar("L:AB_AP_FPA_Select2")
VsTrkOffset=ipc.readSW(0x66C4)/10
if VsTrkOffset < -9.5 then
ipc.writeSW(0x66C4,-95)
elseif VsTrkOffset > 9.5 then
ipc.writeSW(0x66C4,95)
end
if VsTrkOffset ~= VsTrkLvar then
ipc.writeLvar("L:AB_AP_FPA_Select2", VsTrkOffset)
end
end
if SpdOffset~=SpdLvar then
ipc.writeLvar("L:AB_AP_Speed_Select",SpdOffset)
end
elseif SpdMachVar == 1 then
--MachLvar = ipc.readLvar("L:AB_AP_Mach_Select")*100
MachLvar= tonumber(string.format("%.2f", ipc.readLvar("L:AB_AP_Mach_Select")))
MachLvar=MachLvar*100
MachOffset=ipc.readSW(0x66C6)
if MachOffset < 10 then
ipc.writeSW(0x66C6, 10)
elseif MachOffset > 84 then
ipc.writeSW(0x66C6, 84)
end
if MachOffset ~= MachLvar then
ipc.writeLvar("L:AB_AP_Mach_Select",MachOffset/100)
end
end
ipc.sleep(20)
--HDG
AB_hdgtrk = ipc.readLvar("L:AB_AP_HDGTRK")
HdgLvar=ipc.readLvar("L:AB_AP_HDG_Select")*182.0444444444444
HdgOffset = ipc.readUW(0x66C8)
TrkLvar=ipc.readLvar("Autopilot_TRK_set")*182.0444444444444
TrkOffset = ipc.readUW(0x66D1)
if AB_hdgtrk == 0 then
if HdgOffset ~= HdgLvar then
currentValue =(ipc.readUW(0x66C8))*0.0054931640625
ipc.writeLvar("L:AB_AP_HDG_Select", currentValue)
end
else
if TrkOffset ~= TrkLvar then
currentValue = ipc.readUW(0x66D1)*0.0054931640625
ipc.writeLvar("Autopilot_TRK_set", currentValue)
end
end
ipc.sleep(20)
--ALT
AltLvar=ipc.readLvar("L:AB_AP_ALT_Select")
AltOffset=ipc.readUW(0x66D5)
if AltOffset < 100 then
ipc.writeUW(0x66D5,100)
elseif AltOffset >49000 and AltOffset < 55000 then
ipc.writeUW(0x66D5,49000)
elseif AltOffset > 55000 then
ipc.writeUW(0x66D5,100)
end
if AltOffset~=AltLvar then
ipc.writeLvar("L:AB_AP_ALT_Select",AltOffset)
end
ipc.sleep(20)
--VS
if ipc.readLvar("AB_AP_HDGTRK") == 0 then
VsHdgLvar=ipc.readLvar("L:AB_AP_Vs_Select2")
VsHdgOffset=ipc.readSW(0x66C2)
if VsHdgOffset < -60 then
ipc.writeSW(0x66C2,-60)
elseif VsHdgOffset > 60 then
ipc.writeSW(0x66C2,60)
end
if VsHdgOffset ~=VsHdgLvar then
ipc.writeLvar("L:AB_AP_Vs_Select2", VsHdgOffset)
end
else
VsTrkLvar=ipc.readLvar("L:AB_AP_FPA_Select2")
VsTrkOffset=ipc.readSW(0x66C4)/10
if VsTrkOffset < -9.5 then
ipc.writeSW(0x66C4,-95)
elseif VsTrkOffset > 9.5 then
ipc.writeSW(0x66C4,95)
end
if VsTrkOffset ~= VsTrkLvar then
ipc.writeLvar("L:AB_AP_FPA_Select2", VsTrkOffset)
end
end
end
so in MF a created an input:
-action type: FSUIPC offset.
-load preset: in blank.
-base setting: +offsset: 0x66C0
+value type: Int +syse in bytes: 2
+mask value with: 0xFFFF ... bcd mode: no checked
-more options: set value: on left side: $-1 on right side: $+1
in FSUIPC, I set a key to start the lua, but nothings happens, I just need to get the first one input/encoder to start with so I can understand the logic.
thanks
emmanuel