当有人打电话时,我正在使用以下方法来检测来电显示。
在表单加载时,我设置了以下代码:
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
确保调制解调器支持调制解调器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
提前谢谢。
答案 0 :(得分:2)
如果您使用通用调制解调器,很遗憾无法保证它适用于所有国家/地区的所有情况;例如,美国使用FSK信令将CID传递到线路,而印度似乎使用DTMF信令。
BSNL可能正在使用调制解调器不支持的信令类型(如果是CID刚刚未通过的情况,您仍然希望看到空NMBR=
)
我会使用你知道支持DTMF信令的调制解调器进行测试。
此外,如果政府在PBX后面的办公室打电话,那么可能会搞乱CID的发送方式。