2

I'm testing a USR 5637 USB modem. According to the USR docs I can query modem support for Caller Id with AT+VCID:

Debug: modem_write
Debug: Write 10: "AT+VCID=?\r"
Debug: modem_read
Debug: Read 24: "AT+VCID=?
(0-16)
OK"

The 0-16 is unusual because the manual states the values are 0, 1, 2. I then go on to set to 1, which per the manual Enables formatted Caller ID:

Debug: modem_write
Debug: Write 10: "AT+VCID=1\r"
Debug: modem_read
Debug: Read 14: "AT+VCID=1
OK"

Later, when a call arrives, the Caller Id information is not presented by the USR modem. The Caller Id information should be presented between rings 1 and 2.

The same code works well with Conextant 93001-based modems, so I am fairly certain the code is correct. (Or mostly OK, with no obvious defect).

It looks like others have experienced similar problems (for example, Caller ID detection -> US Robotics 56K? with a different product), but I don't see a solution.

Why is the USR modem not presenting the Caller Id information?


Here is the startup sequence I am using. It seems to follow the US Robotics manual.

init:
while (ATZ != OK)
  goto init

# gather modem info
ATI0
ATI1
ATI2
ATI3
ATI4

# query fax class
AT+FCLASS=?

# query compression
AT+VSM=?

# set caller id
AT+VCID=1

loop:
    # process data
    read_modem
    ...

    goto loop

Here is what formatted Caller ID looks like on the Conexant modems. On the Conexant modems this appears between rings 1 and 2:

Debug: modem_read
Debug: Read 59: "DATE = 0302
TIME = 1601
NMBR = 6045551212
NAME = JOHN DOE"

Here is the initialization string Windows uses. It is taken from USR5637Voice64bit.exe driver download and the usr5637_rv.inf file:

AT
AT&F1E0Q0V1&C1&D2S0=0

When I tested it, the initialization string does not enable Caller Id, either.

5
  • I'm not a USR expert nit at least I am familiar with AT commands. Does the phone ring at least twice before picking up? If not, maybe you need to add ATS1=2 Also, what is your modem init string?
    – davidgo
    Mar 3 '19 at 8:05
  • When intializing modems for dialup in my youth, I used AT&F&C1&D2 to initialize them - probably wont help, but worth a try?
    – davidgo
    Mar 3 '19 at 8:07
  • @davidgo - Thanks. Modem init string is a soft reset with ATZ. After soft reset &C1 and &D2 are set. Also see pastebin at USR Config after ATZ.
    – jww
    Mar 3 '19 at 8:26
  • Id be surprised if it didnt hold true. I dont thonk there would have been much innovation after that the push to broadband was underway.
    – davidgo
    Mar 3 '19 at 18:10
  • @davidgo - USR Technical Support could not tell me how to enable CID on their modems. I asked them for either (1) a description of the steps or (2) a C program to demonstrate it. I asked several times over a two week period during communications. USR simply ignored that request as if I did not write it. Their canned response was, "does it work on Windows with terminal program" even though I am working on Linux and OS X. (Apparently USR Support does not realize Microsoft stopped shipping the terminal program with Windows 7).
    – jww
    Nov 5 '19 at 14:50
1

It took a while but here is the answer. The following three options must be set to get Caller ID information from the USR5367 modem:

init:
while (ATZ != OK)
  goto init

# set fax class
AT+FCLASS=8

# disable call waiting
AT+PCW=0

# set caller id
AT+VCID=1

loop:
    # process data
    read_modem
    ...

    goto loop

The Call Waiting feature has something to do with the Modem on Hold (MoH) feature of USR modems, and the ability of the modem to switch lines during a call. I don't quite understand what call waiting has to do with caller id, though.

In contrast, Conexant CX93001-based modems only need AT+VCID=1. And Conexant require AT+FCLASS=0; setting +FCLASS causes Caller ID to stop working. +PCW does not appear to make a difference; and Conexant works with AT+PCW=2.


If you need to detect Conexant vs USR modems at runtime, then use ATI3. The modem strings returned are:

Conexant:

Debug: modem_write
Debug: Write 7: "ATI3\r"
Debug: modem_read
Debug: Read 38: "ATI3
CX93001-EIS_V0.2013-V92

OK"

USR:

Debug: modem_write
Debug: Write 7: "ATI3\r"
Debug: modem_read
Debug: Read 48: "ATI3
U.S. Robotics 56K FAX USB V1.2.23

OK"

This may be helpful to someone programming a USR5367 modem... When Caller ID is functioning for the USR5367, the modem communicates Caller ID related messages with "Data Link Escape" (DLE) messages. DLE messages are signaled with character 0x10.

RING is communicated with <DLE>+R and Caller ID info with <DLE>+X. So ring is signaled with two bytes 0x10 0x52 (followed by <CR><LF>). Caller ID info is signaled with the two bytes 0x10 0x58 0x10 (followed by <CR><LF>). The Caller ID data follows <DLE>+X using name/value pairs, like NAME=PASADENA MD<CR><LF> and NMBR=4104394421<CR><LF>. A full CallerID message would look like:

<DLE>+X<CR><LF>
NAME=PASADENA     MD<CR><LF>
NMBR=4104394421<CR><LF>
DATE=1106<CR><LF>
TIME=1425<CR><LF>

(And <CR><LF> is called the "trailer" in the manual and used as end-of-line as indicated by the S3and S4 register parameters).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.