Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/04/2009, 09:37
7th_Sign
 
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