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.
| 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 | ✅ |
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\*.DBFacross 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.
- Psion Series 3, 3a, 3c, 3mx
- Psion Siena
- Psion Workabout
- 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.
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
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.
plptoolspackage (providesncpd,sisinstall,libplp.so)- Qt 5 runtime libraries, including the SQLite driver (
libqt5sql5-sqlite)
sudo apt install \
plptools \
qtbase5-dev \
libqt5serialport5-dev \
libqt5svg5-dev \
libqt5charts5-dev \
libqt5sql5-sqlite \
qttools5-dev \
qttools5-dev-tools \
cmake \
ninja-build \
g++
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)Run directly:
./build/src/psiconnectInstall system-wide:
sudo cmake --install build- Create a PDA profile (File → New PDA Profile).
- Set the serial port your Psion is connected to (e.g.
/dev/ttyUSB0). - Click Connect on the Dashboard.
- PsiConnect will start
ncpdautomatically 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 inGPL v2 (same as plptools).