Skip to content
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

TNC-to-Host feedback frames #2

Open
thombles opened this issue Jan 15, 2025 · 6 comments
Open

TNC-to-Host feedback frames #2

thombles opened this issue Jan 15, 2025 · 6 comments

Comments

@thombles
Copy link

thombles commented Jan 15, 2025

KISS has always been, well, simple, and this puts certain limits on how the host can use the TNC. For example, it doesn't know when the channel is occupied or when or whether a packet has been transmitted. For a simple protocol like APRS this isn't an issue - a dropped or delayed packet is no big deal.

With M17 offering arbitrary stream and packet modes, applications may be developed that require estimates of channel utilisation, knowing whether transmissions were achieved within a certain time, or some form of backpressure to maximise throughput. For a transceiver application, PTT state would be important information to include in the GUI. All of this data surely exists inside the TNC and it's kind of a bummer if the host can't access it just because it's on the other side of a KISS link.

Since KISS is already being used creatively here (spanning multiple ports with different protocols, using an empty data frame to indicate underrun), why not flex it a little more?

Some events I would find very useful:

  • Data Carrier Detect on
  • Data Carrier Detect off
  • PTT on: started stream-type transmission
  • PTT on: started packet-type transmission (potentially multiple consecutive packets)
  • PTT off
  • One logical packet has been transmitted
  • A packet sent via port 0 or 1 has been dropped as the internal queue is full

These could be provided as data frames on, say, port 3. What do you think?

@mobilinkd
Copy link

mobilinkd commented Jan 15, 2025 via email

@thombles
Copy link
Author

Perfect, will do. Thanks!

@mobilinkd
Copy link

mobilinkd commented Jan 15, 2025 via email

@thombles
Copy link
Author

Thanks for all this! I will be sure to take a close look before diverging from basic KISS. Completely agreed regarding Postel's law - I'm confident that the requirements mentioned here could be implemented in a way which doesn't require any configuration and will degrade gracefully if either side doesn't support it, which I believe would be an improvement on ACKMODE.

I'm developing a project currently which implements and uses both the TNC and host sides of the KISS link. I have to finish a few other things first but I expect in a month or two it will be a convenient testbed for putting some of the ideas from this thread into code.

Rather than PTT, I think some NACK signal for BCL (busy channel
lockout) would be more useful. What other purpose do you see in having a
PTT on/off indicator?

BCL is the obvious use case, right. I'm not sure if I'd call it a NACK since the TNC will still get your stream on air as soon as it's able to. As a voice operator who pressed the "transmit" button I would definitely like feedback firstly that I'm not actually on air yet, and secondly when I am on air. If there were updates for DCD and PTT you could observe this neatly: first the channel is in use, then it isn't and CSMA delays are underway, then if nobody else jumped in the PTT comes on.

Apart from that I think it's just nice feedback as an operator to have accurate PTT and DCD status so you can intuit if your radio is transmitting in the pattern you expected or if the channel is really congested. This is particularly relevant to TCP KISS because you can easily put your radio and TNC in one room and operate from another device in another room over WiFi.

@mobilinkd
Copy link

mobilinkd commented Jan 16, 2025 via email

@thombles
Copy link
Author

Interesting question. I suspect the most useful meaning is "does the TNC consider the channel to be occupied such that we cannot transmit?" without trying to specify how that is accomplished. If we liked this approach, the name DCD might be misleading.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants