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