Simple External Application is a new interface of BrandMeister DMR Server. This link provides simple access for external audio applications such as network bridges or interactive voice applications. "Simple" means developer should not care about interleaving, locks and other stuff. Just plain voice header and AMBE frames of L3. One call simultaneously per connection.
This is incomplete version of specification!
Rewind is our under-layer protocol required for communication with BrandMeister DMR Server. It is based on UDP. Byte-order is LE.
Note: there are two sequence counters. One for routine messages and another one for real-time data (from REWIND_TYPE_DMR_DATA_BASE to REWIND_TYPE_DMR_AUDIO_FRAME). For real-time data you also should set flag REWIND_FLAG_REAL_TIME_1.
Protocol definition header is now available here
Keep-alive messages should be sent by client every 5 seconds. struct RewindVersionData should follow after Rewind header.
Server respond to this message with the same type but without content (just header).
Simple message to close connection, has no parameters and confirmations.
There is no special login message, new connection should be established by REWIND_TYPE_KEEP_ALIVE. REWIND_TYPE_CHALLENGE will be send by BrandMeister Server when it detects new connection. The parameter of this message is salt value (please check example bellow).
This message is result of processing message REWIND_TYPE_CHALLENGE by client. The parameter is value of calculation SHA256 hash function (please check example bellow). A result of successful authentication procedure will be empty message REWIND_TYPE_KEEP_ALIVE.
Some kind of debugging extension. This message will be send by BrandMeister Server. Parameter of message is UTF-8 encoded text (please check example bellow).
Use this message to drop incoming call from the server. Message has no content.
Using this message you can configure options of connection. struct RewindConfigurationData
On success BrandMeister Server will respond with REWIND_TYPE_CONFIGURATION without content.
To simplify the process of administration and reduce amount of administrative work an application could make subscription to DMR data by itself immediately after authentication procedure. struct RewindSubscriptionData should follow after Rewind header.
On success BrandMeister Server will respond with REWIND_TYPE_SUBSCRIPTION without content.
You can make several subscriptions for connection. Subscription procedure is optional, all routing stuff can be done by LUA on the server side.
This message cancels subscriptions created by REWIND_TYPE_SUBSCRIPTION.
This message has two options:
On success BrandMeister Server will respond with REWIND_TYPE_CANCELLING without content.
This message allows to check actice call sessions. You have to pass `struct RewindSessionPollData`:
You will get the same structure as a response. Field state will have 0 if there no active calls or 1 if there an active call.
This is a base number for group of messages:
Both messages may be sent several times at once (2-3 times with same sequence number) to be sure on successful delivery.
This message should contain triple AMBE frames of mode 33. Each of 9 bytes, 27 bytes total.
This message contains value of LC (10 bytes), which can be transferred via embedded signalling during voice call. Suitable to transfer Talker Alias and in-call GPS.
You will get struct RewindSuperHeader in parallel with normal DMR header (REWIND_TYPE_DMR_DATA_BASE + 1)
This header offloads External Application from database lookups to get callsigns of callee and caller.
Note: BrandMeister Server will send these messges only if client configured its sending with REWIND_TYPE_CONFIGURATION.
External Application can send struct RewindSuperHeader instead of normal DMR header to start the call.
You call pass callsigns at the fields sourceCall and/or destinationCall (and 0 at corresponding ID field) to make BrandMeister lookup right ID.
Talker Alias will be automatically set to sourceCall it is defined.
This message will be sent by BrandMeister server in case when sourceCall or destinationCall could not be resolved during processing REWIND_TYPE_SUPER_HEADER. This message will contain text of failure like it is on REWIND_TYPE_REPORT
Our DigestPlay is supplied with client library that implements transport layer and login procedure.