This experimental Web App prototype provides combined Panadapter and CAT functions for the GuoHeTec TRX Q900 and PMR-171. See Installation below. The WebAudio and WebSerial environment is quite fragile, so expect the unexpected, such as panadapter and / or CAT control freezing.
If you are comfortable with HTML+JS coding, feel free to adapt the code for your needs. For coding assistance, an LLM such as Claude, DeepSeek or ChatGPT is your friend.
The app features several tuning, memory, DSP filtering and theme options, including:
- Band selection
- 1Hz, 10Hz, 100Hz, 1kHz, 10kHz tuning hop options
- Spectrum frequency axis offset calibration
- Keyboard digit field
- Click on spectrum frequency axis
- Click SPACE when mouse is on spectrum, then tune with mouse-wheel
- DSP: advanced denoising options for spectrum and waterfall spectrogram
- RX bandwidth selection
- Ten persistent frequency memory pair options for VFO A and VFO B (uses browser local storage, will persist across sessions with the same browser)
- Theme options, can be extended on request
- Spectrogram palette options
- Standby function (not full power off)
- Client side online processing (can be downloaded to use with https://localhost if a web server is locally installed)
Disclaimer
The web app is experimental, bugs are expected and no fitness for purpose or warranty is implied. Use of the CAT protocol is limited (not much readback) and sensitivity to RFI is high. Its application so far has been limited to desktop Linux and CW use cases. See the QuickStart document. The app was originally developed for my personal use cases (HF, CW, SWL) because the button panel failed on my PMR-171; this seemed like a hardware issue, but it turned out to be a wrong bit set during a FW installation, and the app cured this via USB (but I still enjoy using the app). The app may or may not work for other use cases.
Usage
The file can be used from the original server, or save the HTML+JS file and run in the HTML space of your own server, for example http://localhost, or a local HTTPS server. It will only work with a Chromium-based browser such as Chrome (also with Chromebooks) or Edge (not Firefox or Safari). It will not work as a standalone file outside the HTML space of the server.
The software is open source, but if you modify it, acknowledgement of "Dafydd, DJ0MZ" as original developer would be appreciated.
Development
Comments, bug reports and suggestions are welcome! Patience is requested for treatment of bugs.
Download
PanCAT
Installation
- Check that you are using a data cable and use the PMR USB-C port; I guess you are.
- Put ferrite clips on all cables (USB, power, phones, key, antenna etc.) both at the computer end and at the radio end.
- Close Bluetooth on your computer while starting the app ("Choose Port" -> "Open CAT") in order to avoid coupling conflicts. If only the panadapter works, very likely the radio has coupled with your Bluetooth, because Bluetooth supports audio but not WebSerial, which the app requires.
- Under Linux the app only works with newer Chrome, preferably the current Chrome .deb, because Chrome supports both WebAudio and WebSerial. On Windows, Edge should also be usable as it is Chromium-based. Firefox and other browsers do not have this.
- It only works under a web server, so it works directly from my link, or if you downloaded it, put it in your localhost HTML space.
- Try: sudo usermod -a -G dialout $YOURUSERNAME
- Try: sudo systemctl stop ModemManager.
- Check lsusb to see if the PRM is there. Or unplug the cable, run dmesg -w, plug in and see if the PMR appears.
Quirks / Bugs
- Please help development by reporting bugs and other issues to dj0mz@darc.de /li>
- A quirk that sometimes appears on startup is that the RX mutes. If this happens, either change an audio value to restore audio (volume, NR, NB) or if you have an antenna or dummy load attached, click PTT hold. This is because the radio interprets USB startup commands as "Transmit!", which the software has to combat.
- There is a panadapter quirk which I have not been able to solve: on startup (and sometimes after transmission) the panadapter goes on strike. Sometimes this can be cured with the "Force I/Q" setting. If not, make a completely fresh clean start: Exit the browswer, power cycle the radio and start again. Sorry about this one.
- On transmission the panadapter quits and may or may not restart. If no restart, close and open the panadapter. If still no restart, close both panadapter and CAT and reload the page, then restart both. This does not affect an ongoing QSO and can be corrected between QSOs.
Tools
Change log
| 2025-10-19 | V0.01 | for testing. |
| V0.02 | mod of click-to-tune. |
| 2025-10-22 | V0.03 | RX mute on startup dealt with. |
| 2025-10-22 | V0.04 | RX mute on startup further hardened. |
| 2025-10-23 | V0.05 | 1. RX mute bug solved: DTR/RTS was interpreted by the radio as Transmit signal, therefore this had to be blocked immediately with a PTT off signal. |
| | 2. Audio-I/Q USB bug resolved: diagnostic sniffer developed for getting information which is missing in the manual (see "Tools"). Bug description (ChatGPT5(: "On some USB-CDC implementations (including Chrome's Web Serial on certain OS stacks), when you call port.open(...) the host implicitly asserts DTR (and sometimes RTS). A few radios treat asserted DTR/RTS as a key/PTT or CW-key line. Result: the rig blips into TX right at open - even before you send any CAT." |
| 2025-11-09 | V0.06 | Added ATU on/off and ATU scan buttons. Removed legacy code. Included audio presence check but still very RFI sensitive via USB cable. |
| 2025-11-14 | V0.07 | Added 1. right-click mouse option for activating mouse wheel frequency changer, 2. keyboard ENTER for Send target frequency.
|
| | Problem: tx activity disrupts panadapter (may reset I/Q signal to Sound).V0.06 solution did not work. New solution: added a sniffer heuristic to detect Sound vs. I/Q audio status, and if not I/Q operate the "Panadapter Stream Toggle" to return to I/Q panadapter display. |
Web App Security Notice
This web app communicates directly with your radio hardware through
Web Serial and may use your microphone for signal analysis.
It runs entirely in your browser. No data are uploaded or shared but several browser-level
permissions and security factors are important to understand.
Possible Risks
-
Browser Permissions: When the app requests access to a serial port or microphone, it must be granted by you. If you allow access to the wrong device or site, another page from the same origin could re-use that permission.
-
Third-party Scripts or Extensions: Malicious extensions or injected scripts could read or modify the page, including serial data.
-
Public Hosting: If this page is hosted on an open or shared domain, other users could potentially inject or link content that inherits the same permissions and local storage. Recommendation: Download and run on your own server, e.g. localhost.
-
Accidental Device Control: Any granted serial connection allows the page to send commands to your device. Always verify that the connected port belongs to your transceiver.
How to Stay Safe
- Use the app locally whenever possible: open the page as
https://localhost or from your computer's own web server.
- Grant permissions only when needed and only to the devices you recognize.
- Use a clean browser profile (no extra extensions) for radio control.
- Close the tab when you finish operating. This ends all active serial and audio sessions.
- If you host this online, use HTTPS, apply a strict Content Security Policy (CSP), and disable iframes and third-party scripts.
- Never share your running session via screen-sharing or remote control while the serial port is open.
The reason is that remote control of your browser can affect the serial port and potentially operate the radio.
This app is designed for direct local control and signal visualization. It never sends CAT data, audio, or settings over the internet. Keeping it on your own machine or trusted server ensures your radio stays secure.
Security note post-edited from a ChatGPT5 summary. DJ0MZ