6 FSUIPC och LUA
FSUIPC är ett alldeles oumbärligt program när man sysslar med cockpitbygge, inställning av yoke och throttlequadrant och mycket annat. Ingen har nog användning för allt i FSUIPC men alla har användning för något.
För att kunna använda FSUIPC till detta krävs betalversionen av FSUIPC. Om man börjar med att bygga ut flygsimulatorn med flera knappar av olika slag så är FSUIPC oumbärlig. Betalversionen har en hel massa andra funktioner också. Ta först hem gratisversionen, som förresten är densamma som betalversionen. För att få betalversionen köper man ett registreringsnummer.
FSUIPC finns på Peter Downson’s webbsite.
Betalversionen finns på SimMarket
När FSUIPC har installerats så finns en dokumentfolder med flera pdffiler, både för FSUIPC och för LUA. LUA är integrerat med FSUIPC men måste programmeras för sig.
HIDmacros kan sända och läsa från FSUIPC. Detta är det enda sättet om man vill använda HIDmacros i hop med FS9. På mitt tangent bord har jag en funktion som går via FSUIPC och LUA till FSX.
På ett av mina flygplan CL215 finns en funktion på en varningstablå. Den skall återställas strax efter att man börjat starten. Det går endast med musen. Det finns alltså ingen färdig event i SimConnect. Det användes lokala variabler i xml-gaugen för detta. För att få reda på vilken variabel det är och vad den skall sättas till så finns det en tutorial på Simflight för detta.
Då fann jag att det är variabeln ”L:MasterCaution” och den skall sättas till ’0’ (noll).
Detta görs genom att programmera LUA.
LUA
För att programmera LUA krävs en del programmeringskunskap. Här skall jag visa hur jag har gjort för just mitt behov. Har letat och läst, varit inne på forum och till slut har jag fått ihop det. Det kan nu vara lämpligt att ha tillgång till all dokumentation som finns till FSUIPC och LUA. FSUIPC_SDK bör också tas hem, där finns en hel del information.
LUAkoden ligger i en fil som heter ipcReady.lua och den ligger i Modulesfoldern, där även hela installationen av FSUIPC ligger. Hur och varför det är och skall vara så får Du läsa om i pdf dokumentationen som finns med både för FSUIPC och LUA. Jag varken kan eller orkar att förklara alla detaljer runt denna programmering.
Koden i ipcReady.lua ser ut som följer:
function mastcau(offset, val) if val == 1 then ipc.writeLvar("L:MasterCaution", 0) ipc.writeSW(0x66C0,-1 ) end end ipc.writeSW(0x66C0,-1) event.offset(0x66C0, "SW", "mastcau")
Koden består av en funktion och två enkelrader. Funktionen är deklarerad före enkelraderna och det är viktigt att det görs så.
Vi använder något som kan kallas offsetprogrammering. Vilka offsetvärden man kan använda framgår av dokumentet: FSUIPC4 Offsets Status.pdf i SDK-n
Offset 66C0 tillhör de fria offsetadresserna som kan användas fritt. 66C0 är ett hexadecimalt tal och detta måste anges. I LUA görs det genom att 0x sätts framför talet. I HIDMacro script skall &H sättas framför. Här är det just dessa prefix som skall användas. Andra språk kan ha andra prefix för att indikera hexdecimala tal.
Den första enkelraden : ipc.writeSW(0x66C0,-1) sätter alltså 66C0 till värdet -1. Ändrat till 0 i senare versioner.
Att vi kan använda -1 som är en signed variabel beror på att ipc.writeSW just deklarerat variablen 66C0 till signed. Det är SW som bestämmer att det är en signed variabel.
LUAkommandot ipc.writeSW() och alla andra LUAkommandon finns beskrivna i dokumentet: FSUIPC Lua Library.pdf
Nästa rad: event.offset(0x66C0, ”SW”, ”mastcau”) ligger och känner av variabeln 66C0. Så fort den ändrar värde utföres den funktionen som står sist i parantesen. Det är funktionen ’mastcau’ och den är deklarerad först i skriptet. Man måste i detta kommando ange att variablen är en SW
Offset 0x66C0 kommer att ändra när HIDMacroskripet:
HIDMacros.SetFSUIPCInt &H66C0, 2, 1 exekveras.
Och det gör det när tangent 219 trycks ned, det är accenttangenten precis till vänster om backsteg. HIDMacros.SetFSUIPCInt och flera andra kommandon finns beskrivna på HIDMacros webbsite under fliken ’Scripting’.
Kommando visar att vi skickar variablen 1 till offset 66C0 och det är två bytes i denna variabel.
Då kommer funktionen mastcau att köras. Variablen ’val’ i funktionen kommer då att ha värdet 1 som vi sände från HIDMacros.
Det första som görs i funktionen är att testa om val är lika med 1. Är det så så utföres kommandona i denna del. DVS vi skriver 0 i variablen L:MasterCaution och därefter sätter vi tillbaka offset 66C0 till -1 så vi kan upprepa samma sak igen om så önskas.
Om gaugen där L:MasterCaution finns är redo att acceptera ett nytt värde så blir varningstavlan återställd. Är gaugen inte det så händer inget. Då får man försöka lite senare när tryck och annat har kommit till rätta värden.
Har använt offsetprogrammering till en del andra funktioner också. Allt finns i ipcReady.lua och ipcReady.lua.org filer i zip-filen, kap10. Skillnaden mellan .lua och .lua.org är att i lua.org är allt borta som har med lagring att göra. Lagringen var bra att ha vid programmering och felsökning.