MaterStudiorum.ru - домашняя страничка студента.
Минимум рекламы - максимум информации.


Авиация и космонавтика
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Банковское дело
Безопасность жизнедеятельности
Биографии
Биология
Биология и химия
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Издательское дело и полиграфия
Инвестиции
Иностранный язык
Информатика
Информатика, программирование
Исторические личности
История
История техники
Кибернетика
Коммуникации и связь
Компьютерные науки
Косметология
Краткое содержание произведений
Криминалистика
Криминология
Криптология
Кулинария
Культура и искусство
Культурология
Литература и русский язык
Литература(зарубежная)
Логика
Логистика
Маркетинг
Математика
Медицина, здоровье
Медицинские науки
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Москвоведение
Музыка
Муниципальное право
Налоги, налогообложение
Наука и техника
Начертательная геометрия
Новейшая история, политология
Оккультизм и уфология
Остальные рефераты
Педагогика
Полиграфия
Политология
Право
Право, юриспруденция
Предпринимательство
Промышленность, производство
Психология
Психология, педагогика
Радиоэлектроника
Разное
Реклама
Религия и мифология
Риторика
Сексология
Социология
Статистика
Страхование
Строительные науки
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Управленческие науки
Физика
Физкультура и спорт
Философия
Финансовые науки
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
Экология
Экономика
Экономико-математическое моделирование
Экономическая география
Экономическая теория
Эргономика
Этика
Юриспруденция
Языковедение
Языкознание, филология
    Начало -> Информатика, программирование -> Ещё раз о прямом доступе к аппаратуре

Название:Ещё раз о прямом доступе к аппаратуре
Просмотров:59
Раздел:Информатика, программирование
Ссылка:Скачать(10 KB)
Описание:LPT. COM.

Университетская электронная библиотека.
www.infoliolib.info

Часть полного текста документа:

Ещё раз о прямом доступе к аппаратуре Сивцов Павел Преамбула
    Однажды мой знакомый попросил написать ему простую программу - "сторожевой пёс". Всё, что нужно делать - это отловить момент размыкания или замыкания внешнего контакта и при наступлении такого события запустить другую программу. Работать программа должна под Windows XP. Задача выглядела элементарной. Единственное, что не хотелось делать - аппаратную часть. Т.е. лучше всего было бы найти такое решение, при котором почти ничего не нужно было бы паять.
    Достаточно быстро выяснилось, что проще всего для такой цели использовать опрос состояний LPT- или COM-портов. Тут и начинается самое интересное. LPT
    Для реализации "сторожевого пса" на LPT-порту можно использовать периодический опрос состояния некоторых его контактов. Можно просто выявлять состояния линий SELECTED (контакт 13), BUSY (контакт 11) и PAPER EMPTY (контакт 12). Достаточно замыкать/размыкать выбранный контакт с "землей" (контакты 18-25). Я выбрал использование BUSY - замыкал контакты 11 и 23. Итак, аппаратная часть получалась элементарной, теперь нужно было как-то достучаться до выбранного контакта с программной стороны. Тут-то и встретилась первая сложность - легальных способов прямого доступа к портам в линейке Windows NT нет. Использовать примочки типа gwio.sys, разрешающие прямой доступ к аппаратуре, очень не хотелось. Работа с портом как с файлом в данном случае не подходит, т.к. нужно не данные читать, а опрашивать состояния. Тем не менее, после длительного изучения MSDN, легальный доступ к некоторым линиям порта был обнаружен! Способ этот - доступ к порту через функцию DeviceIoControl(..., IOCTL_PAR_QUERY_INFORMATION, ...). Тут обнаружилась вторая сложность - отсутствие нужных заголовочных файлов для Delphi. Пришлось самостоятельно портировать ntddpar.h из DDK. Портированный файл получил название JwaNtDdPar.pas и был любезно добавлен Marcel van Brakel в JEDI Windows API Library.
    Небольшой пример демонстрирует итоговый код. Delphi 7.
    Пример кода uses SysUtils, JwaWinType, JwaWinNT, JwaWinBase, JwaNtDdPar; {$WARN SYMBOL_PLATFORM OFF} function GetLptStatus: Boolean; var eFileHandle: THandle; eInfo: TParQueryInformation; eBytesReturned: DWORD; begin // откроем порт eFileHandle := CreateFile('LPT1', GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0); Win32Check(eFileHandle INVALID_HANDLE_VALUE); try // узнаем состояние Win32Check(DeviceIoControl(eFileHandle, IOCTL_PAR_QUERY_INFORMATION, nil, 0, @eInfo, SizeOf(eInfo), @eBytesReturned, nil)); Result := (Byte(eInfo.Status) and PARALLEL_BUSY) = 0; finally // не забудьте закрыть хендл по завершению работы Win32Check(CloseHandle(eFileHandle)); end; end; Короткий и элегантный код, не правда ли? Для решения поставленной задачи достаточно опрашивать состояние порта раз-другой в секунду. В принципе, конечно же, лучше сразу открыть порт при старте, а закрыть по завершению.
    ПРЕДУПРЕЖДЕНИЕ
    К сожалению, не удастся открыть порт в режиме FILE_FLAG_OVERLAPPED, чтобы затем использовать преимущества асинхронной работы. Точнее, порт открыть удастся, не удастся получить событие при изменении статуса линий порта.
    Зато этот код успешно отработал из-под гостевой учетной записи под Windows XP. Последний нюанс - дребезг контактов. "Дребезг контактов - это явление многократного неконтролируемого замыкания и размыкания контактов в моменты их соприкосновения и расхождения". Длятся такие переходные процессы в кнопках около 10-15 миллисекунд. Т.е. с большой вероятностью мы будем получать ложные срабатывания нашего кода, если интервал между проверками будет короче.
    Надеюсь, этот пример работы с LPT-портом послужит хорошей демонстрацией того, как во многих случаях легко получить легальный доступ к аппаратуре без написания драйверов или обхода Hardware Abstraction Layer. ............




Нет комментариев.



Оставить комментарий:

Ваше Имя:
Email:
Антибот:  
Ваш комментарий:  



Похожие работы:

Название:Расчет контактного теплоутилизатора
Просмотров:129
Описание: Федеральное агентство по образованию ГОУ ВПО «Братский государственный университет» Факультет энергетики и автоматики Кафедра промышленной теплоэнергетики Курсовой проект по дис

Название:Характеристика видів відмов електропневматичних контакторів електровозів
Просмотров:162
Описание: ХАРАКТЕРИСТИКА ВИДІВ ВІДМОВ ЕЛЕКТРОПНЕВМАТИЧНИХ КОНТАКТОРІВ ЕЛЕКТРОВОЗІВ Як, відомо, рівень надійності електрорухомого складу залежить від надійності його окремих частин: механічної, пн

Название:Проектирование контактной сети
Просмотров:219
Описание: Федеральное государственное образовательное учреждение Среднего профессионального образования Воронежский колледж железнодорожного транспорта Пояснительная записка к курсовому проекту п

Название:Дипломатические и военные контакты Волжской Булгарии
Просмотров:190
Описание: Содержание Введение 1. Образование Булгарского Эмирата на Средней Волге 1.1 Четыре волны переселения. 1.2 Другие племена и контакты с ними. 1.3 Возникновение и оформление государственности у булгар. 1.4 Терр

Название:Контакт мовних систем
Просмотров:67
Описание: Зміст Вступ 1. Контакт мовних систем 2. Двомовний носій як особистість 3. Соціокультурні умови мовного контакту Висновки Список літератури Вступ Якби процес комунікації обмежувався рамками

 
     

Вечно с вами © MaterStudiorum.ru