|
|
# TermTCP
|
|
|
|
|
|
A terminal TCP client for BPQ32 packet radio nodes, written in C with an ncurses TUI. Connects via BPQTermTCP protocol, displays split output/monitor panes, supports real-time RF frame monitoring with port filtering, multiple simultaneous sessions, and built-in forms for ICS-213 and packet check-in.
|
|
|
|
|
|
## Features
|
|
|
|
|
|
- ncurses TUI with split output and monitor panes
|
|
|
- BPQTermTCP protocol (compatible with QtTermTCP)
|
|
|
- Up to 4 simultaneous sessions with live background receive
|
|
|
- RF monitor with per-port and frame-type filtering
|
|
|
- Auto-populates port names from the BPQ server on connect
|
|
|
- Scrollable output and monitor windows with history
|
|
|
- Input history (Up/Down arrows)
|
|
|
- Session logging to timestamped files
|
|
|
- Function key bar (F1/F3–F10) at bottom of screen
|
|
|
- ICS-213 General Message form with F2 background send
|
|
|
- PKTNET Packet Check-In form
|
|
|
- Multiple host configuration with quick connect
|
|
|
- Unicode box-drawing borders on all menus
|
|
|
|
|
|
## Dependencies
|
|
|
|
|
|
- GCC
|
|
|
- ncurses with wide character support (`libncursesw6`)
|
|
|
|
|
|
### Install dependencies on Debian/Ubuntu
|
|
|
|
|
|
```bash
|
|
|
sudo apt install gcc libncurses-dev
|
|
|
```
|
|
|
|
|
|
## Build
|
|
|
|
|
|
```bash
|
|
|
make
|
|
|
```
|
|
|
|
|
|
The binary is `./termtcp`.
|
|
|
|
|
|
### Other make targets
|
|
|
|
|
|
```
|
|
|
make clean # Remove build artifacts
|
|
|
make debug # Build with debug symbols
|
|
|
make install # Install to /usr/local/bin/
|
|
|
```
|
|
|
|
|
|
### Manual compile
|
|
|
|
|
|
```bash
|
|
|
gcc -Wall -Wextra -O2 -std=gnu99 -D_XOPEN_SOURCE_EXTENDED \
|
|
|
-o termtcp termtcp.c -lm -lncursesw
|
|
|
```
|
|
|
|
|
|
## Configuration
|
|
|
|
|
|
Config is stored in `~/.BPQTermTCP.ini` and created automatically on first run. Edit it to add BPQ nodes:
|
|
|
|
|
|
```ini
|
|
|
[Host1]
|
|
|
Host=10.0.2.7
|
|
|
Port=17023
|
|
|
Username=kb8pmy
|
|
|
Password=yourpassword
|
|
|
Name=Home Node
|
|
|
|
|
|
[Host2]
|
|
|
Host=10.121.15.68
|
|
|
Port=17023
|
|
|
Username=kb8pmy
|
|
|
Password=yourpassword
|
|
|
Name=Water Tower
|
|
|
```
|
|
|
|
|
|
Port names, monitor settings, and port mask are saved here automatically when you change them in-program.
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
```bash
|
|
|
./termtcp
|
|
|
```
|
|
|
|
|
|
Press **Ctrl+A** to open the menu, then select an option.
|
|
|
|
|
|
### Key bindings
|
|
|
|
|
|
| Key | Action |
|
|
|
|-----|--------|
|
|
|
| Ctrl+A | Open menu |
|
|
|
| Ctrl+A C | Connect to a host |
|
|
|
| Ctrl+A D | Disconnect current session |
|
|
|
| Ctrl+A N | Open a new session |
|
|
|
| Ctrl+A X | Close current session |
|
|
|
| Ctrl+A 1–4 | Switch to session 1, 2, 3, or 4 |
|
|
|
| Ctrl+A O | Config / host editor |
|
|
|
| Ctrl+A M | Monitor options |
|
|
|
| Ctrl+A L | Toggle session log |
|
|
|
| Ctrl+A F | Forms submenu (ICS-213, PKTNET check-in) |
|
|
|
| Ctrl+A H | Help |
|
|
|
| Ctrl+A Q | Quit |
|
|
|
| F1 | Connect |
|
|
|
| F3 | Monitor options |
|
|
|
| F4 | Config / host editor |
|
|
|
| F5 | Toggle log |
|
|
|
| F6 | Forms submenu |
|
|
|
| F7 | New session |
|
|
|
| F8 | Previous session |
|
|
|
| F9 | Next session |
|
|
|
| F10 | Quit |
|
|
|
| Up / Down | Input history |
|
|
|
| PgUp / PgDn | Scroll output window |
|
|
|
| Home / End | Scroll monitor window |
|
|
|
| Enter | Send line to server |
|
|
|
|
|
|
### Multiple sessions
|
|
|
|
|
|
Open up to 4 connections simultaneously. All sessions receive data in the background — switch between them with F8/F9 or Ctrl+A 1–4. The status bar shows `[current/total]` session count. Close the current session with Ctrl+A X (if it is the last open session, the program exits).
|
|
|
|
|
|
### Forms (Ctrl+A F)
|
|
|
|
|
|
- **ICS-213 General Message** — fills in all numbered fields, sends via F2 in the background using silence-based prompt detection
|
|
|
- **PKTNET Packet Check-In** — pre-formatted check-in template
|
|
|
|
|
|
### Monitor options (Ctrl+A M)
|
|
|
|
|
|
- Toggle TX, supervisor, nodes, and UI-only frame filtering
|
|
|
- Toggle monitor pane visibility
|
|
|
- Select which RF ports to monitor (Tab to switch to port list)
|
|
|
|
|
|
Port names are auto-populated from the BPQ server when you connect and saved to config.
|
|
|
|
|
|
## BPQ Protocol Notes
|
|
|
|
|
|
- Uses BPQTermTCP protocol (same wire format as QtTermTCP)
|
|
|
- Sends trace options on connect to enable RF monitoring
|
|
|
- Port list requested automatically via P8=1 on connect
|
|
|
- Monitor frames delimited by `0xFF 0x1B` / `0xFE` byte markers
|
|
|
- Port info delivered as `0xFF 0xFF` packet on connect
|
|
|
- NODES broadcasts filtered client-side via `>NODES` in AX.25 header
|
|
|
|
|
|
## Version
|
|
|
|
|
|
Current: **0.0.60**
|