CallerID Detection: не работает с некоторыми телефонами - PullRequest
7 голосов
/ 05 мая 2011

Я использую следующий метод для определения номера вызывающего абонента, когда кто-то звонит.

При загрузке формы я установил следующий код:

this.serialPort1.PortName = "COM3"; 
this.serialPort1.BaudRate = 9600;
this.serialPort1.DataBits = 8;
this.serialPort1.RtsEnable = true;
this.serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
this.serialPort1.Open();
this.serialPort1.WriteLine("AT#cid=1" + System.Environment.NewLine);

void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            richTextBox1.Text += this.serialPort1.ReadLine();
            //richTextBox1.Text += this.serialPort1.ReadExisting();
            //richTextBox1.Text += this.serialPort1.ReadByte().ToString();

        }

Команда

this.serialPort1.WriteLine("AT#cid=1" + System.Environment.NewLine);

дал мне вывод

OK

Что гарантирует, что Caller Id поддерживается модемом и работает.

Я пытался использовать некоторые частные телефонные линии в нашей стране (Индии), это дает ожидаемый результат, как показано ниже.

RING               //On 1st Ring
DATE = xxxxx       //On 2nd Ring
TIME = xxxx
NMBR = xxxxxxxxx

RING               //On 3rd Ring    
RING               //On 4th Ring

Но когда я пытаюсь использовать правительственные телефоны (компания BSNL в Индии), в них не указывается DATE, TIME и NMBR. Это дает следующий вывод.

RING               //On 1st Ring    
RING               //On 3rd Ring        
RING               //On 4th Ring

Обратите внимание, что во время 2-го звонка ничего не отображается.

Важное примечание:

  • Правительственные телефоны поддерживают идентификатор вызывающего абонента, потому что, когда телефонная линия подключена к телефонному инструменту, номер действительно отображается.
  • Выше код успешно работает со многими другими телефонами фиксированной связи частными компаниями.

- Есть идеи, почему я не получаю номера с телефонов BSNL, несмотря на то, что они отображаются на экране идентификации вызывающего абонента телефона?

Редактировать: Я передаю следующие команды инициализации модему, чтобы установить его для режима приема DTMF.

AT#CID=1  //Enable Caller ID (Verbose)
AT#VLS=0  //Voice Source--Telephone Line (Go on hook)
AT#VTD=3F,3F,3F  //Enable DTMF Transmit, Receive and Voice Online 
AT#CLS=8  //Sets Modem to Voice Mode

Заранее спасибо.

1 Ответ

2 голосов
/ 16 мая 2011

Если вы используете универсальный модем, к сожалению, нет гарантии, что он будет работать во всех ситуациях во всех странах;например, США используют передачу сигналов FSK для передачи CID по проводам, тогда как в Индии, похоже, используется передача сигналов DTMF.

Вполне возможно, что BSNL использует тип сигнализации, который модем не поддерживает (Если бы это был случай, когда CID просто не передавался, вы все равно ожидаете увидеть пустой NMBR=)

Я бы проверил на модеме, который, как вы знаете, поддерживает передачу сигналов DTMF.

Кроме того, если правительственные телефоны находятся в офисе за АТС, то это может быть связано с тем, как отправляется CID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...