Zello Hardware Partner Technical Integration
This article is written for: ✅ Zello Work ❌ Zello Friends & Family.
Many Zello users are driving, working in noisy environments, or need to communicate discreetly. Finding the right hardware, whether that means a hands-free headset, a rugged device, or something discreet, can make a real difference.
Zello works with manufacturers to test and certify hardware that works reliably with our app. Certified hardware has passed Zello's internal testing and is fully supported. Other hardware may work with Zello, but functionality isn't guaranteed and Zello cannot provide technical support for it.
If you have hardware that could help people push to talk in any of the scenarios mentioned above, getting it Zello-certified is worth it. Certified hardware is listed on the Zello website, making it easy for users to find and trust.
How to get your hardware Zello-certified and listed on our website
- Ensure at least one button on your hardware works as true PTT (press-talk-release).
- Follow the integration guide below for handheld devices, Bluetooth accessories, and wired accessories.
- Email us at [email protected] with the necessary information (see instructions depending on hardware type below), along with:
- Images of your hardware
- Price
- Purchase link
- Speaker loudness (in dB)
- Ratings (e.g., IP68, IP67, waterproof, etc.)
- Battery life
- Any other relevant information
- We'll send you a validation checklist for you to test your hardware. Once you've completed the checklist, send the results back to us.
- Send 2-3 samples to Zello headquarters for verification:
- Address: 1717 West 6th St. Suite 450, Austin, TX 78703
- If your hardware passes verification, we'll certify it and add it to the Zello website.
- List Zello compatibility on your website with a link back to ours so that Zello users can confirm compatibility.
Handheld devices
Integrating hardware devices 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.
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
|
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
iOS: MFI
Zello's custom MFi protocol enables low-latency, secure PTT control for iOS accessories, including press/release events, channel switching, emergency triggering, and more. To request access to the MFi protocol documentation or discuss integration for your use case, please reach out to our team at [email protected].
Android: USB-C CDC
Adding support for a new USB-C device will require at least Zello v6.13. The below spec assumes the device already conforms to the relevant hardware platform requirements for general data transmission, audio in/out, and to control system functionality e.g. volume.
Whitelisting and certification
To add support for a new USB-C accessory, the device must be whitelisted by Zello. Manufacturers are required to provide the following information:
- Vendor ID (VID): May be shared across all accessories produced by the same organization.
- Product ID (PID): Must be unique for each individual product.
To begin the integration process, please submit the VID and PID details to [email protected] . Zello will provide a sample application build for testing and debugging the accessory.
Once the accessory has successfully completed certification, it will be whitelisted in the production version of the Zello app, allowing the device to be automatically recognized without user configuration.
USB interface requirements
Zello expects USB-C accessories to expose a CDC-DATA class interface.
- Zello opens a connection to this interface over a USB endpoint.
- This interface is used exclusively for serial communication related to accessory control events.
Note: Additional interfaces (for example, HID or Audio) may be implemented as required by the manufacturer’s hardware design. These interfaces must conform to their respective specifications, but are outside the scope of the CDC-DATA interface described here.
PTT button press and release handling
Once connected, the accessory is expected to send button events as two-byte messages:
- First byte: Identifies the button or function (keycode)
- Second byte: Indicates the button state
- Odd value: Button pressed
- Even value: Button released
Primary keycodes:
| Keycode | Functionality |
| 0x42 | Replay last message |
| 0x43 | Selection next/up |
| 0x44 | Selection previous/down |
| 0x45 | SOS/Emergency Key |
| 0x46 | Primary PTT |
| 0x4D | Multi-function Key |
| 0x66 | Secondary PTT Key |
| 0x67 | Toggle Zello status (busy/available/solo) |
| 0x68 | Change selection mode (recents/contacts/channels/ indexed contacts) |
Reserved keycodes:
| 0x56 | Volume Up/Down |
Volume controls may be implemented per the USB-IF audio class 3.0 and HID specifications found on , but doing so results in Zello receiving a signal of 0x56 when the volume is adjusted. Zello will ignore this signal and it won’t be used for other functionality.
Legacy
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. |
Value Duration Comments
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).