Pregunta

Estoy intentando enviar un SMS a través de un teléfono Nokia serie sobre la cual es bastante fácil a través de la masilla. Los comandos de la href="http://wiki.forum.nokia.com/index.php/Using_AT_commands_to_send_and_read_SMS" rel="nofollow noreferrer"> Nokia documentación funciona bien.

Sin embargo, tratar de enviar los mismos comandos desde una aplicación C # falla estrepitosamente. Me he encontrado Sysinternals PortMon y puede ver los comandos vienen a través de OK, la única diferencia que veo es en la forma en que se conecta pero estoy teniendo problemas para encontrar los comandos que limar esas diferencias.

El código que estoy corriendo ve un poco como esto

using (SerialPort port = new SerialPort(comPort, 9600, Parity.None, 8, StopBits.One))
            {
                port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
                port.ErrorReceived += new SerialErrorReceivedEventHandler(port_ErrorReceived);

                //port.ReceivedBytesThreshold = 1;
                port.DtrEnable = true;
                port.RtsEnable = true;
                port.ReadTimeout = 1;
                port.Handshake = Handshake.XOnXOff;


                try
                {
                    port.Open();

                    port.WriteLine("AT");

                    port.WriteLine("AT+CMGF=1");

                    port.WriteLine("AT+CMGS=\"" + number + "\"");

                    port.WriteLine(message);

                    port.Write(new byte[] { (byte)26 }, 0, 1);
                }
                finally
                {
                    if (port.IsOpen)
                    {
                        port.Close();
                    }
                }

Las diferencias que estoy viendo en la traza desde el puerto serie son

Al inicio

0.00001844  aspnet_wp.exe   IOCTL_SERIAL_SET_HANDFLOW   USBSER001   SUCCESS Shake:1 Replace:43 XonLimit:4096 XoffLimit:4096 

Y al final

0.00061153  aspnet_wp.exe   IOCTL_SERIAL_PURGE  USBSER001   SUCCESS Purge: RXABORT RXCLEAR  
0.00004442  aspnet_wp.exe   IOCTL_SERIAL_PURGE  USBSER001   SUCCESS Purge: TXABORT TXCLEAR 

¿Alguien tiene algún consejo sobre cómo solventar estos problemas? También noto que el teléfono no responde a la aplicación con cualquier acuse de recibo cuando emite un comando así que sospecho que el problema es con la conexión, no esos mensajes al final.

¿Fue útil?

Solución

Es necesario esperar a que el ">" antes de escribir el mensaje. Además, no interrumpir el mensaje con un CR / LF (WriteLine).

Otros consejos

Trate de ver si se puede leer la comunicación en serie desde el teléfono. Después de enviar 'AT', el teléfono debe responder con 'OK'. Podría ser una buena idea para comprobar que la comunicación en serie está trabajando antes de asumir el bit de SMS.

Por lo que recuerdo, creo que después de AT + CMGs el mensaje debe ser introducido y seguido por ctrl-z, y no se necesita nueva línea. Podrías tratar de cambiar la WriteLine (mensaje) para escribir (mensaje)?

Espero que esto ayude!

scroll top