реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Как перевести AVREAL на работу с USB?, AVREAL работает через LPT, как заставить через USB?
bodja74
сообщение Feb 7 2008, 18:35
Сообщение #31


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(singlskv @ Feb 7 2008, 22:00) *
Пиво по интернету передавать умеете ? smile.gif

Конечно biggrin.gif
Цитата
пользуетесь ли Вы таймаутами ком порта ? (в SetupComm)

Нет
Цитата
пользуетесь ли Вы функцией Sleep(x) ?

Да ,в цикле 100мс ,если байтов нет ,выходим.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 7 2008, 18:46
Сообщение #32


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



А какая длина пакета на приеме
и сколько байт на прием передаете функции ReadFile ?

И скорость порта какая ?
Go to the top of the page
 
+Quote Post
ReAl
сообщение Feb 7 2008, 21:14
Сообщение #33


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(bodja74 @ Feb 7 2008, 19:30) *
ReAl
Если брать по большому счету ,то у вас проблема ,которой не существует smile.gif

Очень рад это слышать. Причём похожая проблема как минимум у уже упоминавшегося в этом треде программатора для MSP430. Вы одним махом решили проблемы минимум двух программаторов.

Цитата(bodja74 @ Feb 7 2008, 19:30) *
а требует только базовый адресс ,то пошлите его лесом гулять,и подыщите нормальный.
Не нужно будет извращаться с копаниями в реестре вообще.
К примеру если для LPT нужно ,есть драйвер TVicPort ,ложится под любой язык ,начиная с Билдера кончая .NET .
Сам определяет какие есть порты, сколько их, какие у них базовые адресса,дергает любой ногой
Это вот этот?
http://www.entechtaiwan.com/dev/port/index.shtm
Слышал про него раньше, но он не был фриварным.
Качаю. Ставлю. Перегружаюсь.
Леплю маленькую программульку.
Код
#include <windows.h>
#include <stdio.h>
#include "TVicPort.h"

#define DLLNAME "TVicPort.dll"

int main()
{    
    USHORT    VICFN (*pGetLPTNumPorts)();
    int ports;    
    HINSTANCE hdll = LoadLibrary(DLLNAME);
    
    if (hdll == NULL) {
        puts("Can't load " DLLNAME);
        return 1;
    }

    puts( DLLNAME " loaded");
    
    pGetLPTNumPorts = GetProcAddress(hdll, "GetLPTNumPorts");
    if( pGetLPTNumPorts == NULL) {
        puts( "Can't get GetLPTNumPorts() address");
        return 1;
    }

    ports = pGetLPTNumPorts();
    printf("%d  LPT ports found\n", ports);

    FreeLibrary(hdll);
    return 0;
}

Запускаю. Получаю.
Код
TVicPort.dll loaded
0  LPT ports found


На всякий случай проверяю - вдруг моль трахнула мой LPT пока я был на работе.
CODE
avreal/WIN32 - AVR controllers LPT programmer by Redchuk Alexandr
v1.25rev6 (Dec 30 2007 17:00:01) http://www.ln.ua/~real/avreal
bug-reports, suggestions and so on mail to avreal@real.kiev.ua

Command:
-ab -pE800 +mega168 -%
% LPT base port 0xE800
% assume that LPT data writes not faster then 1uS
% ByteBlasterMV found
% ByteBlaster mode
% osc = 800kHz -> setup=3, hold=3,2
% Reset
% PgmOn reply 0x00005300
% Synchronised after 1 try
% GetID reply 0x0030001E
% GetID reply 0x00300094
% GetID reply 0x00300006
% Read ID: 0x1E9406
Device connected, MEGA168 detected
% ReadLock command 0x58000000
% ReadLock reply 0x005800FF
Chip not locked
% ReadOsccal command 0x38000000
% ReadOsccal reply 0x003800B0
% ReadFuses command 0x50000000
% ReadFuses reply 0x005000C2
% ReadFuses command 0x58000000
% ReadFuses reply 0x005800FF
% ReadFuses command 0x58080000
% ReadFuses reply 0x005808DD
% ReadFuses command 0x50080000
% ReadFuses reply 0x005008F9
Fuses
OSCCAL = B0
CKDIV = 1
CKOUT = 1
SUT = 0
CKSEL = 2
BLB1 = 3
BLB0 = 3
RSTDISBL = 1
DWEN = 1
WDTON = 1
EESAVE = 1
BODLEVEL = 5
BOOTSZ = 0
BOOTRST = 1
Reset pin released
Adapter disabled

Нет, не трахнула.

Собственно, в хелпе на GetLPTNumPorts ясно написано:
Цитата
Some new ports like PCI LPTs does not report about its resources so you should add this kind of ports to TVicPort manually with the help of AddNewLPT function.
Т.е. возвращаемся к тому, что было - нужно как-то узнать адрес. А если я его уже знаю - мне этит твикпорт для доступа к LPT и не нужен.

Или имелся ввиду какой-то другой TVicPort?
Там рядом ещё есть TVicLPT, который обещает и с нестандартными PCI-портами работать.
Single License is $65 U.S.

Цитата(bodja74 @ Feb 7 2008, 19:30) *
Я с LPT редко работал ,поэтому коллекцию себе не собирал.
ИМХО если чтото новое мутить ,то лучше на LPT и не закладываться,но это дело хозяйское smile.gif

"Тут трактор нужен"...
Вся тема посвящена использованию СТАРОГО, понятно, что лучше быть богатым и здоровым, чем бедным и больным.

Цитата(bodja74 @ Feb 7 2008, 19:30) *
Насчет СОМ ,функции CreateFile, ReadFile, SetupComm, WriteFile и т.д. у меня в коде они есть,я выдернул с инета уже четыре варианта и у всех одна и таже проблема с пропуском байтов.
Я ничего из интернета не дёргал, MSDN читал. Там есть хороший пример - MTTTY (Multi-Threaded TTY).
У меня никаких Sleep()-ов, отдельный поток спит до появления байтиков в порту.
По осциллографу от стопа последнего байта входящего в PC пакета до старта выходящего ответа микросекунд двести было на атлоне-550MHz/W2000SP3. С тех пор с ком-портом практически не работал.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 7 2008, 21:19
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(ReAl @ Feb 8 2008, 00:06) *
Вы одним махом решили проблемы минимум двух программаторов.

Постараюсь на днях подыскать себе в ноутбук чего-нибудь PCMCIA-йное PCI-USB. Появится стимул - думаю разберусь с базовым адресом безотносительно к драйверу, но не совсем безотносительно к железу sad.gif и доложусь...
Собственно я уже писал, как собираюсь поступить (и поступаю под своей операционкой с PCI мультипортовыми RS232)
- по PCI информации. Базовые адреса там, естественно, присутствуют. Этим:
http://members.datafast.net.au/~dft0802/
для начала можно посмотреть.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 8 2008, 01:18
Сообщение #35


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(ReAl @ Feb 6 2008, 23:55) *
Винда видит (раз через свойства/оборудование/... и так далее для LPT1 на закладке "ресурсы" базовый адрес показывает), принтера на ней нет и не ставился. Не винда не видит, а применяемый в стандартных примерах код поиска базового адреса по реестру, я же писал уже.


Попробуйте у себя такой метод через реестр:
идем HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Parport\Enum
видим типа ключ '0' ACPI\PNP0400\4&2a083901&0
если несколько LPT то ключей будет несколько '1','2',....
идем
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0400\4&2a083901&0\Device Parameters
и убеждаемся по ключу PortName что это нужный нам LPT, например LPT1
идем
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0400\4&2a083901&0\LogConf
читаем ключ BootConfig
в нем по смещению 0x18 должен сидеть адрес LPT
по смещению 0x20 сидит количество портов которые задействованны устройством, например
для стандартного LPT по адресу 0x20 находится 8
Эти 2 числа и используются для вывода диапазона адресов устройства
в панели управления , например 0x378-0x37f

Аналогично ищутся адреса любых устройств.
Например для COM:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serial\Enum
'0' = ACPI\PNP0501\1
'1' = ACPI\PNP0502\2
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0501\1\Device Parameters
PortName = COM1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0501\2\Device Parameters
PortName = COM2
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0501\1\LogConf
BootConfig 0x18=0x3F8 0x20=8 итого 0x3f8-0x3ff
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0501\1\LogConf
BootConfig 0x18=0x3F8 0x20=8 итого 0x2f8-0x2ff

Это должно работать на 2000/XP
про более ранние и более позднии версии не знаю

Да, небольшое уточнение, структурка которая сидит в BootConfig одинаковая только
для однотипных(по задействованным ресурсам) устройств, те для портов она всегда такая, а например для
PCI-PCI bridge она другая
Go to the top of the page
 
+Quote Post
VslavX
сообщение Feb 8 2008, 07:56
Сообщение #36


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Для определения базового адреса порта по его номеру в 2K/XP мне видится такой путь:
- определяем device object для нужного номера LPT. Можно просто разрешить Symbolic Links, или воспользоваться готовой информацией из документации на XP DDK - файл parallel.chm - "Parallel Device Interfaces, Internal Names, and Symbolic Links"
- потом выполняем запрос IRP_MJ_INTERNAL_DEVICE_CONTROL c подкодом IOCTL_INTERNAL_PARCLASS_CONNECT -
Цитата
"A client uses the IOCTL_INTERNAL_PARCLASS_CONNECT request to obtain a PARCLASS_INFORMATION structure that contains:
I/O resources allocated to the parallel port
Hardware capabilities of the parallel port
Pointers to callback routines that a kernel-mode driver can use to set the IEEE 1284 operating modes for a parallel device – see Setting and Clearing a Communication Mode for a Parallel Device
Pointers to callback routines that a kernel-mode driver can use to read and write a parallel device – see Reading and Writing a Parallel Device.

Не уверен, что получится выполнить этот запрос из приложения через DeviceIoControl, но попробовать можно. Если не получится - то придется написать небольшой драйверок или дополнить существующий, который разблокирует доступ к портам.
BTW, в ближайшее время попробую, для самого тема актуальная smile.gif
Go to the top of the page
 
+Quote Post
bodja74
сообщение Feb 8 2008, 17:37
Сообщение #37


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(singlskv @ Feb 7 2008, 22:46) *
А какая длина пакета на приеме

От 256 байт до 256к ,короче бут в перемешку с прогером smile.gif
Цитата
и сколько байт на прием передаете функции ReadFile ?

От 64байт до 8К,по разному пробовал.
Цитата
И скорость порта какая ?

115200,
на каждых 4К ,теряется от 20 до 200 байт,по разному,
я тут думаю ,может буфер переполняется ,но вроде как в ReadFile больше нигде не указывается, laughing.gif

ReAl
Давайте не будем нашу дискуссию переводить в полемику.Хорошо?
Я догадывался ,что при желании вы этот драйвер раскритикуете от и до smile.gif ,поэтому предложил его в качестве примера ,не запрещая при этом найти себе более подходящий.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 8 2008, 17:52
Сообщение #38


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(bodja74 @ Feb 8 2008, 20:37) *
От 256 байт до 256к ,короче бут в перемешку с прогером smile.gif
От 64байт до 8К,по разному пробовал.
115200,
на каждых 4К ,теряется от 20 до 200 байт,по разному,
я тут думаю ,может буфер переполняется ,но вроде как в ReadFile больше нигде не указывается, laughing.gif

ReadFile как я понимаю используется в варианте с блокировкой, те
без использования OVERLAPPED ?

Судя по Вашему ТТХ, у Вас происходит переполнение буфера FIFO на
приеме, это связанно с тем что если ReadFile не смог сразу считать все запрошенные
байты он фактически выполняет команду Sleep(0), те просто передает управление
следуещему процессу, а у Windows такт операционки достаточно большой...
Если Вы готовы поэкспериментировать, можно попробовать ...
Go to the top of the page
 
+Quote Post
ReAl
сообщение Feb 8 2008, 20:18
Сообщение #39


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



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

Ваши слова:
Цитата(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 уже достижение :-)


Мда... Слишком старательно движок конфы сливает смежные посты в один. Хоть бы по размеру поста глянул, большие не сливал...


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 8 2008, 20:40
Сообщение #40


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(ReAl @ Feb 8 2008, 23:18) *
Тут почти всё как Вы сказали - разница только в том, что по смещениям 0x18 и 0x20 "что-то не то" (возможно, некие флаговые значения, говорящие, чо надо идти дальше - но по крайней мере есть куда копать), а реальных два диапазона - по смещениям 0x38,0x40; 0x48,0x50.
Ну тут хоть наличие порта видно.
Да, все правильно, есть такие порты с двумя диапазонами, для них
структура более длинная...
Я тут недавно софт переставлял и случайно стер DDK,
попробую найти DDK и найти эти структуры...
Цитата
А вот дома, с PCI-платой...
Всё. Портов просто нет. Что означает INITSTARTFAILED - не знаю, но в свойствах - "устройство работает нормально", ради проверки даже достал из-под стола Epson LQ100+ (кстати, кому-то нужен? отдам бесплатно, самовывоз) проинсталлировал его драйвер на LPT1 и напечатал пробную страницу.
А что у Вас сидит в Control Panel/Device Menager/Hardwar/LPT1 ?
Интересует закладка Details и параметер Device Instance Id, собственно там и сидит путь к
Вашему LPT.
Цитата
Кстати, в аналогичном HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serial\Enum в наличии только один COM-порт, набортный COM1. А COM4 и COM5 от той же PCI-платы отсутствуют.
А живут они тут:
Child0000 и Child0001 - это COM-порты от неё.
Нда..., ключевое слово здесь видимо
"ParentIdPrefix"="6&19ad4653&0"
У Вас просто многофункциональный девайс...
Go to the top of the page
 
+Quote Post
ReAl
сообщение Feb 8 2008, 20:58
Сообщение #41


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(singlskv @ Feb 8 2008, 22:40) *
А что у Вас сидит в Control Panel/Device Menager/Hardwar/LPT1 ?
Интересует закладка Details и параметер Device Instance Id, собственно там и сидит путь к
Вашему LPT.
Оно!
Там строка
Код
MF\PCI#VEN_9710&DEV_9835&SUBSYS_00121000&REV_01\5&c47b19f&0&08F0#Child0002

Т.е. мне надо как-то выковыривать из винды эту строку и приписывать её к
Код
HKLM\SYSTEM\CurrentControlSet\Enum


Цитата(singlskv @ Feb 8 2008, 22:40) *
Нда..., ключевое слово здесь видимо
"ParentIdPrefix"="6&19ad4653&0"
У Вас просто многофункциональный девайс...

Ну, на работе тот LPT, который нашёлся - тоже не "малофункциональный" - он ещё сидит в
Код
[HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\8\ParallelController\0]
"Component Information"=hex:40,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,ff
"Identifier"="PARALLEL1"
"Configuration Data"=hex(9):\
  01,00,00,00, 00,00,00,00,  00,00,00,00, 02,00,00,00, \
  01,01,01,00, 78,03,00,00,  00,00,00,00, 03,00,00,00, \
  02,00,01,00, 07,00,00,00,  07,00,00,00, ff,ff,ff,ff
и у этого MultifunctionAdapter\8 там ещё куча всего, включая FDC и контроллер клавиатуры.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 8 2008, 22:34
Сообщение #42


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(ReAl @ Feb 8 2008, 23:58) *
Оно!
Там строка
Код
MF\PCI#VEN_9710&DEV_9835&SUBSYS_00121000&REV_01\5&c47b19f&0&08F0#Child0002

Т.е. мне надо как-то выковыривать из винды эту строку и приписывать её к
Код
HKLM\SYSTEM\CurrentControlSet\Enum
Ну на крайний случай есть вариант с перебором всей ветки ...\Enum
на предмет наличия Device Parameters\PortName = LPTx
и последующем чтением LogConf\BootConfig
здесь оно главное, в BootConfig пишется адрес девайса действительный на момент загрузки...
Цитата
Ну, на работе тот LPT, который нашёлся - тоже не "малофункциональный" - он ещё сидит в
[code][HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\8\ParallelController\0]
да, там они тоже все сидят, только это не то что получилось на момент загрузки...
Это скорее всего то, что покажет Device Manager в случае загрузки в Safe mode.

вобщем надо еще думать... жаль что у меня нет таких PCI-LPT...

кстати, попробуйте найти Ваш адаптер вот так:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\xxxxx\Enum
где xxxxx - это например MF(MultifunctionDevice) или что то в этом роде...
там и должно дальше быть:
'0' MF\PCI#VEN_9710&DEV_9835&SUBSYS_00121000&REV_01\5&c47b19f&0&08F0#Child0002
Go to the top of the page
 
+Quote Post
bodja74
сообщение Feb 9 2008, 20:51
Сообщение #43


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(singlskv @ Feb 8 2008, 21:52) *
ReadFile как я понимаю используется в варианте с блокировкой, те
без использования OVERLAPPED ?
Если Вы готовы поэкспериментировать, можно попробовать ...


У меня получается есть ряд конечных пользовательских функций обьявленные как Public,а все декларации вынесены в отдельном модуле,код там не маленький smile.gif ,если если есть интерес могу все это скинуть,так как все эти маневры с кодом пересказать трудно.


ReAl
Цитата
Вы за них отвечаете или нет?
Я просто указал, что они не соответствуют действительности для тех портов, с которыми у меня "несуществующая проблема". Если так с Вами разговаривать нельзя - извините, не хотел обидеть.

У меня без проблем определяет все порты ,как встроенные так и на картах,поэтому говорил то ,что видел сам.
Если у вас все равно не определяет ,можно пробовать ,про который говорили -TVicLPT ,не на всех сайтах он платный biggrin.gif , у меня он "кушать" не просит.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 9 2008, 21:41
Сообщение #44


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(bodja74 @ Feb 9 2008, 23:51) *
У меня получается есть ряд конечных пользовательских функций обьявленные как Public,а все декларации вынесены в отдельном модуле,код там не маленький smile.gif ,если если есть интерес могу все это скинуть,так как все эти маневры с кодом пересказать трудно.
Не, весь код не надо...
Покажите инициализацию COM и использование ReadFile +- пару строчек,
те что бы понятно было как оно должно работать.
а про OVERLAPPED, это такой флаг при открытии при котором функция не висит в ожидании ответа, а
через спец механизм оповещает о событиях.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Feb 10 2008, 15:26
Сообщение #45


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(singlskv @ Feb 10 2008, 01:41) *
Не, весь код не надо...
Покажите инициализацию COM и использование ReadFile +- пару строчек,
те что бы понятно было как оно должно работать.


Ок. Вот содержание функции инициализации CommOpen.
Код
'-------------------------------------------------------------------------------
' CommOpen - Opens/Initializes serial port.
'
'
' Parameters:
'   intPortID   - Port ID used when port was opened.
'   strPort     - COM port name. (COM1, COM2, COM3, COM4)
'   strSettings - Communication settings.
'                 Example: "baud=9600 parity=N data=8 stop=1"
'
' Returns:
'   Error Code  - 0 = No Error.
'
'-------------------------------------------------------------------------------
Public Function CommOpen(intPortID As Integer, strPort As String, _
    strSettings As String) As Long
    
Dim lngStatus       As Long
Dim udtCommTimeOuts As COMMTIMEOUTS

    On Error GoTo Routine_Error
    
    ' See if port already in use.
    If udtPorts(intPortID).blnPortOpen Then
        lngStatus = -1
        With udtCommError
            .lngErrorCode = lngStatus
            .strFunction = "CommOpen"
            .strErrorMessage = "Port in use."
        End With
        
        GoTo Routine_Exit
    End If

    ' Open serial port.
    udtPorts(intPortID).lngHandle = CreateFile(strPort, GENERIC_READ Or _
        GENERIC_WRITE, 0, ByVal 0&, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)

    If udtPorts(intPortID).lngHandle = -1 Then
        lngStatus = SetCommError("CommOpen (CreateFile)")
        GoTo Routine_Exit
    End If

    udtPorts(intPortID).blnPortOpen = True

    ' Setup device buffers (1K each).
    lngStatus = SetupComm(udtPorts(intPortID).lngHandle, 1024, 1024)
    
    If lngStatus = 0 Then
        lngStatus = SetCommError("CommOpen (SetupComm)")
        GoTo Routine_Exit
    End If

    ' Purge buffers.
    lngStatus = PurgeComm(udtPorts(intPortID).lngHandle, PURGE_TXABORT Or _
        PURGE_RXABORT Or PURGE_TXCLEAR Or PURGE_RXCLEAR)

    If lngStatus = 0 Then
        lngStatus = SetCommError("CommOpen (PurgeComm)")
        GoTo Routine_Exit
    End If

    ' Set serial port timeouts.
    With udtCommTimeOuts
        .ReadIntervalTimeout = -1
        .ReadTotalTimeoutMultiplier = 0
        .ReadTotalTimeoutConstant = 1000
        .WriteTotalTimeoutMultiplier = 0
        .WriteTotalTimeoutMultiplier = 1000
    End With

    lngStatus = SetCommTimeouts(udtPorts(intPortID).lngHandle, udtCommTimeOuts)

    If lngStatus = 0 Then
        lngStatus = SetCommError("CommOpen (SetCommTimeouts)")
        GoTo Routine_Exit
    End If

    ' Get the current state (DCB).
    lngStatus = GetCommState(udtPorts(intPortID).lngHandle, _
        udtPorts(intPortID).udtDCB)

    If lngStatus = 0 Then
        lngStatus = SetCommError("CommOpen (GetCommState)")
        GoTo Routine_Exit
    End If

    ' Modify the DCB to reflect the desired settings.
    lngStatus = BuildCommDCB(strSettings, udtPorts(intPortID).udtDCB)

    If lngStatus = 0 Then
        lngStatus = SetCommError("CommOpen (BuildCommDCB)")
        GoTo Routine_Exit
    End If

    ' Set the new state.
    lngStatus = SetCommState(udtPorts(intPortID).lngHandle, _
        udtPorts(intPortID).udtDCB)

    If lngStatus = 0 Then
        lngStatus = SetCommError("CommOpen (SetCommState)")
        GoTo Routine_Exit
    End If

    lngStatus = 0

Routine_Exit:
    CommOpen = lngStatus
    Exit Function

Routine_Error:
    lngStatus = Err.Number
    With udtCommError
        .lngErrorCode = lngStatus
        .strFunction = "CommOpen"
        .strErrorMessage = Err.Description
    End With
    Resume Routine_Exit
End Function


Блиииииин... Наверное это оно twak.gif
Код
    ' Setup device buffers (1K each).
    lngStatus = SetupComm(udtPorts(intPortID).lngHandle, 1024, 1024)

Только сейчас заметил ,попробую поцепить все назад к проге ,скажу результат.
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01561 секунд с 7
ELECTRONIX ©2004-2016