2011-05-05 18 views
7

Estoy utilizando el siguiente método para detectar la identificación de llamada cuando alguien llama.Detección de identificación de llamada: no funciona con algunos teléfonos

de carga en la forma que establezca el siguiente código:

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

     } 

El comando

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

me dio la salida

OK 

que asegura que identificador de llamadas es apoyado por módem y está trabajando.

He intentado con algunas líneas telefónicas privadas en nuestro país (India), da el resultado esperado de la siguiente manera.

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

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

Pero cuando trato con los teléfonos públicos (BSNL la compañía en la India), que no da fecha, hora y NMBR parte. Da la siguiente salida.

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

Tenga en cuenta que no hay nada demostrado durante el segundo anillo.

Nota importante:

  • teléfonos Gobierno sí apoyan identificador de llamadas, porque cuando la línea telefónica está conectada al instrumento de teléfono, número hace manifiesta.
  • El código anterior funciona con éxito con muchos otros teléfonos de línea fija de compañías privadas.

- ¿Alguna idea de por qué no obtengo los números de los teléfonos BSNL, a pesar de que aparecen en la pantalla de identificación de llamadas del teléfono?

Edit: Paso los siguientes comandos de inicialización al módem para configurarlo para el modo de recepción 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 

Gracias de antemano.

+0

¿Se trata de llamadas provenientes de BSNL o de ellas? ¿Esto es a través de un antiguo modem POTS o celular? –

+0

@Alex: Estas son llamadas que llegan a un teléfono BSNL.Está utilizando el módem de teléfono y fax (Modelo: Smart Link 56K Voice Modem) – Marshal

Respuesta

2

Si utiliza un módem genérico, desafortunadamente no hay garantía de que funcione en todas las situaciones en todos los países; por ejemplo, EE. UU. utiliza la señalización FSK para pasar el CID por el cable, mientras que India parece utilizar la señalización DTMF.

Puede darse el caso de que BSNL está utilizando una señalización escriba el módem no es compatible (Si fuera el caso de que se no se pasa el CID, a pesar de ello espera ver un vacío NMBR=)

Lo probaría con un módem que sepa que admite señalización DTMF.

Además, si el gobierno llama por teléfono a una oficina que se encuentra detrás de una centralita privada privada (PBX), eso podría interferir con la forma en que se envía el CID.

+0

Hola, gracias por las entradas. Sí, tiene razón en que BSNL envía tonos DTMF como identificador de llamadas. En segundo lugar, refiriéndose a la hoja de comandos AT de Smart Link Modems, dice que admiten la transmisión y recepción de tonos DTMF; y para eso solo tenemos que pasar los comandos AT apropiados al módem. He editado mi respuesta para mostrar qué comandos paso – Marshal

+1

. Sospecho que eso es solo para DTMF en llamada; es decir, qué sucede cuando se presiona una tecla, no para la señalización CID –

Cuestiones relacionadas