URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2414
[ Назад ]

Исходное сообщение
"Что же, всё-таки, делает с мышью эта команда?"

Отправлено SergeiZz , 22-Дек-03 15:08 
Имеется мышь, подключённая к ttyS0, и работающая по протоколу MouseSystems.

Вопрос первый:
Что сделает с мышью следующая команда
bash$ echo $'AT\rATI9\r' > /dev/ttyS0

Вопрос второй:
Что можно почитать о подобном шаманстве? Кроме man mouse на ум ни что не
пришло.


Содержание

Сообщения в этом обсуждении
"Что же, всё-таки, делает с мышью эта команда?"
Отправлено jd , 23-Дек-03 12:57 
>Что сделает с мышью следующая команда
>bash$ echo $'AT\rATI9\r' > /dev/ttyS0
ничего. это модемные команды. где вы такое откопали!?

"Что же, всё-таки, делает с мышью эта команда?"
Отправлено Асен Тотин , 25-Дек-03 03:38 
АТ - указывает на то, что далее следуют команды по спецификации Hayes Modem.

\r - Carriage Return

ATI9 - чтение информационного регистра номер 9. Обычно в информационных регистрах стоит информация о производителе устройства, номере модели и т.д.

Прочитать про AT Command Set можно во многих местах - Modem HOWTO, Google и т.д.

WWell,


"Что же, всё-таки, делает с мышью эта команда?"
Отправлено SergeiZz , 25-Дек-03 17:26 
>\r - Carriage Return
В случае нормального модема, кажется, должно быть два символа.
Или перевод строки не обязателен?

ATI9 -- Displays modem’s Plug and Play ID.
Вобщем-то это верно не только для модема, но и для любого устройства
Plug and Play, подключаемого к последовательному интерфейсу.
Или же это, всё-таки, чисто модемная команда, и к мыше она не имеет
отношения?


"Что же, всё-таки, делает с мышью эта команда?"
Отправлено SergeiZz , 25-Дек-03 17:11 
>>Что сделает с мышью следующая команда
>>bash$ echo $'AT\rATI9\r' > /dev/ttyS0
>ничего. это модемные команды. где вы такое откопали!?
"Ничего" -- это не совсем правда. Эта команда переведёт мышь (вряд ли
любую мышь, конечно, но одну конкретную -- точно) из состояния,
в котором она работает не правильно, в состояние, в котором она работает
совершенно нормально.
Хотелось бы понять механизм этого чуда...


"Что же, всё-таки, делает с мышью эта команда?"
Отправлено ovax , 26-Дек-03 03:01 
>"Ничего" -- это не совсем правда. Эта команда переведёт мышь (вряд ли
>
>любую мышь, конечно, но одну конкретную -- точно) из состояния,
>в котором она работает не правильно, в состояние, в котором она работает
>
>совершенно нормально.
>Хотелось бы понять механизм этого чуда...


Молодой человек, не порите чушь. С каких это пор мышь стала устройством вывода ?

Эти команды были писаны для модема, который , видимо, раньше на этом порту стоял. А то знаете, если выключить из розетки телевизор, и воткнуть туда бритву, она вам вряд-ли покажет мультик про ёжика в тумане.


"Что же, всё-таки, делает с мышью эта команда?"
Отправлено SergeiZz , 26-Дек-03 10:36 
>>"Ничего" -- это не совсем правда. Эта команда переведёт мышь (вряд ли
>>
>>любую мышь, конечно, но одну конкретную -- точно) из состояния,
>>в котором она работает не правильно, в состояние, в котором она работает
>>
>>совершенно нормально.
>>Хотелось бы понять механизм этого чуда...
>
>
>Молодой человек, не порите чушь. С каких это пор мышь стала устройством
>вывода ?
>
>Эти команды были писаны для модема, который , видимо, раньше на этом
>порту стоял.
Эту команду (echo $'AT\rATI9\r' > /dev/ttyS0) я набираю в командной
строке (точнее, конечно, -- в rc.local), чтобы оживить мою любимую
мышку с тремя плоскими кнопками, котрая подключена к последовательному
интерфейсу (старенькая MouseSystems мышка).
Иначе, хотя протокол MouseSystems указан везде правильно, она очень
редко работает корректно -- впечатление такое, что выбран протокол
для Microsoft совместимой мышки вместо MouseSystems (хотя это, конечно же,
не так, и выбором другого протокола, или каким-либо другим способом,
привести в чувства мою любимую мышку не удаётся -- а этой командой, без
проблем).
Я знаю, что это модемная команда и к мыше она "законного" отношеня не
имеет. Я не пойму, что творится внутри моей любимой мышки в ответ на
выполнение мной этой команды, потому и спросил.
Я подозреваю, что драйвер последовательного порта посылает эти символы
"как есть", как в случае с модемом. Отвечает ли на них мышка (её
микросхема, конечно, потому что мышь не должна отвечать, разумеется)?
Если ответит, то как именно?
Прочитает ответ, наверно, драйвер мыши. Как-то он, наверно, отреагирует.
Результатом всего этого является возможность пользоваться моей любимой
мышкой.
Кстати, система -- Linux (на многих дистрибутивах и разных материнских платах картина абсолютно одна и та же).

На все эти вопросы я, со временем, и сам получу ответы: сниму драйвер
мыши, повешу на ttyS0 свой слухач, выполню мою команду, узнаю, что
ответила мышь, посмотрю исходные тексты драйвера мыши, соображу, как
именно он понял этот ответ...

Но вот, если бы кто смог высказать какие-то соображения по этим вопросам
уже сейчас, мне бы было жуть как интересно услышать!


"Что же, всё-таки, делает с мышью эта команда?"
Отправлено ChiP , 11-Янв-04 00:45 
>Но вот, если бы кто смог высказать какие-то соображения по этим вопросам
>
>уже сейчас, мне бы было жуть как интересно услышать!

а не могли бы Вы рассказать окончание истории (конечно, когда оно будет достигнуто)? Мой mail: chip-set(a)mail(.)ru



"Что же, всё-таки, делает с мышью эта команда?"
Отправлено SergeiZz , 21-Янв-04 16:13 
>а не могли бы Вы рассказать окончание истории (конечно, когда оно будет
>достигнуто)? Мой mail: chip-set(a)mail(.)ru
Да, конечно, но когда это будет... не знаю.
Мне это интересно, но у меня вечно есть десяток недоделанных дел, и мне
стыдно тратить вечер на опыты с мышкой-модемом.
Я заложил этот поток в букамаки, и напишу сюда обязательно.
Если что, до меня всегда можно постепенно достучаться через zbl@gmail.ru.
Но это ящик для спама...


"Что же, всё-таки, делает с мышью эта команда?"
Отправлено SergeiZz , 21-Янв-04 17:29 
>Иначе, хотя протокол MouseSystems указан везде правильно, она очень
>редко работает корректно -- впечатление такое, что выбран протокол
>для Microsoft совместимой мышки вместо MouseSystems (хотя это, конечно же,
>не так, и выбором другого протокола, или каким-либо другим способом,
>привести в чувства мою любимую мышку не удаётся -- а этой командой,
>без
>проблем).
Прочитал своё -- тут же нашёл ляп. Трезвый вроде писал...
Наврал ведь. Причём тут Microsoft. Это совсем по другому поводу...

Вообщем. Симптомы неработоспособности мышки следующие (замечу, проявляются
не каждый раз, но в подавляющем большинстве случаев перезагрузки системы).

Курсор двигается только в одном направлении (чаще всего вверх/вниз);
или вместо движения по прямой -- двигается по равномерному зигзагу;
или курсор не двигается вообще (реже всего случается).

Во всех случаях безотказно срабатывает обсуждаемая команда.
Перезагрузки X сервера не требуется. Курсор мыши в ответ на команду
делает рывок вверх и вправо (и в консольном режиме и в графическом).

Последний штрих: к этому компьютеру никогда не подключался модем, и он уже
никогда не будет подключён, и кроме мыши и сетевой карты ничего другого
не подключено.
МышЬ тайваньского производства (Eazy Mouse) работает по Mouse Systems и
по Microsoft совместимому (имеется переключатель).

Самый последний штрих: эта команда не с потолка, конечно, взялась, но,
строго говоря -- это моё изобретение. Я был уверен, что изобрёл
велосипед...


"Мышь отвечает! Но что именно?"
Отправлено SergeiZz , 23-Янв-04 12:43 
Кстати, и командочку переврал:
bash$ echo -n $'AT\rATI9\r' > /dev/ttyS0

Окончание истории не достигнуто, поэтому Chip не пишу. Но новые (глупые)
вопросы мышь поставила.

Попробую выполнить read() на /dev/ttyS0. Так как X сервер открывает этот
файл, перезагружаюсь в rc3 режиме. Итак:
bash$ cat /dev/ttyS0 | hexdump -C
Теперь медленно двигаю мышь вправо
87 00 00 87 00 00 87 00 00...
или вниз
87 ff 00 87 ff 00 87 ff 00...
Но это уж слишком! Я ожидал 5, ну 4, байта в пакете, но не 3 же.
Переключим на Microsoft:
c0 81 80 c0 81 80 c0 81 89...
или
c0 80 81 c0 80 81...
И, естественно, если в /etc/sysconfig/mouse прописать правильный протокол,
то всё будет хокей, но без третьей кнопки.

Вопрос однако.
Вопрос: пакеты MouseSystems по 5 байт. Куда 2 дел?
И вообще не пойму, что вернул read().

Но с помощью этой технологии можно хотябы понять, отвечает мышь, или нет.
Итак, на tty0 выполняю
bash$ cat /dev/ttyS0 > mouse.b
На tty1
bash$ echo -n $'AT\rATI9\r' > /dev/ttyS0
Курсор дёргается.
bash$ hexdump -C mouse.b
30 c7 00 01 fc
Если повторять несколько раз, числа будут не всегда одни и те же.
Например можно увидеть
30 c7 01 fc
или
30 e0 c0 01 fc
Или даже
e0 00 79 87 30 01
И когда числа другие, то курсор дёргается иначе.

Вообще, если послать ей один байт
bash$ echo -n $'.' > /dev/ttyS0
то она не ответит, а если
bash$ echo -n $'b' > /dev/ttyS0
то ответит единственным
ff
Замечу, что только -n $'AT\rATI9\r' гарантированно даёт желаемое
оздоровление.

Если выдернуть кабель, то никакого ответа.

Глюк, наверно, не в мыше, а в драйвере, или ещё выше. Это издевательство
над бедным животным было бы не интересно, если пресловутая команда не
была бы достаточно простым (и единственным мне известным) способом её
реанимации.

Думаю, факт, что мышь отвечает (но не стабильно) можно считать
установленным. Но мне не понятно, полную ли чушь она пищит, или это
что-то осмысленное (содержание 9-го регистра 4-го позвонка её хвоста,
например).

Намекните, хотябы, почему read() вернул три байта, а не 5?