Internet PSTN (iPSTN)
Overview
The goals are:
- enable data modems to connect to each other in the absence of a telephone network
- restore period correct communications for retro devices
- compatible with existing hardware (computers) and terminal software
- open source, modern technology solution
- point to point, not depending on any third-parties, eg SIP gateways
- local and remote modems sync with each other, not with this local intermediary
- inspire retro users, BBS sysops, ISP system admins
- Ideally work with analogue telephones too
- Ideally fast and flexible enough to also support ISDN and ADSL
Please comment if you have any suggestions.
Issues with exisiting solutions
- Telephone line emulator/adapter (TLE):
- also known as Line Voltage Inducer or telephone line simulator
- local connections only
- does not generate dial tone or ring. Modems are unable to autoanswer without ring
- Analogue telephone adapter (ATA): do not support data well, if at all
- designed for telephones and faxes
- lossy voice codecs
- data not specifically handled [1]
- https://en.wikipedia.org/wiki/Analog_telephone_adapter
- Here's an ATA config link: Configuring SPA122 ATA For Dial-Through
- PABX: big, hot, noisy, expensive and complicated to setup. Data support unknown, ie fax at best
- Serial to wifi adapters are definitely more convenient and probably faster for outright file transfer and system maintenance:
- but really, where's your modem? You may as well be using an emulator if your retro hardware is not using a modem for comms
"Dial-up over VoIP can be unreliable so it is best to keep speeds low. If you don't already have a modem I would recommend looking for a 14.4k modem for the sake of reliability."
Solution strategy
- New design and build. 2020's processors and networks are orders of magnitude faster than the components in existing ATAs.
- Version 1 goal:
- modems syncing at 33.6kbps over a LAN
- modems syncing up to 33.6kbps over a WAN
- modem PSTN/Line socket <-telephone cable-> iPSTN RJ11 socket <-> analogue to digital <-> microcontroller <-> IPv4 <-> UDP <-> Network Interface (wifi/ethernet)
Interfaces
PSTN
- RJ11 socket
- PSTN signalling:
- Signalling is known as BORSCHT
- Dial tone - if IP network connected
- ring - connected to remote iPSTN (capacitors to hit 90V needed for ring??)
- busy/no answer - rejected by remote iPSTN (in use or no modem attached), not answered in x rings
Microcontroller/Computer
- Network/wifi configuration
- Detect modem on/off hook
- Detect DTMF dial tones. Translate phone number into ip address. perhaps a dedicated country code for the internet. 12 digit telephone number for ip addresses, eg 008004004008 for 8.4.4.8. Perhaps an optional extension to specify non-default UDP port.
- Telephone number / IP / DNS resolution
- codec, compression, buffer - latency monitor/alert
- PSTN service announcements, eg "the number you have dialled is not connected" for an incorrect IP address followed by busy signal so the modem can detect the connection failure
IP Networking
- Wifi makes the most sense to reduce cabling
- ethernet may be required to minimise latency and avoid wifi noise
UDP
- IPv4
- UDP v TCP: Low latency would favour UDP
- Default port: 21978
- play on February 1978, date given for first BBS (CBBS)
- Ports 21850-21999 are Unassigned on IANA service name and port number list
- Optionally specify alternate port via the phone number extension
- Is a control channel needed for return signalling, eg ring, busy, or can we work that out from IP/UDP
- TLS: confidentiality requirements are not high for expected use (ie BBS and chat), but would be good to have if the latency overhead is acceptable
UDP packet format
- magic number
- protocol version
- unique session id
- packet type: data, control
- packet length - this could be dynamic to optimise signal to noise for best throughput
- data / control message
How to handle out of order packets due to asymmetric routing? Leave it to the modem error correction if possible.
Hardware
- iPSTN carrier board with power, telephone and network modules, socket for mounting off the shelf MCU
- Museum iPSTN: multiple PSTN ports - eg as many ports as a raspberry pi 4 could handle
- this would centralise the PSTN facility, cabling is standard telephone cable with rj11 connectors
- saves having iPSTN with power and network connectivity at every modem
- See also: Setting up a Dialup Server in 2020
Power Supply
- 5V 2A USB
- based on the power supply for Cisco SPA 122 ATA
Carrier Board
- breadboard for development
MCU
- Arduino/esp with wifi
- Raspberry Pi Pico PIO ports could a good fit for higher baud rates
- Raspberry Pi Zero W for development stage
Subscriber Line Interface Circuit (SLIC)
- Supply PSTN line level voltage (48V)
- voltage level convert from PSTN line level (48V ??) to ADC voltage levels
- voltage divider
https://www.telephonetribute.com/telco_line_simulators.html
Are these things of any use? is general availability going to be an issue?
"The Silvertel Ag1171 is a single Subscriber Line Interface Circuit (SLIC) in a 14 pin single in line (SIL) format. The combination of features and packaging offers extremely efficient use of board area, saving significant system size and cost, minimising time to market for Telephony Systems developers.
The Ag1171 has been designed to work with loop lengths of typically 1.0km (470R including telephone). The Ag1171 has integral dc/dc converter and ringing generation thus providing all the line powering requirements from a single supply. The Ag1171 requires a minimum of external components, making it ideal for low line count, short loop length applications, such as WLL Terminal (WLL), Fixed Cellular Terminals (FCT), Fixed Wireless Terminals (FWT) and Internet Telephony (VoIP)."
Analogue to digital conversion (ADC)
Network Interface
- to eliminate potential wifi noise and latency issues, develop with wired ethernet
- 100mbps ethernet minimum
- Example Ethernet Network Modules:
- W5500 Ethernet Network Module Microcontroller Board for Arduino UNO
- https://cdn.sparkfun.com/datasheets/Dev/Arduino/Shields/W5500_datasheet_v1.0.2_1.pdf
Operating System/Software
- Raspberry Pi OS + python
- Arduino
- FreeRTOS
- DreamPi may be a useful example: https://blog.kazade.co.uk/p/dreampi.html
Codec/Compression/Encryption
- use existing libraries for these functions
- Further review needed:
- GNU Radio
- software defined modems
Codec
Compression
Encryption
Alternate Project Names
- Analogue Data Adapter: ADA
- Internet Plain Old Telephone Service: iPOTS, POTSi
- PSTN over Internet Protocol: PSTNoIP
- something else that is inclusive of ISDN and ADSL
- eg copper (Cu) pair emulator: CuPE
This would be amazing :).
ReplyDelete