Using pulse dial phones with TDM400P

I have a TDM400P analog line card with one FXO module and 3 FXS modules and have built Asterisk along with dahdi Linux + tools 2.5.0 from source. I want to use this as a simple PBX with 3 extensions on a single PSTN line on the UK VirginMedia cable network. The problem I have is that DTMF handsets work fine when connected to FXS ports but I have a number of old pulsedial phones (British Telecom/GPO 332, 706 and 746 models) which I would like to use instead and these produce errors like this seen in an Asterisk CLI session:

*CLI> – Starting simple switch on 'DAHDI/2-1’
DTMF end ‘1’ received on DAHDI/2-1, duration 0 ms
DTMF end accepted without begin ‘1’ on DAHDI/2-1
DTMF end passthrough ‘1’ on DAHDI/2-1
DTMF end ‘1’ received on DAHDI/2-1, duration 80 ms
DTMF end passthrough ‘1’ on DAHDI/2-1
– Hanging up on ‘DAHDI/2-1’
– Hungup ‘DAHDI/2-1’
– Starting simple switch on ‘DAHDI/2-1’
– Hanging up on ‘DAHDI/2-1’
– Hungup ‘DAHDI/2-1’
– Starting simple switch on ‘DAHDI/2-1’

It looks like the interface is interpreting the pulses as on hook/off hook events - I am using fxol_s signalling on the FXS ports and have this in my chan_dahdi.conf:

; a template to hold common options for all phones
usecallerid = yes
hidecallerid = no
callwaiting = no
threewaycalling = yes
transfer = yes
echocancel = yes
echotraining = yes
immediate = no
context = LocalSets
signalling = fxo_ls
pulsedial = yes

Could it be that the TDM400P FXS modules do not support pulse dialling, or maybe the pulse rate is out of spec owing to a dirty or worn dial mechanism? The phones work fine with an old GEC Plessey Interline 6 PBX so I don’t think the pulse repetition rate can be too far out.


A pulse is an on hook/off hook event pair! In fact, I’m told that some people used to be able to dial from the hook switch, to bypass dial locks.

I believe that any code to interpret that sequence as a digit would be in chan_dahdi.c, in Asterisk, not in the the hardware or the hardware driver.

Note also that a BT style time break recall has very similar timing to a pulse dial digit 1.

I doubt that any priority has been given to handling pulse dialing, but I haven’t checked the code for this.

When I worked for Chelsea College London in the 1970’s some teaching labs had dial locks on the then new GPO 746 rotary dial phones but canny students with a good sense of rhythm could make calls using the hook switch. It was quite easy to do if you could get the repetition rate just right.

I have looked in chan_dahdi.c and the pulse dial code is there all right although I don’t understand how it distinguishes between hook switch events and dial off-normal switch interruptions. I will try some different pulse dial phones as the asterisk log is reporting 80 ms breaks when I’m pretty sure the rotary dial is supposed to generate 10 pulses per second (100 ms breaks).

Interesting you should mention the BT timed break recall; when I first installed the Interline 6 PABX on my BT line at home about 20 years ago, we had some interesting problems - when any extension answered an incoming call, the PABX would send a 500 ms timed break back to the local BT exchange (central office), parking the call there! Eventually I was able to arrange with BT for the timed break feature to be disabled on that line and we’ve not had any problems since. It looks like this old PABX will have to remain in use on the BT line unless I can find an ATA that works with pulse dial phones but I will certainly be using Asterisk on the other line which is used mainly for business and has DTMF handsets on it.

Thanks for your help,


Pulses can only be distinguished from hangups by their timing.

100ms is the reciprocal of the pulse repetition rate, the actual pulse will be less than this.

A 500ms timed break would be outside the BT specification. The Americans use such a longer, less precisely specified, break, and call it hook flash.

See for the BT analogue line interface.

Pulse rate is between 9 and 11 Hz and the discconnect is between 63% and 72% of the total pulse. To two places, that is between 57ms and 80ms (actually the 80ms is exact).