Skip to content

Inbound APRS message relay into JS8 mesh.#134

Merged
Chris-AC9KH merged 3 commits into
JS8Call-improved:masterfrom
punk-kaos:master
Jan 16, 2026
Merged

Inbound APRS message relay into JS8 mesh.#134
Chris-AC9KH merged 3 commits into
JS8Call-improved:masterfrom
punk-kaos:master

Conversation

@punk-kaos

Copy link
Copy Markdown
Collaborator

Adds support for inbound relay from APRS. Listens for message packets in APRS for callsigns in our heard list. If heard it relays them to the host under the existing @APRSIS format.

Example: KI7WKZ: @APRSIS MSG TO: N0CALL THIS IS A MESSAGE FROM APRS! DE APRSCALL-6.

This will be placed in the users message inbox as coming from APRS.

This allows for bidirectional APRS messaging across HF Via JS8 to augment our current unidirectional outbound APRS features.

USE CASES: I hike and camp a lot in remote areas. I often relay APRS messages via NVIS JS8 message out of a deep canyon where VHF wouldn't reach to SMS to reach home, this would allow me to get return messages or to contact WXBOT for weather reports for example.

@Chris-AC9KH

Copy link
Copy Markdown
Collaborator

Kelly, this looks good. As we work on mainwindow.cpp let's try to continue to move affected MainWindow class member functions out of that file if we can. I would say anything reasonable, especially over 50 lines like processTxQueue() could be stripped out of that file. I didn't get 'em all over New Year's. I just stopped at my goal of stripping at least 4,000 lines of code out of that file. At that point we decided that was invasive enough for one sitting. Then as we work on stuff in it, continue that process more in a one-step-at-a-time approach :-)

@punk-kaos

Copy link
Copy Markdown
Collaborator Author

Kelly, this looks good. As we work on mainwindow.cpp let's try to continue to move affected MainWindow class member functions out of that file if we can. I would say anything reasonable, especially over 50 lines like processTxQueue() could be stripped out of that file. I didn't get 'em all over New Year's. I just stopped at my goal of stripping at least 4,000 lines of code out of that file. At that point we decided that was invasive enough for one sitting. Then as we work on stuff in it, continue that process more in a one-step-at-a-time approach :-)

Noted... I'll confess I actually wrote this pre-refactor and just massaged it into the new format after the fact. I probably should have paid a LITTLE more attention to the changes in mainwindow.

@Chris-AC9KH

Copy link
Copy Markdown
Collaborator

Yeah, the goal with that is to continue breaking the MainWindow class down. Design a new UI with Qt Creator, then hook the back end engine up to it and strip the current UI integration out of the back end. This is not gonna happen overnight, however! But it's what I need to do to code up an iOS application with SwiftUI, port the back end to Objective-C and hook it up to the front end for an iPad app that can be distributed on the App Store :-)

@punk-kaos

Copy link
Copy Markdown
Collaborator Author

Yeah, the goal with that is to continue breaking the MainWindow class down. Design a new UI with Qt Creator, then hook the back end engine up to it and strip the current UI integration out of the back end. This is not gonna happen overnight, however! But it's what I need to do to code up an iOS application with SwiftUI, port the back end to Objective-C and hook it up to the front end for an iPad app that can be distributed on the App Store :-)

Might be worth looking at my Android repo when you get a moment. I split the engine out into its own module that's designed to be pretty portable... The idea being that if someone wanted to port to iOS they'd have a bit of a head start.

@Chris-AC9KH

Copy link
Copy Markdown
Collaborator

@punk-kaos excellent! I may end up stealing your work there! :-)

@punk-kaos

Copy link
Copy Markdown
Collaborator Author

@punk-kaos excellent! I may end up stealing your work there! :-)

Beauty of collaboration, its there for the taking ;)

@Chris-AC9KH

Copy link
Copy Markdown
Collaborator

As long as you're working on MainWindow class, feel free to strip another thousand lines from it :-) Of course, not required. But just in case you got some free time........... LOL!

@wmiler wmiler left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add some doxy blocks to the functions in APRSISClient.cpp that you added. Feel to fixup any docs that are already there. Most of the blocks I added were for testing, so prolly aren't the best, lol!

Otherwise, looks fine. Maybe also a doxy block about how to actually use it.

@punk-kaos

Copy link
Copy Markdown
Collaborator Author

Please add some doxy blocks to the functions in APRSISClient.cpp that you added. Feel to fixup any docs that are already there. Most of the blocks I added were for testing, so prolly aren't the best, lol!

Otherwise, looks fine. Maybe also a doxy block about how to actually use it.

Whoops, that was on my to-do! I'll get that done!

@wmiler wmiler added the documentation Improvements or additions to documentation label Jan 16, 2026
@punk-kaos

Copy link
Copy Markdown
Collaborator Author

Ok, split out functions better and added some DOXYGEN docs.

/**
* @brief Handles inbound APRS-IS messages and enqueues JS8 relays.
*/
class AprsInboundRelay : public QObject {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a new class, shouldn't this be moved to JS8_Main with the APRSISClient since it's not tied to a .ui file like the rest of the files in this folder?

Comment thread JS8_UI/mainwindow.cpp Outdated
//---------------------------------------------------------- MainWindow
#include "mainwindow.h"

#include "aprsinboundrelay.h"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think here I would declare this include in the mainwindow header.

@Chris-AC9KH

Copy link
Copy Markdown
Collaborator

@punk-kaos other than a couple minor changes I'm requesting, this looks good!

@punk-kaos

Copy link
Copy Markdown
Collaborator Author

@punk-kaos other than a couple minor changes I'm requesting, this looks good!

Nothing too hard there, I'll get on it.

@Chris-AC9KH

Copy link
Copy Markdown
Collaborator

not a problem. What I'd like to see is the classes in JS8_Main have the header and source files use the same naming convention as the class name. Helps with code maintainability to identify the class.

@punk-kaos

Copy link
Copy Markdown
Collaborator Author

not a problem. What I'd like to see is the classes in JS8_Main have the header and source files use the same naming convention as the class name. Helps with code maintainability to identify the class.

Ok, think I got it covered. Let me know if that what you were thinking.

@wmiler wmiler left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks muchly for the docs!

Good to go from my standpoint once you address @Chris-AC9KH Chris's issue, and pair off another 2500 lines from mainwindow 😈🤪

@wmiler wmiler added the enhancement New feature or request label Jan 16, 2026
@Chris-AC9KH Chris-AC9KH merged commit f03e3c5 into JS8Call-improved:master Jan 16, 2026
@Chris-AC9KH

Copy link
Copy Markdown
Collaborator

Merged. Thanks!

Chris-AC9KH added a commit that referenced this pull request Jan 16, 2026
PR branch was named same as master
Rename new class so file is same name as the class
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants