Нужно под виндой программно получить базовый адрес LPT-порта. LPT-порт расположен на STLab-овской PCI плате.
Пишу напрямую в порт в служебные регистры для специфического девайса, и, скорее всего, на машинах, где будет запускаться прога, тоже стоят платы расширения. Адреса, соответственно, какие угодно.
следующие варианты не прошли:
1. чтение из 0000:0408 — винда запрещает
2. DeviceIoControl(hLPT, IOCTL_PAR_SET_WRITE_ADDRESS, .......) — возвращает true, однако в буфере 0
3. ntport возвращает не то, что есть на самом деле (а некие стандартные адреса, типа 378h). Работает корректно только на мат. платах со встроенным LPT-портом (т.е. меняешь адрес в системе, и ntport это дело унюхивает)
API-шную функцию не нашел (может, плохо искал)
giveio работает как-то странно (может, интересно): после загрузки драйвера на выходах данных высокий уровень — смотрел светодиодом.
Здравствуйте, AlexeyZh, Вы писали:
AZ>не уж-то никто не сталкивался с такой простой проблемой?
Из сообщения понял, что дело происходит под виндой и эта самая STLab предоставляет какой-то драйвер для своей железяки? В таком случае нужно смотреть, не предоставляет ли драйвер интерфейса для работы с регистрами устройства. Если не предоставляет, то скорей всего его придется выкинуть и написать свой. Это не должно быть сложной задачей, особенно если не нужна большая скорость обмена и достаточно программного ввода-вывода. Думаю, все обойдется небольшим допиливанием болванки драйвера PCI-устройства из какого-нибудь DDK.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Здравствуйте, ДимДимыч, Вы писали:
ДД>Здравствуйте, AlexeyZh, Вы писали:
AZ>>не уж-то никто не сталкивался с такой простой проблемой?
ДД>Из сообщения понял, что дело происходит под виндой и эта самая STLab предоставляет какой-то драйвер для своей железяки? В таком случае нужно смотреть, не предоставляет ли драйвер интерфейса для работы с регистрами устройства. Если не предоставляет, то скорей всего его придется выкинуть и написать свой. Это не должно быть сложной задачей, особенно если не нужна большая скорость обмена и достаточно программного ввода-вывода. Думаю, все обойдется небольшим допиливанием болванки драйвера PCI-устройства из какого-нибудь DDK.
да, драйвер там свой, nmpar.sys. Проблема в том, что с DDK не разбирался, можно сказать, вообще, а сдавать сегодня-завтра...
Здравствуйте, AlexeyZh, Вы писали:
AZ>да, драйвер там свой, nmpar.sys. Проблема в том, что с DDK не разбирался, можно сказать, вообще, а сдавать сегодня-завтра...
Тогда можно попробовать следующий финт ушами. LPT-порт ведь стандартный — регистр данных, регистр статуса и регистр управления? Тогда находим нужное PCI-устройство по device id и vendor id и читаем его конфигурационное пространство (как это сделать именно на винде — я не знаю, но не думаю, что сложно). Начало диапазона портов ввода-вывода и будет искомым базовым портом. Вручную для проверки этот диапазон можно посмотреть в диспетчере устройств в свойствах устройства на вкладке "ресурсы". С помощью драйвера типа WinIO или подобного пишем в нужные порты.
Решение, на мой взгляд, не очень красивое, но должно работать.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)