-
Notifications
You must be signed in to change notification settings - Fork 40
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Show RadioText for stations that don't transmit end-of-message code #77
Comments
Elaborating more on the pros and cons of our choices above: Method 1: Make 'partials' the defaultIt can be confusing that the default operation of Redsea is to hide incomplete text messages. If the default were changed to display them it would certainly fix this issue. However, it would push the burden of evaluating the completeness of a message to the user, which may not be desirable. Should we also display partial PS names by default? Or should the existence of the Method 2: Flush the message buffer when a new message beginsThe beginning of a new RT message is signaled with the segment address going back to zero. We could detect this and print whatever is in the message buffer at that point, if the buffer has been contiguously received. Question: But how can we be sure that the end of the message wasn't lost in noise? Should we somehow track the repeat rate of 2A and detect when a message is probably missed? Or should we just take the risk that some incomplete messages will get printed? There's an edge case: A new message begins and we have to flush the message buffer. The Method 3: Wait for repeatIf a message repeats identically then we can be somewhat sure that it's a complete message. However, there's an ambiguity in detecting a repeated message with this method; here's an example.
The last group is lost in noise. On the second repeat, we get everything:
When the second group is received we detect that it's a repeat of the previous message. But we don't in fact want to print the message yet, otherwise we end up printing |
Regarding Method 2 above, there are stations that will actually forget to transmit the last four characters of the RT message and start the next one already. It would seem like a transmitter bug, however it will only be seen in logging receivers like redsea, and not on actual LCD displays, because it happens so fast. Take Heart UK, for instance (0xC36C):
If we don't wait for an end-of-message marker we end up printing the string ending in "North Suffo", instead of "North Suffolk". Sometimes, the station will transmit the "lk" along with the end-of-message marker, and no A/B clear flag. On the other hand, this could be useful for debugging RDS encoders. Solutions brainstorming:
|
Some stations don't send a RadioText string terminator, making it harder to guess when a message has been completely received. This update addresses this issue; redsea will decode the radiotext for most of these stations even without the --show-partial switch. An off-by-one bug was also addressed that occasionally chopped off the end of some RadioText messages. A few stations are still evading radiotext-to-string conversion. It has mostly to do with surprising uses of the A/B flag. See the wiki for more.
More research in the wiki: https://github.com/windytan/redsea/wiki/Some-RadioText-research |
Some stations omit the
0x0D
end-of-string character from RadioText. As a result, redsea does not recognize that the whole message was received and never prints the message. The message is only seen when--show-partial
is specified. For example, this station is transmitting a 24-character unterminated message:This should instead show up in the
radiotext
field.Graphical programs like RDS Spy don't have this problem. They don't have to consider whether a RadioText message is complete or not, because they don't produce a decoded log. A complete message will always quickly overwrite a partial one on the screen and the user doesn't notice.
I can think of a few solutions:
radiotext
field (leads to more cluttered output), orradiotext
whenever a new message begins and the previous one didn't have an end code. Checks should be made that no 2A group was missed in between (due to errors). This, too, will randomly display partial messages as complete ones e.g. when the text changes mid-message. For some groups, it will show both fields. Orradiotext
if a message was repeated twice, it wasn't printed for other reasons, and no 2A groups were missed.With redsea it would be ideal to have each line of JSON only contain self-sufficient information by default (complete messages). But on the other hand, people familiar with RDS are used to seeing strings of text slowly build up from smaller parts.
The text was updated successfully, but these errors were encountered: