2012-08-28 105 views
2

我正在USSD客戶端上工作。除了關閉遙遠的USSD會話之外,一切正常。關閉遠程USSD會話

在規範中,我們可以看到函數CUSD: AT + CUSD = 2應該關閉USSD會話,但事實並非如此。

事實上,當我做這個順序:

AT+CUSD='#xxx#',12 
AT+CUSD='1',12 

我有一個開放的遙遠的連接。 在您的手機,您可以通過撥打#XXX *#

如果我將打開一個新的會話:

AT+CUSD='#xxx*#',12 

這不是打開一個新的會話遙遠。 如果我發送:

AT+CUSD=2 
AT+CUSD='#xxx#' 

這不是開啓一個新的遙遠的會議。

你知道如何關閉遙遠的會話嗎? 我在windows或Linux上使用huwaei key E160和E173。

+0

你指的是哪一個規範? ETSI規格或華爲手冊? 'AT + CUSD = 2'是關閉USSD會話的正確命令。請注意,每個會話都有一個時間限制,您可能希望在發出關閉會話命令後添加延遲。發送代碼以啓動會話時,* DCS *可能受調制解調器的限制,有些可能只接受特定的值。根據我的經驗,它可以是'0'或'15'(來自* Siemens *和* ZTE *調制解調器)。另外,如果信號強度太低,可能會導致會話狀態不穩定。所以建議啓用結果代碼。 – Jay

+0

謝謝你的幫助。我使用ETSI規格。事實上,我認爲你在這一點上是正確的:它應該是USSD服務器上每個會話或USSD密鑰之間的時間限制。我將在華爲手冊中檢查這一點。謝謝! – Julio

回答

0

以如下方式使用。 AT + CUSD = '#XXX#',15 AT + CUSD = 2

0

我張貼這一點,因爲這是關於終止使用AT命令USSD會話,還因爲答案是模糊的頂部結果。 這是我在最後使用的c#代碼(我正在向gsm調制解調器發送命令)。希望它可以幫助別人

SerialPort SendingPort=null; 

    public string TerminateUssdSession() 
    { 
      InitializePort(); 

      //// generate terminate command for modem 
      string cmd = ""; 
      cmd = "AT+CUSD=2\r"; 

      // send cmd to modem 
      OpenPort(); 

      SendingPort.Write(cmd); 

      Thread.Sleep(500); 

      string response = SendingPort.ReadExisting(); 

      return response; 

    } 

    private void InitializePort() 
    { 
     if (SendingPort == null) 
     { 
      SendingPort = new SerialPort(); 
      SendingPort.PortName = PortName;//put portname here e.g COM5 
      SendingPort.BaudRate = "112500"; 
      SendingPort.Parity = Parity.None; 
      SendingPort.DataBits = 8; 
      SendingPort.StopBits = StopBits.One; 
      SendingPort.Handshake = Handshake.None; 
      SendingPort.ReadTimeout = 500; 
     } 
    } 

    private void OpenPort() 
    { 
     if (!SendingPort.IsOpen) 
     { 
      SendingPort.Open(); 
     } 
    }