Top of the source: Difference between revisions
Jump to navigation
Jump to search
Created page with "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...." |
(No difference)
|
Latest revision as of 17:12, 3 December 2022
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
*
*
*/