|
|
  |
Написание драйвера под USB порт |
|
|
|
Mar 16 2007, 20:27
|
Группа: Новичок
Сообщений: 9
Регистрация: 16-03-07
Пользователь №: 26 236

|
Люди помогите пожалуйста у меня проблема вышла.... Мне порекомендовали сделать драйвер USB порта. У меня скоро конференция, а на ней мне надо показать как работает этот драйвер. Мне подсказали что лучше всего работать в C++Builder6. У меня такая цель сделать драйвер, который будет выполнять такую функцию НАПРИМЕР: С определенное устройство поступает сигнал на компьютер. В свою очередь компьютер обрабатывает эту информацию и отправляет сигнал на много компьютеров(в виде хаба). И с этих компьютеров почтупает информация если какая-то проблема есть то ПРОИСХОДИТ сигнал что случилась ошибка. И эта программа должна работать постоянна примерно чтобы запрос поступал через каждые 2-5 сек. Я не знаю как это сделать помогите пожалуйста.... За ранее благодарен!
|
|
|
|
|
Mar 17 2007, 00:22
|
Участник

Группа: Свой
Сообщений: 68
Регистрация: 8-05-05
Пользователь №: 4 846

|
В C++Builder6 стоит писать клиентское ПО, а драйвер лучше собирать в NuMega DrverStudio или Jungo WinDriver. Можно почитать http://lord-n.narod.ru/walla.html#AgurovUSB, правда мутновато, но для начала сойдет.
|
|
|
|
|
Mar 17 2007, 21:01
|
Группа: Новичок
Сообщений: 9
Регистрация: 16-03-07
Пользователь №: 26 236

|
В C++Builder6 стоит писать клиентское ПО, а драйвер лучше собирать в NuMega DrverStudio или Jungo WinDriver.
А вы знаете как создавать в этих программах подобные вещи??? Ну мне можно не обязательно на USB порт, можно и на COM
|
|
|
|
|
Mar 17 2007, 23:27
|
Участник

Группа: Свой
Сообщений: 68
Регистрация: 8-05-05
Пользователь №: 4 846

|
А на COM по большому счету драйвер вообще не нужен. Тут нужно определиться с аппаратной частью. Если цель сам драйвер под виндой то стоит для начала почитать Солдатова (Программирование драйверов Windows). Просто драйвер всегда пишется под конкретную железку, если аппаратура стандартная - дрова уже обычно есть.
|
|
|
|
|
Mar 18 2007, 09:25
|

Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 3-08-05
Из: Новосибирск
Пользователь №: 7 334

|
Цитата(BlooDi @ Mar 18 2007, 00:01)  В C++Builder6 стоит писать клиентское ПО, а драйвер лучше собирать в NuMega DrverStudio или Jungo WinDriver. Только не в DriverStudio, этот проект закрыт вместе с SoftIce. Самое надёжное - это WinDDK.
--------------------
Всяк хорошая мысля к нам приходит опосля.
|
|
|
|
|
Mar 19 2007, 19:10
|
Группа: Новичок
Сообщений: 9
Регистрация: 16-03-07
Пользователь №: 26 236

|
Цитата(chan @ Mar 17 2007, 00:22)  В C++Builder6 стоит писать клиентское ПО, а драйвер лучше собирать в NuMega DrverStudio или Jungo WinDriver. Можно почитать http://lord-n.narod.ru/walla.html#AgurovUSB, правда мутновато, но для начала сойдет. НЕТ! Мне как раз сказали имено в этой программе! Там говорят легче и проще во много раз, чем в других программах
|
|
|
|
|
Mar 20 2007, 09:27
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(BlooDi @ Mar 16 2007, 20:27)  Мне порекомендовали сделать драйвер USB порта. Хм, а зачем его делать-то? Комплект драйверов для работы с USB-портами есть в Windows. Открываем "Диспетчер устройств", смотрим ... у меня вот они видны Код C:\WINDOWS\system32\drivers\usbhub.sys C:\WINDOWS\system32\drivers\usbport.sys C:\WINDOWS\system32\drivers\usbuhci.sys C:\WINDOWS\system32\usbui.dll Судя по той задаче, что Вы описали ... Цитата(BlooDi @ Mar 16 2007, 20:27)  У меня скоро конференция, а на ней мне надо показать как работает этот драйвер. Мне подсказали что лучше всего работать в C++Builder6. У меня такая цель сделать драйвер, который будет выполнять такую функцию НАПРИМЕР: С определенное устройство поступает сигнал на компьютер. В свою очередь компьютер обрабатывает эту информацию и отправляет сигнал на много компьютеров(в виде хаба). И с этих компьютеров почтупает информация если какая-то проблема есть то ПРОИСХОДИТ сигнал что случилась ошибка. И эта программа должна работать постоянна примерно чтобы запрос поступал через каждые 2-5 сек. ... Вам нужен и драйвер USB устройства, и пользовательская программа, решающая общую задачу коммуникации нескольких компьютеров и данного устройства. Я надеюсь, Вы соединили несколько компьютеров не через USB-порты ? Для создания пользовательского приложения C++Builder6 подойдёт. Для создания драйвера C++Builder6 нужен разве что в качестве текстового редактора, поэтому необходимо найти и установить один из пакетов, которые Вам уже советовали. Я бы порекомендовал WindowsDDK, но в принципе подойдёт и Jungo WinDriver (или KernelDriver, если Ваш драйвер будет работать в режиме ядра), и DriverStudio. Также крайне желательно установить отладчик, например, SoftIce. Поймите простую вещь - в этих пакетах есть все заголовочные файлы и библиотеки для создания драйверов, и упрямствовать в сторону C++Builder6 просто смешно. Если Вы раньше никогда не занимались написанием драйверов - выход практически один - взять готовый пример-шаблон драйвера USB-устройства и попытаться его "натянуть" на Ваши задачи.
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Mar 20 2007, 18:20
|
Частый гость
 
Группа: Свой
Сообщений: 130
Регистрация: 16-06-05
Из: Оренбург
Пользователь №: 6 039

|
Цитата(Proton @ Mar 18 2007, 11:25)  Только не в DriverStudio, этот проект закрыт вместе с SoftIce. Самое надёжное - это WinDDK. Хм... с DriverStudio идут исходники на С++ Как раз использование DriverStudio сдесь имеет смысл, в отличии от Jungo *Driver, т.к. в последнем у меня были проблемы с лицензией. Точно не помню, но, по моему, по истечении некоторого времени драйвер, созданный в нелицензионной Jungo *Driver перестает работать. К томуже исходники библиотек они не раздают вроде. Правда со всем этим я возился 3 года назад, мож ситуация с Jungo изменилась... Что касается DDK -- то для начинающего это лишние мороки, и использование функций ядра НТ актуально если требуется производительность или еще какие извращения =). Впрочем для DriverStudio все равно потребуется установить DDK.
--------------------
Программа выполнила невыполнимое и допустила недопустимое
|
|
|
|
|
Mar 20 2007, 19:37
|
Группа: Новичок
Сообщений: 9
Регистрация: 16-03-07
Пользователь №: 26 236

|
Цитата(mospf @ Mar 20 2007, 18:38)  Спасибо большое! =), только первая ссылка не работает, а вторая подошла!Очень признателен! Цитата(Demeny @ Mar 20 2007, 09:27)  Хм, а зачем его делать-то? Комплект драйверов для работы с USB-портами есть в Windows. Открываем "Диспетчер устройств", смотрим ... у меня вот они видны Код C:\WINDOWS\system32\drivers\usbhub.sys C:\WINDOWS\system32\drivers\usbport.sys C:\WINDOWS\system32\drivers\usbuhci.sys C:\WINDOWS\system32\usbui.dll Судя по той задаче, что Вы описали ... Ну вот примерный драйвер только это для COM porta, а мне его нужно переделать для USB: Цитата //--------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unitl.h" // #pragma package(smart_init) #pragma resource "*.dfm" #include <windows.h> #include <stdio.h> #include <string.h> #include <process.h> #include <stdlib.h> #include <winbase.h> void a() { } TForml *Form1; COMMTIMEOUTS ct; DWORD mask; OVERLAPPED ovr={0}; DWORD bc; BOOL s; //------------------------------------------------ fastcall TForml::TForml(TComponent* Owner) : TForm(Owner) { double *sd=new double[12]; char *buf_out=new char[7]; buf_out[0]=0x01; buf_out[1]=0x55; buf_out[2]=0x4D; buf_out[3]=0xFF; buf_out[4]=0xFF; buf_out[5]=0x00; buf_out[6]=0x00; unsigned char *buf=new unsigned char[50]; DCB *dcb; HANDLE port=*new HANDLE; char *buf_in; FILE *F=new FILE;
//------------------------------------ z=0; dcb=(DCB*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(DCB)); dcb->DCBIength=sizeof(DCB); BuildCommDCB("baud=9600 parity=N data=8 stop=l",dcb); dcb->fNull=TRUE; ct. ReadlntervalTimeout=10; ct.ReadTotarnmeoutMultiplier=ct.ReadTotalTimeoutConstant=0; ct.WriteTotan"imeoutMultiplier=ct.WriteTotalTimeoutConstant=0; port=CreateFile("COMl",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISnNG,FILE_FLAG_OVERLAPPE D,NULL); if(port==INVALID_HANDLE_VALUE) { zz=1; Timerl-> Enabled=true; } s=SetCommState(port,dcb); if(s==0){ Timer1-> Enabled=true; } SetCommTimeouts(port,&ct); HeapFree(GetProcessHeap(),0,dcb); memset(&ovr,0,sizeof(ovr)); ovr.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); WriteFile(port/buf_out,7,&bc,&ovr); if(WaitForSingleObject(ovr.hEvent,10000)==WAIT_OBJECT_0){ GetOverlappedResult(port,&ovr,&bc,FALSE); } else { /* Обработка ошибки */ Timer1l-> Enabled=true; } ovr.hEvent=CreateEvent(NULL,FALSE,FALSE,NULL); buf_in=(char*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,51); s=ReadFile(port,buf_in,50,&bc,&ovr); if(WaitForSingleObject(ovr.hEvent, 1000)==WAIT_OBJECT_0) { GetOverlappedResult(port,&ovr,&bc,FALSE); } else { /* Обработка ошибки */ Timer1-> Enabled=true; }
for(i=0;i<50;i++) { buf[i]=buf_in[i]; } if((F=fopen('Test.dat","wb"))==NULL) { ShowMessage("Файл не удается создать"); } fwrite(&buf,sizeof(char),50,F); CloseHandle(port); CloseHandle(ovr.hEvent); HeapFree(GetProcessHeap(),0,buf_in); delete [] buf; buf=NULL; delete [] buf_out; buf_out=NULL; delete F; x10=x10+1; delete [] sd; buf NULL; } //------------------------------------ Посмотрите вдруг что у меня неправильно, так подскажите!
|
|
|
|
|
Mar 20 2007, 22:37
|
Частый гость
 
Группа: Свой
Сообщений: 130
Регистрация: 16-06-05
Из: Оренбург
Пользователь №: 6 039

|
Цитата(BlooDi @ Mar 20 2007, 21:37)  Спасибо большое! =), только первая ссылка не работает, а вторая подошла!Очень признателен! Ну вот примерный драйвер только это для COM porta, а мне его нужно переделать для USB: Посмотрите вдруг что у меня неправильно, так подскажите!  ЭТО НЕ драйвер COM порта =)) Драйвер ком порта можно найти в DDK, например, X:\WINDDK\2600\src\kernel\serial\ Тот код, что Вы привели - это открытие порта и чтение данных из него
--------------------
Программа выполнила невыполнимое и допустила недопустимое
|
|
|
|
|
Mar 20 2007, 22:48
|
Группа: Новичок
Сообщений: 9
Регистрация: 16-03-07
Пользователь №: 26 236

|
Цитата Тот код, что Вы привели - это открытие порта и чтение данных из него  Ну значит мне надо переделать вот эту писанину.... чтоб открывал не через COM port а USB или довезти COMP port до ума! Если кто сможет помоч буду очень признателен!
|
|
|
|
|
Mar 20 2007, 23:01
|
Частый гость
 
Группа: Свой
Сообщений: 130
Регистрация: 16-06-05
Из: Оренбург
Пользователь №: 6 039

|
Цитата(BlooDi @ Mar 21 2007, 00:48)  Ну значит мне надо переделать вот эту писанину.... чтоб открывал не через COM port а USB или довезти COMP port до ума! Если кто сможет помоч буду очень признателен!  брррр =) USB порт это немного не то, что Вы думаете. Я сам особо не разбирался в них, но думаю что нужен будет драйвер... но все зависит от того кем "прикидывается" ваше устройство... если COM портом, то можно делать по аналогии Вашего исходника. Советую сначала вкратце посмотреть описание шины USB, в инете гдето валяется книжка (поищите хотябы на natahaus.ru). И окончательно определиться с ТЗ, в.т.ч. сказать что из себя представляют Ваши устройства. PS. уже засыпаю, так что, возможно, подробности завтра посоветую. вообщет Вам скорее всего надо копать примеры исходников usb из DriverStudio или DDK
--------------------
Программа выполнила невыполнимое и допустила недопустимое
|
|
|
|
|
Mar 20 2007, 23:36
|
Группа: Новичок
Сообщений: 9
Регистрация: 16-03-07
Пользователь №: 26 236

|
Цитата PS. уже засыпаю, так что, возможно, подробности завтра посоветую. вообщет Вам скорее всего надо копать примеры исходников usb из DriverStudio или DDK Я же говорю что мне можно и СOM port доделать то... а прибор будит на подобе МЕТРАН-900 только более легче сам тоже сделаю! =) ПОМОГИТЕ ПЖАЛУЙСТЯ дописать драйвер ОЧЕНЬ ПРОШУ!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|