2016-05-28 2 views
0

У меня есть следующий код фрагмента, который я использую для имитации вызова на ПК в качестве дозвона с использованием AT-команд.AT команды hang up

Проблема заключается в том, что иногда для случайного числа, которое набирается, даже если пользователь нажимает кнопку «повесить трубку» в форме окна, вызов по-прежнему продолжает набор номера в фоновом режиме.

Фактический вызов циферблата этот код:

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"); 

Затем при нажатии на кнопку Повесить трубку, у меня есть этот код:

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

Это иногда держит набор вызовов в фоновом режиме.

Я даже добавил следующее, чтобы проверить его, но все тот же результат.

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

Любые идеи?

ответ

0

Обратите внимание, что набор команд AT официально называется набором команд Hayes. Информация на странице Wiki предлагает помощь. Различные причины могут привести к тому, что зависание (ATH0) не будет работать. Прежде всего, я не уверен в использовании точки с запятой, она не нужна. Во-вторых, модем может находиться в режиме данных, поэтому сначала нужно переключить его в пилотируемый режим (используя «+++»), прежде чем писать команду hangup. Другими параметрами являются настройка модема для отказа от соединения при падении сигнала DTR (а затем падение DTR на зависание). Подробнее об этом here.