Creating a DIALPLAN for Tuning DVSwitch

; After fudging a AP command in rpt.conf
; 97 = autopatchup,context=dvs-set,dialtime=90000,farenddisconnect=1,noct,quiet=1

; Use Format: (AP command prefix) + (dvs mode 1-5) + (dvs tg)
; Requires that you set dvs mode each time with the leading digit 1-5.
; So, a command here of *97 1 3100 would set dmr 3100
; 2xxxx tunes dstar adhoc number only
; 2*1 tunes dstar REFxxx
; 2*2 tunes dstar DCSxxx
; 2*3 tunes dstar XLSxxx
; 2*4 tunes dstar XRFxxx
; 2*5 tunes dstar mem # or ## from file

; ** disconnects any mode

; The dialplan in extensions.conf

[dvs-set] ; this context needs to be unique in the system and match dialing context

exten = _1.,1,Wait,1 ; DMR
exten = _1.,2,NoOp() ; room for you to insert a command without renumbering anything
exten = _1.,3,SayAlpha(dmr,${EXTEN:1}) ; speak dmr tg before execution
exten = _1.,4,Wait,4 ; wait with time to cancel (autopatchdn)
exten = _1.,5,System(/opt/MMDVM_Bridge/dvswitch.sh mode DMR) ; set mode
exten = _1.,6,Wait,1 ; allow some time to return from the shell
exten = _1.,7,System(/opt/MMDVM_Bridge/dvswitch.sh tune ${EXTEN:1}) ; set TG
exten = _1.,8,Hangup ; done/hangup

exten = _2x.,1,Wait,1 ;The following for dstar adhoc
exten = _2x.,2,NoOp()
exten = _2x.,3,SayAlpha(d*,${EXTEN:1}) ; speak dstar & tg before execution
exten = _2x.,4,Wait,4
exten = _2x.,5,System(/opt/MMDVM_Bridge/dvswitch.sh mode DSTAR)
exten = _2x.,6,Wait,1
exten = _2x.,7,System(/opt/MMDVM_Bridge/dvswitch.sh tune ${EXTEN:1})
exten = _2x.,8,Hangup

exten = _2*1.,1,Wait,1 ;The following for dstar-REF
exten = _2*1.,2,NoOp()
exten = _2*1.,3,SayAlpha(d*,ref${EXTEN:2}) ; speak dstar ref & tg before execution
exten = _2*1.,4,Wait,4
exten = _2*1.,5,System(/opt/MMDVM_Bridge/dvswitch.sh mode DSTAR)
exten = _2*1.,6,Wait,1
exten = _2*1.,7,System(/opt/MMDVM_Bridge/dvswitch.sh tune ref${EXTEN:2})
exten = _2*1.,8,Hangup

exten = _2*2.,1,Wait,1 ;The following for dstar-DCS
exten = _2*2.,2,NoOp()
exten = _2*2.,3,SayAlpha(d*,dcs${EXTEN:2}) ; speak dstar dcs & tg before execution
exten = _2*2.,4,Wait,4
exten = _2*2.,5,System(/opt/MMDVM_Bridge/dvswitch.sh mode DSTAR)
exten = _2*2.,6,Wait,1
exten = _2*2.,7,System(/opt/MMDVM_Bridge/dvswitch.sh tune dcs${EXTEN:2})
exten = _2*2.,8,Hangup

exten = _2*3.,1,Wait,1 ;The following for dstar-XLS
exten = _2*3.,2,NoOp()
exten = _2*3.,3,SayAlpha(d*,xlx${EXTEN:2}) ; speak dstar xls & tg before execution
exten = _2*3.,4,Wait,4
exten = _2*3.,5,System(/opt/MMDVM_Bridge/dvswitch.sh mode DSTAR)
exten = _2*3.,6,Wait,1
exten = _2*3.,7,System(/opt/MMDVM_Bridge/dvswitch.sh tune xls${EXTEN:2})
exten = _2*3.,8,Hangup

exten = _2*4.,1,Wait,1 ;The following for dstar-XRF
exten = _2*4.,2,NoOp()
exten = _2*4.,3,SayAlpha(d*,xrf${EXTEN:2}) ; speak dstar xrf & tg before execution
exten = _2*4.,4,Wait,4
exten = _2*4.,5,System(/opt/MMDVM_Bridge/dvswitch.sh mode DSTAR)
exten = _2*4.,6,Wait,1
exten = _2*4.,7,System(/opt/MMDVM_Bridge/dvswitch.sh tune xrf${EXTEN:2})
exten = _2*4.,8,Hangup

exten = _2*5.,1,Wait,1 ;The following for dstar memory file /opt/mmdvm/dstar.mem
exten = _2*5.,2,NoOp()
exten = _2*5.,3,SayAlpha(d*,m${EXTEN:3}), ; speak dstar & mem# before execution
exten = _2*5.,4,Wait,3
exten = _2*5.,5,System(/opt/MMDVM_Bridge/dvswitch.sh mode DSTAR)
exten = _2*5.,6,Wait,1
exten = _2*5.,7,System(/opt/MMDVM_Bridge/dstarmem.sh ${EXTEN:3}) ; calls a secondary shell that hands off info to dvs tune
exten = _2*5.,8,Hangup

exten = _3.,1,Wait,1 ; YSF
exten = _3.,2,NoOp()
exten = _3.,3,SayAlpha(ysf,${EXTEN:1}) ; speak YSF & tg before execution
exten = _3.,4,Wait,4
exten = _3.,5,System(/opt/MMDVM_Bridge/dvswitch.sh mode YSF)
exten = _3.,6,Wait,1
exten = _3.,7,System(/opt/MMDVM_Bridge/dvswitch.sh tune ${EXTEN:1})
exten = _3.,8,Hangup

exten = _4.,1,Wait,1 ; P25
exten = _4.,2,NoOp()
exten = _4.,3,SayAlpha(p25,${EXTEN:1}) ; speak p25 & tg before execution
exten = _4.,4,Wait,4
exten = _4.,5,System(/opt/MMDVM_Bridge/dvswitch.sh mode P25)
exten = _4.,6,Wait,1
exten = _4.,7,System(/opt/MMDVM_Bridge/dvswitch.sh tune ${EXTEN:1})
exten = _4.,8,Hangup

exten = _5.,1,Wait,1 ; NXDN
exten = _5.,2,NoOp()
exten = _5.,3,SayAlpha(nxdn,${EXTEN:1}) ; speak nxdn & tg before execution
exten = _5.,4,Wait,4
exten = _5.,5,System(/opt/MMDVM_Bridge/dvswitch.sh mode NXDN)
exten = _5.,6,Wait,1
exten = _5.,7,System(/opt/MMDVM_Bridge/dvswitch.sh tune ${EXTEN:1})
exten = _5.,8,Hangup

exten = _**.,1,Wait,1 ; disconnect seq
exten = _**.,2,NoOp()
exten = _**.,3,SayAlpha(disc)
exten = _**.,4,Wait,3
exten = _**.,5,,System(/opt/MMDVM_Bridge/dvswitch.sh tune disconnect) ; set TG dis
exten = _**.,6,Hangup

;;;;;;;
;===DStar Memory File===
; The intention here was just a method to connect systems that can not be entered into a 15 usable dtmf digit string reasonably. But you could just store your favorite 10 for ease of dialing.
;To use dstar memory calls, you need to create a file in /opt/MMDVM_Bridge/dstar.mem
;and populate it one dstar connection of any valid call that can be made through DVS per line
;Do not put anything else in the file as it begins reading from line 1 (no comments or blank lines)
;A extra command in the dialplan of ” 2*5 xx ” will call the line# of the memory file.
;EXAMPLE:
;dcs006f
;DCSSAT
;DCSUS1
;DCSUS2
;DCSUS4

;Requires one additional batch file in the /opt/mmdvm_bridge/ directory called dstarmem.sh with these contents

;#!/bin/bash

;/opt/MMDVM_Bridge/dvswitch.sh tune $(sed “$1q;d” /opt/MMDVM_Bridge/dstar.mem)

;(for some reason I could not execute this inside the dialplan and suspect it’s our older version of asterisk or some bad sytax… so, using alt method)

;Don’t forget to set ownership and permissions of the .sh file

;==Summary==
;While this is not a perfect model of operation, it is a functional example for which allows you to develop your own methods beyond it using methods and principles you see.

;The intention here was the old KISS rule and to keep it all in one place as much as possible for easy understanding. Obviously, this will challenge your memory if you do not use it often.

;For those of you who require such functionality, make a cheat sheet to carry with you mobile/portable etc.

; To keep my extensions.conf file a bit cleaner, I set this in a file in /etc/asterisk/custom named dvs.conf and call it at the end of extensions.conf
; #includeifexists custom/dvs.conf