Commit graph

48 commits

Author SHA1 Message Date
Chris-AC9KH
75d08f06cb ensureMessageDock.cpp:titlebar/toolbar fix to remove displaying both
the titlebar and Qt toolbar in float mode
2026-08-04 07:40:06 -05:00
Chris-AC9KH
ab73a3841b mainwindow.h: add m_inboxFilterEdit_ member for dockable message inbox filter bar
mainwindow.cpp: move ensureMessageDock() member function to its own file
MessagePanel.cpp: fix column width/sort ordering bugs in populateMessages()
UI_Constructor.cpp: build custom title bar once in ensureMessageDock()
                    after messageDock_ exists, instead of inside the toggled handler,
                    ensures dock is restored visible on startup
ensureMessageDock.cpp: new member function file that handles the Message Inbox
                       and turns it into a Qt::Window instead of a Qt::Tool when
                       it is in floating mode
CMakeLists.txt: add ensureMessageDock.cpp to compile object code for the member function
2026-08-04 07:40:06 -05:00
Chris-AC9KH
08b6419e87 UI_Constructor.cpp, mainwindow.cpp:
Fix stale Message Inbox after delivery to another station:
markMsgDelivered() and markGroupMsgDeliveredForCallsign() updated
the inbox database but never emitted messageAdded, so an already-open
message panel wouldn't refresh until closed/reopened

Both now emit messageAdded on success, reusing the existing
messageAdded -> MessagePanel::refresh connection that already handles
new incoming messages to refresh the message panel for a MSG delivery
2026-08-04 07:40:06 -05:00
Chris-AC9KH
88f4be385b UI_Constructor.cpp: add lambda's and guards on audio startup to
prevent firing the invalid audio notifications on a fresh non-configured
install before the user even has a chance to set them
2026-07-22 11:57:13 -05:00
Chris-AC9KH
146370f2c5 processCommandActivity.cpp: directed replies to group queries can
overwrite each other in RX pane (textEditRX)

Context:
When multiple stations reply to a group-addressed query (i.e.
"@GROUP QUERY MSGS") within the same second, their replies share an
identical rendered timestamp string in textEditRX. The avoid
duplicate line logic in processCommandActivity() searched backward
for that timestamp string alone and erased whatever block it found,
with no check that the found block actually belonged to the same
sender. With enough replies landing in one processing tick, each new
reply erased the previous different station's line, leaving only
the last reply visible in textEditRX (the incoming MSG pane)

Thanks to John W2KI for reporting this bug and testing the fix
2026-07-18 09:58:49 -05:00
Chris-AC9KH
b6a7afb246 displayCallActivity.cpp: fix horizontal text alignment for "Name"
and "Comment" columns in call activity table.
2026-07-12 11:00:48 -05:00
Chris-AC9KH
f03d69efa8 - Break confirmThenEnqueueMessage member function out of mainwindow.cpp
and place it in a separate member function file in JS8_Mainwindow
- Add UI hooks for Auto Reply confirmation back into the function
- Remove redundant member function declarations from mainwindow.cpp that
left over after moving the function to separate files, leaving only the
function call sites
- Move source file comments to the mainwindow header
2026-05-24 16:13:26 -05:00
Chris-AC9KH
734f40fff3 fix CQ notification in call activity pane 2026-05-18 07:38:58 -05:00
Chris-AC9KH
decb86878d fix icon column display on Windows for call activity list 2026-05-16 15:13:21 -05:00
Chris-AC9KH
1b9a2f8a11 Add right click context menu item to block a station
Add unicode red "x" to signify a blocked call or station
2026-05-15 21:36:11 -05:00
Chris-AC9KH
6a7d831263 Add UI setting to enable/disable automatic blacklisting of stations
that send more often than every 55 minutes
2026-05-05 07:03:41 -05:00
Chris-AC9KH
b0ba12d8cc Add automatic HB ACK rate limiting that adds a callsign to the blacklist
if that callsign transmits HB's at less than 55 minute intervals
2026-05-05 07:03:41 -05:00
Chris-AC9KH
95c7e42b91 Apply offset frequency slider widget across all platforms and clean up code
in mainwindow.cpp
2026-04-21 21:34:31 -05:00
Chris-AC9KH
e5c419f7d4 Replace Offset Frequency QLabel in header bar with a new QSlider (Mac only)
Remove uneeded code from CMakeLists.txt for old up/down.png arrow images
2026-04-19 19:49:07 -05:00
Chris-AC9KH
2c6a258b36 Move header bar styling out of mainwindow.ui and create a new Styles
namespace in styles.h to define the header bar styling on a per-
platform basis
2026-04-15 22:14:40 -05:00
Chris-AC9KH
8c2064bccf New, more modern header bar (frequency, clock and control buttons) design for JS8Call 3 2026-04-15 22:14:40 -05:00
Rico Beier-Grunwald
b036e48660 Visualize commands and routing as pills 2026-03-25 07:10:18 -05:00
Micah Hoffman
8e032d1132
RX.GET_FREE_OFFSETS API addition (#213)
* RX.GET_FREE_OFFSETS API addition

-   Reads optional `SPEED`, `LOW`, `HIGH` params (defaults: current mode, 500 Hz, 2500 Hz)
-   For each active offset in `m_bandActivity` (within 30 seconds), computes the blocked zone as `occ ± (requestedBW/2 + signalBW/2)` — accounting for both the occupying signal's actual bandwidth and your intended TX bandwidth
-   Sorts and merges overlapping blocked zones, then returns the gaps as `FREE` segments
-   Omits gaps narrower than your TX bandwidth (they can't fit anyway)
-   Example response: {"params":{"FREE":[{"HIGH":860,"LOW":500,"WIDTH":360},{"HIGH":2500,"LOW":1120,"WIDTH":1380}],"BANDWIDTH":160,"HIGH":2500,"LOW":500,"SPEED":2,"_ID":...},"type":"RX.FREE_OFFSETS","value":""}
2026-03-10 12:44:02 -04:00
christian
a293abc62e WSJT-X UDP protocol: recieve to decode state switching fixed 2026-03-09 19:11:33 -05:00
BrunoKlu
0d56997670
Add FILTER TCP API for remote bandpass filter control (#209)
- Rename FILTER.GET_FILTER -> RX.GET_FILTER
- Rename FILTER.SET_FILTER -> RX.SET_FILTER
- Rename FILTER.SET_ENABLED -> RX.SET_FILTER_ENABLED
- Response type FILTER.FILTER -> RX.FILTER
- Add @note API 2.6+ to each @brief block
- Remove standalone FILTER command group (now part of RX)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Move RX.FILTER commands to RX section for Doxygen grouping

Move RX.GET_FILTER, RX.SET_FILTER and RX.SET_FILTER_ENABLED handlers
from after the MODE section into the RX section, just before the
End RX Commands marker. Update summary comment block.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: BrunoKlu <brunoklu@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 18:27:04 -05:00
BrunoKlu
998d0328f4
TCP API: STATION.SET_GROUPS + STATION.SET_AVOID_ALLCALL (#208)
- Rename all MODE.* config commands to STATION.* (including SET_GROUPS
  and SET_AVOID_ALLCALL)
- Add @note API 2.6+ to each new @brief block (12 commands total)
- Translate French comments to English

* Move STATION commands to STATION section for Doxygen grouping

Co-authored-by: BrunoKlu <brunoklu@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Wyatt Miler <wmiler1@gmail.com>
2026-03-07 18:25:10 -05:00
Chris-AC9KH
6715557093 Change names of JS8 6/160 to JS8 40, and JS8 4/250 to JS8 60.
This uses the two respective modes' approx transmisson speed in
words per minute instead of using frame time/bandwidth.

Improve the documentation for these two modes to better explain
that HB networking is disabled when using them
2026-03-07 13:30:12 -06:00
Chris-AC9KH
e4e03af742 Add new modes: JS8 6/160 and JS8 4/250
This eliminates use of terms like "Turbo" which is a mechanical
gas turbine compressor, changes the faster modes to designation
of frame time/bandwidth
2026-03-07 13:30:12 -06:00
BrunoKlu
cede1cb10d
TCP API: 8 STATION commands + headless autoreply confirmation (#207)
* TCP API: 8 STATION commands + headless autoreply confirmation

- networkMessage.cpp: MODE.GET_CONFIG, SET_AUTO_REPLY, SET_JS8HB,
  SET_HBACK, SET_MULTI_DECODER, SET_HB_INTERVAL, SET_HB_TIMER, SEND_HB
- mainwindow.cpp/h: confirmThenEnqueueMessage() sends TCP push
  instead of SelfDestructMessageBox (headless/xvfb compatible)
- Configuration.cpp/h: autoreply_confirmation accessor

- Rename 10 new config commands from MODE.* to STATION.* (MODE is
  reserved for JS8 protocol only, STATION is for configuration)
- Add @note API 2.6+ to each new @brief block
- Translate French comments to English
2026-03-07 07:21:24 -05:00
BrunoKlu
0ce999ddf2 Expose BITS field in RX.ACTIVITY TCP push messages
Add the `BITS` parameter (from `ActivityDetail::bits`) to the
`RX.ACTIVITY` network message, alongside the existing FREQ, DIAL,
OFFSET, SNR, SPEED, TDRIFT, and UTC parameters.

This allows TCP clients to detect frame boundaries — specifically
`JS8CallFirst` (bit 0) and `JS8CallLast` (bit 1) — enabling instant
message finalization without waiting for a timeout-based deadline.

Currently, `RX.DIRECTED` messages already benefit from the `isLast`
check (in `processCommandActivity.cpp`) which appends the EOT character
before sending the network message. However, `RX.ACTIVITY` sends the
network message *before* the `isLast` check, so TCP clients have no way
to know when a message is complete. Adding BITS solves this asymmetry.

Use case: headless JS8Call stations (e.g., Raspberry Pi) using the TCP
API for RX can now display decoded messages with 0s delay instead of
waiting TRPeriod + margin.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 20:07:38 -06:00
rruchte
717a253cab Addresses issue #191 - Add number of available messages to MSGS?, HB, and MSG response
Adds an indication for the number of available messages to the response to the MSGS? query, HB response, and message response in addition to the ID of the next available message.

Changing NEXT MSG ID logic to send first available ID instead of next in list when sending messages
2026-02-19 19:14:10 -05:00
rruchte
e56d3afe48 Message Inbox Enhancements
Allow message inbox to dock into the main UI
Enable column sorting in the message table
Rework mark-as-read signals to trigger on row deselection
Add SemiSortableHeader subclass of QHeaderView
2026-02-05 20:05:17 -06:00
Wyatt Miler
8023a957fd Test and document TX.GET_QUEUE_DEPTH 2026-02-01 12:51:38 -06:00
Wyatt Miler
269e004227 Test and document TX.GET_QUEUE_DEPTH 2026-02-01 12:51:38 -06:00
Wyatt Miler
02e1a93628 Adds RIG.SET_TUNE and RIG.TX_HALT 2026-02-01 12:51:38 -06:00
Wyatt Miler
183758135c Renamed GET_PTT and updated docs 2026-02-01 12:51:38 -06:00
Wyatt Miler
d0c1b09135 Fix set_spot, updated docs 2026-02-01 12:51:38 -06:00
Wyatt Miler
9efa51772f GET_OS, GET/SET_SPOT, various other things. SET_SPOT doesn't work yet 2026-02-01 12:51:38 -06:00
Wyatt Miler
a1915d014b Add STATION.VERSION and STATION.GET_PTT calls 2026-02-01 12:51:38 -06:00
Manuel Ochoa
f17f38a348 Refactored code to use a single variable. 2026-02-01 12:39:07 -06:00
Manuel Ochoa
ba6dc08db1 Update TEXT param to use valueWithoutFrom for consistency
Both value and TEXT fields now contain the message body without
the FROM prefix, making the API consistent and useful for clients.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 12:39:07 -06:00
Manuel Ochoa
43163967b5 Fix TCP API RX.DIRECTED value field to exclude
FROM prefix

   The previous fix incorrectly used d.text which is empty for simple
   directed messages. This fix properly constructs valueWithoutFrom
   from the message components (d.to, d.cmd, d.extra, d.text).
2026-02-01 12:39:07 -06:00
Manuel Ochoa
246621c992 Fix duplicate callsign in TCP API RX.DIRECTED messages
The value field in RX.DIRECTED messages was using the formatted 'text'
variable which includes the FROM callsign prefix. When TCP clients
reconstruct messages as "FROM: value", this resulted in duplicate
callsigns (e.g., "W9TEK: W9TEK: KC1QKM SNR -05").

Changed the value parameter from 'text' to 'd.text' (the raw message
body without FROM prefix) to match the TEXT parameter behavior.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 12:39:07 -06:00
dt229878
3b4a3f2a42 Return ACKS to APRSIS to prevent excessive message spamming. Add 120 second mute to a message after receipt to prevent excessive retries. 2026-01-31 18:38:34 -06:00
Chris-AC9KH
8babdd00b4 Give directed commands higher priority over messaging 2026-01-28 19:21:15 -06:00
Chris-AC9KH
459ebef8b3 Remove deprecated DisplayManual class
Move OmniRig to deprecated group, scheduled for deprecation due
to being no longer supported by Windows 11 and Qt6.9.3
Schedule OmniRig to removed from the code in July 2026
Noted in the doxy file description
2026-01-19 18:15:33 -06:00
Chris-AC9KH
963b9cd933 Add doxy hooks to all source file 2026-01-18 19:19:15 -06:00
Chris-AC9KH
1ab08249b1 remove MainWindow class from mainwindow.cpp and replace it with UI_Constructor class
rename remaining files that didn't match their class definitions
relocate the explicit UI_Constructor member function to JS8_MainWindow
relocate the processBufferedActivity member function to JS8_MainWindow
format affected files with LLVM clang-format

Set default APRS inbound relay to off
Fix layout of General->Networking & Autoreply tab in Settings
2026-01-18 19:19:15 -06:00
dt229878
c9162356cd Inbound APRS message relay into JS8 mesh. 2026-01-16 06:40:35 -06:00
Wyatt Miler
9c242cd3af
User Manual as markdown file, other documentation changes (#128)
* User Manual as a markdown file. Minor other additions/fixes.

* repo version of doxygen is too old, build our own
2026-01-10 21:33:24 -05:00
Manuel Ochoa
09281f7e68
Fix duplicate callsign in RX.DIRECTED TCP messages (#123)
TEXT param contained the full formatted message including FROM prefix,
  causing duplication when clients reconstruct the message. Changed to
  use d.text (message body) instead.

Co-authored-by: Manuel Ochoa <mochoa@protonmail.com>
2026-01-08 16:11:57 -05:00
Chris-AC9KH
854666bde1 Add doxy hooks to MainWindow class member function files in JS8_Mainwindow 2026-01-06 22:47:39 -06:00
Chris-AC9KH
8c647b5a9e Move MainWindow member functions to external source files in
JS8_Mainwindow:
- buildQueryMap.cpp
- checkVersion.cpp
- dataSink.cpp
- displayBandActivity.cpp
- displayCallActivity.cpp
- initializeDummyDate.cpp
- initializeGroupMessage.cpp
- networkMessage.cpp
- processCommandActivity.cpp
- processDecodeEvent.cpp
- processRxActivity.cpp

reduces mainwindow.cpp from 12,482 to 8,284 lines of code
2026-01-06 22:47:39 -06:00