базовый адрес LPT-порта (опять...)
От: Аноним  
Дата: 16.09.09 13:55
Оценка:
Нужно под виндой программно получить базовый адрес LPT-порта. LPT-порт расположен на STLab-овской PCI плате.
Пишу напрямую в порт в служебные регистры для специфического девайса, и, скорее всего, на машинах, где будет запускаться прога, тоже стоят платы расширения. Адреса, соответственно, какие угодно.

следующие варианты не прошли:

1. чтение из 0000:0408 — винда запрещает
2. DeviceIoControl(hLPT, IOCTL_PAR_SET_WRITE_ADDRESS, .......) — возвращает true, однако в буфере 0
3. ntport возвращает не то, что есть на самом деле (а некие стандартные адреса, типа 378h). Работает корректно только на мат. платах со встроенным LPT-портом (т.е. меняешь адрес в системе, и ntport это дело унюхивает)

API-шную функцию не нашел (может, плохо искал)
giveio работает как-то странно (может, интересно): после загрузки драйвера на выходах данных высокий уровень — смотрел светодиодом.
Re: базовый адрес LPT-порта (опять...)
От: AlexeyZh  
Дата: 16.09.09 19:45
Оценка:
не уж-то никто не сталкивался с такой простой проблемой?
Re: базовый адрес LPT-порта (опять...)
От: AlexeyZh  
Дата: 16.09.09 19:48
Оценка:
ошибся, IOCTL_PAR_GET_WRITE_ADDRESS

IOCTL_INTERNAL_GET_PARALLEL_PORT_INFO вообще работать отказывается, false возвращает (((
Re[2]: базовый адрес LPT-порта (опять...)
От: ДимДимыч Украина http://klug.org.ua
Дата: 16.09.09 20:45
Оценка:
Здравствуйте, AlexeyZh, Вы писали:

AZ>не уж-то никто не сталкивался с такой простой проблемой?


Из сообщения понял, что дело происходит под виндой и эта самая STLab предоставляет какой-то драйвер для своей железяки? В таком случае нужно смотреть, не предоставляет ли драйвер интерфейса для работы с регистрами устройства. Если не предоставляет, то скорей всего его придется выкинуть и написать свой. Это не должно быть сложной задачей, особенно если не нужна большая скорость обмена и достаточно программного ввода-вывода. Думаю, все обойдется небольшим допиливанием болванки драйвера PCI-устройства из какого-нибудь DDK.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[3]: базовый адрес LPT-порта (опять...)
От: AlexeyZh  
Дата: 17.09.09 07:26
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>Здравствуйте, AlexeyZh, Вы писали:


AZ>>не уж-то никто не сталкивался с такой простой проблемой?


ДД>Из сообщения понял, что дело происходит под виндой и эта самая STLab предоставляет какой-то драйвер для своей железяки? В таком случае нужно смотреть, не предоставляет ли драйвер интерфейса для работы с регистрами устройства. Если не предоставляет, то скорей всего его придется выкинуть и написать свой. Это не должно быть сложной задачей, особенно если не нужна большая скорость обмена и достаточно программного ввода-вывода. Думаю, все обойдется небольшим допиливанием болванки драйвера PCI-устройства из какого-нибудь DDK.



да, драйвер там свой, nmpar.sys. Проблема в том, что с DDK не разбирался, можно сказать, вообще, а сдавать сегодня-завтра...
Re[4]: базовый адрес LPT-порта (опять...)
От: ДимДимыч Украина http://klug.org.ua
Дата: 17.09.09 10:03
Оценка:
Здравствуйте, AlexeyZh, Вы писали:

AZ>да, драйвер там свой, nmpar.sys. Проблема в том, что с DDK не разбирался, можно сказать, вообще, а сдавать сегодня-завтра...


Тогда можно попробовать следующий финт ушами. LPT-порт ведь стандартный — регистр данных, регистр статуса и регистр управления? Тогда находим нужное PCI-устройство по device id и vendor id и читаем его конфигурационное пространство (как это сделать именно на винде — я не знаю, но не думаю, что сложно). Начало диапазона портов ввода-вывода и будет искомым базовым портом. Вручную для проверки этот диапазон можно посмотреть в диспетчере устройств в свойствах устройства на вкладке "ресурсы". С помощью драйвера типа WinIO или подобного пишем в нужные порты.
Решение, на мой взгляд, не очень красивое, но должно работать.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[5]: базовый адрес LPT-порта (опять...)
От: AlexeyZh  
Дата: 21.09.09 10:05
Оценка:
ДД>Решение, на мой взгляд, не очень красивое, но должно работать.

сделали просто — использовали TVicLPT, сама определяет адрес порта, на платах расширения работает корректно, можно выставить любой пин разъема.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.