70 lines
3.8 KiB
Python
70 lines
3.8 KiB
Python
'''
|
|
The following is an example for your bridge_rules file. Note, all bridging is ONE-WAY!
|
|
Rules for an IPSC network indicate destination IPSC network for the Group ID specified
|
|
(allowing transcoding of the Group ID to a different value). Group IDs used to be
|
|
hex strings, then a function was added to convert them, now that function has been
|
|
moved into the bridge.py (program file) to make this file as simple and easy as
|
|
possible
|
|
|
|
The IPSC name must match an IPSC name from dmrlink.cfg, and any IPSC network defined
|
|
as "active" in the dmrlink.cfg *MUST* have an entry here. It may be an empty entry,
|
|
but there must be one so that the data structure can be parsed.
|
|
|
|
The example below cross-patches TS 1/TGID 1 on an IPSC network named "IPSC_FOO" with
|
|
TS 2/TGID 2 on an IPSC network named "IPSC_BAR". Note, one entry must be made on EACH
|
|
IPSC network (IPSC_FOO and IPSC_BAR in this example) for bridging to occur in both
|
|
directions.
|
|
|
|
THIS EXAMPLE WILL NOT WORK AS IT IS - YOU MUST SPECIFY NAMES AND GROUP IDS!!!
|
|
|
|
NOTES:
|
|
* PRIVATE_VOICE is not yet implemented
|
|
* GROUP_HANGTIME should be set to the same value as the repeaters in the IPSC network
|
|
* TRUNK is a boolean set to True only for DMRlink to DMRlink IPSCs that need to move
|
|
multiple packet streams that may match the same TS - this essentially makes the
|
|
source,timeslot,talkgroup ID a tuple to indentify an arbitrary number of streams
|
|
* NAME is any name you want, and is used to match reciprocal rules for user-activateion
|
|
* ACTIVE should be set to True if you want the rule active by default, False to be inactive
|
|
* ON and OFF are LISTS of Talkgroup IDs used to trigger this rule off and on. Even if you
|
|
only want one (as shown in the ON example), it has to be in list format. None can be
|
|
handled with an empty list, such as " 'ON': [] ".
|
|
* TO_TYPE is timeout type. If you want to use timers, ON means when it's turned on, it will
|
|
turn off afer the timout period and OFF means it will turn back on after the timout
|
|
period. If you don't want to use timers, set it to anything else, but 'NONE' might be
|
|
a good value for documentation!
|
|
* TIMOUT is a value in minutes for the timout timer. No, I won't make it 'seconds', so don't
|
|
ask. Timers are performance "expense".
|
|
|
|
DO YOU THINK THIS FILE IS TOO COMPLICATED?
|
|
Because you guys all want more and more features, this file is getting complicated. I have
|
|
dabbled with using a parser to make it easier to build. I'm torn. There is a HUGE benefit
|
|
to having it like it is. This is a python file. Simply running it
|
|
(i.e. "python bridge_rules.py) will tell you if there's a syntax error and where. Think
|
|
about that for a few minutes :)
|
|
'''
|
|
|
|
RULES = {
|
|
'IPSC_FOO': {
|
|
'TRUNK': False,
|
|
'GROUP_HANGTIME': 5,
|
|
'GROUP_VOICE': [
|
|
{'NAME': 'STATEWIDE', 'ACTIVE': False, 'TO_TYPE': 'ON', 'TIMEOUT': 2, 'ON': [8,], 'OFF': [9,10], 'SRC_TS': 1, 'SRC_GROUP': 1, 'DST_NET': 'IPSC_BAR', 'DST_TS': 2, 'DST_GROUP': 2},
|
|
# Send the IPSC_FOO network Time Slice 1, Talk Group 1 to the IPSC_BAR network on Time Slice 2 Talk Group 2
|
|
# Repeat the above line for as many rules for this IPSC network as you want.
|
|
],
|
|
'PRIVATE_VOICE': [
|
|
]
|
|
},
|
|
'IPSC_BAR': {
|
|
'TRUNK': False,
|
|
'GROUP_HANGTIME': 5,
|
|
'GROUP_VOICE': [
|
|
{'NAME': 'STATEWIDE', 'ACTIVE': False, 'TO_TYPE': 'ON', 'TIMEOUT': 2, 'ON': [8,], 'OFF': [9,10], 'SRC_TS': 2, 'SRC_GROUP': 2, 'DST_NET': 'IPSC_FOO', 'DST_TS': 1, 'DST_GROUP': 1},
|
|
# Send the IPSC_BAR network Time Slice 2, Talk Group 2 to the IPSC_FOO network on Time Slice 1 Talk Group 1
|
|
# Repeat the above line for as many rules for this IPSC network as you want.
|
|
],
|
|
'PRIVATE_VOICE': [
|
|
]
|
|
}
|
|
}
|