The Nortel Millennium payphones utilize a Manager to facilitate installation, reporting, and call cost rating. This Millennium payphone calls into the Manager using a 1200-baud phone modem.
mm_manager runs on Linux and MacOS X.
The mm_manager has been tested with a Nortel Multi-Pay (coin, credit card) Terminal with both V1.0 Control PCP (1.20 firmware) and V1.3 Control PCP (2.20 firmware.) It may work with other versions, please let me know.
- Nortel Millennium Multi-Pay Terminal running firmware v1.20 or v2.20. Some Millennium Terminals purchased from online phone stores may have been re-programmed with “demo” firmware that does not need a Manager. If you have one of these phones, you’ll have to program the phone back to stock v1.20 or v2.20 firmware.
- 24VDC @500mA Power Supply for Millennium Terminal
- Two phone lines (one for mm_manager, one for Millennium terminal.) They can be real POTS lines, or lines from your own PBX, but the Millennium should be able to dial the manager with a 10-digit number.
- 1200-baud or faster modem. I like the Lenovo 56K USB modems, but any 56K modem with Conexant chipset should work.
- T-Key such as the Jonard JIC-719A to open the payphone. I don’t recommend the flat, stamped T-keys as they are prone to bending.
- Keys for your terminal’s upper and lower locks, if locks are present.
- mm_manager software and a Linux machine (Raspberry Pi works great) or MacOS machine. This machine should be left on 24x7 so the terminal can call in when needed.
Simply download the source files and example tables from GitHub. Then type “make” to compile mm_manager
, and a few utilities.
usage: mm_manager [-vhm] [-f <filename>] [-l <logfile>] [-a <access_code>] [-n <ncc_number>]
-v verbose multiple v's increase verbosity.
-f <filename> modem device or file
-h this help.
-l <logfile> log bytes transmitted to and received from
the terminal. Useful for debugging.
-m use serial modem (specify device with -f)
-n <Primary NCC Number> [-t <Secondary NCC Number>] - specify
primary and optionally secondary NCC number.
The Nortel Millennium payphones require a standard POTS line, with answer supervision in the form of polarity reversal to indicate that the far end has answered the call. This is required for the Millennium to know when to collect or refund coins. Most SIP ATAs and Cisco Voice Routers can be configured for polarity reversal. If your phone line does not support polarity reversal, an answer supervision detection module is available from Nortel.
The Nortel Millennium terminal requires 24VDC to supply power to the phone. Only limited functionality is provided for emergency service when this power is not present.
The Millennium Terminal is an advanced payphone that contains a multitude of sensors to determine if the phone is installed and operating properly. This includes sensors to make sure that a coin box is installed, and also a sensor to ensure the coin vault door is in place. If your Millennium does not have a coin box, please obtain one. The coin boxes are standard Western Electric / Northern Electric Single Slot, readily available. In a pinch, the coin box sensor switch can be taped in the closed position. The same goes for the coin vault door. The coin vault door must be in place and locked. If your phone is missing the coin vault lock, as is quite common for these phones purchased on the second-hand market, please obtain the correct lock, or tape the switch closed.
If these sensors are not happy, the phone will alarm, and will go “Out of Service.”
Provisioning the Millennium Terminal is accomplished through the craft access menu on the terminal itself. For this, you will need the terminal’s access code, and a PIN. The default Access Code is 2727378 (CRASERV).
With the upper housing of the phone locked, take the handset off the cradle and replace it. Then key in 2727378. You will be prompted for a PIN, use anything above 5000, like 55555. Unlock the upper housing with a T-Key when prompted. You do not need to open the upper housing.
Start mm_manager
.
Follow on-screen prompts on the Terminal to install.
Key in this Terminal’s telephone number (10-digits) NPA-NXX-XXXX.
Key in this Terminal’s 10-digit serial number (1234567890 is fine.)
Key in the Manager’s phone number (I use 1-855-288-2568, which I intercept in the Asterisk dialplan and send to the modem connected to the computer running mm_manager.)
Communication with the Nortel Millennium involves sending and receiving tables. Tables are numbered 1 through 155, and contain configuration information sent to the terminal or query / status information received from the terminal. Tables are of fixed size, depending on type of table. Some of the important tables for configuring a millennium phone include:
Each packet response from the Manager includes the Terminal’s phone number, followed by a byte containing the Table ID of the current table being sent by the Manager.
The following are some of the tables used by the Millennium terminal. They should be customized (using a hex editor) for your specific phone. Some parameters (like NCC numbers and Access Code) can be changed via command-line parameters to mm_manager
.
Table ID (DEC) | Table ID (Hex) | Description | Length | Notes |
36 | 0x24 | Time Sync Request | 0 | TTMSYNC |
20 | 0x14 | Set Date / Time | 7 | |
44 | 0x2c | Attention Request Table Update | 1 | TUPLOAD / TTBLREQ |
38 | 0x26 | Cash Box Status Message | 62 | TCASHST (Terminal Cash Box Status)
TCOLLCT |
18 | 0x12 | Terminal Table Data Update | 0 | |
151 | 97 | Set Based Rating International Table | 603 | RATE and RATEINT: Almost all 00’s |
14 | 0x0e | Table Update ACK | 1 | Terminal -> Manager |
150 | 0x96 | Set Based Rating NPA Table | 400 | See RATENPA, 200-999, 4-bits each |
138 | 0x8a | Double Compressed LCD Tables | 202 | LCD (Local Call Determination) |
137 | 0x89 | Double Compressed LCD Tables | 202 | LCD (Local Call Determination) |
136 | 0x88 | Double Compressed LCD Tables | 202 | LCD (Local Call Determination) |
135 | 0x87 | Expanded Carrier Table (33 Entries) | 1108 | Provider names, 1st=coin, 3rd=credit, 2nd=smart card? |
134 | 0x86 | Expanded Card Table (32 Entries) | 1152 | HOTRNG |
93 | 0x5d | Smart Card Parameters Table | 224 | Hex data |
92 | 0x5c | 200 Number Call Screening List P2-277
(RDLIST?) |
3060 | Flags:
0x00=unused 0x01=Toll Free 0x41=Information 0x81=Operator |
Japanese VFD Text | 8000 | Japanese: V1.3 Only
0x7A001 offset in U2 ROM. |
||
86 | 0x56 | Expanded Visual Prompts Language B | 8000 | Spanish: V1.3 Only
Qty 400: 20-line VFD strings 0x77001 offset in U2 ROM. |
French VFD Text | 8000 | French: V1.3 Only
0x74001 offset in U2 ROM. |
||
85 | 0x55 | Expanded Visual Prompts Language A | 8000 | English: V1.3 Only
Qty 400: 20-line VFD strings 0x71B5A offset in U2 ROM. |
73 | 0x49 | Rate Table | 1191 | RATE |
72 | 0x48 | Spare Table (LCD?) | 1000 | Almost all 00, except one block of hex data. NOTE: This is a required table for V1.3 PCP, but not used on V1.0. |
62 | 0x3e | Numbering Plan Table | 352 | More hex data |
60 | 0x3c | Terminal SW Version | 27 | TSWVERS |
58 | 0x3a | Service Level Table | 25 | All 00’s. |
55 | 0x37 | Enhanced Repertory Dialer List | 570 | RDLIST 10 rows of 57 bytes |
50 | 0x32 | Coin Validation Table | 104 | COINVL |
35 | 0x23 | Time/Call-In Parameters | 20 | |
34 | 0x22 | Call / Carrier Statistics Parameters | 18 | CALLST |
33 | 0x21 | Modem Configuration Parameters | 35 | MODEM (Modem Parameters) |
32 | 0x20 | Communication Statistics and Configuration Parameters | 32 | COMMST |
31 | 0x1f | Installation/Servicing Parameters | 36 | INSTSV Access Code In first 7 nibbles. |
30 | 0x1e | User Interface Parameters Universal | 67 | USERPRM (User Interface Parameters) |
29 | 0x1d | Advertising Prompts
seq, text, duration(2), effects |
480 | ADMESS
Text info about rates for local and anywhere in the US Calls. 20 entries. |
26 | 0x1a | Feature Configuration – Universal | 71 | FEATRU |
21 | 0x15 | Terminal Access Parameters | 47 | TERM Contains our number and primary/sec NCC#, call in start date, time, interval, CDR threshold. |
13 | 0xd | End of Data Message | 0 | Manager sends no data. |
10 | 0xa | Terminal Status | 10 | 5 byte serial number, 5 byte TSTATUS register. |
The low-level protocol sent over the modem is a stream of bytes framed within START and END bytes.
START | FLAG Byte | LEN (includes END) | DATA | CRC-16 | END |
02 | 1-byte | 1-byte | N bytes... | 2-bytes * | 03 |
*CRC-16 IBM with A001 polynomial per this site. Includes all bytes including START through the DATA.
FLAG Bits:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
? | ? | DISCONNECT | ? | ACK | RETRY | Sequence |
Separate sequence numbers are counted for each of tx_seq and rx_seq. ACKs should always be sent with the same sequence as the last received Rx packet. Tx seq is incremented after every successful packet transmission, and reset when the terminal disconnects.