mrsol
Новичок
Проблемы с функцией dio_write
Операционка linux. PHP версия 5.1
Пытаюсь подключится на ком порт /dev/ttyS1 к мобиле через библиотеку dio из набора pecl.
Соединение создает, установки устанавливает, статус получает, соединение закрыват.
Но когда при открытом соединении пытаюсь отправить at команды для мобилы, то от ней неприходят никакие ответы.
Через minicom работает нормально.
После отправки команды, dio_write($tdd, "AT\n"), пытаюсь прочитать ответ через dio_read($tdd, 1000). Но никаких данных не приходит. Если соединение в nonblock. То цикл из десяти чтейний пролетает моментально. Если стоит в блокируешем режиме, то ожидает прихода данных, то есть висит. При этом во время "висения/ожидания", подключаюсь через minicom, так-как порт не блокирую, то соединение проходит, и ответы которые должны вывестись в minicom, появляются в буфере скрипта.
То есть из этого получается, что dio_write, не отправляет нормально данные.
Через fopen, fread, fwrite, fclose. Работает нормально. Но там нехватает функций установок параметров порта.
Может быть это из-за того, что я взял библиотеку от версии 5.0, и скомпилил под 5.1?
Или может быть в dio_write, нужно как-то по определенному передавать данные, в мане и в инете ничего путного не нашол.
Вот код.
Вот такое вот получается. Как с этим справится? В чём может быть проблема?
Операционка linux. PHP версия 5.1
Пытаюсь подключится на ком порт /dev/ttyS1 к мобиле через библиотеку dio из набора pecl.
Соединение создает, установки устанавливает, статус получает, соединение закрыват.
Но когда при открытом соединении пытаюсь отправить at команды для мобилы, то от ней неприходят никакие ответы.
Через minicom работает нормально.
После отправки команды, dio_write($tdd, "AT\n"), пытаюсь прочитать ответ через dio_read($tdd, 1000). Но никаких данных не приходит. Если соединение в nonblock. То цикл из десяти чтейний пролетает моментально. Если стоит в блокируешем режиме, то ожидает прихода данных, то есть висит. При этом во время "висения/ожидания", подключаюсь через minicom, так-как порт не блокирую, то соединение проходит, и ответы которые должны вывестись в minicom, появляются в буфере скрипта.
То есть из этого получается, что dio_write, не отправляет нормально данные.
Через fopen, fread, fwrite, fclose. Работает нормально. Но там нехватает функций установок параметров порта.
Может быть это из-за того, что я взял библиотеку от версии 5.0, и скомпилил под 5.1?
Или может быть в dio_write, нужно как-то по определенному передавать данные, в мане и в инете ничего путного не нашол.
Вот код.
PHP:
$tdd = dio_open('/dev/ttyS1', O_WRONLY | O_RDONLY);
//Пытался разные варианты открытия
//O_RDWR | O_NOCTTY | O_NONBLOCK и во всяких вариантах
echo "open_dio<br>";
dio_tcsetattr($tdd, array('baud' => 19200, 'bits' => 8, 'stop' => 1, 'parity' => 0));
//Настройки выставленны как в minicom
echo "dio setup <br>";
$dttt2 = dio_fcntl($tdd, F_SETFL, O_SYNC);
//Пытался разные варианты открытия
//O_SYNC O_ASYNC и вообще не использовать
echo "dttt2='".$dttt2."'<br>";
$aa = dio_write($tdd, "AT".chr(0x0D));
//Пытался разные окончания "\n" или "\r\n"
echo "aa='".$aa."'<br>";
//Выводит кол-во байт посланных в порт
echo "dio write <br>";
ob_flush();
for($x=1; $x<=10; $x++){
$fp = dio_read($tdd, 10);
echo "x='".$x."' read old bufer='".$fp."' <Br>";
//Не выводит ничего, если только не подключится c minicom
ob_flush();
}
dio_close($tdd);