CallerID Detection: Doesnt work with some phones

雨燕双飞 提交于 2019-12-22 05:17:45

问题


I am using the following method to detect the Caller ID when someone calls.

On form load I set the following code:

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();

        }

The command

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

gave me the output

OK

Which ensures that Caller Id is supported by modem and is working.

I tried with some private phone lines in our country (India), it gives the expected output as below.

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

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

But when I try with government telephones (BSNL Company in India), it fails to give DATE,TIME and NMBR part. It gives the following output.

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

Please notice that there is nothing shown during 2nd Ring.

Important Note:

  • Government phones do support caller id, because when the phone line is connected to the phone instrument, number does shows up.
  • Above code is successfully working with many other fixed-line phones by private companies.

-- Any idea why dont I get numbers from BSNL phones, despite they display on phone Caller ID screen ?

Edit: I pass the following initializing commands to modem to set it for DTMF receive mode.

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

Thank you in advance.


回答1:


If you use a generic modem there is unfortunately no guarantee that it will work in all situations in all countries; for example the US uses FSK signalling to pass the CID down the wire whereas India appears to use DTMF signalling.

It may well be the case that BSNL are using a signalling type the modem does not support (If it was the case that the CID was just not being passed, you would still expect to see an empty NMBR=)

I would test with a modem that you know supports DTMF signalling.

Additionally, if the government phones in an office behind a PBX, then that could be messing with how the CID is sent.



来源:https://stackoverflow.com/questions/5897916/callerid-detection-doesnt-work-with-some-phones

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!