2009-06-12 53 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(消息)?

希望這會有所幫助!