Förändringar i DMR-bryggan

Supplement #21

DMR-bryggan

DMR-bryggan är inte standard i SvxLink, utan är implementerad av SM5GXQ. Den finns i dagsläget på noderna SM5GXQ, SK7RFL (SK7RN) samt SK5BN. I stort är funktionaliteten densamma på dessa tre noder.

Funktionaliteten bygger på SvxLink standard, dvs
  -  Utifrån aktiverad talgrupp gäller tills repeatern går ned.
      * Svar från SvxLink går till den aktiva talgruppen, så länge repeatern är uppe.
  -  Vid start av repeatern aktiveras en default DMR talgrupp.
  -  Manuellt aktiverad talgrupp gäller tills repeatern går ned.
      * Dock blir talgruppen passad under 10 minuter.

I denna implementation bryggas inte godtyckliga talgrupper mellan DMR och SvxLink.
  -  En eller ett fåtal SvxLink-talgrupper bryggas mot en default DMR-talgrupp.
  -  En default DMR-talgrupp kan bryggas mot en default SvxLink-talgrupp, eller enbart lokalt över repeatern.
  -  I övrigt är näten separerade och en nod kan normalt inte vara på DMR och SvxLink samtidigt, dvs
      - Flera DMR-talgrupper passas, men går bara ut lokalt över repeatern.
      - Flera SvxLink-talgrupper passas, men går bara ut lokalt över repeatern.

SM5GXQ  - DMR talgrupp 2405174
Denna simplexnod passar ett antal DMR-talgruper,
Valfri DMR-talgrupp kan väljas med kommandot 96tg. Nya talgrupper som läggs till blir passade i 10 minuter.

Lokal trafik går med automatik ut över SvxLink talgrupp 2405174 samt DMR talgrupp 2405174.
Bryggan länkar automatiskt trafik mellan DMR talgrupp 2405174 och SvxLink talgrupp 2405174.

SK7RFL  - DMR talgrupp 240721
Repeatern passar fn endast en DMR-talgrupp, 240721.
Valfrri DMR-talgrupp kan väljas från SK7RFL med samma DTMF-kommando som ovan. Nya talgrupper som läggs till blir passade i 10 minuter.

Inkommande trafik länkas vidare till SK7RN via SvxLink.
Lokal trafik går med automatik ut över SvxLink talgrupp 24078 samt DMR talgrupp 240721.
Bryggan länkar automatiskt trafik från SvxLink talgrupper 240721, 24078, 2407151, 2407364 till DMR talgrupp 240721.
Inkommande DMR-trafik länkas inte ut på SvxLink, utan använder en lokal reflektor, som bara når SK7RFL och SK7RNs tre repeatrar.

SK7RN  - DMR talgrupp 240721
SK7RN har ingen egen brygga, utan ligger "på medhörning" till SK7RFL, på samma sätt som för EchoLink (inkommande trafik hörs och kan besvaras, men inga kommandon kan ges för att byta talgrupp).

SK5BN  - DMR talgrupp 240501
Repeatern passar många DMR-talgrupper.
Valfri DMR-talgrupp kan väljas med DTMF. Nya talgrupper som läggs till blir passade i 10 minuter.

Lokal trafik går med automatik ut över SvxLink talgrupp 240501 samt DMR talgrupp 240501.
Bryggan länkar automatiskt trafik på SvxLink talgrupp 240501 till DMR talgrupp 240501.
Inkommande DMR-trafik länkas inte ut på SvxLink, utan använder en lokal reflektor.

Trafikfall

Bryggan beter sig lite olika, beroende på hur trafiken initieras. Nedan följer en sammanfattning av de vanligaste trafikfallen.

Inkommande trafik på passad DMR-talgrupp

Detta kan bara ske om repeatern är i vila. Efter sändningspass från DMR fås bokstaven "D" (-..), samt första gången även det verbala meddelandet "DMR Talk group xxx". På default DMR-talgrupp kan detta meddelande vara förkortat eller helt undertryckt. Talmeddelandet kan högst återkomma var 5:e minut (på samma talgrupp).

Vid ny talgrupp, annonseras denna alltid ut verbalt.

Anropet kan besvaras, under den tid som repeatern är igång - utan några speciella åtgärder. Sändningen går då ut på den senast mottagna DMR-talgruppen.

Om man låter repeatern falla, och därefter startar den lokalt, då hamnar den däremot alltid på default-talgruppen. Däremot kan repeatern omedelbart återstartas från samma DMR-talgrupp.

Om repeatern bara passar en enda DMR-talgrupp (som på SK7RFL), är detta förstås inget problem. Annars behöver man hålla reda på att man svarar på rätt talgrupp (men om man gör det innan repeatern faller eller i övrigt annonserar ut någon annan talgrupp, så är detta inga större problem).

Andra DMR-talgrupper än den som aktiverade repeatern kommer inte att släppas igenom, så länge repeatern är igång.

Automatisk aktivering av default DMR-talgrupp efter lokal start av repeatern.

Detta kan bara ske, när repeatern startas lokalt från radiosidan, under förutsättning att man låter den (automatiskt) aktivera sin lokala SvxLink-talgrupp. Detta kan också ske, om en annan repeater på SvxLink aktiverar den SvxLink-talgrupp som i förekommande fall är bryggad mot DMR.

Denna aktivering sker normalt efter första sändningspasset. 

Denna talgrupp annonseras inte ut på något sätt.

Anropet kan besvaras från DMR-sidan, av alla som passar denna talgrupp.

Låter man repeatern falla, kan ändå eventuella svar från DMR-sidan återaktivera repeatern, så länge den inte är upptagen eller har aktiverat någon annan DMR-talgrupp. Samma talgrupp kommer att aktiveras på nytt vid nästa lokala start av repeatern.

Andra DMR talgrupper än den som aktiverades vid start (default DMR talgrupp) kan inte komma igenom, så länge repeatern är igång.

Manuell aktivering av DMR-talgrupp som redan finns i den statiska passningslistan.

Aktivering sker med kommandot 96tg.

Aktiverad talgrupp annonseras ut verbalt efter varje sådan aktivering.

Nästa sändningspass kommer nu att gå ut på den aktiverade talgruppen. Från DMR kan anropet besvaras av alla som passar denna talgrupp.

Detta kommando reserverar också bryggan för den aktiverade talgruppen. Detta gäller minst under den tid repeatern är igång.

Låter man repeatern falla, kan eventuella svar från DMR-sidan ändå komma in, så länge repeatern inte är upptagen eller har aktiverat annan talgrupp. Vid nästa lokala start av repeatern, återställs den dock till default-talgruppen på DMR. 

Manuell aktivering av DMR-talgrupp som inte finns i den statiska passningslistan.

Funktionalitet som i rutan ovan.

På en repeater (SK7RFL och SK5BN) blir denna talgrupp dynamisk. Den kommer att passas av repeatern, 10 minuter efter senaste sändning. Därefter tas den bort.

På en simplexnod (SM5GXQ), blir denna talgrupp "Auto Static". Den läggs till i passningslistan, men tas inte bort automatiskt. Om man manuellt väljer en annan talgrupp, blir den förra talgruppen i stället dynamisk enligt ovan. 

En sådan talgrupp kan manuellt tas bort med kommandot 960, alternativt 4000. Funktionaliteten är i detta fallet exakt den samma som på en MMDVM Hotspot eller Repeater.

Återställning och Blockering

Vill man under pågående session (så länge repeatern är uppe) blockera DMR-trafiken, ger man kommandot 969. Efter att repeatern gått ned, är allt som vanligt igen.

Vill man annullera tidigare gjorda dynamiska talgruppsval, ger man kommandot 960, alternativt 4000Detta fungerar på samma sätt som på DMR, dvs alla "Auto static" och dynamiska talgrupper tas bort ur passningslistan. När repeatern går ned, återställs den sedan till sin default DMR-talgrupp. 

96tg    Aktiverar manuellt DMR-talgrupp tg OBS - endast Brandmeister.

96      Aktiverar manuellt nodens default DMR-talgrupp.

960     Avaktiverar vald DMR-talgrupp, samt tar bort alla dynamiska talgrupper (inkl "auto static").
4000    

969     Blockerar inkommande DMR-trafik, tills repeatern går ned.

96*     Säger aktuell DMR-talgrupp.

6*      Säger aktuell DMR-talgrupp.
        Listar aktiva stationer (anropssignaler) under pågående session.

Kvalitetsförbättringar

Equalizer
Separata equalizers finns nu på både in- och utgående tal. SvxLink begränsar frekvensomfånget, genom att skära bort allt under 300 Hz (mtp subtoner) samt högre frekvenser än 4-5 kHz. DMR har ett bredare frekvensomfång, jämfört med SvxLink. Den digitala bandbredden är dock betydligt mera blygsam, och ljudkvaliteten blir ju därefter.
Det innebär att DMR-ljudet kan låta burkigt, bådfe i riktning från DMR till SvxLink och omvänt. Det blir helt enkelt för lite diskant och dessutom för hög nivå i det lägre mellanregistret.
Så nu kan vi med Equalizers justera frekvensgången, så att det låter tydligt och bra.
Dessutom justerar vi nivån ut på DMR, så att den inte börjar limitera. På brusiga FM-stationer kan det lätt bli pumpljud annars.

Prestandaförbättringar i programkoden
DMR-bryggan är skriven i Python. I samband med migrering från v2 till v3, behövde en del justeringar ske.
Samtidigt har vi passat på att förbättra snabbheten i koden.
  -  Uppdelning i ännu flera trådar för att slippa flaskhalsar och låsningar.
  -  Trådarna startas på begäran, dvs när det finns data.
  -  Användning av callbacks, för att undvika overruns.
  -  Användning av blocking timeouts (join/wait) istället för "sleep".
  -  Säkerhet mot låsningar (watchdogs).