SIOC i 737 PMDG - prośba o pomoc

Kącik Majsterkowiczów. Zasięgnij porady lub pomóż innym w budowie wymarzonego kokpitu !

Moderatorzy: alfsky, ToTom

SIOC i 737 PMDG - prośba o pomoc

Postprzez leszek81 » Cz 11 kwi 2013, 12:17

Panowie,

Zacząłem bawić się płytkami Opencockpits, mam Mastera i płytkę USB, wszystko ładnie połączone i działa jak ta lala. Zacząłem więc pisać do tego skrypty w SIOC, żeby zaprogramować przełączniki i diodki na domowej roboty overheadzie i tu zaczęły się schody:

1. Co do offsetów wyjściowych z PMDG (stan np. lampek na ovh) generalnie sobie poradziłem, diody zapalają się i gasną tak samo jak na ovh. Problem mam tylko z zaprogramowaniem offsetów, które są długości 2 bitów (np. low pressure announciatory). Gdy jest jeden bit to jest łatwo: 1 - włączony, 0 wyłączony. Pytanie jakie wartości przyjmuje zmienna gdy jest dwubitowa? Próbowałem na chłopski rozum tak: 0 (obie wyłączone), 1 (pierwsza włączona), 10 (druga włączona) 11 (obie włączone). Ale nie działa... Jak to rozpisać?

2. Największy problem czyli wysyłanie sygnału ze switcha do PMDG. Obczytalem się forów, przykładów i dalej jestem głupi.... Jak to zrobić? Wiem, że offsety z listy są read only, i że te do zapisu są w pliku z rozszerzeniem .h w SDK do PMDG. Tyle, że tam są podane jako 69632 + odpowiednia wartość. Jak się do tego potem odwołać przez SIOC? Trzeba to przeliczać na hex? Jedni robią to przez FSUIPC_OUT offset, drudzy przez CHANGEBIT, nie jestem w stanie tego ogarnąć... Czy ktoś pomoże? (najlepiej z prostym przykładem skryptu, który wraz z przełączeniem dwupozycyjnego switcha na ovh przełączy takowy na ovh (np. logo lights)

Od razu zastrzegam, że na http://www.lekseecon.nl byłem i nie mogę znaleźć swojego błędu, na mycockpit też szukałem przykładów, ale większość zbyt skomplikowana...

z góry dzięki za pomoc,
Leszek
leszek81
obserwator
obserwator
 
Posty: 17
Dołączył(a): Pn 08 sie 2011, 12:05
Imię i Nazwisko: Leszek Jarosz
Vatsim PID: 1210675

Re: SIOC i 737 PMDG - prośba o pomoc

Postprzez Piotr66 » Śr 24 kwi 2013, 10:13

2. Największy problem czyli wysyłanie sygnału ze switcha do PMDG. Obczytalem się forów, przykładów i dalej jestem głupi.... Jak to zrobić? Wiem, że offsety z listy są read only, i że te do zapisu są w pliku z rozszerzeniem .h w SDK do PMDG. Tyle, że tam są podane jako 69632 + odpowiednia wartość. Jak się do tego potem odwołać przez SIOC? Trzeba to przeliczać na hex? Jedni robią to przez FSUIPC_OUT offset, drudzy przez CHANGEBIT, nie jestem w stanie tego ogarnąć... Czy ktoś pomoże? (najlepiej z prostym przykładem skryptu, który wraz z przełączeniem dwupozycyjnego switcha na ovh przełączy takowy na ovh (np. logo lights)


To jest nieco bardziej skomplikowane. PMDG udostepniło SDK i z jego pomocą można napisać program, który będzie się komunikował z SIOC poprzez serwer IOCP.

Zainteresuj się tym:
http://flightsim4fun.com/ocp4ngx.html

Pozdrawiam,
Piotr66
Steward
Steward
 
Posty: 406
Dołączył(a): Cz 26 sty 2006, 20:13
Lokalizacja: Sanok
Imię i Nazwisko: Piotr
Vatsim PID: 953496

Re: SIOC i 737 PMDG - prośba o pomoc

Postprzez wawax » Cz 25 kwi 2013, 7:20

Do wielobitowych zmiennych wykorzystaj polecenie changebitN i testbitN. One odczytują wartość konkretnego bitu z offsetu. Można też odczytywać dziesiątkowo: 0, 1, 2, 3 (a nie binarnie: 0, 1, 10, 11). Tylko, że przy dłuższych zmiennych (np. 4bit) jest to bardzo niewygodne. Pamiętaj, że zmienna wczytująca offset musi mieć określoną właściwą długość offsetu w bitach, inaczej wyjdzie sieczka.

Zarówno FSUIPC_OUT, jak i CHANGEBIT mogą być użyte do zapisu zmiennych. Oba są równie szybkie (no chyba, że przetwarzasz dodatkowo w FSUIPC, to zwalniają). Co kto lubi. Czasem zależy to też od zmiennej (binarna/dziesiętna).

Wysuwanie/chowanie podwozia na przełączniku 0/1:

Kod: Zaznacz cały
// Definicja dla przekazywania kontrolek do FS
Var 3998 name FS_CONTROL Link FSUIPC_OUT Offset $3110 Length 4
Var 3999 name FS_PAR Link FSUIPC_OUT Offset $3114 Length 4
.
.
.


Var 3015 name BUT_FD2 Link IOCARD_SW Input 14, Type I, Device 10
 {
  //SIOC działa "akcyjnie", więc w momencie przełączenia wykryje zmianę. Dlatego pytamy o stan przełącznika:
  IF &BUT_FD2 = 1 //jak przełącznik włączony to:
  {
   &FS_PAR = 1 //wartosc zapisywana do offsetu
   &FS_CONTROL = 66079  //offset chowania podwozia
   &FS_CONTROL = DELAY 0 10 //opóźnienie 10ms - bez tego nie zadziała.
  }
  ELSE //w przeciwnym przypadku wysuwamy podwozie:
  {
   &FS_PAR = 1
   &FS_CONTROL = 66080
   &FS_CONTROL = DELAY 0 10
  }
 }



Changebit wygląda tak:
Kod: Zaznacz cały
Var 3964 name Joy3964 Link FSUIPC_OUT Offset $3340 Length 4
//to jest offset przypisujący wirtualny joystick w FSUIPC. Bardzo wygodne, jeśli chcesz sterować za pomocą mouse macro w FSUIPC
.
.
.

Var 3011 name BUT_ALTHLD Link IOCARD_SW Input 23, Device 10
//jeśli ktoś wciśnie przycisk zdefiniowany powyżej
 {
   &Joy3964 = CHANGEBIT 11 v3011 //zmień 11 bit offsetu przypisanego do Joy3964
 }


Można changebit wkomponować w poprzedni kod zamiast 3 linii. Warto sprawdzić wcześniej jaką wartość ma ten bit, inaczej wszystko może wariować, dlatego przykład TESTBIT (ściągnięty z Leseecon, bo nie mam własnego pod ręką):

Kod: Zaznacz cały
Var 771 Static
 {
  //testujemy bit 1 i bit 0:
   v9001 = TESTBIT v771 1 //zmienna v9001 musi zostać gdzieś wcześniej zdefiniowana
   v9002 = TESTBIT v771 0 //j.w.
 }
Obrazek
Centrum Szkolenia Pilotów - (prawie) wszystko co potrzebujesz wiedzieć o wirtualnym lataniu
CEOpedia - portal dla menedżerów, uczonych i studentów zarządzania
Avatar użytkownika
wawax
Steward
Steward
 
Posty: 704
Dołączył(a): Pn 07 wrz 2009, 14:01
Lokalizacja: L623/L984
Vatsim PID: 1116550


Powrót do Symulatory własnej produkcji

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 4 gości

cron