Foros del Web » Programación para mayores de 30 ;) » .NET »

Modem con Identificador de llamadas (Caller ID) con C#

Estas en el tema de Modem con Identificador de llamadas (Caller ID) con C# en el foro de .NET en Foros del Web. Hola a todos, estoy haciendo una aplicación en consola en C# que capture el número telefonico de una llamada entrante, según yo el código que ...
  #1 (permalink)  
Antiguo 30/04/2009, 09:37
 
Fecha de Ingreso: noviembre-2007
Mensajes: 35
Antigüedad: 16 años, 5 meses
Puntos: 0
Pregunta Modem con Identificador de llamadas (Caller ID) con C#

Hola a todos, estoy haciendo una aplicación en consola en C# que capture el número telefonico de una llamada entrante, según yo el código que esta abajo debería ser suficiente, pero cuando hago las pruebas a veces funciona y a veces no.

El comportamiento es este:
1 - Llamo a la línea conectada al modem desde mi cel (o cualquier otro número) y pasa nada después del tercer ring se escucha un sonido en el modem.

2 - Hago una segunda llamada y ahora si funciona todo bien, en pantalla me muestra la información de fecha, hora y número de telefono.

3 - dejo pasar unos 4 minutos, marco nuevamente y volvemos a empezar (punto 1 y 2)

Es como si el modem se durmiera o algo por el estilo cuando esta inactivo y con la primera llamada se despertara pero no identifica el número.

El módem que uso es un Lucent MDP7800SP-U

el código que uso:
Código:
using System.IO;
using System.IO.Ports;
using System.Text;
using System;

class Program
{
    static SerialPort ComPort;
    static ASCIIEncoding ASCIIEncoder = new ASCIIEncoding();

    public static void OnSerialDataReceived(object sender, SerialDataReceivedEventArgs args)
    {

        //SE ALMACENA EL EVENTO ACTUAL DEL PUERTO EN LA VARIABLE DATA
        string data = ComPort.ReadExisting();
        string ring_date = "";
        string ring_time = "";
        string ring_nmbr = "";


        //OBTENER FECHA PARA ESCRIBIR EL LA BITACORA
        DateTime date = DateTime.Now;
        string dateformat = date.ToString("yyyyMMdd"); //OBTENER EL AÑO MES Y DÍA

        //OBTENEMOS LA LONGITUD DE LAS CADENAS RECIBIDAS POR EL MÓDEM, CUANDO SEA MAYOR QUE 30 CARACTERES
        //SACAMOS LOS DATOS DE FECHA Y NÚMERO DE TELÉFONO
        if (data.Length >= 30)
        {
            ring_date = data.Substring(7, 4);
            ring_time = data.Substring(20, 4);
            ring_nmbr = data.Substring(33, 10);
            

            //SEGEMENTO PARA ESCRIBIR EN BITACORA LOS EVENTOS CAPTURADOS
            string fileName = "C:\\appserv\\Tracer_Log_" + dateformat + ".txt";
            //esto inserta texto en un archivo existente, si el archivo no existe lo crea
            StreamWriter writer = File.AppendText(fileName);
            writer.WriteLine(ring_nmbr + "|" + ring_date + "|" + ring_time);
            writer.Close();
            System.Console.Write(ring_date + "|" + ring_time + "|" + ring_nmbr + "\n");
        }
    }

    static void Main(string[] args)
    {
        string port = "COM4";
        int baud = 9600;
        if (args.Length >= 1)
        {
            port = args[0];
        }
        if (args.Length >= 2)
        {
            baud = int.Parse(args[1]);
        }

        InitializeComPort(port, baud);

        string text;

        //ACTIVAR IDENTIFICADOR DE LLAMADAS
        String ComandoATID;
        ComandoATID = "AT#CID=1";
        ComPort.Write(ComandoATID + '\r');

        do
        {
            //CAPTURAMOS EL TEXTO ESCRITO EN LA CONSOLA
            text = System.Console.ReadLine();

            //ESCRIBIMOS EN LA CONSOLA EL TEXTO CAPTURADO
            ComPort.Write(text + '\r');
        }
        while (text.ToLower() != "q");

    }

    private static void InitializeComPort(string port, int baud)
    {
        ComPort = new SerialPort(port, baud);
        // ComPort.PortName = port;
        // ComPort.BaudRate = baud;
        ComPort.Parity = Parity.None;
        ComPort.StopBits = StopBits.One;
        ComPort.DataBits = 8;
        ComPort.Handshake = Handshake.None;
        ComPort.DataReceived += OnSerialDataReceived;
        ComPort.Open();
    }
}

que creen que esta pasando??


saludos
------------------------
7th Sign | Iván Rico
  #2 (permalink)  
Antiguo 07/05/2009, 08:15
 
Fecha de Ingreso: noviembre-2007
Mensajes: 35
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Modem con Identificador de llamadas (Caller ID) con C#

Bueno ya he podido resolverlo, el problema no estaba en el código sino en el hardware, básicamente el modem se dormía cuando pasaban 10 segundos sin actividad, leyendo el manual de comandos AT encontré como quitarle esa opción.


saludos
  #3 (permalink)  
Antiguo 15/08/2009, 10:08
Avatar de raptor07  
Fecha de Ingreso: marzo-2007
Ubicación: Veracruz, México
Mensajes: 23
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Modem con Identificador de llamadas (Caller ID) con C#

me interesa saber sobre q tipo de modem tienes, si es directamente sobre la linea telefonica, y si un modem adsl serviria para hcer eso, gracias, espero estar en contacto contigo
  #4 (permalink)  
Antiguo 14/11/2011, 10:55
 
Fecha de Ingreso: noviembre-2011
Mensajes: 1
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Modem con Identificador de llamadas (Caller ID) con C#

Solo m sale una pantalla negra de comandos por que sera?
  #5 (permalink)  
Antiguo 22/05/2012, 20:45
 
Fecha de Ingreso: mayo-2012
Mensajes: 1
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Modem con Identificador de llamadas (Caller ID) con C#

Cita:
Iniciado por manabiresponsable Ver Mensaje
Solo m sale una pantalla negra de comandos por que sera?
Te cuento que tenia el mismo problema pero bueno solo cambie de modem porque con el primer modem que hice la prueba era muy antiguo pero consegui otro algo mas moderno (marca encore) y me funciono perfectamente. Pero el codigo corre perfectamente.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:04.