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

 
 
> Написание драйвера под 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
 
Start new topic
Ответов
mospf
сообщение Mar 20 2007, 18:38
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #3





Группа: Новичок
Сообщений: 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
Сообщение #4


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

Группа: Свой
Сообщений: 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
Сообщение #5





Группа: Новичок
Сообщений: 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
Сообщение #6


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

Группа: Свой
Сообщений: 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
Сообщение #7





Группа: Новичок
Сообщений: 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 Текстовая версия Сейчас: 22nd August 2025 - 21:59
Рейтинг@Mail.ru


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