--- title: "RT+ on the Omnia.9 internal RDS encoder" slug: "omnia9-rds-rtplus-md" description: "RT+ on Omnia encoders tags RadioText for song title, artist, and URLs, with HTTP and UECP setup, limits, escaping, and status checks." tags: ["metadata", "omnia.9", "RDS Encoder", "RadioText", "RT Plus"] updated: 2026-11-10T12:05:48Z published: 2026-11-10T12:05:48Z canonical: "docs.telosalliance.com/omnia9-rds-rtplus-md" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.telosalliance.com/llms.txt > Use this file to discover all available pages before exploring further. # RT+ on the Omnia.9 internal RDS encoder > **Note** > > Applies to the Omnia.9 / Omnia.9sg / Omnia.7 / Omnia Enterprise 9s internal RDS encoder. RT+ is not a separate text delivery mechanism. It only tells the receiver *which part* of the RadioText already being transmitted is the song title, which part is the artist, and which part is a web address. So there is no second endpoint and no second text to send: the tags go inside the RadioText string, and the encoder strips them out before the text goes on air. ## Tagging --- Open a field with `\+` plus a two-character class, close it with `\-`. | **Tag** | **RT+ class** | **Use** | | --- | --- | --- | | `\+TI` | 1 | song title | | `\+AR` | 4 | artist | | `\+WW /` `\+UR` | 29 | web address | | `\+NN` | NN | any RT+ class by its number from the spec, `00` to `63` | Example, in the RadioText field: ```plaintext Now on air: \+TILucky\- by \+ARBritney Spears\- ``` What goes on air is `Now on air: Lucky by Britney Spears`, with group 3A announcing the RT+ ODA (AID `0x4BD7`) and group 12A carrying the offsets. > **Important** > > The backslash is part of the tag. A bare `+TI` is just text and is transmitted literally. The numeric form needs **two** digits -- `\+05`, never `\+5`. Two caps worth knowing: - Only **two** tagged fields per RadioText message reach the air, taken in ascending class order. Title and artist both fit; a third tag is dropped. - The second field is limited to 32 characters by the RT+ spec. The encoder automatically sends the longer of the two first, so this only bites when both fields are long. ## Nothing to enable RT+ needs no license option and no setting of its own. It starts transmitting as soon as a tag appears in the RadioText. The requirements are only the ones RadioText already has: - **RDS Mode** = `Internal` (not `External Input 1/2`) - **RadioText** enabled The factory default RadioText ships with a tag in it already ( `\+Wwwww.omniaaudio.com\-`), so an untouched unit is transmitting RT+ out of the box. ## Control characters in the RadioText These six characters are control characters to the encoder. If one is meant to appear in the text, escape it with a backslash: | **Character** | **Escape as** | **What it does unescaped** | | --- | --- | --- | | : | \: | everything before it becomes a display-timing prefix | | / | \/ | splits the RadioText into two rotating messages | | < | \< | scroll the text left | | > | \> | scrolls the text right | | \| | \\| | word wrap | | \ | \\ | starts an escape sequence | > **⚠Warning** > > The colon and the slash are the two that turn up in real song metadata. AC/DC splits one message into two; `Hybrid Theory: Reanimation` loses everything before the colon. A metadata source feeding the RT field should escape both. The deliberate uses of the same characters: ```plaintext 20s:Now Playing\: %title%/10s:Omnia.9 Internal RDS Encoder/10s:\+Wwwww.om ``` That is three messages in rotation ( / ), displayed for 20, 10 and 10 seconds ( NNs : ), with the literal colon in "Now Playing:" escaped and an RT+ URL tag on the third. ## Over HTTP The tags work through the normal parameter interface, same as any other RadioText: ```plaintext http://:7380/parameter/fm/rds/rds_rt=Now on air: \+TILucky\- by \+A ``` The URL is percent-decoded before the value reaches the encoder, so a backslash may be sent raw or as **%5C** -- both arrive as a backslash. Use **%5C** if the HTTP client in between rewrites backslashes. > **⚠Caution** > > In this path form the value is split at the **last =**, so a literal **=** in the RadioText makes the request fail with 404. Send it as `/parameter/fm/rds/rds_rt?set=...` instead, where the value is taken from the query string. In *that* form a literal **+** has to be sent as **%2B**, because the query string is form-decoded. ## Checking that the tags parsed Read the encoder's own readout back: ```plaintext http://:7380/parameter/fm/rds/rds_cur_rt ``` That returns the RadioText as the encoder is currently transmitting it, with the tags already consumed. If the backslashes are still visible in the response, the tags did not survive the URL and nothing was tagged. The same value is the **Current RT** field in the RDS menu. > **▢Important** > > This is a status readout of the running encoder, not a dry run. There is no offline state to test in: setting **rds_rt** on a unit whose RDS Mode is **Internal** changes what is on the air immediately, and the readout only moves because the encoder is clocking the new text out. What it saves is needing a receiver to find out whether the tags were understood -- the answer is visible in the same second, and putting the previous string back is one more request. The readout doubles as a check that the mode is right, because it carries four distinguishable states: | **Response** | **Means** | | --- | --- | | the parsed text | RDS Mode Internal , RadioText on -- this is the one you want | | empty | RDS Mode is Off | | off | RDS is on but RadioText is disabled | | text you did not send | RDS Mode is External Input 1/2 , so this is the incoming encoder's text decoded off the MPX, and nothing you send to **rds_rt** reaches the air | ## **UECP** --- RT+ also works over UECP. In ASCII mode the command is **RT+** (also accepted as **RTP** or **RTPLUS** ) and takes up to six numbers, **class**, **start**, **length** for each of the two fields; the encoder converts those into the same internal tags. Binary UECP RT+ is supported as well. None of this is required if the RadioText is set directly.