From 6ea53840c9cb9b99c41fbb4d87a1acac8c0889e5 Mon Sep 17 00:00:00 2001 From: Hugues Hiegel Date: Fri, 1 Mar 2013 10:19:54 +0100 Subject: SLIMaxMgr III beta --- scripts/osp.lua | 317 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 313 insertions(+), 4 deletions(-) (limited to 'scripts/osp.lua') diff --git a/scripts/osp.lua b/scripts/osp.lua index 03cea73..b5ff08c 100755 --- a/scripts/osp.lua +++ b/scripts/osp.lua @@ -1,7 +1,7 @@ --- SLIMax Mgr Lua Script v2.1 +-- SLIMax Mgr Lua Script v3 -- Copyright (c)2012-2013 by Zappadoc - All Rights Reserved. --- Use this script to build all Optimal ShiftPoints methods (OSP) --- last change by Zappadoc - 2012-12-17 +-- this script builds all Optimal ShiftPoints methods (OSP) +-- last change by Zappadoc - 2013-02 function SetOSPFeedback(state) if mOSPLED1 > 6 then @@ -148,7 +148,316 @@ function ospMethodEvent(idx) end else -- bypass (give control to manager) - return 0 + return 1 + end + -- timebase + if GetTicks() > mOldOSPTickCount then + mOldOSPTickCount = GetTicks() + 10 + end + + return 1 +end + + +-- G27 Methods Event +function ospG27MethodEvent(idx) + mOSPMethod = idx + -- OSP Limit default value is set in gear.lua + if gOSPLimit == nil or gOSPLimit == 0 then gOSPLimit = GetContextInfo("osplimitrpm") end + + -- call custom script (this is a good place to overwrite gOSPLimit value) + local result = custom_ospG27MethodEvent(mOSPMethod) + -- if result = 0 bypass the script below and return 0 + -- if result = 1 bypass the script below and return 1 + if result <= 1 then return result end + -- if result >= 2 continue + + -- call global custom script (this is a good place to overwrite gOSPLimit value) + result = global_custom_ospG27MethodEvent(mOSPMethod) + -- if result = 0 bypass the script below and return 0 + -- if result = 1 bypass the script below and return 1 + if result <= 1 then return result end + -- if result >= 2 continue + + -- check if globals initialized + if isGlobalInitialized == 0 then + isGlobalInitialized = 1 + -- init + InitGlobals() + end + -- get global prefs + GetSLIMaxInfo() + + local led = "" + + -- get rpm + local rpm = 0 + rpm = GetCarInfo("rpm") + if rpm == nil then rpm = 0 end + + -- get current gear + local gear = 0 + gear = GetCarInfo("gear") + if gear == nil then gear = 0 end + + -- get max gear of current car + -- Alternate way to calc max gear if not available in API + -- Use a global mMaxGear and do the following + -- if gear > mMaxGear then mMaxGear = gear end local maxGear = 4 + + maxGear = GetCarInfo("maxgear") + if maxGear == nil then maxGear = 4 end + + -- skip if neutral or ==maxgear + if gear <=0 or gear>=maxGear then + -- do nothing + return 1 + end + + -- print("MAXGear: " .. gear.."/"..maxGear.." OSP: " .. mOSPMethod .. " rpm: " .. rpm .. " - " .. gOSPLimit .. "\n") + + + -- skip if first gear not allowed + if not mOSPWithFirstGear and gear == 1 then + -- do nothing + return 1 + end + + + -- rpm > osplimit so activate shiftpoints leds + if rpm > gOSPLimit then + + mG27Leds = 0 + + -- no blinking allowed + if mNoBlink then + -- set all leds + mG27Leds = 0x1F; + + else + if GetTicks() > mOldOSPTickCount then + mOSPBlink = mOSPBlink + 1 + end + + if mOSPMethod <= 1 or mOSPMethod > 3 then + -- methods 1 all blinking + if mOSPBlink >= mOSPBlinkTime then + mOSPBlink = 0 + end + + if mOSPBlink <= (mOSPBlinkTime / 2) then + mG27Leds = 0x1F; + end + + if mOSPBlink > (mOSPBlinkTime / 2) then + mG27Leds = 0; + end + elseif mOSPMethod == 2 then + -- methods side blinking + if mOSPBlink >= mOSPBlinkTime then + mOSPBlink = 0 + end + + if mOSPBlink <= (mOSPBlinkTime / 2) then + mG27Leds = 0x3; + end + + if mOSPBlink > (mOSPBlinkTime / 2) then + mG27Leds = 0; + end + + elseif mOSPMethod == 3 then + -- methods 3 center blinking + if mOSPBlink >= mOSPBlinkTime then + mOSPBlink = 0 + end + + if mOSPBlink <= (mOSPBlinkTime / 2) then + mG27Leds = 0x18; + end + + if mOSPBlink > (mOSPBlinkTime / 2) then + mG27Leds = 0; + end + end + end + SetG27Led(mG27Leds) + else + -- bypass (give control to manager) + return 1 + end + -- timebase + if GetTicks() > mOldOSPTickCount then + mOldOSPTickCount = GetTicks() + 10 + end + + return 1 +end + +-- Fanatec OSP Methods Event +function ospFanatecMethodEvent(idx) + mOSPMethod = idx + -- OSP Limit default value is set in gear.lua + if gOSPLimit == nil or gOSPLimit == 0 then gOSPLimit = GetContextInfo("osplimitrpm") end + + -- call custom script (this is a good place to overwrite gOSPLimit value) + local result = custom_ospFanatecMethodEvent(mOSPMethod) + -- if result = 0 bypass the script below and return 0 + -- if result = 1 bypass the script below and return 1 + if result <= 1 then return result end + -- if result >= 2 continue + + -- call global custom script (this is a good place to overwrite gOSPLimit value) + result = global_custom_ospFanatecMethodEvent(mOSPMethod) + -- if result = 0 bypass the script below and return 0 + -- if result = 1 bypass the script below and return 1 + if result <= 1 then return result end + -- if result >= 2 continue + + -- check if globals initialized + if isGlobalInitialized == 0 then + isGlobalInitialized = 1 + -- init + InitGlobals() + end + -- get global prefs + GetSLIMaxInfo() + + local led = "" + + -- get rpm + local rpm = 0 + rpm = GetCarInfo("rpm") + if rpm == nil then rpm = 0 end + + -- get current gear + local gear = 0 + gear = GetCarInfo("gear") + if gear == nil then gear = 0 end + + -- get max gear of current car + -- Alternate way to calc max gear if not available in API + -- Use a global mMaxGear and do the following + -- if gear > mMaxGear then mMaxGear = gear end local maxGear = 4 + + maxGear = GetCarInfo("maxgear") + if maxGear == nil then maxGear = 4 end + + -- skip if neutral or ==maxgear + if gear <=0 or gear>=maxGear then + -- do nothing + return 1 + end + + -- skip if first gear not allowed + if not mOSPWithFirstGear and gear == 1 then + -- do nothing + return 1 + end + + -- rpm > osplimit so activate shiftpoints leds + if rpm > gOSPLimit then + + -- no blinking allowed + if mNoBlink then + -- no led + else + + if GetTicks() > mOldOSPTickCount then + mOSPBlink = mOSPBlink + 1 + end + + -- methods 1 to 4 + if mOSPBlink >= mOSPBlinkTime then + mOSPBlink = 0 + end + + if mOSPBlink <= (mOSPBlinkTime / 2) then + if (mOSPMethod <= 0) or mOSPMethod > 4 then + -- blue leds blinking if method 0, ON + for i = 6,8 do + led = led.format("RPM%d",i) + mRPMLedTable[led] = 1 + end + + elseif mOSPMethod == 1 then + -- all leds blinking if method 1, ON + for i = 0,8 do + led = led.format("RPM%d",i) + mRPMLedTable[led] = 1 + end + + elseif mOSPMethod == 2 then + initLedTable(mRPMLedTable, 0) + -- side leds blinking if method 2, ON + mRPMLedTable["RPM0"] = 1 + mRPMLedTable["RPM1"] = 1 + mRPMLedTable["RPM7"] = 1 + mRPMLedTable["RPM8"] = 1 + + elseif mOSPMethod == 3 then + initLedTable(mRPMLedTable, 0) + -- center leds blinking if method 3, ON + mRPMLedTable["RPM3"] = 1 + mRPMLedTable["RPM4"] = 1 + mRPMLedTable["RPM5"] = 1 + + elseif mOSPMethod == 4 then + initLedTable(mRPMLedTable, 0) + -- side fixed if method 4, ON + mRPMLedTable["RPM0"] = 1 + mRPMLedTable["RPM1"] = 1 + mRPMLedTable["RPM7"] = 1 + mRPMLedTable["RPM8"] = 1 + end + SetFanatecLed("mRPMLedTable") + end + + if mOSPBlink > (mOSPBlinkTime / 2) then + if (mOSPMethod <= 0) or mOSPMethod > 4 then + -- blue leds blinking if method 0 , OFF + for i = 6,8 do + led = led.format("RPM%d",i) + mRPMLedTable[led] = 0 + end + + elseif mOSPMethod == 1 then + -- all leds blinking if method 1, OFF + for i = 0,8 do + led = led.format("RPM%d",i) + mRPMLedTable[led] = 0 + end + + elseif mOSPMethod == 2 then + initLedTable(mRPMLedTable, 0) + -- side leds blinking if method 2, OFF + mRPMLedTable["RPM0"] = 0 + mRPMLedTable["RPM1"] = 0 + mRPMLedTable["RPM7"] = 0 + mRPMLedTable["RPM8"] = 0 + + elseif mOSPMethod == 3 then + initLedTable(mRPMLedTable, 0) + -- center leds blinking if method 3, OFF + mRPMLedTable["RPM3"] = 0 + mRPMLedTable["RPM4"] = 0 + mRPMLedTable["RPM5"] = 0 + + elseif mOSPMethod == 4 then + initLedTable(mRPMLedTable, 0) + -- side fixed if method 4, ON + mRPMLedTable["RPM0"] = 1 + mRPMLedTable["RPM1"] = 1 + mRPMLedTable["RPM7"] = 1 + mRPMLedTable["RPM8"] = 1 + end + SetFanatecLed("mRPMLedTable") + end + end + + else + -- bypass (give control to manager) + return 1 end -- timebase if GetTicks() > mOldOSPTickCount then -- cgit v1.2.3