Simba-Avionic / Simba-Avionic/srp
Specyfikacja: Dynamiczny wybór źródła czasu w mechanizmie timestamp_mw
Open
@WiktorM8 is already working on this.
Since Apr 25, 2026.
- Dominant language
- C++
- Stars
- 1
- Forks
- 3
- Avg merge
- 34m
- Merged PRs (30d)
- 1
Description
Specyfikacja: Dynamiczny wybór źródła czasu w mechanizmie timestamp_mw
1. Cel zadania
Przejście z modelu statycznego (sztywny adres masterIP) na model dynamiczny, w którym urządzenia automatycznie wybierają najlepsze źródło synchronizacji czasu na podstawie klasy urządzenia przesyłanej w ramce tinyNTP.
2. Architektura danych (ntpStruct)
Należy wykorzystać pole settings w strukturze ntpStruct do przesyłania metadanych o statusie urządzenia.
| Bity | Nazwa | Opis |
|---|---|---|
| 0 - 2 | deviceClass |
Klasa urządzenia (0–7). Im niższa wartość, tym wyższy priorytet. |
| 3 | holdover |
1 = brak aktualnej referencji (czas niepewny); 0 = zsynchronizowany. |
| 4 - 5 | version |
Wersja protokołu (aktualnie 0b00). |
| 6 | msg_type |
0 = Synchronizacja czasu (Unicast); 1 = Rozgłoszenie (Multicast Announce). |
| 7 | Reserved | Zarezerwowane do przyszłego użytku. |
3. Wymagania Funkcjonalne
3.1. Konfiguracja i start
- Plik konfiguracyjny: Aplikacja musi wczytywać parametry z
/opt/srp/cpu_simba/ntp_config.json.- Wymagane pola:
ip,ntp_class(0-7),T_hb_ms(interwał ogłoszeń).
- Wymagane pola:
- Inicjalizacja: Podczas startu
TimestampServicemusi zainicjalizowaćNtpControllerz uwzględnieniem klasy wczytanej z pliku. W przypadku błędnych danych w JSON należy zastosować fallback (np. klasa 7) i zalogować błąd.
3.2. Mechanizm Discovery (Multicast)
- Rozgłaszanie: Każde urządzenie musi co interwał
T_hb_mswysyłać ramkęAnnouncena adres/port UDP Multicast. - Baza sąsiadów: Urządzenie utrzymuje listę aktywnych węzłów (IP, klasa, czas ostatniej aktywności).
- Zarządzanie listą:
- Wpisy starsze niż 15 sekund muszą być automatycznie usuwane.
- Urządzenie nie dodaje własnego adresu IP do listy kandydatów.
3.3. Algorytm wyboru źródła (Best Master Clock)
Przed każdą sesją synchronizacji urządzenie analizuje listę dostępnych węzłów i wybiera źródło według priorytetów:
- Najniższa klasa (
deviceClass): Im mniejsza wartość, tym lepsze źródło. - Status Holdover: Preferowane są urządzenia z bitem
holdover = 0. - Tie-breaker: W przypadku identycznej klasy i statusu, wybierane jest urządzenie o niższym adresie IP.
Logika Ról:
- Jeśli lokalne urządzenie posiada najwyższy priorytet na liście -> pracuje jako Serwer.
- W przeciwnym wypadku -> pracuje jako Klient i synchronizuje się do wybranego lidera.
3.4. Integracja z tinyNTP
- Utrzymanie obecnej logiki obliczania przesunięcia czasu (
offset) i RTT na podstawie znacznikówt0..t3. - Dynamiczne uzupełnianie pola
settingswe wszystkich wychodzących ramkach (zarówno Unicast, jak i Multicast).
4. Kryteria Akceptacji (AC)
- Brak statycznego IP: Usunięcie zależności od zmiennej
masterIPw kodzie. - Prawidłowe mapowanie: Potwierdzenie bitowego zapisu/odczytu klasy i flagi holdover w
settings. - Obsługa błędów: System poprawnie reaguje na brak pliku konfiguracyjnego lub błędy w JSON.
- Dynamiczna zmiana: Po wyłączeniu urządzenia o najwyższym priorytecie (klasa 0), pozostałe urządzenia w sieci w ciągu max 15s wybierają nowe źródło (np. klasa 1).
- Stabilność: Proces synchronizacji nie ulega przerwaniu przy zmianie roli z Serwera na Klienta.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.