Requirements
You can use Caller ID features to view the origin of incoming calls or filter
calls based on the CID information.
To use VOCP caller-id filtering, you need a few things besides the default
VOCP installation. These are:
- Caller ID service from the telco (you need to pay to play)
- A modem which recognizes CID information
- A customized cid-filter.conf file
If you have the first two, you're probably already in business but it is possible
you might need to set up a special init string with m/vgetty.
Assuming you have setup caller id with your phone company and have gotten
vgetty/VOCP working, you can check the /var/log/vgetty.ttySX log
file to see if caller id is being reported by your modem. Try
grep CALLER /var/log/vgetty.ttySX
replacing ttySX with the appropriate ttyS[0123] for your
setup. If you can see phone numbers after CALLER_ID=, you're all
set - else see the Modem's Configuration section below.
Modem's Configuration
Does your modem support caller id? We can find out if the chipset that it uses
does support CND by following these instructions (assuming your modem is
on /dev/ttyS1 - change to appropriate ttySX). Please note
that, even if the chipset used by your modem does understand caller id, it
is possible that your modem will not report the information. This is due
to the fact that, in order to intercept the CID info that is sent by the
telco between the 1st and 2nd ring bursts (in North America, may be sent
at different times elsewhere) your modem must listen in without actually
taking the phone off hook - this requires a bit of special hardware which
many manufacturers omit in order to save a dollar or two.
Already supported
Start by making sure we're logging at a high level by editing the vgetty
voice.conf file and setting voice_log_level to 4 or
5 (remember to change this back later or the log file will become huge).
As root, empty the log file:
# echo "" > /var/log/vgetty.ttyS1
Now, restart vgetty. Either:
- find and kill the process manually, or
- run :
# ps waux | grep /[v]getty | awk '{print $2}' | xargs kill
Have a friend call your VOCP-enabled line. After the call has picked up,
do a
$ grep CALLER_ID /var/log/vgetty.ttyS1
If you see the caller's number, all is well and you can skip the rest
of this section.
 |
 |
Q
How can I get my voice modem recognized by Vgetty?
A
If you have a voice modem and it is properly set up, you may be a ... |
|
 |
 |
 |
 |
 |
 |
 |
|
No CID info in log
If you're still reading this, it's because you're modem didn't show the
CID info. There are two possibilies:
- Your modem doesn't support CID
- Your modem wasn't initialized correctly
There isn't much you can do in the first case, except get another modem.
In the second case, get your modem manufacturer's documentation and
look for anything related to CID, "caller id" or CND. You are searching
for the AT command that will enable CID. Chances are that it
will be something like AT#CID, AT+VCID or something
similar. Be sure to take a look at the modem
troubleshooting section for more info about interacting with your
modem and querying for capabilities.
If you don't have the modem docs, you can still do a little detective
work to find the appropriate init string. Start with http://groups.google.com
You can also use minicom to see if you can guess the correct code (see
the modem
page for a look a troubleshooting your modem). As root, start minicom:
# minicom -s
Go down to "serial port setup", hit . Press A to modify the device,
change it to your modem's port (eg /dev/ttyS1) press
twice. Go down to "Exit" (not "Exit from Minicom"), press .
You are now talking to your modem. Enter:
AT#CID=? |
(U.S.Robotics, Texas Instruments, Rockwell compatible modems) |
AT+VCID=? |
(IS-101 modems, Lucent LT, MultiTech, IDC, Cirrus Logic...) |
AT#CC1 |
(Aspen modems, Cirrus Logic, Motorola Voice Surfer, Phoebe) |
AT*ID1 |
(Motorola) |
AT%CCID=1 |
(Practical Peripherals) |
ATS40.2=1 |
|
ATS41.6=1 |
|
ATS42.2=1 |
(ZyXEL) |
AT#CLS=8#CID=1 |
(?) |
Ignore the ERROR responses. If you get an OK or a response like:
(0-2)
or
0,1,2
You've have found the AT command to enable caller id! Assuming
AT+VCID is the command that worked, you can do:
AT+VCID?
To see the current setting.
AT+VCID=1
Should respond with OK.
AT+VCID=2
Should also say ok. 0 is normally CID OFF, 1
is normally formatted caller report and 2 is unformatted caller
report.
You should now try it out manually. Stop m/vgetty, start minicom and issue
the appropriate AT command to enable caller id. Await a call.
When the phone rings you will see something like:
RING
or
=.R
If caller id is enables and working, you should have some extra stuff
show up between the 1st and 2nd rings.
Once you have determined the AT command to use to enable your
modem's caller id feature and know that it works, add a post initialization
for your modem in mgetty's mgetty.config file. Here is what mine looks
like:
port ttyS1
post-init-chat "" AT#CID=1 OK
Of course, you should set the command that your modem uses if it is something
other the #CID (eg AT+VCID=1).
You should be done now... kill vgetty:
# ps waux | grep /[v]getty | awk '{print $2}' | xargs kill
and take a look at the output in /var/log/vgetty.ttyS1. You should
see something like:
12/18 01:35:31 yS1 send: \d\d\d+++\d\d\dAT S7=45 S0=0 L1 V1 X4 &c1; E1 Q0[0d]
12/18 01:35:34 yS1 waiting for ``OK''
12/18 01:35:34 yS1 got: [0d][0a]OK ** found **
12/18 01:35:34 yS1 send: AT#CID=1[0d]
12/18 01:35:34 yS1 waiting for ``OK''
12/18 01:35:34 yS1 got: [0d][0a]AT#CID=1[0d][0d][0a]OK ** found **
Looks good. Bug someone else so they'll call you up and see if CID info
is found in the log.
When done, don't forget to tone down the logging by resetting voice_log_level
in voice.conf.
|