(→Dongle Reflector/TalkGroup routing) |
(→Dongle Reflector/TalkGroup routing) |
||
Line 157: | Line 157: | ||
end | end | ||
end | end | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
</syntaxhighlight> | </syntaxhighlight> |
<syntaxhighlight lang="lua"> -- General modules require("Core")
-- Third-party libraries -- https://github.com/silentbicycle/lua-memcached local client = require("memcached") local cache = client.connect()
function getCountryCode(number)
- -- Number should have not less than 3 digits
- if number >= 100
- then
- local value = tostring(number)
- return string.sub(value, 1, 3)
- end
- return nil
end
function getCountryAndRegionCode(number)
- -- Number should have not less than 4 digits
- if number >= 1000
- then
- local value = tostring(number)
- return string.sub(value, 1, 4)
- end
- return nil
end
function validateGeographicRegionCode(number, code)
- local value1 = tostring(code)
- local value2 = tostring(number)
- local length1 = string.len(value1)
- local length2 = string.len(value2)
- return
- (length1 <= length2) and
- (value1 == string.sub(value2, 1, length1))
end
function validateRegularRepeater(parameters)
- return
- -- Link has a repeater kind
- (parameters.kind == LINK_TYPE_REPEATER) and
- -- It is not DV4mini
- (parameters.name ~= "DG1HT DV4mini") and
- -- And not Homebrew Repeater in DMO mode
- ((parameters.name ~= "Homebrew Repeater") or
- (parameters.values[VALUE_HOMEBREW_CONNECTION_MODE] ~= CONNECTION_MODE_HOTSPOT))
end </syntaxhighlight>
This function is used to route calls to other BrandMeisters <syntaxhighlight lang="lua"> function makeGlobalRouteForGroup(kind, destination)
- if
- (destination ~= 9) and
- (kind ~= LINK_TYPE_NETWORK) and
- (validateGeographicRegionCode(destination, "8") or
- validateGeographicRegionCode(destination, "9") or
- getCountryCode(destination))
- then
- local contexts = getContextTable()
- for _, parameters in pairs(contexts) do
- if parameters.name == "FastForward"
- then
- newRoute(parameters.object, 0, 0)
- end
- end
- end
end </syntaxhighlight>
<syntaxhighlight lang="lua"> function makeAutomaticRouteForNationalGroup(kind, number, destination, slot)
- if destination >= 100
- then
- local country = getCountryCode(destination)
- local contexts = getContextTable()
- for _, parameters in pairs(contexts) do
- if
- -- Do not route call back
- ((kind ~= parameters.kind) or
- (number ~= parameters.number)) and
- -- Remote should be a repeater
- validateRegularRepeater(parameters) and
- -- Remote ID length is great than country code
- (parameters.number >= 100) and
- -- Destination ID and Remote ID should have same country code as prefix
- (getCountryCode(parameters.number) == country)
- then
- newRoute(parameters.object, slot, 0)
- end
- end
- end
end </syntaxhighlight>
<syntaxhighlight lang="lua"> function makeAutomaticRouteForRegionalGroup(kind, number, destination, slot)
- if destination >= 1000
- then
- local region = getCountryAndRegionCode(destination)
- local contexts = getContextTable()
- for _, parameters in pairs(contexts) do
- if
- -- Do not route call back
- ((kind ~= parameters.kind) or
- (number ~= parameters.number)) and
- -- Remote should be a repeater
- validateRegularRepeater(parameters) and
- -- Remote ID length is great than region code
- (parameters.number >= 1000) and
- -- Destination ID and Remote ID should have same region code as prefix
- (getCountryAndRegionCode(parameters.number) == region)
- then
- newRoute(parameters.object, slot, 0)
- end
- end
- end
end </syntaxhighlight>
A OnDemand TalkGroup is connected by pressing the PTT in the future also possable via RRS <syntaxhighlight lang="lua"> function makeOnDemandRouteForGroup(kind, number, slot, destination, interval)
- -- Keep Group 9 as local
- if destination ~= 9
- then
- -- Subscribe repeater to group
- if kind == LINK_TYPE_REPEATER
- then
- cache:set(number .. "-" .. destination, tostring(slot), interval)
- end
- -- Route to subscribed group
- local contexts = getContextTable()
- for _, parameters in pairs(contexts) do
- if
- -- Do not route call back
- ((kind ~= parameters.kind) or
- (number ~= parameters.number)) and
- -- Remote should be a repeater
- (parameters.kind == LINK_TYPE_REPEATER)
- then
- local slot = cache:get(parameters.number .. "-" .. destination)
- if
- -- Subscription should be available
- (slot ~= nil)
- then
- newRoute(parameters.object, tonumber(slot), 0)
- end
- end
- end
- end
end </syntaxhighlight>
<syntaxhighlight lang="lua"> -- General modules require("Core")
-- Third-party libraries -- https://github.com/silentbicycle/lua-memcached local client = require("memcached") local cache = client.connect()
function getCountryCode(number)
- -- Number should have not less than 3 digits
- if number >= 100
- then
- local value = tostring(number)
- return string.sub(value, 1, 3)
- end
- return nil
end
function getCountryAndRegionCode(number)
- -- Number should have not less than 4 digits
- if number >= 1000
- then
- local value = tostring(number)
- return string.sub(value, 1, 4)
- end
- return nil
end
function validateGeographicRegionCode(number, code)
- local value1 = tostring(code)
- local value2 = tostring(number)
- local length1 = string.len(value1)
- local length2 = string.len(value2)
- return
- (length1 <= length2) and
- (value1 == string.sub(value2, 1, length1))
end
function validateRegularRepeater(parameters)
- return
- -- Link has a repeater kind
- (parameters.kind == LINK_TYPE_REPEATER) and
- -- It is not DV4mini
- (parameters.name ~= "DG1HT DV4mini") and
- -- And not Homebrew Repeater in DMO mode
- ((parameters.name ~= "Homebrew Repeater") or
- (parameters.values[VALUE_HOMEBREW_CONNECTION_MODE] ~= CONNECTION_MODE_HOTSPOT))
end </syntaxhighlight>
This function is used to route calls to other BrandMeisters <syntaxhighlight lang="lua"> function makeGlobalRouteForGroup(kind, destination)
- if
- (destination ~= 9) and
- (kind ~= LINK_TYPE_NETWORK) and
- (validateGeographicRegionCode(destination, "8") or
- validateGeographicRegionCode(destination, "9") or
- getCountryCode(destination))
- then
- local contexts = getContextTable()
- for _, parameters in pairs(contexts) do
- if parameters.name == "FastForward"
- then
- newRoute(parameters.object, 0, 0)
- end
- end
- end
end </syntaxhighlight>
<syntaxhighlight lang="lua"> function makeAutomaticRouteForNationalGroup(kind, number, destination, slot)
- if destination >= 100
- then
- local country = getCountryCode(destination)
- local contexts = getContextTable()
- for _, parameters in pairs(contexts) do
- if
- -- Do not route call back
- ((kind ~= parameters.kind) or
- (number ~= parameters.number)) and
- -- Remote should be a repeater
- validateRegularRepeater(parameters) and
- -- Remote ID length is great than country code
- (parameters.number >= 100) and
- -- Destination ID and Remote ID should have same country code as prefix
- (getCountryCode(parameters.number) == country)
- then
- newRoute(parameters.object, slot, 0)
- end
- end
- end
end </syntaxhighlight>
<syntaxhighlight lang="lua"> function makeAutomaticRouteForRegionalGroup(kind, number, destination, slot)
- if destination >= 1000
- then
- local region = getCountryAndRegionCode(destination)
- local contexts = getContextTable()
- for _, parameters in pairs(contexts) do
- if
- -- Do not route call back
- ((kind ~= parameters.kind) or
- (number ~= parameters.number)) and
- -- Remote should be a repeater
- validateRegularRepeater(parameters) and
- -- Remote ID length is great than region code
- (parameters.number >= 1000) and
- -- Destination ID and Remote ID should have same region code as prefix
- (getCountryAndRegionCode(parameters.number) == region)
- then
- newRoute(parameters.object, slot, 0)
- end
- end
- end
end </syntaxhighlight>
A OnDemand TalkGroup is connected by pressing the PTT in the future also possable via RRS <syntaxhighlight lang="lua"> function makeOnDemandRouteForGroup(kind, number, slot, destination, interval)
- -- Keep Group 9 as local
- if destination ~= 9
- then
- -- Subscribe repeater to group
- if kind == LINK_TYPE_REPEATER
- then
- cache:set(number .. "-" .. destination, tostring(slot), interval)
- end
- -- Route to subscribed group
- local contexts = getContextTable()
- for _, parameters in pairs(contexts) do
- if
- -- Do not route call back
- ((kind ~= parameters.kind) or
- (number ~= parameters.number)) and
- -- Remote should be a repeater
- (parameters.kind == LINK_TYPE_REPEATER)
- then
- local slot = cache:get(parameters.number .. "-" .. destination)
- if
- -- Subscription should be available
- (slot ~= nil)
- then
- newRoute(parameters.object, tonumber(slot), 0)
- end
- end
- end
- end
end </syntaxhighlight>