Using a Palm III PDA daily
I use my Palm III for the calendar, address book, and games.
If you buy a keyboard, make sure you get the one with part number P10713U. The Palm III will not fit into a 3C10439 keyboard. I learned this the hard way.
I use a Windows Me PC to sync via a serial cable.
These applications are confirmed working on my Palm III:
Connecting a Palm III to the Internet via dial-up
My configuration:
Palm III and Palm modem / Cisco SPA112 / Asterisk on Ubuntu / Genius 56K modem / mgetty/pppd to OpenXiino web browser.
Interface names, USB serial device paths, will vary based on your local set up.
Network layout
Palm III + Palm modem
| RJ-11
SPA112 PHONE 1 - SIP extension 1001
| SPA112 Ethernet: 192.168.2.121 (example DHCP lease)
| direct Ethernet to Ubuntu enp9s0: 192.168.2.1/24
| Asterisk routes 1002 to SPA112 PHONE 2
SPA112 PHONE 2 - SIP extension 1002
| RJ-11
Genius GM56flex E-V analog modem
| serial -> USB adapter (/dev/ttyUSB0)
Ubuntu: mgetty -> pppd
| ppp0: Ubuntu 192.168.3.1 <-> Palm 192.168.3.2
| Wi-Fi wlp10s0 -> Internet
└ OpenXiino DataServer listening on TCP 4040
The SPA112 connects directly to the laptop’s Ethernet port. Ubuntu shares that interface and supplies DHCP to the SPA112. The laptop uses Wi-Fi for its upstream Internet connection. SIP runs between the SPA112 and Asterisk on the direct Ethernet network; the SPA112’s analog PHONE ports connect the two real modems.
Connect the hardware
A. Connect the Palm III modem to SPA112 PHONE 1 with an RJ-11 cable.
B. Connect the Genius 56K modem to SPA112 PHONE 2 with another RJ-11 cable.
C. Connect the Genius serial port to the laptop with a serial-to-USB adapter.
D. Connect the SPA112 Ethernet port directly to the laptop’s Ethernet port.
E. Power the SPA112 and both modems.
On the Palm, open Prefs / Network and create a custom dial-up service. Set the telephone number to 1002.
Identify and configure the Genius modem
Check the serial adapter:
ls -l /dev/ttyUSB*
groups
My modem is /dev/ttyUSB0 and the device group is dialout. If your account is not a member, add yourself and then log out and back in:
sudo usermod -aG dialout "$USER"
Install Minicom:
sudo apt update
sudo apt install minicom
sudo minicom -s
Configure Serial port in Minicom:
| Setting | Value |
|---|---|
| Serial Device | /dev/ttyUSB0 |
| Bps/Par/Bits | 115200 8N1 |
| Hardware Flow Ctrl | No |
| Software Flow Ctrl | No |
Exit the setup menu into Minicom. AT should return OK; ATI will probably identify the modem as 56000. Enter these commands separately:
AT&D0
AT&K0
ATE0
ATQ0
ATV1
AT%C0
ATS0=0
AT&W
ATS0?
The final ATS0? response must be 000. S0=0 disables the modem’s own auto-answer so that mgetty alone answers incoming calls using ATA. &K0 disables modem flow control.
Exit Minicom before starting mgetty. Only one process should control /dev/ttyUSB0 at a time.
4. Create the direct SPA112 Ethernet network
Identify your Ethernet and Wi-Fi interface names:
ip addr
ip route
My laptop uses enp9s0 for the SPA112 and wlp10s0 for Internet access. The following creates a NetworkManager shared Ethernet connection.
sudo nmcli con add \
type ethernet \
ifname enp9s0 \
con-name "SPA112 Network" \
ipv4.method shared \
ipv4.addresses 192.168.2.1/24 \
ipv6.method disabled
sudo nmcli con up "SPA112 Network"
ip addr show enp9s0
ip neigh show dev enp9s0
Ubuntu should have 192.168.2.1/24 on enp9s0. The SPA112 received 192.168.2.121 by DHCP (MAC 34:db:fd:5c:63:62). Its IP is not guaranteed to remain the same. If it is not in the neighbor table, inspect NetworkManager’s DHCP leases or the SPA112’s own network status.
Open the SPA112’s current IP address in a browser.
5. Install and configure Asterisk
sudo apt update
sudo apt install asterisk
sudo systemctl enable --now asterisk
Back up existing Asterisk configuration before editing:
sudo cp /etc/asterisk/pjsip.conf /etc/asterisk/pjsip.conf.bak
sudo cp /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.bak
My setup uses PJSIP UDP port 5060, extension 1001 for PHONE 1 and 1002 for PHONE 2.
Edit /etc/asterisk/pjsip.conf:
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
[1001]
type=endpoint
context=from-spa
disallow=all
allow=ulaw
auth=1001-auth
aors=1001-aor
direct_media=no
[1001-auth]
type=auth
auth_type=userpass
username=1001
password=palm123
[1001-aor]
type=aor
max_contacts=1
remove_existing=yes
[1002]
type=endpoint
context=from-spa
disallow=all
allow=ulaw
auth=1002-auth
aors=1002-aor
direct_media=no
[1002-auth]
type=auth
auth_type=userpass
username=1002
password=genius123
[1002-aor]
type=aor
max_contacts=1
remove_existing=yes
Add to /etc/asterisk/extensions.conf:
[from-spa]
exten => 1001,1,Dial(PJSIP/1001,60)
exten => 1002,1,Dial(PJSIP/1002,60)
Restart Asterisk:
sudo systemctl restart asterisk
sudo asterisk -rvvv
Inside the Asterisk console, check:
pjsip show endpoints
pjsip show contacts
Before SPA112 configuration, endpoints may be unavailable. After both lines register, you should see contacts for 1001 and 1002 at the SPA112’s current IP, using SIP ports 5060 and 5061.
6. Configure both SPA112 lines
In the SPA112 web UI, open Voice / Line 1 and set:
| Setting | PHONE 1 |
|---|---|
| Line Enable | Yes |
| SIP Port | 5060 |
| Proxy | 192.168.2.1 |
| Register | Yes |
| Make Call Without Reg | No |
| Ans Call Without Reg | No |
| User ID | 1001 |
| Auth ID | 1001 |
| Password | palm123 |
| Use Auth ID | Yes |
| Preferred Codec | G711u |
| Use Pref Codec Only | Yes |
| Silence Supp Enable | No |
| Echo Canc Enable | No |
| Dial Plan | (1002S0) |
Then open Voice → Line 2 and set:
| Setting | PHONE 2 |
|---|---|
| Line Enable | Yes |
| SIP Port | 5061 |
| Proxy | 192.168.2.1 |
| Register | Yes |
| Make Call Without Reg | No |
| Ans Call Without Reg | No |
| User ID | 1002 |
| Auth ID | 1002 |
| Password | genius123 |
| Use Auth ID | Yes |
| Preferred Codec | G711u |
| Use Pref Codec Only | Yes |
| Silence Supp Enable | No |
| Echo Canc Enable | No |
Save/apply the SPA112 settings.
7. Install and configure mgetty and PPP
sudo apt install mgetty ppp
Edit /etc/mgetty/mgetty.config. Add or update the single section for the actual serial device:
port ttyUSB0
speed 115200
data-only yes
data-flow soft
rings 1
Edit /etc/mgetty/login.config. Ensure the active AutoPPP entry is as follows:
/AutoPPP/ - - /usr/sbin/pppd 115200 local nocrtscts noauth debug 192.168.3.1:192.168.3.2 ms-dns 8.8.8.8 noccp noipv6
Create /etc/systemd/system/mgetty-ttyUSB0.service:
[Unit]
Description=mgetty on ttyUSB0
After=network.target
[Service]
Type=simple
ExecStart=/usr/sbin/mgetty -x 9 -s 115200 ttyUSB0
Restart=always
RestartSec=2
TTYPath=/dev/ttyUSB0
StandardInput=tty
StandardOutput=journal
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=no
[Install]
WantedBy=multi-user.target
Then run:
sudo systemctl daemon-reload
sudo systemctl enable --now mgetty-ttyUSB0.service
sudo systemctl status mgetty-ttyUSB0.service
Connect from the Palm using its Network service and dial 1002. Monitor the modem and PPP logs in separate terminals:
sudo tail -f /var/log/mgetty/mg_ttyUSB0.log
sudo journalctl -f | grep -iE 'pppd|ppp'
Expected mgetty progression:
RING
send: ATA
CONNECT 115200
match: user='/AutoPPP/'
calling login: cmd='/usr/sbin/pppd'
Expected pppd progression:
rcvd [LCP ConfReq ...]
sent [LCP ConfAck ...]
rcvd [IPCP ConfAck ...]
local IP address 192.168.3.1
remote IP address 192.168.3.2
Confirm the PPP interface and test reachability while the Palm remains connected:
ip addr show ppp0
ping -c 4 192.168.3.2
My Palm replied to pings with 0% packet loss and approximately 573 ms round-trip time.
8. Enable Internet forwarding and NAT
Identify the actual upstream Internet interface using ip route. My laptop uses wlp10s0 (Wi-Fi); the Palm uses ppp0.
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o wlp10s0 -j MASQUERADE
sudo iptables -A FORWARD -i ppp0 -o wlp10s0 -j ACCEPT
sudo iptables -A FORWARD -i wlp10s0 -o ppp0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Check the results:
sysctl net.ipv4.ip_forward
sudo iptables -t nat -L POSTROUTING -n -v
sudo iptables -L FORWARD -n -v
9. Configure Xiino
Install Xiino on the Palm III from PalmDB. On Ubuntu, clone the OpenXiino project with git:
git clone https://github.com/nicl83/OpenXiino.git
cd OpenXiino
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Start the server:
python dataserver.py
The expected startup message is:
Dataserver running on port 4040
On the Palm, open Xiino / Menu / Options / Prefs:
Set:
- DataServer: 192.168.3.1:4040
- Cache size: 6000 KB
Attempt to load a website in Xiino. Examples:
Modern websites are likely to freeze the Palm. Be prepared to soft-reset a few times.