Мой модем в винде висит на COM8.
Я к нему подключаюсь через PHP-CLI как-то так:
<?php
$com=8;
$mdm="\\\\.\\COM$com";
$con=@fopen($mdm,"a+b");
//tty_setraw($con);
fwrite($con,"AT\r");
while (1)
echo fread($con,1);
В результате модем выдает на выходе строчку «ОК».
Все это прекрасно работает, но лишь после того, как я:
- зайду в «Пуск/Панель-Управления/Телефон-и-модем»,
- выберу вкладку «Модемы»,
- ткну мышой в свой модем из списка,
- нажму кнопку «Свойства»,
- выберу вкладку «Диагностика»,
- нажму кнопку «Опросить модем» и
- дождусь ответа от модема...
Без этих танцев с бубнами из модема не получается вытянуть ни одного байта данных.
Успокаивает лишь то, что этот магический «ритуал» инициации модема нужно проводить всего лишь один раз после подключения модема к компу (перед первым использованием порта).
После этого все работает просто великолепно!
Причем, пробовал на разных USB и Blutooth модемах, и в разных виндах (хр и 7), и даже в разных версиях рнр (5.2 и 5.3).
Результат везде один и тот же.
Все было бы здорово, если бы ни одна деталь:
На днях достал GPS-навигатор, который занял почетное место COM9 в системе.
При попытке подключения к нему с помощью PHP-CLI-скрипта наблюдаются аналогичные симптомы, как и в случае с девственно-чистым модемом.
Но, в отличие от случая с модемом, в панели управления не оказалось подходящего инструмента, типа «GPS-навигаторы».
То есть, нужно теперь качать какой-то «левый» софт, чтоб проплющить GPS.
Искал решение этой проблемы:
например в ПИТОНЕ для этого есть метод
tty.setraw(fd)
который запускают сразу же после открытия дескриптора порта.
Я уж было хотел для этого специально установить Python 3.2, но, хотеллось бы понять, что именно происходит с портом во время «setraw» и, во время опроса модема из панели управления.
Вопрос: что нужно написать внутри тела PHP функции
function tty_setraw($con)
{
//some magic
}
чтобы не нужно было каждый раз проводить описанные выше ритуалы?
p.s.: На языке С хабраюзером
SmokinMarlboro предложено решение такое:
m.habrahabr.ru/post/119030/