I want to receive every message that is sent from GSM modem on console for that I have used DataReceivedHandler. My problem is message is always received once on the console for another message to receive I have to debug my console application that means my handler is not working properly. One more problem is I have converted received pdu format message into text format using pduconverter.dll,from routines of pduconverter.dll I get timestamp,message text but unable to get sender's number. Here is my code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Data.Sql;
using System.Data.SqlClient;
using GsmComm.PduConverter;
namespace readSerialData
{
class Program
{
static void Main(string[] args)
{
SerialPort serialport = new SerialPort();
int mSpeed = 1;
serialport.PortName = "COM16";
serialport.BaudRate = 9600;
serialport.Parity = Parity.None;
serialport.DataBits = 8;
serialport.StopBits = StopBits.One;
serialport.Handshake = Handshake.XOnXOff;
serialport.DtrEnable = true;
serialport.RtsEnable = true;
serialport.NewLine = Environment.NewLine;
serialport.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
serialport.Open();
Console.ReadKey();
serialport.Close();
}
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
sp.WriteLine("AT+CNMI=1,2,0,0\r");
sp.WriteLine("AT+CMGL=4\r");
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
string sub = indata.Substring(indata.IndexOf('0'), indata.Length - indata.IndexOf('0'));
IncomingSmsPdu sms = GsmComm.PduConverter.IncomingSmsPdu.Decode(sub, true);
Console.WriteLine(sms.SmscAddress);
Console.WriteLine(sms.UserDataText);
Console.WriteLine(sms.GetTimestamp());
Console.ReadKey();
Console.ReadKey();
}
}
}
Please help, I have been stuck on this from many days.
In the Main
method Console.ReadKey() is used to accept keystroke to exit the program, but why it is used in DataReceivedHandler
??
Without a keystroke, DataReceivedHandler will never return. I guess this is the cause of your problem. Remove them from DataReceivedHandler
to see if that fix your problem.
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
...
Console.WriteLine(sms.GetTimestamp());
//Console.ReadKey();
//Console.ReadKey();
}