Как дефлорировать COM-порт GPS-навигатора в Windows штатными средствами PHP?

Мой модем в винде висит на 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);


В результате модем выдает на выходе строчку «ОК».


Все это прекрасно работает, но лишь после того, как я:
  1. зайду в «Пуск/Панель-Управления/Телефон-и-модем»,
  2. выберу вкладку «Модемы»,
  3. ткну мышой в свой модем из списка,
  4. нажму кнопку «Свойства»,
  5. выберу вкладку «Диагностика»,
  6. нажму кнопку «Опросить модем» и
  7. дождусь ответа от модема...


Без этих танцев с бубнами из модема не получается вытянуть ни одного байта данных.


Успокаивает лишь то, что этот магический «ритуал» инициации модема нужно проводить всего лишь один раз после подключения модема к компу (перед первым использованием порта).

После этого все работает просто великолепно!


Причем, пробовал на разных 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/
  • Вопрос задан
  • 4373 просмотра
Пригласить эксперта
Ответы на вопрос 3
Vertexodessa
@Vertexodessa
нужно послать команду «at» несколько раз, чтобы модем определил скорость, на которой с ним собираются общаться
Ответ написан
@YourChief
в пайтоне эта функция работает как посредник к tcsetattr, смотрите в сторону php.net/manual/ru/function.dio-tcsetattr.php
Ответ написан
blo
@blo
инженер-программист
попробуйте поиграться с консольной командой mode, если что-то получится, то внутри tty_setraw будет exec с получившейся командой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы