public static object SwapADF(object[] arguments) { try { FsuipcSdk.Fsuipc fsuipc = new FsuipcSdk.Fsuipc(); int result = 0; if (fsuipc.FSUIPC_Open(FsuipcSdk.Fsuipc.SIM_ANY, ref result)) { // odczytanie ustawień ADF1 int adf1btoken = 0; fsuipc.FSUIPC_Read(0x034C, 2, ref adf1btoken, ref result); int adf1etoken = 0; fsuipc.FSUIPC_Read(0x0356, 2, ref adf1etoken, ref result); // odczytanie ustaiwń ADF2 int adf2btoken = 0; fsuipc.FSUIPC_Read(0x02D4, 2, ref adf2btoken, ref result); int adf2etoken = 0; fsuipc.FSUIPC_Read(0x02D6, 2, ref adf2etoken, ref result); fsuipc.FSUIPC_Process(ref result); // pobranie wartości short adf1b = 0; fsuipc.FSUIPC_Get(ref adf1btoken, ref adf1b); short adf1e = 0; fsuipc.FSUIPC_Get(ref adf1etoken, ref adf1e); short adf2b = 0; fsuipc.FSUIPC_Get(ref adf2btoken, ref adf2b); short adf2e = 0; fsuipc.FSUIPC_Get(ref adf2etoken, ref adf2e); // zamiana wartości short tmp = 0; tmp = adf1b; adf1b = adf2b; adf2b = tmp; tmp = adf1e; adf1e = adf2e; adf2e = tmp; // zapisanie fsuipc.FSUIPC_Write(0x034C, adf1b, ref adf1btoken, ref result); fsuipc.FSUIPC_Write(0x0356, adf1e, ref adf1etoken, ref result); fsuipc.FSUIPC_Write(0x02D4, adf2b, ref adf2btoken, ref result); fsuipc.FSUIPC_Write(0x02D6, adf2e, ref adf2etoken, ref result); fsuipc.FSUIPC_Process(ref result); fsuipc.FSUIPC_Close(); } } catch { } return(true); }
public static object GetOffsetValue(object [] arguments) { object result = (int)0; int offset = (int)arguments[0]; int size = (int)arguments[1]; int type = 0; if (arguments.Length > 2) { type = (int)arguments[2]; } try { FsuipcSdk.Fsuipc fsuipc = new FsuipcSdk.Fsuipc(); int dwresult = 0; if (fsuipc.FSUIPC_Open(FsuipcSdk.Fsuipc.SIM_ANY, ref dwresult)) { int token = 0; if (fsuipc.FSUIPC_Read(offset, size, ref token, ref dwresult)) { if (fsuipc.FSUIPC_Process(ref dwresult)) { switch (type) { // liczba case 0: switch (size) { case 1: byte bv = 0; fsuipc.FSUIPC_Get(ref token, ref bv); return((int)bv); case 2: short sv = 0; fsuipc.FSUIPC_Get(ref token, ref sv); return((int)sv); } break; } } } fsuipc.FSUIPC_Close(); } } catch { } return(result); }
public static object ChangeADF(object [] arguments) { int adfOffset = (int)arguments[0] < 1 ? 0x034C : 0x02D4; int change = (int)arguments[1]; try { FsuipcSdk.Fsuipc fsuipc = new FsuipcSdk.Fsuipc(); int result = 0; if (fsuipc.FSUIPC_Open(FsuipcSdk.Fsuipc.SIM_ANY, ref result)) { // odczytanie ustawień ADF int adfbtoken = 0; fsuipc.FSUIPC_Read(adfOffset, 2, ref adfbtoken, ref result); fsuipc.FSUIPC_Process(ref result); // pobranie wartości short adfb = 0; fsuipc.FSUIPC_Get(ref adfbtoken, ref adfb); int iv = HexToInt((int)adfb); iv += change; if (iv < 100) { iv += 700; } if (iv > 799) { iv -= 700; } adfb = (short)IntToHex(iv); // zapisanie fsuipc.FSUIPC_Write(adfOffset, adfb, ref adfbtoken, ref result); fsuipc.FSUIPC_Process(ref result); fsuipc.FSUIPC_Close(); } } catch { } return(true); }
private void ProcessingMethod() { FsuipcSdk.Fsuipc fsuipc = null; bool connected = false; try { int ret = 0; int interval = _configuration.Settings.Interval; int fs = 0; switch (_configuration.Settings.FSVersion) { case FSVersion.Dowolna: fs = FsuipcSdk.Fsuipc.SIM_ANY; break; case FSVersion.FS2002: fs = FsuipcSdk.Fsuipc.SIM_FS2K2; break; case FSVersion.FS2004: fs = FsuipcSdk.Fsuipc.SIM_FS2K4; break; case FSVersion.FSX: fs = FsuipcSdk.Fsuipc.SIM_FSX; break; default: throw new Exception("Nieobsługiwana wersja symulatora '" + _configuration.Settings.FSVersion.ToString() + "'."); } _log.Log(this, "Próba połączenia z symulatorem w wersji '" + _configuration.Settings.FSVersion.ToString() + "'."); fsuipc = new FsuipcSdk.Fsuipc(); while (_working) { if (fsuipc.FSUIPC_Open(fs, ref ret)) { _log.Log(this, "Połączono z symulatorem w wersji '" + _configuration.Settings.FSVersion.ToString() + "'."); connected = true; break; } Thread.Sleep(100); } byte v1 = 0; short v2 = 0; int v4 = 0; long v8 = 0; object v = null; bool ok = false; while (_working) { //lock (FsuipcSdk.Fsuipc.__FSUIPC_LOCKER) //FsuipcSdk.Fsuipc.__FSUIPC_EVENT.WaitOne(); //try { for (int i = 0; i < _spiesVariables.Length; i++) { if (!fsuipc.FSUIPC_Read(_spiesVariables[i].Offset, _spiesVariables[i].Size, ref _spiesVariables[i].Token, ref ret)) { _log.Log(this, "Błąd (" + ret.ToString() + " podczas żądania odczytu wartości zmiennej o identyfikatorze '" + _spiesVariables[i].ID + "'."); } } if (!fsuipc.FSUIPC_Process(ref ret)) { _log.Log(this, "Błąd (" + ret.ToString() + ") podczas żądania odczytania żądanych wartości."); } else { for (int i = 0; i < _spiesVariables.Length; i++) { switch (_spiesVariables[i].FSType) { case FSDataType.Byte: ok = fsuipc.FSUIPC_Get(ref _spiesVariables[i].Token, ref v1); v = v1; break; case FSDataType.Short: ok = fsuipc.FSUIPC_Get(ref _spiesVariables[i].Token, ref v2); v = v2; break; case FSDataType.Int: ok = fsuipc.FSUIPC_Get(ref _spiesVariables[i].Token, ref v4); v = v4; break; case FSDataType.Long: ok = fsuipc.FSUIPC_Get(ref _spiesVariables[i].Token, ref v8); v = v8; break; case FSDataType.ByteArray: byte[] buf = new byte[_spiesVariables[i].Size]; ok = fsuipc.FSUIPC_Get(ref _spiesVariables[i].Token, buf.Length, ref buf); v = buf; break; } if (ok) { _spiesVariables[i].SetValue(v); } else { _log.Log(this, "Błąd podczas pobierania wartości zmiennej o identyfikatorze '" + _spiesVariables[i].ID + "', Offset = 0x" + _spiesVariables[i].Offset.ToString("X4") + "."); } } } } //finally //{ // FsuipcSdk.Fsuipc.__FSUIPC_EVENT.Set(); //} if (interval > 0) { Thread.Sleep(interval); } } } catch (ThreadAbortException) { } catch (Exception ex) { _log.Log(this, ex.ToString()); } finally { if (fsuipc != null) { try { fsuipc.FSUIPC_Close(); if (connected) { _log.Log(this, "Rozłączono z symulatorem '" + _configuration.Settings.FSVersion.ToString() + "'."); } } catch { } } } }