Skip to content

Latest commit

 

History

History
81 lines (62 loc) · 5.97 KB

README.md

File metadata and controls

81 lines (62 loc) · 5.97 KB

POCSAG/FLEX Modem

A complete project for receiving pager data, and transmitting POCSAG/FLEX data to old pagers.

Caution:

  • TX: Please only use with a dummy load on HAM-bands
  • RX: Please don't look at data you're not supposed to receive

Parts required:

  • 78M05
  • AMS1117-33
  • TTGO-T-display ESP32 module
  • RF4463F30 module
  • Some passives optional:
  • A relay to drive an external PA
  • Status LEDS's

How it works

The modem uses a RF4463F30 wireless module (NiceRF) https://www.tindie.com/products/nicerf/rf4463f30-1w-wireless-transceiver-module/ . Inside is an Silicon Labs Si4463 and a PA, and you can use it to broadcast pretty far-ish. Haven't checked the output yet, but it is a pretty cheap module and you may need to add output filters to avoid splatter on other frequencies. The module allows frequencies up to 1050 Mhz, this should cover (nearly?) all pager bands. While the modules may be optimized for specific frequency bands, they will happily transmit outside of their optimum band. Range will be severly reduced though.

The modem supports:

  • POCSAG 512
  • POCSAG 1200
  • POCSAG 2400
  • FLEX 1600
  • FLEX 3200/2
  • FLEX 3200/4
  • FLEX 6400/4

Technically the module should be capable of transmitting ERMES data too; I haven't implemented this due to the absence of any working ERMES networks, and I don't have any ERMES pagers in my collection. I'd love to implement ReFLEX (two way paging), but I can't find ANY relevant data/protocol info. There's some stuff in Motorola patents, but it's hard to find anything meaningful.

POCSAG is easy and straightforward; it's not synchronized and the pagers listen regularly. The length of the POCSAG preamble is pretty long, and the pagers will happily sync and receive info. They will display a little antenna symbol if they don't see any pager traffic for some time.

The Motorola FLEX protocol is a synchronous protocol; this has a major drawback: if a pager is sync'ed to your network, it will remain synced until it times out, not receiving a couple of frames. This means:

  • If you reset your modem (or if it crashes), your pager will probably lose sync. New messages sent will probably not be received by your pager. You could fix this with a GPS receiver with a PPS output, but it has not been implemented yet.
  • FLEX pagers do expect a fair amount of traffic. If they don't regularly see traffic in their assigned frames, they will lose sync and usually default to listening until they get synced up to the network again. This will drain your battery rather quickly!

To help keep pagers happy, the modem will regularly send empty/idle frames on frequencies/frames that have been used to send messages to pagers.

The modem is capable of syncing-up to existing FLEX pager networks, and send on their frequencies, in their timeslots. I've never tested this, and neither should you.

How to use

  • Build the board
  • Build/upload firmware and filesystem
  • Connect to wifi (The board will run as an AP, connect and enter your wifi details
  • Point your browser to the IP shown on the display, enter frequencies (in Hz) and data, and send away!

For RX purposes there's somewhat of a web-interface, at /index.html, but you'll need to fill in the IP address of the device in main.js. this is what it looks like )

Adding Frequencies

The RF4463 in the modem uses config files generated by the WDS utility ( https://www.silabs.com/documents/login/software/WDS3-Setup.exe ) Click 'Simulate Radio', and select the Radio Configuration Application for the RF4463. You can use the included XML templates as a starting point, just add the frequency and hit 'Generate source'. Name it following the naming convention used by the other files in the folder, and use the included php-file to generate a rfconfig.h-styled file to use in the firmware.

Note: Not all frequencies need to be added; if you entered the channel spacing correctly, the firmware will find the channel based on the base frequency setting and spacing.

Tips and tricks

  • POCSAG uses 'function' bits A through D to distinguish between different types of messages, but these are mostly to be used on 'tone' pagers. Most numeric pagers expect A, most alphanumeric pagers expect D, and will decode A-coded messages as numeric. Some pagers support folders, and use different function values to sort messages
  • Some pagers use special sequences to do OTA configuration. If you ever find out what those sequences are for popular models, please let me know.
  • While they're really supposed to, not all FLEX pagers support all FLEX modes. Some only support the 2FSK modes.

Limitations

  • It basically hogs an entire ESP32 core during transmission; this is because everything is pretty time-critical
  • It's not amazingly stable
  • Firmware uses poor, unsafe coding practices. There's probably a ton of memory leaks :)
  • Multi-phase FLEX RX on US nation-wide networks will crash the ESP32 pretty fast. I haven't had an awful lot of time to bugfix this, but the firmware isn't too happy to see a ton of traffic

Disclaimer

  • I absolutely deny any and all responsibility should you chose to use, sell, lend or loan, or even just look at this software or hardware design. It's not fit for public consumption, and probably not suitable to be used by anyone. You're on your own!

Errata

  • The original version has GPIO2 connected to one of the GPIO's on the RF module. For some reason, this causes an issue where the RF module does something weird during boot. Not sure. Just don't connect the ESP32 GPIO2 pin to the main board and you're good.
  • The RF4463 needs to be calibrated for proper use. Calibrated value is set in RF4463.cpp at or around line #288. Should be around that value, calibrating it will improve your range by better matching your pager. Haven't found a better way to do it than just transmitting and checking the resulting frequency using an SDR RX

TODO

  • Code cleanup
  • Web interface
  • Web interface
  • I am once again asking for a web interface