Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Как из голой системы/скрипта получить состояние порта LPT /dev/lp0, порт 0x379?  (Прочитано 1898 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ShadowUser15

  • Автор темы
  • Активист
  • *
  • Сообщений: 718
    • Просмотр профиля
Как из скрипта получить состояние порта устройства (LPT = /dev/lp0, 0x379)?
Надо по замыканию кнопки на порту лпт запускать скрипт.
(Нажмите, чтобы показать/скрыть)
Цитата: нагуглено
устройство
0x3bc для /dev/lp0, 0x378
Порт БАЗА+1 (Порт состояния) предназначен только для чтения и возвращает следующие входные сигналы:
    Биты 0 и 1 зарезервированы.
    Бит 2 состояние IRQ (его нет на разъеме и я не знаю как он работает)
    Бит 3 ERROR (1=ОШИБКА)
    Бит 4 SLCT (1=ВЫБОР)
    Бит 5 PE (1=ГОТОВ)
    Бит 6 ACK (1=ПОДТВЕРЖДЕНИЕ)
    Бит 7 -BUSY (0=ЗАНЯТ)

соответственно надо  из файла /dev/port прочитать байт 0х379? прочитать из /dev/lp0, 0x379 байт и по маске выяснить состояние бита.
как скриптом из шелла? хотябы ткните в гайд..
Или любым другим методом который будет работать "из коробки" на Ubuntu.

(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 30 Сентября 2014, 22:40:49 от ShadowUser15 »
вероятное введение нестандартных десятичностей, внутри системы - заставляет задуматься о переходе на другой

Оффлайн ShadowUser15

  • Автор темы
  • Активист
  • *
  • Сообщений: 718
    • Просмотр профиля
Как из файла /dev/port прочитать байт 0х379????? и проверить на наличие установленного бита
(Нажмите, чтобы показать/скрыть)

Цитировать
Скриптом, без дополнительных бинарников.

Сдвинь единицу на 0x378 байт и сравни с этой маской:

Код: (bash) [Выделить]
INPUT=5
LENGTH=2
echo $(($INPUT & (1 << $LENGTH)))

Если результат != 0 соответственно бит установлен.

http://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic

Только не сохраняй в переменную поток байт без преобразования - bash экранирует нули:
https://forum.ubuntu.ru/index.php?topic=249368.msg1969933#msg1969933



Пример:

Код: (bash) [Выделить]
echo $(($(dd if=/dev/port bs=1 skip=111 count=1 2>/dev/null) & (1 << 0)))
т.е. если нужен 5й бит байта 0х379 (889 десятичный) из файла /dev/port
это будет выглядеть так:
echo $(($(dd if=/dev/port bs=1 skip=888 count=1 2>/dev/null) & (1 << 5)))
?
СПАСИБО!!!! // к стыду про dd забыл напрочь :(
« Последнее редактирование: 29 Сентября 2014, 16:40:02 от ShadowUser15 »
вероятное введение нестандартных десятичностей, внутри системы - заставляет задуматься о переходе на другой

 

Страница сгенерирована за 0.359 секунд. Запросов: 25.