memPort.Open();//Open port
//atz query, need ok
ComPort.Write(ATZ, 0, ATZ.Length);
ComPort.Write(CR, 0, CR.Length);
Thread.Sleep(WaitTime);
byteRecieved = memPort.BytesToRead;
mBytes = new byte[byteRecieved];
ComPort.Read(mBytes, 0, byteRecieved);
reply = Encoding.ASCII.GetString(mBytes);
Invoke(new ReceiveHandler(UpdateDisplay), new object[] { reply });
Побайтный прием данных с Com порта, пытаемся создать dialer
Пишу программу, которая будет звонить на мой телефон, являющийся шлюзом.
Модем на компьютере висит на Com10, но не суть.
В программе я отправляю последоватьльно AT команды, и жду ответа от модема. Если с командами ATZ, AT+CSQ проблем не возникает, то команда дозвона ATD отвечает не сразу.
Результат обработки команды получаю следующим образом:
Код:
От WaitTime зависит количество принятых байтов, а мне бы хотелось переделать таким образом, что бы байты принимались последовательно до тех пор, пока они есть. В случае ATD мне необходимо WaitTime устанавливать достаточно большим (50-80 секунд).
Как бы мне этого избежать, подскажите пожалуйста. Очень надеюсь на вашу помощь.
ЕМНИП, ответ at-команд заканчивается переводом строки или двойным переводом
На всякий случай напишу, что CR = 0x0D, LF = 0x0A
Иногда при дозвоне, в качестве ответа я получаю
Код:
41 54 44 38 39 31 31 36 31 35 34 36 39 33 0D 0D ATD89116154693..
0A 43 4F 4E 4E 45 43 54 20 39 36 30 30 0D 0A .CONNECT 9600..
0A 43 4F 4E 4E 45 43 54 20 39 36 30 30 0D 0A .CONNECT 9600..
А иногда просто
Код:
0A 43 4F 4E 4E 45 43 54 20 39 36 30 30 0D 0A .CONNECT 9600..
И конечно NO.CARRIER
Таким образом мы имеем дважды команду CR и New line. Как определить какая из них нужная, я не знаю :)
Пока все еще остановился на минуте ожидания приема ответа.
0A
вот оно и есть, наверняка ATD891161546930x0D это то, что ты отправил, модем может повторять введенные команды. а второе 0x0D 0x0A это и есть конец строки. Разбивай строки по 0x0d 0x0a, или просто по 0x0a и будет тебе счастье, потом просто поиск что он ответил. Если отвечает без повторения команды, то какая разница, все равно присылает конец строки, а дальше дело техники.
Спасибо, разобрался