Помогите с драйвером...
Заранее спасибо!
Как через METHOD_BUFFERED передать массив? Также как и через ReadFile, в чем проблема-то?
Мне стыдно признаться, но я просто не знаю как передать массив через драйвер, и нигде не могу найти примера реализации такого. Может посоветуете чего? Или вариант реализации. Буду искренне благодарен, ибо огромная потребность в данной информации.
Ну или как-то скорректируйте вопрос, возможно мы не понимем друг друга.
В общем такая штука . Там Вы увидите инструкции 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;
Вот вроде бы и все. Еще раз спасибо. (тоже заранее :-) ) Жду ответа.
Код:
*buff_3 = _BH;
Тоесть байт в буфер. Ну так и что мешает передавать DeviceIOControl буфер в 4 байта, а в драйвере писать эти самые 4 байта. На псевдоязыке:
Код:
*buff_3 = _BH;
...
*buff_3+1 = _BH;
...
*buff_3+2 = _BH;
...
*buff_3+3 = _BH;
...
*buff_3+1 = _BH;
...
*buff_3+2 = _BH;
...
*buff_3+3 = _BH;
И для работы с портами лучше использовать команды HAL подобные ReadPortUchar(), почитайте об этом, в DDK например.
Попробовал.
DDK Error выдает в *buff+1.
Цитата: MadGest
DDK Error выдает в *buff+1.
Я ж написал что это на псевдоязыке.
Если понятней будет так, то вот:
Код:
*buff_3[0] = _BH;
...
*buff_3[1] = _BH;
...
*buff_3[2] = _BH;
...
*buff_3[3] = _BH;
...
*buff_3[1] = _BH;
...
*buff_3[2] = _BH;
...
*buff_3[3] = _BH;
С такой конструкцией тоже пробовал, он возвращает только последнее значение . Хотя в программе пишу размер переменной 4*unsigned char.
.InputBufferLength, .OutputBufferLength поменялись на 4?
Проверю. Отпишусь. )