Skip to content

Działanie

sq2ips edited this page Aug 4, 2024 · 4 revisions

Program jest podzielony na rdzeń, oraz moduły: językowe oraz danych. schemat działania Ten schemat pokazuję zasadę działania programu. Głównym elementem jest rdzeń, będący głównym skryptem sr0wx.py, gdy jest on uruchamiany czyta konfigurację z pliku config.py, plik ten zawiera także konfigurację wszystkich modułów danych, którą rdzeń również importuje a następnie uruchamia wszystkie moduły. W oryginalnym programie były one uruchamiane po kolei, w mojej wersji natomiast są uruchamiane jako osobne procesy równolegle, co skraca czas oczekiwania. Wszystkie moduły pobierają dane z różnych źródeł (najczęściej internetowych) i za pomocą modułu językowego konwertują niektóre fragmenty na przykład liczby na odpowiadające im sample. Podczas pracy moduły wypisują informacje diagnostyczne w konsoli. Więcej o modułach jest na dedykowanej stronie (TODO). Gdy wszystkie moduły zwrócą komunikat (czyli listę sampli) program łączy je w jedną a następnie ładuje wszystkie potrzebne sample do pamięci. Następnie celem jest odtworzenie całej list jako sampli audio i zazwyczaj wyemitowanie za pomocą podłączonego do komputera radia. W zależności od konfiguracji rdzeń może włączyć nadajnik za pomocą RTS i CTS na porcie szeregowym lub pinów GPIO w przypadku używania Raspberry Pi. Więcej informacji o konfiguracji nadawania jest na dedykowanej stronie (TODO).

strona programowa

Porgram jest napisany w języku Python w wersji 3, rdzeniem programu jest plik sr0wx.py, który jest uruchamiany, importuje on plik, config.py, w tym pliku importowany jest najpierw logger, moduł językowy a następnie poszczególne moduły danych, dalej tworzona jest instancja klasy pobierającej dane każdego z modułów wraz z konfiguracją, taka instancja jest zwracana do rdzenia, który w osobnych procesach za pomocą biblioteki multiprocessing uruchamia metodę get_data() w każdym module, ta zwraca komunikat jako string, w którym sample są oddzielone spacjami. Rdzeń łączy komunikaty w jeden, następnie dzieli komunikat za pomocą funkcji split() na listę sampli, ładuje do pamięci wszystkie sample, następnie w zależności od ustawień uruchamia nadawanie za pomocą pyserial lub RPi.GPIO, a następnie w pętli po kolei za pomocą pygame odtwarza po kolei wszystkie sample, po zakończeniu wyłącza ptt i kończy pracę.

Clone this wiki locally