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

 
 
 
Reply to this topicStart new topic
> Написание драйвера под USB порт
BlooDi
сообщение Mar 16 2007, 20:27
Сообщение #1





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



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


Участник
*

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



В C++Builder6 стоит писать клиентское ПО, а драйвер лучше собирать в NuMega DrverStudio или Jungo WinDriver. Можно почитать http://lord-n.narod.ru/walla.html#AgurovUSB, правда мутновато, но для начала сойдет.
Go to the top of the page
 
+Quote Post
BlooDi
сообщение Mar 17 2007, 21:01
Сообщение #3





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



В C++Builder6 стоит писать клиентское ПО, а драйвер лучше собирать в NuMega DrverStudio или Jungo WinDriver.


А вы знаете как создавать в этих программах подобные вещи??? Ну мне можно не обязательно на USB порт, можно и на COM
Go to the top of the page
 
+Quote Post
chan
сообщение Mar 17 2007, 23:27
Сообщение #4


Участник
*

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



А на COM по большому счету драйвер вообще не нужен. Тут нужно определиться с аппаратной частью. Если цель сам драйвер под виндой то стоит для начала почитать Солдатова (Программирование драйверов Windows). Просто драйвер всегда пишется под конкретную железку, если аппаратура стандартная - дрова уже обычно есть.
Go to the top of the page
 
+Quote Post
Proton
сообщение Mar 18 2007, 09:25
Сообщение #5


Частый гость
**

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



Цитата(BlooDi @ Mar 18 2007, 00:01) *
В C++Builder6 стоит писать клиентское ПО, а драйвер лучше собирать в NuMega DrverStudio или Jungo WinDriver.

Только не в DriverStudio, этот проект закрыт вместе с SoftIce. Самое надёжное - это WinDDK.


--------------------
Всяк хорошая мысля к нам приходит опосля.
Go to the top of the page
 
+Quote Post
BlooDi
сообщение Mar 19 2007, 19:10
Сообщение #6





Группа: Новичок
Сообщений: 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, правда мутновато, но для начала сойдет.


НЕТ! Мне как раз сказали имено в этой программе! Там говорят легче и проще во много раз, чем в других программах
Go to the top of the page
 
+Quote Post
Demeny
сообщение Mar 20 2007, 09:27
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 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-порты ? biggrin.gif
Для создания пользовательского приложения C++Builder6 подойдёт. Для создания драйвера C++Builder6 нужен разве что в качестве текстового редактора, поэтому необходимо найти и установить один из пакетов, которые Вам уже советовали. Я бы порекомендовал WindowsDDK, но в принципе подойдёт и Jungo WinDriver (или KernelDriver, если Ваш драйвер будет работать в режиме ядра), и DriverStudio. Также крайне желательно установить отладчик, например, SoftIce.
Поймите простую вещь - в этих пакетах есть все заголовочные файлы и библиотеки для создания драйверов, и упрямствовать в сторону C++Builder6 просто смешно.
Если Вы раньше никогда не занимались написанием драйверов - выход практически один - взять готовый пример-шаблон драйвера USB-устройства и попытаться его "натянуть" на Ваши задачи.


--------------------
Сделано в Китае. Упаковано в России.
Go to the top of the page
 
+Quote Post
ishergin
сообщение Mar 20 2007, 18:20
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 16-06-05
Из: Оренбург
Пользователь №: 6 039



Цитата(Proton @ Mar 18 2007, 11:25) *
Только не в DriverStudio, этот проект закрыт вместе с SoftIce. Самое надёжное - это WinDDK.


Хм... с DriverStudio идут исходники на С++ smile.gif
Как раз использование DriverStudio сдесь имеет смысл, в отличии от Jungo *Driver, т.к. в последнем у меня были проблемы с лицензией. Точно не помню, но, по моему, по истечении некоторого времени драйвер, созданный в нелицензионной Jungo *Driver перестает работать. К томуже исходники библиотек они не раздают вроде. Правда со всем этим я возился 3 года назад, мож ситуация с Jungo изменилась...
Что касается DDK -- то для начинающего это лишние мороки, и использование функций ядра НТ актуально если требуется производительность или еще какие извращения =). Впрочем для DriverStudio все равно потребуется установить DDK.


--------------------
Программа выполнила невыполнимое и допустила недопустимое
Go to the top of the page
 
+Quote Post
mospf
сообщение Mar 20 2007, 18:38
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 6-02-07
Пользователь №: 25 101



Посмотри http://www.education.pcports.ru/AT89.php а также http://www.pcports.ru/Library.php
Наверняка одна из этих ссылок тебе поможет.
Go to the top of the page
 
+Quote Post
BlooDi
сообщение Mar 20 2007, 19:37
Сообщение #10





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



Цитата(mospf @ Mar 20 2007, 18:38) *
Посмотри http://www.education.pcports.ru/AT89.php а также http://www.pcports.ru/Library.php
Наверняка одна из этих ссылок тебе поможет.


Спасибо большое! =), только первая ссылка не работает, а вторая подошла!Очень признателен!

Цитата(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;
}
//------------------------------------

Посмотрите вдруг что у меня неправильно, так подскажите! biggrin.gif
Go to the top of the page
 
+Quote Post
ishergin
сообщение Mar 20 2007, 22:37
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 16-06-05
Из: Оренбург
Пользователь №: 6 039



Цитата(BlooDi @ Mar 20 2007, 21:37) *
Спасибо большое! =), только первая ссылка не работает, а вторая подошла!Очень признателен!
Ну вот примерный драйвер только это для COM porta, а мне его нужно переделать для USB:

Посмотрите вдруг что у меня неправильно, так подскажите! biggrin.gif


ЭТО НЕ драйвер COM порта =))
Драйвер ком порта можно найти в DDK, например, X:\WINDDK\2600\src\kernel\serial\

Тот код, что Вы привели - это открытие порта и чтение данных из него biggrin.gif


--------------------
Программа выполнила невыполнимое и допустила недопустимое
Go to the top of the page
 
+Quote Post
BlooDi
сообщение Mar 20 2007, 22:48
Сообщение #12





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



Цитата
Тот код, что Вы привели - это открытие порта и чтение данных из него biggrin.gif

Ну значит мне надо переделать вот эту писанину.... чтоб открывал не через COM port а USB или довезти COMP port до ума!
Если кто сможет помоч буду очень признателен!
smile.gif
Go to the top of the page
 
+Quote Post
ishergin
сообщение Mar 20 2007, 23:01
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 16-06-05
Из: Оренбург
Пользователь №: 6 039



Цитата(BlooDi @ Mar 21 2007, 00:48) *
Ну значит мне надо переделать вот эту писанину.... чтоб открывал не через COM port а USB или довезти COMP port до ума!
Если кто сможет помоч буду очень признателен!
smile.gif


брррр =) USB порт это немного не то, что Вы думаете. Я сам особо не разбирался в них, но думаю что нужен будет драйвер... но все зависит от того кем "прикидывается" ваше устройство... если COM портом, то можно делать по аналогии Вашего исходника. Советую сначала вкратце посмотреть описание шины USB, в инете гдето валяется книжка (поищите хотябы на natahaus.ru). И окончательно определиться с ТЗ, в.т.ч. сказать что из себя представляют Ваши устройства.

PS. уже засыпаю, так что, возможно, подробности завтра посоветую.
вообщет Вам скорее всего надо копать примеры исходников usb из DriverStudio или DDK


--------------------
Программа выполнила невыполнимое и допустила недопустимое
Go to the top of the page
 
+Quote Post
BlooDi
сообщение Mar 20 2007, 23:36
Сообщение #14





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



Цитата
PS. уже засыпаю, так что, возможно, подробности завтра посоветую.
вообщет Вам скорее всего надо копать примеры исходников usb из DriverStudio или DDK

Я же говорю что мне можно и СOM port доделать то... а прибор будит на подобе МЕТРАН-900 только более легче сам тоже сделаю!
=)
ПОМОГИТЕ ПЖАЛУЙСТЯ дописать драйвер ОЧЕНЬ ПРОШУ!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 16:08
Рейтинг@Mail.ru


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