Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите с драйвером...

28K
25 апреля 2009 года
MadGest
45 / / 04.04.2009
Написал драйвер для работы с LPT. Передаю информацию через METHOD_BUFFERED. Для увеличения скорости работы потребовалось снимать сразу 4 значения. Вот и вопрос. Как через все это дело передать массив или 4 параметра из инструкции.

Заранее спасибо!
14
27 апреля 2009 года
Phodopus
3.3K / / 19.06.2008
Как через METHOD_BUFFERED передать массив? Также как и через ReadFile, в чем проблема-то?
28K
29 апреля 2009 года
MadGest
45 / / 04.04.2009
Мне стыдно признаться, но я просто не знаю как передать массив через драйвер, и нигде не могу найти примера реализации такого. Может посоветуете чего? Или вариант реализации. Буду искренне благодарен, ибо огромная потребность в данной информации.
14
29 апреля 2009 года
Phodopus
3.3K / / 19.06.2008
Ну вы 1 байт можете через драйвер передать? А 10? А 16? Ну вот вам и массив!
Ну или как-то скорректируйте вопрос, возможно мы не понимем друг друга.
28K
30 апреля 2009 года
MadGest
45 / / 04.04.2009
Все возможно. Что бы не усложнять объяснения прикрепил файл драйвера.

В общем такая штука . Там Вы увидите инструкции IOCTL_OUT_WHIS_379H_1
IOCTL_OUT_WHIS_379H_2
IOCTL_OUT_WHIS_379H_3
IOCTL_OUT_WHIS_379H_0

Они в принципе делают все одно и тоже. (Сканируют порты датчика) Датчика у меня 4 штуки. Регистрирую я пузырьки в воде. В силу малой жизни пузырьков мне нужно максимально увеличить скорость сканирования датчиков. Ясное дело ассемблер работает быстро поэтому вся сложность в том что мне приходится для каждого датчика вызывать инструкцию драйвера отдельно, что очень сильно увеличивает время выполнения сканирования. Мне бы хотелось сделать инструкцию которая будет сразу сканить все 4 детектора и возвращать так же 4 значения в мою программу.

В программе я получаю значения так:

DWORD ioctlCode_InPort_2=IOCTL_OUT_WHIS_379H_2;
if( !DeviceIoControl( hHandle,
ioctlCode_InPort_2,
&NieVar_2,sizeof(unsigned char), // Input
&xdata_2,sizeof(unsigned char), // Output
&BytesReturned,
NULL ) )
{
strcpy(tmpString, "Error: Driver not found");
}

InPort_2[varR] = xdata_2;


Вот вроде бы и все. Еще раз спасибо. (тоже заранее :-) ) Жду ответа.
14
30 апреля 2009 года
Phodopus
3.3K / / 19.06.2008
Бегло просмотрев (поправить бы отступы), я так понял что запись собственно в буфер выполняется в строчке вида
 
Код:
*buff_3 = _BH;

Тоесть байт в буфер. Ну так и что мешает передавать DeviceIOControl буфер в 4 байта, а в драйвере писать эти самые 4 байта. На псевдоязыке:
 
Код:
*buff_3 = _BH;
...
*buff_3+1 = _BH;
...
*buff_3+2 = _BH;
...
*buff_3+3 = _BH;

И для работы с портами лучше использовать команды HAL подобные ReadPortUchar(), почитайте об этом, в DDK например.
28K
30 апреля 2009 года
MadGest
45 / / 04.04.2009
Извиняюсь за отступы. Моя беда. Всегда меня ругали за это, когда с кем то вместе в команде работал. Попробую как Вы написали. Если что напишу.

Попробовал.

DDK Error выдает в *buff+1.
14
04 мая 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: MadGest

DDK Error выдает в *buff+1.


Я ж написал что это на псевдоязыке.
Если понятней будет так, то вот:

 
Код:
*buff_3[0] = _BH;
...
*buff_3[1] = _BH;
...
*buff_3[2] = _BH;
...
*buff_3[3] = _BH;
28K
05 мая 2009 года
MadGest
45 / / 04.04.2009
С такой конструкцией тоже пробовал, он возвращает только последнее значение . Хотя в программе пишу размер переменной 4*unsigned char.
14
06 мая 2009 года
Phodopus
3.3K / / 19.06.2008
.InputBufferLength, .OutputBufferLength поменялись на 4?
28K
07 мая 2009 года
MadGest
45 / / 04.04.2009
Проверю. Отпишусь. )
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог