Batch processing eventów - jak kontrolować radio w MSFS
2025-11-26
​
Problem
Microsoft Flight Simulator ma znane ograniczenie: funkcja SetDataOnSimObject nie działa dla częstotliwości standby radia. Oznacza to, że bezpośrednia zmiana wartości w pamięci symulatora jest niemożliwa. To był główny problem do rozwiązania.
Rozwiązanie: Event Emulation
Zamiast próbować zmienić bezpośrednio wartości, postanowiłem emulować naciskanie przycisków zwiększających/zmniejszających częstotliwość. Simulator przyjmuje rozkazy takie jak “zwiększ COM1” lub “zmniejsz NAV1”, które są wysyłane wielokrotnie.
Wyzwania implementacji
1. Precyzja frecji
Każda zmiana na jednym przycisku to krok o określoną wartość:
- COM radios: 25 kHz
- NAV radios: 50 kHz
Aby zmienić częstotliwość z 120.00 do 127.45 MHz, potrzebuję około 298 pojedynczych kliknięć. Wysłanie ich wszystkich naraz spowodowałoby, że simulator nie zdążyłby przetwarzać zdarzeń.
2. Timing i batch processing
Symulator potrzebuje czasu na przetworzenie każdego zdarzenia. Wysyłanie zdarzeń w zbyt szybkim tempie powoduje ich ignorowanie lub przeskakiwanie. Rozwiązaniem jest wysyłanie zdarzeń w partiach po 10 sztuk z przerwą 50ms między partiami.
3. Transponder BCO16
Transponder używa innego formatu danych - BCO16 (4 bity na cyfrę). Wartość dziesiętna musi być skonwertowana na format heksadecymalny ze specjalnymi ograniczeniami (tylko cyfry oktalne 0-7).
Wynik
Implementacja batch processing pozwala na niezawodną zmianę częstotliwości radia. Choć zajmuje to około 1,5 sekundy dla pełnego zakresu, rezultat jest precyzyjny i nie wymaga dodatkowych modułów czy integracji zewnętrznych bibliotek.
📻