> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sonoransoftware.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Hardware Protocols and Standards

> External PTT interfaces, platform support, and original specifications.

For pairing instructions, see [Radio Hardware](/radio/hardware).

## Keyboard and HID input

**iOS and Android.** OS-paired keyboard controls provide physical key-down/key-up
events through [GCKeyboard](https://developer.apple.com/documentation/gamecontroller/gckeyboard)
on iOS and [hardware key events](https://developer.android.com/develop/ui/views/touch-and-input/keyboard-input/commands)
on Android. A media play/pause toggle is not a held PTT button.

## AINA A.18 BLE

**iOS and Android.** [AINA A.18 specification](https://ainaptt.com/wp-content/uploads/2024/08/AINA_APTT_Communication_Protocol_v18_aina.pdf),
for Voice Responder firmware FW2251A1 or later.

| Field | Value |
| - | - |
| Service | `127FACE1-CB21-11E5-93D0-0002A5D5C51B` |
| Button characteristic | `127FBEEF-CB21-11E5-93D0-0002A5D5C51B` |
| Primary / secondary | Bits `0x01` / `0x04` |
| Heartbeat | Bit `0x80`; two-second held-button watchdog |

## Jabra / BlueParrott BLE

**iOS and Android.** [BlueParrott BLE specification](https://blueparrott-developer.net/Home/InterfaceSpecificationBLE).

| Field | Value |
| - | - |
| Service | `95665A00-8704-11E5-960C-0002A5D5C51B` |
| Button characteristic | `66339E60-D55A-11E5-B7CB-0002A5D5C51B` |
| Mode characteristic | `8D2EDDE0-D55A-11E5-A6C4-0002A5D5C51B` |
| Setup | App name `Sonoran Radio`, key `sdk`, mode `2` |
| Events | `0` release, `1` press |

## PTT-Z BLE

**iOS and Android.** [PTT-Z01 protocol reference](https://github.com/dannymcc/android-ble-ptt).
Advertised name starts with `PTT`; service `FFE0`, notify characteristic `FFE1`.
One byte: `01` press, `00` release. The first release arms input.

## Blu-PTT BLE

**iOS and Android.** [Blu-PTT implementation reference](https://www.b4x.com/android/forum/threads/ble-manager-scan2.110849/)
and [ProPTT2 control reference](https://dev.proptt2.com/docs-net-bluetooth.html).

| Field | Value |
| - | - |
| Advertised service | `2320AE58-8394-4652-95F7-0A872AC0958F` |
| Notification service | `89A8591D-BB19-485B-9F59-58492BC33E24` |
| Button characteristic | `894C8042-E841-461C-A5C9-5A73D25DB08E` |
| Events | `01` press, `00` release |

Named Blu-PTT devices can also be discovered without an advertised service UUID.
Connection verifies the notification interface. The first release arms input.

## Android BlueParrott Classic

**Android.** [BlueParrott Classic specification](https://blueparrott-developer.net/Home/InterfaceSpecificationBluetoothClassic).
Uses `+ANDROID` vendor commands with qualifier `BP`, app name `Sonoran Radio`,
key `sdk`, and mode `2`. Matching state confirmation enables `PTT,P` press and
`PTT,R` release events from the selected headset.

## Android phone-button broadcasts

**Android.** [Zello OEM specification](https://support.zello.com/zw/zello-hardware-partner-technical-integration).

| Button | Press | Release |
| - | - | - |
| Primary | `com.zello.ptt.down` | `com.zello.ptt.up` |
| Secondary | `com.zello.intent.buttonExtra1.down` | `com.zello.intent.buttonExtra1.up` |

The mapper must broadcast implicitly or target `com.sonoranradio`. The receiver
runs while the adapter is selected and the app is in the foreground.

## iOS MFi PTT SDK

**iOS.** [MFi PTT SDK v1.1](https://blueparrott-developer.net/Home/CustomMfiPttProtocol),
using ExternalAccessory protocol `com.pttsdk.ea.protocol`.

Packets contain start byte `3C`, type, big-endian command and payload length,
optional payload, then end byte `3E`. Zero-payload Notify type `02` commands
`1001` and `1005` represent press and release. The first release arms input.

## Android Bluetooth SPP

**Android.** [Zello serial specification](https://support.zello.com/zw/zello-hardware-partner-technical-integration).
Paired device name contains case-sensitive `PTT`; SPP UUID
`00001101-0000-1000-8000-00805F9B34FB`.

```text theme={null}
+PTTS=P   button down
+PTTS=R   button up
```

The first release arms input.

## Android USB-C CDC

**Android.** [Zello USB-C specification](https://support.zello.com/zw/zello-hardware-partner-technical-integration).
A CDC-DATA interface with one bulk-IN endpoint carries two-byte messages:
key code, then state. Odd states mean pressed; even states mean released.
Primary PTT is `0x46`; secondary PTT is `0x66`. Audio uses its separate interface.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.