Integrating Hardware Device with Zello
Zello wants to support as many hardware devices as possible, but this becomes quite challenging since there are so many great OEMs. Here are the requirements for making sure your device works with Zello:
- If the device is a phone or network radio, it must have an additional key that can be used for PTT (not volume or wake up keys).
- The button should launch Zello when it is in the background.
- The button should trigger PTT when pressed.
- The button should unlock the phone when pressed. This functionality needs to be added to the button in addition to the firmware changes below which will only launch Zello and use it as a PTT button.
Firmware changes
Zello simply does not have the capacity to respond to every request for integration and certification. However, we have developed a standard set of intents and APIs that would allow you to update your device firmware to ensure it works with Zello. Updating your firmware is the fastest way to ensure that Zello works in the event we do not have the engineering cycles to do the integration ourselves.
The hardware button must send the commands below to work as a PTT button and launch Zello. If a hardware button is assigned these commands, the button will trigger PTT if Zello is in the foreground and if Zello is in the background it will launch Zello before triggering PTT.
When the button is pressed:
context.sendBroadcast(new Intent("com.zello.ptt.down"));
When the button is released:
context.sendBroadcast(new Intent("com.zello.ptt.up"));
See more button commands in the section below.
Once the firmware changes have been made, test the button with Zello by mapping it in the Push-to-talk button settings.
Button and Knob Intents - Mobile Devices
PTT Button
PTT buttons should broadcast an intent when they are pressed and released. Extra buttons can also function as additional PTT buttons which can be mapped to contacts or channels within Zello push to talk button options.
Button |
Intent |
PTT |
com.zello.ptt.down com.zello.ptt.up |
PTT2 |
com.zello.intent.buttonExtra1.down com.zello.intent.buttonExtra1.up |
... |
... |
Emergency Button (SOS)
The emergency event (SOS) sends an SOS call alert to the most recent contact. In future updates, it will be available for mapping to a contact or channel.
Button |
Intent |
SOS |
com.zello.intent.buttonSOS.down com.zello.intent.buttonSOS.up |
Channel Knob
The continuous knob implementation can be used to scroll up and down channels.
Button |
Intent |
Continuous Knob |
com.zello.intent.channelUp com.zello.intent.channelDown |
Channel Button
For devices with fixed positions (i.e. Channel 01-10), you will need to map each knob position inside of Zello as an individual button. Your channels and contacts must have a two-digit numerical prefix indicating it's position on the knob before you begin mapping to the radio. As an example, "01 Station HQ" would be the first knob selection, while "02 EMS" would be the second knob selection, and so on.
Button |
Intent |
Fixed Position Knob |
com.zello.intent.setChannel The Intent's extras Bundle should include an Integer value with the key com.zello.extra.channel that specifies the channel knob position. |
Bluetooth Accessories
If you are developing a Bluetooth accessory that needs to work with Zello, the best option is to adhere to our standards below for recognizing your device. If you don’t follow our standards, you will need to be added to our development queue but we cannot guarantee when we can deliver the integration.
BLE (Bluetooth Low Energy)
For BLE, please send us the following information so we can add it to our device whitelist:
- Advertised Name
- Service UUID
- Characteristics UUID
Zello will add this to our whitelist within 3-5 days. You do not need the latest version of Zello once added. You simply need to log out and log back in to retrieve the latest device list.
Button |
Value bitmask |
PTT |
0x01 - primary PTT button 0x04 - secondary PTT button |
Channel Down |
0x08 |
Channel Up |
0x10 |
SOS |
0x02 |
SPP (Serial Port Profile)
For SPP, please add “PTT” (case-sensitive) to your advertised device name and Zello will automatically show it in the device list for pairing.
Button |
Intent |
PTT |
“+PTTS=P” for button going down & “+PTTS=R” for button coming up |
Channel Down |
“+PTTB1=P” for button going down & “+PTTB1=R” for button coming up |
Channel Up |
“+PTTB2=P” for button going down & “+PTTB2=R” for button coming up |
SOS |
“+PTTE=P” for button going down & “+PTTE=R” for button coming up |
Wired Accessories
Android
For wired Android accessories, an analog signal must be sent to the device to trigger the Zello PTT function. The pulse width (On = A) and the duration between pulses (Off = C) will vary per device and should be tested by your engineers.
The number of pulse sequences will distinguish between the press (1 pulse) and release (2 pulses) signals. This helps avoid confusion within the Zello app when the PTT button is pressed multiple times quickly and aids in eliminating open mic issues.
PTT Button Press & Release
This is the pulse sequence for ‘Press and Hold’ where the user presses the button and holds it while talking and then releases the button when done.
The suggested values are:
Value |
Duration |
Comments |
A |
150 ms |
Simulates the single press of a headset hook. |
B |
700 ms (min) |
The minimum amount of transmission/talk time. |
C |
200 ms |
The duration between consecutive headset hook presses. |
D |
250 ms (min) |
The minimum amount of time before the next pulse. |
For Toggle Mode, the button is pressed and released, then the user talks and when they have completed their transmission, they press and release the button again. Toggle Mode is a setting inside of the Zello app (default is Press and Hold).