SMS a través de un teléfono Nokia mediante un puerto serie
-
13-09-2019 - |
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.
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!