2016-05-28 9 views
0

Ich habe den folgenden Snippet-Code, den ich verwende, um einen Anruf auf einem PC als Dialer mit AT-Befehlen zu simulieren.AT-Befehle hängen auf

Das Problem, das ich habe, ist, dass manchmal für eine Zufallszahl, die gewählt wird, obwohl der Benutzer auf den "Auflegen" -Button auf dem Windows-Formular klickt, der Anruf weiterhin im Hintergrund weiter wählt.

Der Anruf tatsächliche Wahl ist dieser Code:

SerialPort po = new SerialPort(); 
po.PortName = ConfigurationManager.AppSettings.Get("modemPort"); 
po.BaudRate = int.Parse("9600"); 
po.DataBits = Convert.ToInt32("8"); 
po.Parity = Parity.None; 
po.StopBits = StopBits.One; 
po.ReadTimeout = int.Parse("300"); 
po.WriteTimeout = int.Parse("300"); 
po.Encoding = Encoding.GetEncoding("iso-8859-1"); 
po.Open(); 
po.WriteLine("ATD" + phoneNumber + ";\r"); 

Dann, wenn die Hang Up Schaltfläche klicken, ich habe diesen Code:

po.DiscardInBuffer(); 
po.DiscardOutBuffer(); 
po.Close(); 

Dies kann manchmal die Rufwahl im Hintergrund hält.

Ich fügte sogar Folgendes hinzu, um es zu testen, aber immer noch das gleiche Ergebnis.

po.WriteLine("ATH" + "\r"); 
po.WriteLine("ATH0;\r"); 
po.WriteLine("ATH+CHUP;\r"); 

Irgendwelche Ideen?

Antwort

0

Beachten Sie, dass der AT-Befehlssatz offiziell als Hayes Befehlssatz bezeichnet wird. Die Informationen auf der Wiki-Seite bieten Hilfe. Verschiedene Gründe können dazu führen, dass das Auflegen (ATH0) nicht funktioniert. Vor allem bin ich mir über die Verwendung des Semikolons nicht sicher, es sollte nicht benötigt werden. Zweitens kann sich das Modem im Datenmodus befinden, sodass Sie es zuerst in den bemannten Modus umschalten müssen (mit "+++"), bevor Sie den Befehl hangup schreiben. Eine andere Möglichkeit besteht darin, das Modem so zu konfigurieren, dass die Verbindung beim Ablegen des DTR-Signals unterbrochen wird (und dann das DTR fallen lässt). Weitere Informationen hierzu finden Sie unter here.