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 на модеме.