我使用以下方法在有人來電時檢測來電顯示。來電顯示檢測:不能使用某些電話
在窗體加載我把下面的代碼:
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
這保證了來電顯示是調制解調器支持,工作中。
我嘗試過在我們國家(印度)的一些私人電話線,它給出瞭如下的預期輸出。
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
在此先感謝您。
這是來自BSNL或他們的呼叫?這是通過普通的老POTS調制解調器還是蜂窩? – 2011-05-14 15:40:26
@亞歷克斯:這些是打給BSNL電話的電話。它使用電話和傳真調制解調器(型號:Smart Link 56K語音調制解調器) – Marshal 2011-05-16 05:57:08