Цитата(bodja74 @ Feb 8 2008, 19:37)

ReAlДавайте не будем нашу дискуссию переводить в полемику.Хорошо?
Я догадывался ,что при желании вы этот драйвер раскритикуете от и до

,поэтому предложил его в качестве примера ,не запрещая при этом найти себе более подходящий.
А давайте сначала Вы в качестве примера будете приводить драйвер, который
действительно делает то, что
Вы говорите
о нём. А то "дискуссия" выглядит так
Цитата
- Винт тут у меня с очень хитрым шлицом, пробовал выточить отвёртку по нескольким разным чертежам - не лезет! Могу, конечно, прикинуть визуально и что-то слепить, но какой смысл, если попадётся другой, в который не полезет. Нужна информация по спецвинтам.
- Надо закрутить винт? Возьмите любой инструмент, которым нормальные люди закручивают винты, например, электроотвёртку с набором из плоской и крестовой вставок, сама лезет в любой винт, сама закручивает!
Ну или что-то другое по вкусу, я вообще мало винтов закручивал, поэтому инструментов много не собирал.
- Дык не лезут из этого набора в шлиц не массового винта!
- Не превращайте дискуссию в полемику, возьмите любой другой инструмент, я не запрещал искать по вкусу.
Ваши слова:
Цитата(bodja74 @ Feb 7 2008, 19:30)

К примеру если для LPT нужно ,есть драйвер TVicPort ,ложится под любой язык ,начиная с Билдера кончая .NET .
Сам определяет какие есть порты ,сколько их, какие у них базовые адресса, дергает любой ногой, есть даже дополнительные фичи - типа определить серийник винта или назначить лицензию на определенное количество дней .
Можно и другой подыскать на свой вкус.
Я с LPT редко работал ,поэтому коллекцию себе не собирал.
Вы за них отвечаете или нет?
Я просто указал, что они не соответствуют действительности для тех портов, с которыми у меня "несуществующая проблема". Если так с Вами разговаривать нельзя - извините, не хотел обидеть.
Цитата(singlskv @ Feb 8 2008, 03:18)

Попробуйте у себя такой метод через реестр:
идем HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Parport\Enum
...
в нем по смещению 0x18 должен сидеть адрес LPT
по смещению 0x20 сидит количество портов которые задействованны устройством
...
Это должно работать на 2000/XP
Хех... Кабы ж то всё так просто...
Вот с работы, W2000sp4, набортный LPT
Цитата
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Parport\Enum]
"0"="ACPI\\PNP0401\\4&2c575acb&0"
"Count"=dword:00000001
"NextInstance"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0401\4&2c575acb&0\Device Parameters]
"FirmwareIdentified"=dword:00000001
"PortName"="LPT1"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0401\4&2c575acb&0\LogConf]
"BootConfig"=hex(8):\
01,00,00,00, 0f,00,00,00, \
00,00,00,00, 01,00,01,00, \
04,00,00,00, 02,01,01,00, \
07,00,00,00, 07,00,00,00, \
ff,ff,ff,ff, 04,01,00,00, \
03,00,00,00, 00,00,00,00, \
00,00,00,00, 01,01,11,00, \
78,03,00,00, 00,00,00,00, \
08,00,00,00, 01,01,11,00, \
78,07,00,00, 00,00,00,00, \
08,00,00,00
Тут почти всё как Вы сказали - разница только в том, что по смещениям 0x18 и 0x20 "что-то не то" (возможно, некие флаговые значения, говорящие, чо надо идти дальше - но по крайней мере есть куда копать), а реальных два диапазона - по смещениям 0x38,0x40; 0x48,0x50.
Ну тут хоть
наличие порта видно.
А вот дома, с PCI-платой...
Цитата
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Parport\Enum]
"Count"=dword:00000000
"NextInstance"=dword:00000000
"INITSTARTFAILED"=dword:00000001
Всё. Портов просто нет. Что означает INITSTARTFAILED - не знаю, но в свойствах - "устройство работает нормально", ради проверки даже достал из-под стола Epson LQ100+ (кстати, кому-то нужен? отдам бесплатно, самовывоз) проинсталлировал его драйвер на LPT1 и напечатал пробную страницу.
Кстати, в аналогичном HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serial\Enum в наличии только один COM-порт, набортный COM1. А COM4 и COM5 от той же PCI-платы отсутствуют.
А живут они тут:
Цитата
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\MF\PCI#VEN_9710&DEV_9835&SUBSYS_00121000&REV_01\5&c47b19f&0&08F0#Child0002]
"DeviceDesc"="MosChip PCI Parallel Port"
"Capabilities"=dword:00000000
"UINumber"=dword:00000002
"HardwareID"=hex(7):4d,46,5c,50,43,49,39,37,31,30,5f,45,43,50,00,00
"ClassGUID"="{4D36E978-E325-11CE-BFC1-08002BE10318}"
"Class"="Ports"
"Driver"="{4D36E978-E325-11CE-BFC1-08002BE10318}\\0002"
"FriendlyName"="MosChip PCI Parallel Port (LPT1)"
"Mfg"="MosChip Technology"
"Service"="NmPar"
"ConfigFlags"=dword:00000000
"ParentIdPrefix"="6&19ad4653&0"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\MF\PCI#VEN_9710&DEV_9835&SUBSYS_00121000&REV_01\5&c47b19f&0&08F0#Child0002\Device Parameters]
"PortName"="LPT1"
"NationalChecked"=dword:00000001
"NationalChipFound"=dword:00000000
"FilterResourceMethod"=dword:00000001
Child0000 и Child0001 - это COM-порты от неё.
Я там дальше нашёл в данных адреса, могу их выковыривать, но когда и где вылезет очередная плата? Без нормального описания возможных ключей в этой части реестра можно всю жизнь экспериментировать и подбирать. Но в тех нескольких книгах по реестру, которые я видел - этого нет совсем. А примеры, включая и этот - я видел, но они далеко не всегда работают :-(
Цитата(VslavX @ Feb 8 2008, 09:56)

Для определения базового адреса порта по его номеру в 2K/XP мне видится такой путь:
- определяем device object для нужного номера LPT. Можно просто разрешить Symbolic Links, или воспользоваться готовой информацией из документации на XP DDK - файл parallel.chm - "Parallel Device Interfaces, Internal Names, and Symbolic Links"
Вот в сторону DDK совсем не хотелось лезть.
Раз для "типовых" портов можно обойтись реестром, раз и на свою PCI-LPT я всё нужное глазами в реестре нашёл, значит где-то должно быть достаточно полное описание ключей реестра :-)
Самое смешное, что с моей точки зрения проблемы тоже не существет, только по другой причине. Потенциальные пользователи avreal, по идее, должны быть достаточно "образованы", чтобы найти на закладке "ресурсы" нужного порта его базовый адрес и вписать его куда надо.
Мне кажется, что на конкретном компьютере он меняется самовольно не так часто - у меня даже при некоторых изменениях конфигурации не менялся. В любом случае - по сравнению с уствновкой драйверов на что-то новое не так и много работы опять заглянуть на нужную страничку.
Тот же avrdude не заморачивается и под виндовс, по крайней мере судя по его документации, просто жёстко привязывает адреса к словам lpt1, lpt2, lpt3 никуда не заглядывая. Мой порт, естественно, не увидел. Я даже не поленился Pony скачать (avrdude-то идёт с WinAVR) - тоже все три дырочки "LPT" серые. На этом фоне -pE800 уже достижение :-)
Мда... Слишком старательно движок конфы сливает смежные посты в один. Хоть бы по размеру поста глянул, большие не сливал...