Gdy brakuje przycisków (FSUIPC)

Każdy latający on-line używa FSUIPC, przynajmniej w wersji darmowej. Wiele osób nie zdaje sobie nawet sprawy z tego jak rozbudowane jest to narzędzie. Odkrywamy to dopiero, gdy kupimy pełną wersją.

FSUIPC to Flight Simulator Universal Inter-Process Communiaction – aplikacja stworzona przez Pete Dowsona. Służył on początkowo do zapewnienia komunikacji pomiędzy MS Flight Simulatorem (od wersji 2000 do X) a zewnętrznymi programami lub urządzeniami. W trakcie rozwoju aplikacji dołączano kolejne funkcje, jak np. sterowanie pogodą. Program jest uzupełniany szeregiem dodatkowych aplikacji, jak np. omawiany niedawno na łamach Newslettera GPSout czy WideFS.

Aplikacja jest bardzo rozbudowana i nie dałoby się jej omówić w krótkim artykule. Dlatego skupimy się na zaawansowanych funkcjach programowania przycisków. Podstawowe programowanie przycisków jest w FSUIPC bardzo proste. Umożliwia je zakładka w programie, która bezpośrednio pozwala wybrać funkcję i przypisać ją do klawisza klawiatury lub przycisku joysticka. Jednak schody zaczynają się, gdy chcemy zaprogramować nietypową funkcję z płatnego samolotu. Wówczas z pomocą przychodzi funkcja nagrywania makr oraz możliwość edycji ich w edytorze tekstu. Każdy, kto miał do czynienia z językami programowania, poradzi sobie z tym zadaniem bez trudu. Wystarczy tylko kilka wskazówek.

Przypisanie pojedynczej funkcji

Na początek proste przypisanie funkcji do przycisku za pomocą konfiguratora FSUIPC dostępnego w menu Modules w FS. W zakładce Buttons+Switches wybieramy przycisk, który ma być programowany. Następnie zaznaczamy „Select for FS control” i wybieramy z listy funkcję, która nas interesuje. Proste, łatwe i przyjemne. Czasem konfigurator się zacina i wtedy pomaga tylko wyłączenie i ponowne włączenie FS.

Sprawa się gmatwa, gdy chcemy przypisać funkcję spoza listy. Przykładem samolotu, w którym zdarza się to często, jest ATR 72-500 od Flight1. W tym samolocie prawie każda funkcja musi być rejestrowana poprzez makro. Zadanie to jest tylko trochę trudniejsze niż przypisanie pojedynczego klawisza. Wciskamy przycisk Create Mouse Macro i wybieramy nazwę pliku, w którym ma być ono zapisane (makra są przechowywane z rozszerzeniem „.mcro” w podkatalogu Modules w katalogu FS). Można wybrać nazwę pliku już istniejącego – nowe makra zostaną dopisane na końcu. Następnie wystarczy kliknąć odpowiedni przycisk w samolocie, a później w okienku wpisać opis wybranej funkcji. Na koniec wchodzimy ponownie do konfiguratora FSUIPC i wciskamy przycisk End Macro. Za jedną sesją nagrywania można zarejestrować wiele takich funkcji. Więcej szczegółów w obszernym podręczniku FSUIPC. Przypisanie makra do przycisku jest łatwe. Zarejestrowane makra znajdują się wspomnianej wcześniej na liście funkcji, które można w konfiguratorze przypisać do przycisków.

Przypisanie wielu funkcji jednoczesnych

Joystick ma mało przycisków. Za mało, aby przypisać wszystkie przyciski z panelu overhead ATRa. Co więc zrobić? Otóż za pomocą prostej edycji pliku makra możemy stworzyć makro wykonujące wiele funkcji przy pojedynczym uruchomieniu. Nie da się jednak tego zrobić w konfiguratorze – potrzebny jest co najmniej windowsowy notatnik. Otwórzmy więc plik ATR.mcro. W ramce 1 widać fragment nagranego makra. Cztery opisane funkcje, które mogą być przypisane do czterech przycisków.

1=Wing lights=RX14cb0*Xa100
2=Panel lights=RX14d00*Xa1cc
3=Logo lights=RX14da0*Xa1cc
4=Heating=RX14ee0*Xa1cc

Nie ma jednak sensu tych funkcji przypisywać do oddzielnych przycisków, gdyż są one zwykle włączane i wyłączane jednocześnie. Dlatego zrobimy z tego makro wielofunkcyjne. Zmianę widać w ramce 2.

1=Lights and heating
1.1=RX14cb0*Xa100
1.2=RX14d00*Xa1cc
1.3=RX14da0*Xa1cc
1.4=RX14ee0*Xa1cc

Makro numer 1 ma 4 kroki. Usunięto opisy poszczególnych kroków, wprowadzono tylko nazwę całego makra. Każda zmiana w plikach z makrami wymaga restartu FS. Po ponownym uruchomieniu zobaczymy na liście funkcji do przypisania „ATR: Lights and heating”.

W moim ATR przygotowałem wiele takich makr. Jedno włącza awionikę (10 kroków), drugie światła, ogrzewanie, klimatyzację i odłącza zasilanie zewnęrzne (16 kroków). Makra tego typu doskonale się sprawdzają przy programowaniu funkcji typu 0-1, np. omawiane włączanie świateł i ogrzewania. W takim przypadku ten sam przycisk można wcisnąć przy uruchamianiu samolotu, jak i przy jego wyłączaniu. Można je także wykorzystać w przypadku przełączników wymagających wielokrotnego klikania, jak np. przełącznik zapłonu w ATR (4 kliknięcia). Przykład makra dla zapłonu pokazuje ramka 3.

15=Ignition on
15.1=RX14be0*X8bcc
15.2=RX14be0*X8bcc
15.3=RX14be0*X8bcc
15.4=RX14be0*X8bcc
16=Ignition off
16.1=RX14be0*X8bcc,31
16.2=RX14be0*X8bcc,31
16.3=RX14be0*X8bcc,31
16.4=RX14be0*X8bcc,31

Jak widać w ramce, przewidziano oddzielne makro dla włączania i wyłączania. Mimo tego da się tą funkcję przypisać do jednego przycisku w joysticku.

Funkcja JEŻELI

Gdy zaczynałem bawić się FSUIPC brakowało mi funkcji JEŻELI. Jednak, gdy wgłębiłem się w dokumentację, zauważyłem, że funkcja ta istnieje, choć została zaimplementowana w niestandardowy sposób – za pomocą definiowanych zmiennych. Wszystko ustawia się w pliku FSUIPC.ini (katalog FS, podkatalog Modules).

Uwaga 1: Przed dokonywaniem jakichkolwiek zmian w FSUIPC wykonaj kopię bezpieczeństwa.
Uwaga 2: Polecam włączenie profili (UseProfiles=Yes).

FSUIPC standardowo pozwala na zaznaczenie w konfiguratorze opcji Aircraft specific, która zapewnia, że definiowany przycisk będzie działać tylko w wybranym samolocie. Jednak rozwiązanie takie nie jest najwygodniejsze, gdy chcemy programować nieco bardziej zaawansowane funkcje. Zamiast tej opcji można włączyć w FSUIPC.ini profile, które robią generalnie to samo, ale działają dużo bardziej przejrzyście.

W ramce 4 widać przypisanie włączania/wyłączania zapłonu do klawisza w joysticku. Pierwszy wiersz definiuje zmienną, która będzie wykorzystywana do stworzenia funkcji JEŻELI.

1=P1,7,Cx510066C2,x00010001
2=B66C2=1 U1,7,CM1:15,0
3=B66C2=0 U1,7,CM1:16,0

Wyjaśniając po kolei:

  • P1 oznacza wciśnięcie przycisku w drugim joysticku (pierwszy ma numer 0),
  • 7 to numer przycisku (jako, że zaczynamy liczyć od 0, więc jest to przycisk... 8),
  • Cx510066C2 oznacza, że przypisujemy offset 66C2 zarezerwowany do dowolnego definiowania przez użytkowników,
  • x00010001 mówi, że nasz offset będzie przyjmował wartości 0-1 oraz skok przy każdej zmianie będzie wynosił 1.

Cała sztuczka z funkcją JEŻELI polega na tym, że do pojedynczego użycia przycisku musimy przypisać aż dwie funkcje. Pierwszą przypisujemy do wciśnięcie przycisku, co właśnie omówiliśmy. Drugą – właściwą – do puszczenia przycisku. Puszczenie przycisku po raz pierwszy wyzwoli działanie opisane w linii 2, a po raz drugi to z linii 3. I tak w kółko. Krótkie wyjaśnienie linii 2:

  • B66C2=1 – jeżeli offset 66C2 = 1 (żeby było ciekawiej wartość offsetu na początku wynosi zawsze 1, a nie 0),
  • U1,7 – przy puszczeniu przycisku nr 8 z drugiego joysticka (pamiętamy, że FSUIPC zaczyna liczenie od 0, stąd przesunięcie),
  • CM1:15,0 – wykonaj pozycję 15 z makra CM1 (makro CM1 to nasz plik ATR.mcro zarejestrowany pod numerem 1 na liście makr w FSUIPC).

Przypisywanie sekwencji funkcji

Mechanizm JEŻELI możemy wykorzystać do programowania sekwencji funkcji na jednym przycisku. Idealnym przykładem jest uruchamianie silnika w ATR. Funkcje, które wybrałem to:

  1. Włączenie pompy
  2. Włączenie startera
  3. Przesunięcie Cond. Lever w pozycję FTR
  4. Przesunięcie Cond. Lever w pozycję AUTO
  5. Przesunięcie Cond. Lever w pozycję OFF (wyłączenie silnika)
  6. Wyłączenie pompy

1=Pump2 On=RX131d0*Xa1cc
2=Engine 2 Start=RX14b30*X53cc
3=CondLev2 On=RX18620*Xa1cc
4=CondLev2 Auto=RX18650*Xa1cc
5=CondLev2 Off=RX185f0*Xa1cc
6=Pump2 Off=RX131d0*Xa1cc

Są one także widoczne na rysunku 1. Taka sekwencja (oddzielna dla każdego silnika) umożliwia nam wykonanie startu i wyłączenia silnika za pomocą jednego tylko przycisku. W ramce 5 znajduje się fragment pliku ATR.mcro dla silnika 2. Każda funkcja musi być uruchamiana osobno, dlatego nie zastosowano tu omówionego wcześniej programowania jednoczesnego funkcji. Musimy mieć pełną kontrolę nad sekwencją.

W ramce 6 widać natomiast odpowiednie wpisy w pliku FSUIPC. Offset 66C0 został zaprogramowany na 6 kroków – zmiana wartości następuje w momencie przyciśnięcia przycisku. Następnie wpisano kolejne kroki, które mają być wykonywane w momencie puszczania przycisku.

5=P1,2,Cx510066C0,x00050001
6=B66C0=1 U1,2,CM1:1,0
7=B66C0=2 U1,2,CM1:2,0
8=B66C0=3 U1,2,CM1:3,0
9=B66C0=4 U1,2,CM1:4,0
10=B66C0=5 U1,2,CM1:5,0
11=B66C0=0 U1,2,CM1:6,0

 

W ten sposób do uruchomienia i wyłączenia silnika w ATR potrzebujemy zaledwie 3 przycisków (zapłon i dwa silniki). Do tego przycisk do awioniki, oświetlenia i ogrzewania oraz najważniejszy – przycisk do włączania baterii i podłączania zasilania zewnętrznego. W sumie 6 przycisków do obsługi całego panelu overhead.

Zainteresowanym służę plikami ATR.mcro oraz FSUIPC.ini. Będą one naturalnie wymagały ręcznego dostosowania do odpowiedniego przycisku joysticka.