2009-06-12 78 views
2

我试图通过诺基亚手机发送短信通过串行,这是很容易通过腻子。来自nokia documentation的命令正常工作。通过串口的诺基亚手机短信

但是,试图从c#应用程序发送相同的命令失败了。我运行Sysinternals PortMon,可以看到命令通过OK,我能看到的唯一区别在于它连接的方式,但我无法找到能够消除这些差异的命令。

我跑的代码看起来像这样

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(); 
        } 
       } 

我在跟踪从串口看到的差异

一开始

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

而在最后

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 

有没有人有关于如何解决这些问题的任何提示?我还注意到,当我发出一个命令时,手机没有回应应用程序的任何确认,所以我怀疑问题出在连接上,而不是最后的那些信息。

+0

您是否检查过手机是否需要硬件流量控制? – toholio 2009-06-12 01:50:50

+0

握手和流量控制与我能看到的腻子相同。澄清;震动:1替换:43是不同的,但我不知道如何改变这一点。 – mjallday 2009-06-12 02:21:48

回答

0

在写出消息之前,您需要等待“>”。另外,请勿使用CR/LF(WriteLine)终止消息。

1

试着看看你是否可以从手机读出串行通信。发送'AT'后,手机应以'OK'回应。在接收SMS位之前验证串行通信是否正常工作可能是一个好主意。

从我记忆中,我认为在AT + CMGS之后应该输入消息并按ctrl-z跟随,并且不需要换行符。你可以尝试将WriteLine(消息)更改为Write(消息)?

希望这会有所帮助!