Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PsiConnect

Qt 5 GUI frontend for the plptools Psion PDA connectivity library.

PsiConnect is a modern Linux replacement for the old PsiWin application: connect a Psion PDA over a serial link to browse files, install apps, back up the device, and two-way sync the organizer (contacts, agenda, to-dos) with the desktop.

Features

Feature Status
PDA profile management (create / edit / view)
Dashboard with device info, last-connected / last-synced
Organizer two-way sync with local persistence + 3-way merge
Generic Data-app (\DAT\*.DBF) support — pick any file, schema-adaptive editor
Agenda editor: style, recurrence, alarm, and memo (Psion Word) editing
To-do lists (multiple lists, priorities, due dates) and anniversaries
vCard (.vcf) import/export with adjustable field mapping + duplicate handling
iCalendar (.ics) export
Backup & restore
File Manager (browse, get, put, delete)
Application install (.sis / .app) + local library / store
SIBO (Series 3) support
EPOC (Series 5 / Revo / netBook) support
Auto-detect Psion on serial port
Share the desktop's Internet with the device (PPP + NAT over the cable)

Organizer

The Organizer is the most developed part of PsiConnect. Data is parsed from the device's native binary formats, mirrored to a per-profile local database, and reconciled with a 3-way merge so edits on either side are preserved.

Contacts / Data files (SIBO). Series 3 has no dedicated contacts app — contacts live in an ordinary Data-app database, and its schema is user-defined. PsiConnect therefore treats the Contacts tab as a general Data-file editor:

  • Discover every \DAT\*.DBF across all device drives and choose which file to edit (remembered per profile, with its own sync tie).
  • A schema-adaptive table renders the file's real columns; a master/detail view edits the selected record with one control per field, typed to the field (text / integer / decimal) and grouping unlabelled text runs into a single multi-line box, just like the Psion Data app.
  • vCard import/export maps the file's columns to vCard fields (auto-guessed from the labels, adjustable), and import resolves duplicates by name.

Agenda (SIBO). Appointments, day entries, anniversaries and to-dos are parsed and written back while preserving each entry's structure. A double-click editor covers common fields, style (bold / italic / underline / crossed-out), recurrence, alarm, and memo text (decoded from the Psion Word format). Multiple to-do lists, priorities and due dates are supported.

Persistence & sync. Each profile keeps an SQLite mirror of its organizer data (and the chosen Data file's schema / to-do lists), so the UI works offline. Sync downloads the device files, merges against the last-pushed snapshot, and writes the result back, closing any app holding the file first.

Supported Devices

SIBO (Series 3 OS)

  • Psion Series 3, 3a, 3c, 3mx
  • Psion Siena
  • Psion Workabout

EPOC (Symbian OS predecessor)

  • Psion Series 5, 5mx
  • Psion Series 7
  • Psion Revo, Revo Plus
  • Psion netBook
  • Psion Mako

The rich Data-app and Agenda editing described above targets SIBO devices. EPOC contacts/calendar sync uses the EPOC parsers.

Architecture

PsiConnect
├── core/               Backend logic (no Qt Widgets dependency)
│   ├── PdaProfile          Profile data model + JSON persistence
│   ├── ProfileManager      CRUD for profiles stored in AppData
│   ├── PlpConnection       C++ wrapper around plptools RFSV/RPCS (+ RPCS bootstrap)
│   ├── ConnectionManager   Manages ncpd daemon lifetime + retry logic
│   ├── NcpdProcess         Launches/monitors the ncpd daemon
│   ├── DeviceDetector      Serial port hot-plug detection
│   ├── OpenFileGuard       Detects/closes files held open on the device
│   ├── BackupManager       Device backup/restore
│   ├── AppLibrary          Local .sis/.app catalog
│   └── LogBridge           Routes plptools/log output to the UI
├── organizer/          Organizer data handling
│   ├── OrganizerEntry      Common entry base (Contact, Appointment, Anniversary, Todo)
│   ├── SiboParser          SIBO binary .DBF / agenda parser + writer
│   ├── WordReader          Psion Word format reader (agenda memos)
│   ├── EpocParser          EPOC binary CDB / Agenda parser
│   ├── OrganizerModel      Schema-adaptive QAbstractTableModel
│   ├── OrganizerStore      Per-profile SQLite persistence + sync base
│   ├── VCardMapper         Column ↔ vCard field mapping, import/export
│   └── VCalExporter        iCalendar 2.0 + vCard 3.0 exporter
└── ui/                 Qt Widgets UI
    ├── MainWindow          Main window with sidebar navigation
    ├── DashboardWidget     Profiles, connection status, device info, backup
    ├── FileManagerWidget   Psion file browser
    ├── OrganizerWidget     Organizer view / edit / sync / import / export
    ├── EventEditorDialog   Agenda entry editor (style/recurrence/alarm/memo)
    ├── VCardFieldMapDialog  vCard ↔ column mapping
    ├── AppManagerWidget    Install/remove apps on PDA
    ├── AppStoreWidget      Local app library catalog
    └── LogsWidget          Live log view

How it Works

Psion PDA ──serial──► ncpd daemon ──TCP (127.0.0.1:7501)──► PsiConnect
  • ncpd (part of plptools) runs as a process and speaks the NCP protocol over the serial link.
  • PsiConnect starts ncpd automatically when connecting a profile, then communicates with it via TCP using the RFSV (remote file system) and RPCS (remote process/system) protocol factories from libplp.
  • On SIBO devices that lack the RPCS server, PsiConnect uploads an embedded copy so process/open-file queries work.

Internet Sharing

The Internet page gives the connected Psion access to the desktop's Internet connection. Device IP traffic can't ride the plptools stack (NCP has no IP channel), so instead the Psion runs its own PPP stack over the serial cable into a pppd peer on this machine, whose traffic is NAT'd out through the host's uplink.

Psion ──PPP over serial──► pppd ──MASQUERADE──► your uplink (wlan0/ethX) ──► Internet

Because the cable can only do one thing at a time, Internet sharing is mutually exclusive with the file/organizer link: starting a share disconnects ncpd to free the port. Click Start Sharing, then set up a dial-up/Internet connection on the device that uses the cable (the page shows step-by-step, per platform):

  • EPOC (Series 5/5mx/Revo/7/netBook) has a built-in TCP/IP + PPP stack.
  • SIBO (Series 3 family) needs on-device software such as PsiMail Internet or PsiStack (there is no built-in stack), and typically 19200 baud.

How the privileged bits work. Enabling IP forwarding and adding the iptables NAT rules needs root; pppd and the serial port do not (if you're in the dialout/dip groups). PsiConnect authorizes once per session via sudo and a standard graphical password prompt (askpass), keeps the credential warm, and runs each step as a normal sudo call to standard tools. Every firewall rule it adds is tagged with an iptables comment (psiconnect-share) so it can be removed exactly; the applied changes are also recorded to a small state file, so if PsiConnect is killed mid-share the Internet page offers to clean up the leftovers on the next launch.

Expectations. At serial speeds (≤115200 baud) and with the device's vintage browser/TLS support, realistic use is email, plain/legacy HTTP, NNTP and telnet/ssh — modern HTTPS is out of reach for the device's own TLS stack. To bridge that, use the built-in web proxy (below).

Web proxy (reach modern HTTPS)

The Internet page also runs an in-process transcoding web proxy. The device's ~1999 TLS/cert stack can't handshake with modern HTTPS sites — but the desktop can. Point the device browser at the proxy and PsiConnect fetches each page, doing the modern TLS on the PC, then returns it as plain HTTP/1.0 the device can read.

Opera on Psion ──HTTP/1.0──► PsiConnect proxy ──TLS 1.2/1.3 (OpenSSL)──► the site
  • No root and no extra dependency — it just binds a TCP port (default 8080) and reuses Qt Network + OpenSSL, which the app already links.
  • On the device, set only the browser's HTTP proxy to 10.0.0.1:<port> (the host end of the PPP link) and leave the HTTPS proxy blank; browse with http:// addresses. The device never does TLS — the proxy upgrades each request to real HTTPS on the PC and follows http→https redirects, and rewrites https:// links back to http:// so navigation keeps flowing through the proxy. (Vintage browsers tunnel their HTTPS-proxy slot with CONNECT, which can't be transcoded; the HTTP-only setup avoids that entirely.)
  • It can start automatically when a share goes active (Settings → Web proxy).
  • Charset: text pages are transcoded to an 8-bit charset the vintage browser can render (default windows-1251 for Cyrillic; configurable in Settings → Web proxy, blank to disable) — modern UTF-8 otherwise drops non-Latin text on the device.
  • Further transcoding (image downscaling) can be layered on; heavily script-driven modern sites still won't render fully — nothing can fix that at a proxy — but a great deal of the plain web becomes reachable.

Requirements

Runtime

  • plptools package (provides ncpd, sisinstall, libplp.so)
  • Qt 5 runtime libraries, including the SQLite driver (libqt5sql5-sqlite)
  • For Internet sharing: ppp (provides pppd), sudo, and a graphical askpass helper (e.g. ssh-askpass / ksshaskpass). Add yourself to the dialout/dip groups. The askpass path can also be set in Settings → Internet Sharing.

Build

sudo apt install \
    plptools \
    qtbase5-dev \
    libqt5serialport5-dev \
    libqt5svg5-dev \
    libqt5charts5-dev \
    libqt5sql5-sqlite \
    qttools5-dev \
    qttools5-dev-tools \
    cmake \
    ninja-build \
    g++

Building

cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)

Run directly:

./build/src/psiconnect

Install system-wide:

sudo cmake --install build

Connecting your Psion

  1. Create a PDA profile (File → New PDA Profile).
  2. Set the serial port your Psion is connected to (e.g. /dev/ttyUSB0).
  3. Click Connect on the Dashboard.
  4. PsiConnect will start ncpd automatically and establish the connection.

For USB-serial adapters the port is typically /dev/ttyUSB0.
For built-in RS-232 ports it is /dev/ttyS0.

You may need to add your user to the dialout group:

sudo usermod -aG dialout $USER
# then log out and back in

License

GPL v2 (same as plptools).

About

A PsiWin replacement for modern OS (Linux first then Windows/MacOS)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages