Я использую следующий метод для определения идентификатора вызывающего абонента, когда кто-то звонит.
При загрузке формы я устанавливаю следующий код:
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
Обратите внимание, что во время второго звонка ничего не отображается.
Важное примечание:
- Государственные телефоны поддерживают идентификатор вызывающего абонента, потому что, когда телефонная линия подключена к телефонному прибору, номер действительно отображается.
- Приведенный выше код успешно работает со многими другими стационарными телефонами частных компаний.
- Любая идея, почему я не получаю номера с телефонов 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
Заранее спасибо.