cat 2025-11-26-Radio-w-msfs.md

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.

📻