Caller ID, which is a feature that tells you who is calling on the telephone, occurs as a Frequency Shift Keying (FSK) signal between the first and second ring. It operates at 1200 baud, using the Bell-202 Standard, which is based on 1200 Hz (a "mark," representing a 1) and 2200 Hz (a "space," representing a 0) tones. It's a serial transmission, with a start bit, 8 bits of data, no parity, and a stop bit. At the data level, it consists of packets of information with checksums.
In this article, I discuss a real-time caller-ID implementation that is part of a voice-activated call monitoring system I built. In particular, I discuss how the caller-ID part of the solution has evolved from a hardware FSK modem in the early 1990s to the software FSK modem in use today. While my particular implementation is based on FreeBSD 5.3, there is nothing operating-system specific here.
My hardware consists of an adapter for a phone line (Figure 1) that converts the telephone signal into something that I can feed into a sound card's input. Because I have two lines, I have two such circuits in my system. I've conveniently used the sound card's left channel for one line, and the right channel for the other.