Autor Wątek: Aplikacja DomowyKokpit  (Przeczytany 61938 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Aplikacja DomowyKokpit
« dnia: Stycznia 05, 2010, 17:17:20 »
Witam ponownie.Próbuję przypomnieć sobie działanie Domowego Kokpitu.Ostatnio testowałem ten program kilka miesięcy wstecz.Była to wersja 1_0_1_5 teraz jest 1_0_2_5.Wiem,że testowałem go z FalconemAF.Próbuje to powtórzyć i mam problemy jak to zrobić.Gdzie powinna być zapisana informacja o parametrach np.rpm,master caution itd.
Czy mogę prosić o pomoc.Co kolejno włączać.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #1 dnia: Stycznia 05, 2010, 17:46:34 »
Gdzie powinna być zapisana informacja o parametrach np.rpm,master caution itd.
Czy mogę prosić o pomoc.Co kolejno włączać.

W archiwum z najnowszą wersją jest plik TestFalcon.hcps. To jest prosty skrypt, który pokazuje jak "wyciągać" dane z Falcon'a. Przykład odczytuj RPM (jest zawarty w tym pliku):
  • definiujemy sobie zmienną (najłatwiej wybrać na liście zmiennych modułu FalconData, prawy klawisz myszy i z menu wybrać jedną z opcji)
    variable $rpm
    {
        direct = in;
        module = "FalconData";
        id = "rpm";
        type = double;       
    }

  • definiujemy sobie zdarzenie zmiany tej zmiennej
    variable_changed $rpm
    {

    }

  • teraz chcemy gdzieś tą wartość pokazać, w przykładowym skrypcie użyty jest moduł TestModule (zmienna $rpmOut), ale uprościmy to i będziemy tą wartość wpisywać do okienka Log, uzupełniamy kod zdarzenia
    variable_changed $rpm
    {
        Log( "RPM = " + ToString( $rpm ) );
    }

W ten sposób odczytujemy wartość RPM i wypisujemy ją w zakładce Log aplikacji DomowyKokpit. Oczywiście lepiej wypisać ją na wyświetlaczach 7-LED. Jest to równie łatwe, definiujemy zmienną reprezentującą wyświetlacze 7-LED (taką zmienną można stworzyć w module do obsługi płytek Skalarki), a później tylko przypisujemy tej zmiennej wartość zmiennej $rpm (zamieniając ją na typ String funkcją ToString( $rpm )).

Odp: Aplikacja DomowyKokpit
« Odpowiedź #2 dnia: Stycznia 05, 2010, 20:47:47 »
Codeking jestem pod wrażeniem,działa tzn.rejestruje wartości rpm.Zaczyna to przypominać działanie programu testującego SIOC.Jestem dopiero na początku czytania Twojej strony o Domowym Kokpicie.Zauważyłem,że stosujesz dwa rodzaje znaku równości "=" oraz "==".Co to oznacza?
Wbudowana funkcja ToString( zmienna_liczbowa) zamienia liczbę na znaki,możesz to potwierdzić?
Ostatnia sprawa dotyczy zmiennych "lightBits.... " użytych w przykładzie.Domyślam się,że  sterują LED-y np.podwozie wysunięte.Są typu int.Chciałem ten wątek rozwinąć,ale brak hardware uniemożliwia zadanie następnych pytań.Jeśli będzie już wbudowany interface komunikujący się z platformą to będzie można dopiero rozwinąć ten wątek.Domyślam się,że zmienne odpowiedzialne za sterowanie konkretnymi LED i reprezentujące określony parametr symulatora będą przypisane do konkretnego portu platformy.Na razie muszę przebrnąć przez kilka stron i zrozumieć działanie poszczególnych funkcji.



Odp: Aplikacja DomowyKokpit
« Odpowiedź #3 dnia: Stycznia 05, 2010, 23:15:14 »
Zauważyłem,że stosujesz dwa rodzaje znaku równości "=" oraz "==".Co to oznacza?
"=" to przypisanie wartości do zmiennej, a "==" to porównanie wartości. Zauważ, że "==" występuje tylko w warunkach "if".

Wbudowana funkcja ToString( zmienna_liczbowa) zamienia liczbę na znaki,możesz to potwierdzić?
Tak, jest o tym na stronie. Bardzo przydatna i często wykorzystywana funkcja.

Ostatnia sprawa dotyczy zmiennych "lightBits.... " użytych w przykładzie.Domyślam się,że  sterują LED-y np.podwozie wysunięte.Są typu int.
Są typu int bo stany świateł w Falconie zapisywane są bitowo. Moduł, a właściwie biblioteka, która odczytuje dane z pamięci współdzielonej Falcona, definiuje trzy takie zmienne. Każda liczba int to 32 bity więc teoretycznie może być nawet 96 kontrolek, ale nie wszystkie są dostępne. Pełną listę postaram się wkrótce przygotować żeby ułatwić pisanie skryptów (chociaż ona jest chyba zgodna z tą listą od FAST dla OC). Tutaj nakieruje Cię na ważną w tym momencie funkcję - GetBitState( <zmienna> , <numer bitu> ) - jej działanie jest opisane na stronie i w przykładach.

Domyślam się,że zmienne odpowiedzialne za sterowanie konkretnymi LED i reprezentujące określony parametr symulatora będą przypisane do konkretnego portu platformy.
Sterowanie LED'ami to jak przypisanie wartości true (lub false żeby zgasić) do zmiennej :) Więc nie trzeba się strasznie męczyć :)

Na razie muszę przebrnąć przez kilka stron i zrozumieć działanie poszczególnych funkcji.
Czekam na kolejne pytania.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #4 dnia: Stycznia 06, 2010, 10:03:05 »
Dziękuję za wyjaśnienia.Chciałbym uzupełnić Twoją wypowiedź

Cytuj
Cytat codeking
Są typu int bo stany świateł w Falconie zapisywane są bitowo. Moduł, a właściwie biblioteka, która odczytuje dane z pamięci współdzielonej Falcona, definiuje trzy takie zmienne. Każda liczba int to 32 bity więc teoretycznie może być nawet 96 kontrolek, ale nie wszystkie są dostępne. Pełną listę postaram się wkrótce przygotować żeby ułatwić pisanie skryptów (chociaż ona jest chyba zgodna z tą listą od FAST dla OC).

Jest tak jak napisałeś.Na stronie EGHI opisałem przykłady jak to się programuje w SIOC.
Na załączonym zdjęciu są pokazane te zmienne V0011 oraz V0012,które reprezentują 4 bajty lub 32 bity od 0 do 31 licząc od prawej strony.Każdy bit reprezentuje zmienną w Falconie.Przykładowe zmienne oraz odpowiadające im bity pokazałem w Tab.1.
      Tab.1
adres wyjścia   nazwa zmiennej         var 011 (nr BITU)
11      STBY MISC                                     24
12      ACTIVE MISC                                  23
13      ECM MISC                                      22

Programowanie w SIOC jest trywialne,widać to na przykładzie
Przykład:
C0=TESTBIT V0011,4   //IndexL To Low Yellow
IF C0
   V0778=1
ELSE
   V0778=0
gdzie C0 jest zmienną lokalną a zmienna V0778 jest związana z LED Indexera w Falconie.
Funkcja TESTBIT sprawdza wartość bitów czy są ustawione czy zgaszone.
Trochę zboczyłem z tematu KokpitDomowy,ale sposób pisania skryptu dla LED może być podobny jak w SIOC.



Odp: Aplikacja DomowyKokpit
« Odpowiedź #5 dnia: Stycznia 06, 2010, 10:11:27 »
Programowanie w SIOC jest trywialne,widać to na przykładzie
Zrobienie tego samego w DomowyKokpit jest równie łatwe.

Funkcja TESTBIT sprawdza wartość bitów czy są ustawione czy zgaszone.
Funkcja GetBitState w DomowyKokpit jest odpowiednikiem tej funkcji :)

Odp: Aplikacja DomowyKokpit
« Odpowiedź #6 dnia: Stycznia 06, 2010, 17:57:42 »
Witam ponownie.Przeczytałem stronę codeking oprócz ostatniego wpisu z 29 Listopada 2009.Jestem po wrażeniem.Częściowo sprawdzałem przykładowe skrypty chcąc mieć pogląd na całość.Żałuje,że nie śledziłem systematycznie strony. Teraz muszę w krótkim czasie opanować chociaż częściowo materiał.
Moje wnioski po przeczytaniu strony.Codeking zrobił kawał dobrej roboty.Aby zrozumieć temat trzeba mieć minimum wiedzy informatycznej z szkoły średniej lub studiów (może się mylę).Ja jestem w stanie zrozumieć to co opisuje autor,ale wymaga to trochę wysiłku.Druga uwaga dotyczy poruszanych zagadnień.Porównując metodę pisania skryptów codeking z skryptami OC muszę przyznać,że jest łatwiej w przypadku OC.Wynika to z dwóch faktów możliwości skryptów codeking są dużo większe od SIOC (więcej funkcji,operatorów ogólnie możliwości).Drugi powód to sama technika pisania skryptu.W SIOC można użyć oprócz klasycznej metody takiej jaką stosuje codeking z stosowaniem nawiasów itp.metodę uproszczoną tzn.wypełnia się okienka wpisując zmienne,operatory,funkcje itp.
To takie moje uwagi,a teraz dwa pytania. 
Cytuj
cytat 5 listopad 2009
    * do listy zmiennych i funkcji modułowych dodane zostało menu kontekstowe (wywoływane prawym przyciskiem myszy) z opcją generowania i skopiowania do schowka systemowego definicji zmiennej lub wywołania funkcji modułowej
Czy mogę prosić o rozwinięcie tego tematu tzn.co manualnie trzeba zrobić.
Drugie pytanie dotyczy następującego cytatu
Cytuj
cytat 11 listopad 2009
Dzisiaj krótko opiszę nowy moduł GameControllersInput. Na stronie z plikami dostępne jest archiwum z plikami, które trzeba skopiować do katalogu modules
O jakie pliki chodzi,jest tam tylko podstawowy plik.Czy mogę prosić o wyjaśnienie.
Jutro mam zamiar przystąpić do testów MJoya oraz klawiatury.Na koniec będę testował moduł Falcona.Opuściłem moduł FS..,ponieważ w moim przypadku będę stosował DomowyKokpit do sterowania Falcona.
Na koniec gratulacje dla codeking,nie sądziłem,że w tak krótkim czasie zrobisz taki postęp w programie.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #7 dnia: Stycznia 06, 2010, 19:58:46 »
Aby zrozumieć temat trzeba mieć minimum wiedzy informatycznej z szkołyśredniej lub studiów (może się mylę).Ja jestem w stanie zrozumieć to coopisuje autor,ale wymaga to trochę wysiłku.
Talentu pedagogicznego nie mam (i nie zamierzam mieć), kto pyta nie błądzi :)

W SIOC można użyć oprócz klasycznej metody takiej jaką stosuje codekingz stosowaniem nawiasów itp.metodę uproszczoną tzn.wypełnia się okienkawpisując zmienne,operatory,funkcje itp.
Może w przyszłości powstanie "klikalny" edytor skryptów. Jak się trochę takich skryptów popisze, to później idzie to szybko i taki edytor tylko by spowalniał. Ale zgadzam się, że jest to bardzo dobre narzędzie dla początkujących i osób, które nie chcą się za bardzo wtajemniczać w "suchy" kod.

Czy mogę prosić o rozwinięcie tego tematu tzn.co manualnie trzeba zrobić.
Na liście zmiennych wybranego modułu, zaznaczamy interesującą nas zmienną i klikamy na niej prawym klawiszem myszy. Ukazuje nam się menu:


I mamy dwie opcje do wyboru. Wybranie którejkolwiek spowoduje skopiowanie do schowka systemowego deklaracji zaznaczonej zmiennej. Po skopiowaniu możemy skorzystać z opcji Wklej (CTRL+V) aby wkleić sobie tą deklarację do edytora w którym piszemy skrypt. Wynik deklaracji wielowierszowej:
variable $lightBits
{
    module = "FalconData";
    id = "lightBits";
    type = int;
    direct = in;
}
i jednowierszowej:
variable $lightBits { module = "FalconData"; id = "lightBits"; type = int; direct = in; }
Prosta funkcja dzięki której, nie trzeba pisać ręcznie deklaracji zmiennych.

Drugie pytanie dotyczy następującego cytatu...O jakie pliki chodzi,jest tam tylko podstawowy plik.Czy mogę prosić o wyjaśnienie.
Ten tekst powstał gdy udostępniłem na stronie moduł do ówczesnej wersji aplikacji DomowyKokpit. Dlatego ten moduł umieściłem w osobnym archiwum. Później udostępniłem nową wersję DomowyKokpit i ten moduł był już w nowym archiwum z programem więc usunąłem osobne archiwum z modułem :)

...,nie sądziłem,że w tak krótkim czasie zrobisz taki postęp w programie.
Czasu właściwie minęło sporo od pierwszej wersji, nie było po prostu bodźca (urządzeń), które spowodowałyby zainteresowanie programem :)

Odp: Aplikacja DomowyKokpit
« Odpowiedź #8 dnia: Stycznia 07, 2010, 06:09:47 »
Dzięki za wyjaśnienia.To kopiowanie definicji zmiennej lub funkcji bardzo ułatwia pisanie skryptu.Dzisiaj rozpocznę czytanie ostatniego wpisu oraz testy z MJoy oraz klawiaturą.Bardzo się cieszę,że rozwiązałeś problem przechwytywania danych z Falcona.Mam zamiar napisać mały skrypt do rejestracji parametrów symulatora i to testować.
Następny etap to podłączenie LCD do LPT i testy DED oraz PFD na module wyjściowych,który ma powstać w najbliższym czasie.
Gdy powstanie interface programowy pomiędzy DomowymKokpitem oraz platformą Skalarki to będzie można to testować z platformą.
Na koniec pytanie do Damosa,który z tego co wiem także kontynuuje prace nad swoim projektem.W maju ubiegłego roku robiliśmy testy z uP oraz wyświetlaczami znakowymi LCD i to działało.Jestem bardzo zainteresowany tym tematem ze względu na wyświetlanie PFD w Falconie.Codeking pisze moduł umożliwiający sterowanie LCD z LPT.Jest to oczywiście rozwiązanie,ale trochę archaiczne.Gdyby można to zrobić na USB.Czy jesteś w stanie zrobić soft na uP,który umożliwi sterowanie znakowego LCD, komunikującego się z pc przez USB oraz z DomowymKokpitem.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #9 dnia: Stycznia 07, 2010, 08:31:12 »
Gdy powstanie interface programowy pomiędzy DomowymKokpitem oraz platformą Skalarki to będzie można to testować z platformą.

Taki interface (moduł) już istnieje i działa :) Pierwszy filmik Skalarki pokazuje właśnie działanie tego modułu, EGHI także potwierdził jego działanie.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #10 dnia: Stycznia 07, 2010, 18:32:44 »
Gratuluję postępów,ale ja mam jeszcze problemy na poziomie klawiatury.
Sprawdziłem działanie modułu GameControllersInput.Po uruchomieniu modułu mam mapę przycisków,przełączników oraz osi w tabelce.Przyciski są ponumerowane i zdefiniowane jako zmienne typu bool.Naciśnięcie przycisku jest sygnalizowane zmianą wartości zmiennej z false na true.Podobnie z osiami.
Chciałem sprawdzić skrypt 12 i natrafiłem na problem.Oczywiście nie mam aviador tylko Logitech Extreme 3D.Rozumiem,że muszę zmienić w skrypcie nazwy zmiennych np.$aviador_button_001 na $Logitech Extreme 3D_button_001 itp,ale co dalej.
Wczytuję PrzykładoweSkrypty,wybieram Skrypt_12 i go uruchamiam i co dalej.Jeśli wybiorę moduł KeyboardInput oraz przycisk konfiguracja to otworzę okno gdzie jest okienko Dodaj....W tym momencie nie wiem co dalej robić.Może wybrałem nie te moduły?
Proszę o pomoc co kolejno robić aby uruchomić skrypt12 na moim kontrolerze.Z opisu tego przykładu wynika,że po otwarciu Notatnika i naciskaniu klawiszy w kontrolerze można zrobić pewne działania w Notatniku.Załóżmy,że ten przykład będzie działał.Teraz pytanie zasadnicze.Chcę aby kontroler np. MJoy z SV Mapper działał w Falconie podobnie ale przy pomocy KokpituDomowego(KD).Jak to zrobić?Dla przykładu w MJoy button 001 jest przyporządkowany do kombinacji Ctrl+Alt+1 co odpowiada LMFD OSB 01 w symulatorze.Jak to zrobić przy pomocy KD?
Może pytania są naiwne,ale mam pewne przyzwyczajenia związane z SV Mapper oraz SIOC i trudno mi się przestawić.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #11 dnia: Stycznia 07, 2010, 19:06:05 »
Niestety tutaj odzywa się brak odpowiedniej dokumentacji dla użytkownika, ale poradzimy sobie, po kolei:

Chciałem sprawdzić skrypt 12 i natrafiłem na problem.Oczywiście nie mam aviador tylko Logitech Extreme 3D.Rozumiem,że muszę zmienić w skrypcie nazwy zmiennych np.$aviador_button_001 na $Logitech Extreme 3D_button_001 itp,ale co dalej.
$aviador_button_001 to nazwa zmiennej i nie musi być w ogóle zmieniana (o tym później). Co musisz zrobić:
  • Otworzyć okno konfiguracji modułu GameControllersInput
  • Wybrać kontroler jaki chcesz użyć do tego skryptu.
  • Kliknąć OK
W ten sposób zapisze się konfiguracja kontrolera i na liście zmiennych modułu pojawią się przyciski i osie. Teraz wybierasz zmienną (która odpowiada przyciskowi, który chcesz użyć do testów) i kopiujesz jej definicję. Np.
variable $Logitech_Extreme_3D_przycisk_000
{
    module = "GameControllersInput";
    id = "Logitech Extreme 3D:przycisk_000";
    type = bool;
    direct = in;
}
Teraz wystarczy, że usuniesz ze skryptu definicję zmiennej $aviador_button_001 a tam gdzie występuje jej nazwa ($aviador_button_001) zamieniasz na $Logitech_Extreme_3D_przycisk_000. W ten sposób postępujesz z wszystkimi zmiennymi reprezentującymi przyciski kontrolera czyli: $aviator_button_001, $aviator_button_002, $aviator_button_003 i $aviator_button_004.

Inny sposób, to w konfiguracji kontrolera, w kolumnie ID, na zakładce Przyciski zmieniasz identyfikator (wpisujesz nowy) na te występujące w skrypcie przykładowym ($aviator_button_001 itd.). W definicji zmiennej $aviator_button_001 w skrypcie musisz teraz zmienić jej ID. W skrypcie jest
id = "aviator:button_001";
więc zmieniasz na:
id = "Logitech Extreme 3D:button_001";
Ta część przed dwukropkiem (Logitech Extreme 3D) jest konfigurowana w oknie konfiguracji (pole ID pod listą wyboru kontrolera), stanowi ona identyfikator kontrolera i domyślnie jest nim nazwa kontrolera. W ten sposób zmieniasz tylko identyfikator zmiennej, możesz się nawet pokusić o skonfigurowanie swojego kontrolera tak, aby nie trzeba było zmieniać skryptu. Czyli nadajesz odpowiednie identyfikatory przyciskom i zmieniasz domyślny identyfikator kontrolera.

Po takiej zmianie skrypt będzie działał. Nie trzeba nic więcej zmieniać/konfigurować.

Wczytuję PrzykładoweSkrypty,wybieram Skrypt_12 i go uruchamiam i co dalej.Jeśli wybiorę moduł KeyboardInput oraz przycisk konfiguracja to otworzę okno gdzie jest okienko Dodaj....W tym momencie nie wiem co dalej robić.Może wybrałem nie te moduły?
W skrypcie użyte są funkcje z modułu KeyboardOutput, nie trzeba konfigurować modułu KeyboarInput (ten moduł służy do odczytywania stanu klawiatury i reprezentacji jej w skrypcie). KeyboardOutput nie ma konfiguracji. Ten moduł udostępnia tylko funkcje. W tym skrypcie nie trzeba nic zmieniać.

Z opisu tego przykładu wynika,że po otwarciu Notatnika i naciskaniu klawiszy w kontrolerze można zrobić pewne działania w Notatniku.
Aby sprawdzić jego działanie należy uruchomić DK (DomowyKokpit), wczytać skrypt, wybrać Skrypt_12... i uruchomić. Następnie uruchomić Notatnik i pozostawić go jako aktywne okno (kursor do pisania miga w oknie notatnika). Teraz można naciskać przyciski kontrolera. Cytat ze strony:
Cytuj
Naciśnięcie przycisku 1 (zmienna $aviator_button_001)spowoduje wpisanie w notatniku tekstu “DomowyKokpit”. Przycisk 2spowoduje wywołanie okienka do drukowania (standardowy skrótklawiaturowy CTRL+P). Przycisk 3 powoduje naciśnięcie klawisza SHIFT,pisanie wtedy w notatniku z prawdziwej klawiatury zaowocuje dużymiliterami. Przycisk 4 zwalania klawisz SHIFT.

Załóżmy,że ten przykład będzie działał.Teraz pytanie zasadnicze.Chcę aby kontroler np. MJoy z SV Mapper działał w Falconie podobnie ale przy pomocy KokpituDomowego(KD).Jak to zrobić?Dla przykładu w MJoy button 001 jest przyporządkowany do kombinacji Ctrl+Alt+1 co odpowiada LMFD OSB 01 w symulatorze.Jak to zrobić przy pomocy KD?
Należy skorzystać z funkcji KeyboardOutput:SendShortcut( "^%1" ); (znaki ^ i % są znakami specjalnymi, ^ - to CTRL a % to ALT, dodatkowo znak + to SHIFT). Czyli np.:
    variable_changed $aviator_button_002
    {
        if ( $aviator_button_002 )
        {
            // wysłanie skrótu klawiaturowego CTRL+ALT+1
            KeyboardOutput:SendShortcut( "^%1" );
        }
    }

Uf, trochę przydługawy ten post. Czekam na kolejne pytania :)

EDIT: Proszę moderatora o przeniesieni postów (od 525) z tego wątka do nowego "Aplikacja DomowyKokpit" w tym samym dziale.
« Ostatnia zmiana: Stycznia 07, 2010, 19:17:50 wysłana przez codeking »

Odp: Aplikacja DomowyKokpit
« Odpowiedź #12 dnia: Stycznia 07, 2010, 19:15:18 »
W tym wątku proszę poruszać tematy związane z korzystaniem z aplikacji DomowyKokpit

Odp: Aplikacja DomowyKokpit
« Odpowiedź #13 dnia: Stycznia 07, 2010, 20:11:37 »
Cytuj
Uf, trochę przydługawy ten post.
Może przydługawy,ale potrzebny.Nie dziw się,że pytam,ale początki są najtrudniejsze.Jutro dam znać jak wypadły testy.
Cytuj
Proszę moderatora o przeniesieni postów (od 525) z tego wątka do nowego "Aplikacja DomowyKokpit" w tym samym dziale.
To ma sens,ponieważ pytań będzie przybywać,taką mam nadzieję.Trochę się dziwię,że tyko ja pytam,ale może pytania były na pw.
Dziękuję za wyjaśnienia.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #14 dnia: Stycznia 07, 2010, 20:57:05 »
Codeking pisze moduł umożliwiający sterowanie LCD z LPT.Jest to oczywiście rozwiązanie,ale trochę archaiczne.Gdyby można to zrobić na USB.Czy jesteś w stanie zrobić soft na uP,który umożliwi sterowanie znakowego LCD, komunikującego się z pc przez USB oraz z DomowymKokpitem.
Pytanie co pradwa nie do mnie, ale do moich płytek będzie dostępne rozszerzenie do sterowania najpopularniejszymi tekstowymi wyświetlaczami LCD.

Gdy powstanie interface programowy pomiędzy DomowymKokpitem oraz platformą Skalarki to będzie można to testować z platformą.
Nie za bardzo rozumiem, Aplikacja DomowyKokpit obsługuje moje płytki bez problemu i jest cały czas ulepszna, więc nic więcej nie potrzeba. Testować można od zaraz, pod warunkiem że ma się płytki ...
Na filmiku pokazane jest działanie mojej aplikacji do obsługi płytek ale z naciskiem na A320 i brak skryptów. Aplikacja powstaje powoli ale powstanie. A potem może do B737, 747 itp....