Ricardo Beck
Ricardo Beck

Reputation: 71

Issue with +CDS AT COMMAND

I'm issue when I get +CDS in AT COMMAND throught c# using SerialPort, any times I get this +CDS truncated, example:

+CDS: 25 0002970C91555868047414212181414094882121814140948830

Why I've this problem, why any times work nice?

I'm starting SerialPort:

    public PortCOM(string porta)
            : base(porta, 115200, Parity.None, 8, StopBits.One)
        {
            this.StatusPort = StatusPorta.Ready;
            this.DiscardNull = true;
            this.ReadTimeout = 21000;
            this.RtsEnable = true;
            this.DtrEnable = true;
            this.ReceivedBytesThreshold = 9;
            this.NewLine = "\r\n";
            this.ReadBufferSize = 1024;
        }

    public static  void TestPort()
        {
            var p = new PortCom("COM12");

            if (!p.IsOpen)
                p.Open();

            p.StatusPort = StatusPorta.Ready;
            p.DataReceived += new SerialDataReceivedEventHandler(p_DataReceivedSample);
            p.PinChanged += new SerialPinChangedEventHandler(p_PinChanged);
            p.ErrorReceived += new SerialErrorReceivedEventHandler(p_ErrorReceived);

            p.Disposed += new EventHandler((obj, porta) =>
            {
                Console.WriteLine(((PortaCOM)obj).ToString());
            });

            if (Console.ReadKey().Key == ConsoleKey.B)
            {
                p.Close();
                p.Dispose();
            }
        }

static void p_DataReceivedSample(object sender, SerialDataReceivedEventArgs e)
        {
            var p = (PortaCOM)sender;
            try
            {
                Console.WriteLine(p.ReadExisting());
                var sb = new StringBuilder();

                sb.Append(p.ReadExisting());
                int y = sb.ToString().IndexOf("\r\n");


                var stop = Stopwatch.StartNew();
                stop.Start();
                while (y == -1)
                {
                    sb.Append(p.ReadExisting());
                    y = sb.ToString().IndexOf("\r\n");
                    if (stop.Elapsed.TotalSeconds > 10)
                        break;
                }
                stop.Stop();

                var _retorno = sb.ToString();
                var cmt = regCMT.Match(_retorno);
                var succ = regSucess.Match(_retorno);
                var report = regStatusReport.Match(_retorno);
                var erro = regError.Match(_retorno);


                #region Resposta
                if (cmt.Success)
                {
                    var smss = new SMS();
                    var source = cmt.Groups[3].Value;
                    SMS.Fetch(smss, ref source);
                    var resposta = new Resposta()
                    {
                        Mensagem = smss.Message,
                        Data = smss.ServiceCenterTimeStamp,
                        Sender = smss.PhoneNumber,
                        Operadora = p.OperadoraName.NomeOperadora.ToString()
                    };

                    GravaResposta().ToAsync(Scheduler.TaskPool).Invoke(p, cmt.Groups[3].Value);
                    p.IsError = false;
                }
                #endregion

                #region StatusReport
                if (report.Success)
                {
                    RecebeReport(p, report.Groups[2].Value.Trim());
                    p.IsError = false;
                }
                #endregion
            }
            catch (Exception err)
            {
                Console.WriteLine(err.Message);
            }
        }

Please I really need help with it, I'm glad for any help!

Upvotes: 2

Views: 1059

Answers (1)

Arunkumar Chandrasekaran
Arunkumar Chandrasekaran

Reputation: 1241

+cds is alert for incoming message with message location on SIM memeory.

so here its seems in PDU mode data. and it is seems may be flash message content.

Convert the data PDU mode to Text mode to receive message.

review this ATSMS library

Upvotes: 1

Related Questions