Top of the source
Jump to navigation
Jump to search
This is a copy and paste of app_rpt.c source code beginning comments. It is reproduced here as I find myself needing easy access to these when modify Allstar configuration.
/* * Asterisk -- An open source telephony toolkit. * * Copyright (C) 2002-2014, Jim Dixon, WB6NIL * * Jim Dixon, WB6NIL <jim@lambdatel.com> * Serious contributions by Steve RoDgers, WA6ZFT <hwstar@rodgers.sdcoxmail.com> * * See http://www.asterisk.org for more information about * the Asterisk project. Please do not directly contact * any of the maintainers of this project for assistance; * the project provides a web site, mailing lists and IRC * channels for your use. * * This program is free software, distributed under the terms of * the GNU General Public License Version 2. See the LICENSE file * at the top of the source tree. * * ------------------------------------- * Notes on app_rpt.c * ------------------------------------- * By: Stacy Olivas, KG7QIN <kg7qin@arrl.net> - 20 March 2017 * This application, the heart of the AllStar network and using asterisk as a repeater, * is largely undocumented code. It uses a multi-threaded approach to fulfilling its functions * and can be quite a chore to follow for debugging. * * The entry point in the code , rpt_exec, is called by the main pbx call handing routine. * The code handles the initial setup and then passes the call/connection off to * the threaded routines, which do the actual work <behind the scenes> of keeping multiple * connections open, passing telemetry, etc. rpt_master handles the management of the threaded * routines used (rpt_master_thread is the p_thread structure). * * Having gone through this code during an attempt at porting to this Asterisk 1.8, I recommend * that anyone who is serious about trying to understand this code, to liberally sprinkle * debugging statements throughout it and run it. The program flow may surprise you. * * Note that due changes in later versions of asterisk, you cannot simply drop this module into * the build tree and expect it to work. There has been some significant renaming of * key variables and structures between 1.4 and later versions of Asterisk. Additionally, * the changes to how the pbx module passes calls off to applications has changed as well, * which causes app_rpt to fail without a modification of the base Asterisk code in these * later versions. * -------------------------------------- */ /*! \file * * \brief Radio Repeater / Remote Base program * version 0.332 11/30/2019 * * \author Jim Dixon, WB6NIL <jim@lambdatel.com> * * \note Serious contributions by Steve RoDgers, WA6ZFT <hwstar@rodgers.sdcoxmail.com> * \note contributions by Steven Henke, W9SH, <w9sh@arrl.net> * \note contributions by Mike Zingman, N4IRR * \note contributions by Steve Zingman, N4IRS * * \note Allison ducking code by W9SH * \ported by Adam KC1KCC * \ported by Mike N4IRR * * See http://www.zapatatelephony.org/app_rpt.html * * * Repeater / Remote Functions: * "Simple" Mode: * - autopatch access, # - autopatch hangup * Normal mode: * See the function list in rpt.conf (autopatchup, autopatchdn) * autopatchup can optionally take comma delimited setting=value pairs: * * * context=string : Override default context with "string" * dialtime=ms : Specify the max number of milliseconds between phone number digits (1000 milliseconds = 1 second) * farenddisconnect=1 : Automatically disconnect when called party hangs up * noct=1 : Don't send repeater courtesy tone during autopatch calls * quiet=1 : Don't send dial tone, or connect messages. Do not send patch down message when called party hangs up * * * Example: 123=autopatchup,dialtime=20000,noct=1,farenddisconnect=1 * * To send an asterisk (*) while dialing or talking on phone, * use the autopatch acess code. * * * status cmds: * * 1 - Force ID (global) * 2 - Give Time of Day (global) * 3 - Give software Version (global) * 4 - Give GPS location info * 5 - Last (dtmf) user * 11 - Force ID (local only) * 12 - Give Time of Day (local only) * * cop (control operator) cmds: * * 1 - System warm boot * 2 - System enable * 3 - System disable * 4 - Test Tone On/Off * 5 - Dump System Variables on Console (debug) * 6 - PTT (phone mode only) * 7 - Time out timer enable * 8 - Time out timer disable * 9 - Autopatch enable * 10 - Autopatch disable * 11 - Link enable * 12 - Link disable * 13 - Query System State * 14 - Change System State * 15 - Scheduler Enable * 16 - Scheduler Disable * 17 - User functions (time, id, etc) enable * 18 - User functions (time, id, etc) disable * 19 - Select alternate hang timer * 20 - Select standard hang timer * 21 - Enable Parrot Mode * 22 - Disable Parrot Mode * 23 - Birdbath (Current Parrot Cleanup/Flush) * 24 - Flush all telemetry * 25 - Query last node un-keyed * 26 - Query all nodes keyed/unkeyed * 27 - Reset DAQ minimum on a pin * 28 - Reset DAQ maximum on a pin * 30 - Recall Memory Setting in Attached Xcvr * 31 - Channel Selector for Parallel Programmed Xcvr * 32 - Touchtone pad test: command + Digit string + # to playback all digits pressed * 33 - Local Telemetry Output Enable * 34 - Local Telemetry Output Disable * 35 - Local Telemetry Output on Demand * 36 - Foreign Link Local Output Path Enable * 37 - Foreign Link Local Output Path Disable * 38 - Foreign Link Local Output Path Follows Local Telemetry * 39 - Foreign Link Local Output Path on Demand * 42 - Echolink announce node # only * 43 - Echolink announce node Callsign only * 44 - Echolink announce node # & Callsign * 45 - Link Activity timer enable * 46 - Link Activity timer disable * 47 - Reset "Link Config Changed" Flag * 48 - Send Page Tone (Tone specs separated by parenthesis) * 49 - Disable incoming connections (control state noice) * 50 - Enable incoming connections (control state noicd) * 51 - Enable sleep mode * 52 - Disable sleep mode * 53 - Wake up from sleep * 54 - Go to sleep * 55 - Parrot Once if parrot mode is disabled * 56 - Rx CTCSS Enable * 57 - Rx CTCSS Disable * 58 - Tx CTCSS On Input only Enable * 59 - Tx CTCSS On Input only Disable * 60 - Send MDC-1200 Burst (cop,60,type,UnitID[,DestID,SubCode]) * Type is 'I' for PttID, 'E' for Emergency, and 'C' for Call * (SelCall or Alert), or 'SX' for STS (ststus), where X is 0-F. * DestID and subcode are only specified for the 'C' type message. * UnitID is the local systems UnitID. DestID is the MDC1200 ID of * the radio being called, and the subcodes are as follows: * Subcode '8205' is Voice Selective Call for Spectra ('Call') * Subcode '8015' is Voice Selective Call for Maxtrac ('SC') or * Astro-Saber('Call') * Subcode '810D' is Call Alert (like Maxtrac 'CA') * 61 - Send Message to USB to control GPIO pins (cop,61,GPIO1:0[,GPIO4:1].....) * 62 - Send Message to USB to control GPIO pins, quietly (cop,62,GPIO1:0[,GPIO4:1].....) * 63 - Send pre-configred APRSTT notification (cop,63,CALL[,OVERLAYCHR]) * 64 - Send pre-configred APRSTT notification, quietly (cop,64,CALL[,OVERLAYCHR]) * 65 - Send POCSAG page (equipped channel types only) * * ilink cmds: * * 1 - Disconnect specified link * 2 - Connect specified link -- monitor only * 3 - Connect specified link -- tranceive * 4 - Enter command mode on specified link * 5 - System status * 6 - Disconnect all links * 7 - Last Node to Key Up * 8 - Connect specified link -- local monitor only * 9 - Send Text Message (9,<destnodeno or 0 (for all)>,Message Text, etc. * 10 - Disconnect all RANGER links (except permalinks) * 11 - Disconnect a previously permanently connected link * 12 - Permanently connect specified link -- monitor only * 13 - Permanently connect specified link -- tranceive * 15 - Full system status (all nodes) * 16 - Reconnect links disconnected with "disconnect all links" * 17 - MDC test (for diag purposes) * 18 - Permanently Connect specified link -- local monitor only * 200 thru 215 - (Send DTMF 0-9,*,#,A-D) (200=0, 201=1, 210=*, etc) * * remote cmds: * * 1 - Recall Memory MM (*000-*099) (Gets memory from rpt.conf) * 2 - Set VFO MMMMM*KKK*O (Mhz digits, Khz digits, Offset) * 3 - Set Rx PL Tone HHH*D* * 4 - Set Tx PL Tone HHH*D* (Not currently implemented with DHE RBI-1) * 5 - Link Status (long) * 6 - Set operating mode M (FM, USB, LSB, AM, etc) * 100 - RX PL off (Default) * 101 - RX PL On * 102 - TX PL Off (Default) * 103 - TX PL On * 104 - Low Power * 105 - Med Power * 106 - Hi Power * 107 - Bump Down 20 Hz * 108 - Bump Down 100 Hz * 109 - Bump Down 500 Hz * 110 - Bump Up 20 Hz * 111 - Bump Up 100 Hz * 112 - Bump Up 500 Hz * 113 - Scan Down Slow * 114 - Scan Down Medium * 115 - Scan Down Fast * 116 - Scan Up Slow * 117 - Scan Up Medium * 118 - Scan Up Fast * 119 - Transmit allowing auto-tune * 140 - Link Status (brief) * 200 thru 215 - (Send DTMF 0-9,*,#,A-D) (200=0, 201=1, 210=*, etc) * * playback cmds: * specify the name of the file to be played globally (for example, 25=rpt/foo) * * localplay cmds: * specify the name of the file to be played locally (for example, 25=rpt/foo) * * 'duplex' modes: (defaults to duplex=2) * * 0 - Only remote links key Tx and no main repeat audio. * 1 - Everything other then main Rx keys Tx, no main repeat audio. * 2 - Normal mode * 3 - Normal except no main repeat audio. * 4 - Normal except no main repeat audio during autopatch only * * * "events" subsystem: * * in the "events" section of the rpt.conf file (if any), the user may * specify actions to take place when ceratin events occur. * * It is implemented as acripting, based heavily upon expression evaluation built * into Asterisk. Each line of the section contains an action, a type, and variable info. * Each line either sets a variable, or executes an action based on a transitional state * of a specified (already defined) variable (such as going true, going false, no change, * or getting set initially). * * The syntax for each line is as follows: * * action-spec = action|type|var-spec * * if action is 'V' (for "setting variable"), then action-spec is the variable being set. * if action is 'G' (for "setting global variable"), then action-spec is the global variable being set. * if action is 'F' (for "function"), then action-spec is a DTMF function to be executed (if result is 1). * if action is 'C' (for "rpt command"), then action-spec is a raw rpt command to be executed (if result is 1). * if action is 'S' (for "shell command"), then action-spec is a shell command to be executed (if result is 1). * * if type is 'E' (for "evaluate statement" (or perhaps "equals") ) then the var-spec is a full statement containing * expressions, variables and operators per the expression evaluation built into Asterisk. * if type is 'T' (for "going True"), var-spec is a single (already-defined) variable name, and the result will be 1 * if the varible has just gone from 0 to 1. * if type is 'F' (for "going False"), var-spec is a single (already-defined) variable name, and the result will be 1 * if the varible has just gone from 1 to 0. * if type is 'N' (for "no change"), var-spec is a single (already-defined) variable name, and the result will be 1 * if the varible has not changed. * * "RANGER" mode configuration: * in the node stanza in rpt.conf ONLY the following need be specified for a RANGER node: * * * * [90101] * * rxchannel=Radio/usb90101 * functions=rangerfunctions * litzcmd=*32008 * * This example given would be for node "90101" (note ALL RANGER nodes MUST begin with '9'. * litzcmd specifes the function that LiTZ inititiates to cause a connection * "rangerfunctions" in this example, is a function stanza that AT LEAST has the *3 command * to connect to another node * * */