USB-модем US Robotics 56K - идентификатор вызывающего абонента - (USR5637)

Мне нужно разработать небольшую утилиту для преобразования одного формата CALLER ID в другой. У меня есть USB-модем US Robotics 56K, который поддерживает CALLER ID, а также функцию CALLER ID моего поставщика услуг (BT) для моей линии (номер отображается на телефоне).

У меня есть модем, упомянутый выше, подключенный к той же линии, но я не знаю, в каком формате он дает номер или как я могу получить телефонный номер только в приложении C#.

На одном сайте US Robotics нет руководства для разработчиков о том, как работает модем. Мне нужно некоторое руководство.

3 ответа

Согласно их руководству, вы можете использовать AT-команды для включения идентификатора вызывающего абонента (по умолчанию он отключен) и получения вызывающего абонента:

+ VCID - идентификатор вызывающего абонента (CID)

Эта команда управляет отчетностью и представлением данных, связанных со службами идентификатора вызывающего абонента, в формате данных идентификатора линии входящего вызова (ICLID) для следующего вызова.

+VCID=<pmode>

0 Отключить отчет об идентификаторе звонящего. (По умолчанию.)

1 Включает идентификатор вызывающего абонента с отформатированным представлением в DTE. Модем представляет элементы данных в парном формате. Ожидаемые пары: дата, время, имя и код вызывающего абонента (номер телефона),

2 Включает идентификатор вызывающего абонента с неформатированным представлением в DTE.

Retreiving:

+ VRID - Сообщить о полученном идентификаторе вызывающего абонента (CID)

Эта команда сообщает данные, связанные со службами идентификатора вызывающего абонента, в формате данных идентификатора линии входящего вызова (ICLID) для последнего принятого вызова.

+VRID=<pmode>

0 Отчеты Caller ID с отформатированным представлением в DTE. Модем представляет элементы данных в парном формате. Ожидаемые пары: дата, время, имя и код вызывающего абонента (номер телефона),

1 Сообщает идентификатор вызывающего абонента с неформатированным представлением в DTE.

Я не совсем уверен, как общаться с модемом через USB, в свое время это был весь последовательный порт (и есть библиотеки COM-портов для C#), не знаю, реализует ли USB-модем виртуальный COM-порт для совместимости с Терминальное программное обеспечение. Перед тем, как начать делать это из C#, возможно, стоит воспользоваться эмулятором терминала (Windows использовалась вместе с HyperTerminal, но это было давно), и просто попытаться напрямую поговорить с модемом, чтобы выяснить, есть ли связь и как работает.

Я надеюсь, что это немного помогает.

Ты пробовал с этим

[CallerID]
HKR,,CallerIDOutSide,,O
HKR,,CallerIDPrivate,,P
HKR,,VariableTerminator,,<cr><lf>
HKR,EnableCallerID,1,,”AT#CID=1<cr>”
HKR, Responses, “<cr>”, 1, 01, 00, 00,00,00,00, 00,00,00,00
;00
HKR, Responses, “<lf>”, 1, 01, 00, 00,00,00,00, 00,00,00,00
;00
HKR,Responses,”<cr><lf>DATE = “,1,93,00,00,00,00,00,00,00,00,00
HKR,Responses,”MESG = “,1,97,00,00,00,00,00,00,00,00,00
HKR,Responses,”NAME = “,1,96,00,00,00,00,00,00,00,00,00
HKR,Responses,”NMBR = “,1,95,00,00,00,00,00,00,00,00,00
HKR,Responses,”TIME = “,1,94,00,00,00,00,00,00,00,00,00

для номера вы должны использовать NMBR, для имени NAME и так далее.

Мой USB-модем отображается как устройство /dev/ttyACM0. Я смог использовать его как последовательное устройство как в Linux, так и в Windows.

в Linux вы можете использовать команду dmesg и определить, к какому устройству она подключена. например, для первого устройства оно отображается как /dev/ttyACM0, для второго устройства - как /dev/ttyACM1 ...

В minicom вы можете установить его для идентификатора вызывающего абонента, набрав "at +VCID=1", и он должен ответить "OK".

в windows вы можете использовать putty и настроить его для последовательного порта 115200,n,8,1. Я также использовал VC# для связи с ним.

На веб-сайте US Robotics нет руководства для разработчиков по работе модема.

Вам нужно Руководство пользователя USB-модема USR 56K. Это руководство по установке и полный список AT-команд. Ссылки на него отсутствуют на странице USR5637. Судя по всему, это руководство OEM. Я наткнулся на него, когда искал в Google "сообщение USR5637 DLE".

Для USR5637 убедитесь, что у вас версия прошивки v1.2.23. В версии исправлены ошибки Caller ID (см. Примечания к выпуску). Вы можете проверить версию прошивки с помощьюATI3:

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

Для USR5637 вы должны ввести либо одну AT-команду, либо три AT-команды, в зависимости от режима. Вам нужна одна команда, если вы находитесь в командном режиме. Если вы находитесь в голосовом режиме, вам понадобятся три команды.

Одна AT-команда для командного режима:

# set caller
AT+VCID=1

Три AT-команды для голосового режима:

# set service class to voice
AT+FCLASS=8

# disable call waiting
AT+PCW=0

# set caller
AT+VCID=1

USR5367 имеет очень острый край. Вы можете узнать количество звонков от модема, прочитавS1регистр. ЧтениеS1для подсчета звонков поддерживается модемами Accura, Conexant, MultiTech и USR. Получение количества звонков от модема упрощает ваш конечный автомат, поскольку вам не нужно отслеживать переменные или тайм-ауты бездействия. Однако чтениеS1 на модемах USR разрушает и уничтожает незапрошенное сообщение Caller ID.

Вот что произойдет, если вы прочитаете S1 для подсчета звонков на модемах USR:

modem>   RING
program> count = read S1
modem>   # NAME, NMBR, DATE, TIME are not sent
modem>   RING
program> count = read S1

Другой острый край USR - установка +PCW=0задокументирован в руководстве, но четко не указано, что он должен быть установлен для идентификатора вызывающего абонента. Мне потребовалось несколько недель, чтобы попробовать.

Я разговаривал со службой поддержки USR в течение двух недель, пытаясь настроить идентификатор вызывающего абонента на модем. Они никогда не говорили мне о+FCLASS=8 или +PCW=0. Их шаблонный ответ был: попробуйте+VCID=1в Windows в терминальной программе. Они никогда не признавали, что я работаю над Linux и OS X; и они никогда не говорили мне читатьS1был разрушительным. И они никогда не осознавали, что Microsoft прекратила поставлять эту терминальную программу с Windows 7.


Когда идентификатор вызывающего абонента функционирует для USR5367, а модем находится в голосовом режиме, модем передает сообщения, связанные с идентификатором вызывающего абонента, с помощью сообщений "Прерывание канала передачи данных" (DLE). Сообщения DLE обозначаются символом 0x10.

RING общается с <DLE>+R и информацию об идентификаторе вызывающего абонента с <DLE>+X. Итак, кольцо сигнализируется двумя байтами0x10 0x52 (с последующим <CR><LF>). Информация об идентификаторе вызывающего абонента передается двумя байтами0x10 0x58 0x10 (с последующим <CR><LF>). Данные идентификатора вызывающего абонента следуют<DLE>+X используя пары имя / значение, например NAME=PASADENA MD<CR><LF> а также NMBR=4104394421<CR><LF>. Полное сообщение CallerID будет выглядеть (взято из звонка продавца телемаркетинга):

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

(А также <CR><LF> в руководстве называется "трейлер" и используется в качестве конца строки, как указано S3а также S4 параметры регистрации).


Я также извлек драйвер USR5637 для Windows (USR5637Voice64bit.exe) и попробовал строку инициализации изusr5637_rv.inf:

AT
AT&F1E0Q0V1&C1&D2S0=0

Строка инициализации официального драйвера не включала Caller ID на модеме.

Другие вопросы по тегам