Getting started with concrete real world examples¶
Below are some script examples going from very basic to getting more and more complex
Talk Duplicator¶
Use Case If I press a talk button on channel x
I want channel y
to follow channel x
Functional Description To make this behavior we set an event to trigger if the talk state
of channel 1 (x) changes. When the event run's the value of the talk state
of channel 1 is assigned to channel 2 (y)
event channel.talk[1]
channel.talk[2] = channel.talk[1]
end
Channel Mute¶
Use Case When i turn down the level of a channel its lowest volume is -40 dB, I want this to be completely muted.
Functional Description To make this behavior we need to set an event on all 32 channel levels
, this is done in a for loop. in the event we check if the value is lower than -39, if so we set the channel listen
to off effectively muting the channel, if the value is higher, it will enable the listen again.
for i = 1 to 32
event channel.level[i]
if event.value <= -39
channel.listen[event.index] = channel.listen.off
else
channel.listen[event.index] = channel.listen.on
end
end
end
Volume limiter¶
Use Case The user would prevent either setting the output level to high or to low.
define max.vol 0
define min.vol -20
event audio.main.level
if audio.main.level >= max.vol
audio.main.level = max.vol
end
if audio.main.level <= min.vol
audio.main.level = min.vol
end
end
Local and Remote talk on GPO¶
Use Case The user would like to have the GPIO output to be active when a active talk is present from the "own" device or it receives a active talk from another device.
define channel 1
define GPOport 1
function set_gpo()
gpio.output[GPOport] = channel.input.talk[channel] == channel.input.talk.active ? gpio.output.on : channel.talk[channel] == channel.talk.on ? gpio.output.on :gpio.output.off
end
event channel.input.talk[channel]
set_gpo()
end
event channel.talk[channel]
set_gpo()
end
Remote Talk via GPIO Command¶
Use Case I have an operator that does not have free hands
and a WPX as device. The operator can use a foot-switch to enable a talk. The foot-switch is connected to the GPI of a 4-Wire port. I want to control the talk of a channel on the WPX with the foot-switch
Functional Description On the 4Wire port we will assign a group to a free channel and set its Channel Mode to GPIO Control
The GPI with the foot-switch connected will be set to function gpio control
with the previous assigned channel. this makes this gpio control command available on all devices with this group assigned to one of its channels.
In the Script we wil set an event on incoming changes on the GPIO control property of the said channel. once the event triggers it will set the talk according to the value of the GPIO control property.
/*
this script takes the GPIO (remote inputs) from 1 channel
if anything sends a GPIOcontrol command to what is assigned to the remote channels it will set the talk of the operated channel.
*/
define remote_channel 32
define operated_channel 1
event channel.input.gpio[remote_channel]
if channel.input.gpio[remote_channel] == channel.gpiocontrol.on
channel.talk[operated_channel] = channel.talk.on
else
channel.talk[operated_channel] = channel.talk.off
end
end
BPX Button Lock¶
Use Case I am using wireless sports beltpacks under overalls and usually have a talk always enabled, occasionally we want to toggle a talk. For unintentional toggling of talks or undesired sending of calls we want to be able to block/unblock the functionality of the 4 buttons with a key combination.
Functional Description To achieve the desired behavior we start by creating 2 functions, one to lock the buttons and one to unlock the buttons. The lock button function will override the default Green-GO behavior by setting an event on the button and doing nothing in the event, the unlock button clears this events on the buttons.
the script will trigger a timer if lock.button.2 is pressed while lock button 1 was already pressed. When the timer event is triggered a final check if both button one and 2 are still pressed will toggle the lock state.
finally the script checks on the ui.draw event a check is done if the buttons are locked and one or multiple buttons are pressed, in that case a lock screen will be drawn to inform the user that the buttons are locked.
define lock.button.1 ui.bpx.3
define lock.button.2 ui.bpx.4
define time.delay 2000
var locked = 0
function lock_buttons()
if ui.bpx.1 != lock.button.2
event ui.button[ui.bpx.1]
end
end
if ui.bpx.2 != lock.button.2
event ui.button[ui.bpx.2]
end
end
if ui.bpx.3 != lock.button.2
event ui.button[ui.bpx.3]
end
end
if ui.bpx.4 != lock.button.2
event ui.button[ui.bpx.4]
end
end
end
function unlock_buttons()
if ui.bpx.1 != lock.button.2
cancel ui.button[ui.bpx.1]
end
if ui.bpx.2 != lock.button.2
cancel ui.button[ui.bpx.2]
end
if ui.bpx.3 != lock.button.2
cancel ui.button[ui.bpx.3]
end
if ui.bpx.4 != lock.button.2
cancel ui.button[ui.bpx.4]
end
event ui.button[lock.button.1]
end
end
// make sure not disable the default function of lock button 1
event ui.button[lock.button.1]
end
// start timer when lock button 2 is pressed after lock button 1
event ui.button[lock.button.2]
if ui.button[lock.button.2] == ui.button.pressed
if ui.button[lock.button.1] == ui.button.pressed
timer[1] = time.delay
end
end
end
// if both buttons are pressed after the set time toggle the lock state
event timer[1]
if ui.button[lock.button.2] == ui.button.pressed
if ui.button[lock.button.1] == ui.button.pressed
if locked == 0
lock_buttons()
locked = 1
else
unlock_buttons()
locked = 0
end
end
end
end
// draw the lock screen
function draw.lock()
ui.window(0, 20, ui.bpx.display.width, 24)
ui.fontmode = ui.fontmode.hcenter
ui.clear(ui.color.white)
ui.color = ui.color.black
ui.draw.text.at(2,2, "LOCKED")
end
// check if any button is pressed
function check.buttons()
if ui.button[ui.bpx.1] == ui.button.pressed
return 1
end
if ui.button[ui.bpx.2] == ui.button.pressed
return 1
end
if ui.button[ui.bpx.3] == ui.button.pressed
return 1
end
if ui.button[ui.bpx.4] == ui.button.pressed
return 1
end
end
// take over screen if locked and at least one button is pressed
event ui.draw
if locked
if check.buttons()
ui.clear()
draw.lock()
end
end
end
Beacon GPI¶
Use Case I want to be able to acknowledge incoming attentions for cue's from the GPI (on the USB port) of the beacon.
Functional Description A function is created for the actual functionality, as both GPI inputs will acknowledge the incoming Cue attentions. The function will send a cue ready signal to all channels. On two ui.button[1]
andui.button[2]
events a check if done if closure of the contact was the trigger, if so, the above function is called.
/*
this script sets both GPI input's on the Beacon to "acknowledge" current incoming cues
*/
// when fired this function will set all of the 32 channels to send back an acknowledgement
function send_ready()
for i = 1 to 32
channel.cue[i] = channel.cue.ready
end
end
// an event for each of the two inputs when the contact is closed (button.pressed) the send_ready function is triggered
event ui.button[1]
if ui.button[1] == ui.button.pressed
send_ready()
end
end
event ui.button[2]
if ui.button[2] == ui.button.pressed
send_ready()
end
end