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

|
Люди помогите пожалуйста у меня проблема вышла.... Мне порекомендовали сделать драйвер USB порта. У меня скоро конференция, а на ней мне надо показать как работает этот драйвер. Мне подсказали что лучше всего работать в C++Builder6. У меня такая цель сделать драйвер, который будет выполнять такую функцию НАПРИМЕР: С определенное устройство поступает сигнал на компьютер. В свою очередь компьютер обрабатывает эту информацию и отправляет сигнал на много компьютеров(в виде хаба). И с этих компьютеров почтупает информация если какая-то проблема есть то ПРОИСХОДИТ сигнал что случилась ошибка. И эта программа должна работать постоянна примерно чтобы запрос поступал через каждые 2-5 сек. Я не знаю как это сделать помогите пожалуйста.... За ранее благодарен!
|
|
|
|
|
 |
Ответов
|
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 только более легче сам тоже сделаю! =) ПОМОГИТЕ ПЖАЛУЙСТЯ дописать драйвер ОЧЕНЬ ПРОШУ!
|
|
|
|
Сообщений в этой теме
BlooDi Написание драйвера под USB порт Mar 16 2007, 20:27 chan В C++Builder6 стоит писать клиентское ПО, а драйве... Mar 17 2007, 00:22 BlooDi В C++Builder6 стоит писать клиентское ПО, а драйве... Mar 17 2007, 21:01  chan А на COM по большому счету драйвер вообще не нужен... Mar 17 2007, 23:27  Proton Цитата(BlooDi @ Mar 18 2007, 00:01) В C++... Mar 18 2007, 09:25   ishergin Цитата(Proton @ Mar 18 2007, 11:25) Тольк... Mar 20 2007, 18:20 BlooDi Цитата(chan @ Mar 17 2007, 00:22) В C++Bu... Mar 19 2007, 19:10 Demeny Цитата(BlooDi @ Mar 16 2007, 20:27) Мне п... Mar 20 2007, 09:27
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|