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