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

 
 
> Задерживаются данные при записи HIDd_SetFeature, почему?
Rius
сообщение Aug 1 2006, 01:27
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 19-04-05
Пользователь №: 4 283



запаздывание на одну посылку - то что я записал HIDd_SetFeature сейчас, попадает в контроллер только при следующей записи ф-цией HIDd_SetFeature. WriteFile на втором разе просто повисает.
при старте винды в первый раз в контролллер пишется какая-то чушь, потом этот буфер "FIFO" заполняется до двух элементов и поехало...

что посылается в драйвер проверял прогой USB Monitor, что принимает контроллер - проверял поиском нужной посылки во всей его озу.
программа переделана из примера usbhidio.cs
Код
        private void SetFeature(byte []data, byte index)
        {
            FileIOApiDeclarations.SECURITY_ATTRIBUTES Security = new HID_System.FileIOApiDeclarations.SECURITY_ATTRIBUTES();
            bool Success = false;
            bool AlreadyOpened = false;
            if (DevHandle != FileIOApiDeclarations.INVALID_HANDLE_VALUE) AlreadyOpened = true;

            if (!AlreadyOpened)
            {
                // Get another handle to use in overlapped ReadFiles (for requesting Input reports).
                DevHandle = FileIOApiDeclarations.CreateFile(DevInfo.Path,
                    FileIOApiDeclarations.GENERIC_READ | FileIOApiDeclarations.GENERIC_WRITE,
                    FileIOApiDeclarations.FILE_SHARE_READ | FileIOApiDeclarations.FILE_SHARE_WRITE,
                    ref Security,
                    FileIOApiDeclarations.OPEN_EXISTING,
                    FileIOApiDeclarations.FILE_FLAG_OVERLAPPED, 0);
                //int n = 1;
                //Success = HID_System.HidApiDeclarations.HidD_SetNumInputBuffers(DevHandle, n);
                Debug.WriteLine(_MyDebugging.ResultOfAPICall("CreateFile, ReadHandle"));
                Debug.WriteLine("  Returned handle: " + DevHandle.ToString("x") + "h");
            }

            {//передача репорта
                byte[] reportBuffer = new byte[DevInfo.FeatureReportLength];
                for (byte i = 0; i < (DevInfo.FeatureReportLength-1) && i < data.Length; i++) reportBuffer[i+1] = data[i];
                reportBuffer[0] = index;
                //int NumberOfBytesWritten = 0;
                //int Result = FileIOApiDeclarations.WriteFile(DevHandle, ref reportBuffer[0], DevInfo.FeatureReportLength, ref NumberOfBytesWritten, 0);
                Success = HidApiDeclarations.HidD_SetFeature(DevHandle, ref reportBuffer[0], DevInfo.FeatureReportLength);
            }
            if (!AlreadyOpened)
            {
                int Result = FileIOApiDeclarations.CloseHandle(DevHandle);
                Debug.WriteLine(_MyDebugging.ResultOfAPICall("CloseHandle"));
                DevHandle = FileIOApiDeclarations.INVALID_HANDLE_VALUE;
            }
        }
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rius
сообщение Aug 1 2006, 12:55
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 19-04-05
Пользователь №: 4 283



да читал. но это не ReadFile (он рабоатет нормально, как и HidD_GetFeature)

проблема есть при записи - я отсылаю репорт в USB, а контроллер принимает предыдущий отосланный репорт.
пример hclient из Windows XP DDK "работает" также.

либо у pic18f4455 есть какой-то приёмный буфер вне 2 кБ ОЗУ, либо устройство заставляет хост задерживать передачу репортов...

вот лог USB Monitor'a:

отправка пакета репорта повторно
Цитата
000037: Class-Specific Request (DOWN), 01.08.2006 16:27:10.8593750 +29.9843750
Destination: Inrterface, Index 0
Reserved Bits: 34
Request: 0x9
Value: 0x300
Send 0x7 bytes to the device

00 01 03 04 05 06 08 .......

000038: Control Transfer (UP), 01.08.2006 16:27:10.8750000 +0.0156250
Pipe Handle: 0xfdfc0c28
00 01 03 04 05 06 08 .......

Setup Packet
21 09 00 03 00 00 07 00 !.......

Recipient: Inrterface
Request Type: Class
Direction: Host->Device
Request: 0x9 (Unknown)
Value: 0x300
Index: 0x0
Length: 0x7


запрос текущих данных (устанавливаются записью репорта с хоста)
Цитата
000039: Class-Specific Request (DOWN), 01.08.2006 16:27:18.9531250 +8.0781250
Destination: Inrterface, Index 0
Reserved Bits: 34
Request: 0x1
Value: 0x300
Get 0x7 bytes from the device

00 00 00 00 00 00 00 .......

000040: Control Transfer (UP), 01.08.2006 16:27:18.9687500 +0.0156250
Pipe Handle: 0xfdfc0c28
00 01 03 04 05 06 08 .......

Setup Packet
A1 01 00 03 00 00 07 00 Ў.......

Recipient: Inrterface
Request Type: Class
Direction: Device->Host
Request: 0x1 (Unknown)
Value: 0x300
Index: 0x0
Length: 0x7


запись нового репорта
Цитата
000041: Class-Specific Request (DOWN), 01.08.2006 16:27:32.7500000 +13.7812500
Destination: Inrterface, Index 0
Reserved Bits: 34
Request: 0x9
Value: 0x300
Send 0x7 bytes to the device

00 01 AA 04 BB 06 FF ..Є.».я

000042: Control Transfer (UP), 01.08.2006 16:27:32.7656250 +0.0156250
Pipe Handle: 0xfdfc0c28
00 01 AA 04 BB 06 FF ..Є.».я

Setup Packet
21 09 00 03 00 00 07 00 !.......

Recipient: Inrterface
Request Type: Class
Direction: Host->Device
Request: 0x9 (Unknown)
Value: 0x300
Index: 0x0
Length: 0x7


запрос данных (должны были быть изменены вышеуказанной записью репорта, но не изменились)
Цитата
000043: Class-Specific Request (DOWN), 01.08.2006 16:27:35.4531250 +2.6875000
Destination: Inrterface, Index 0
Reserved Bits: 34
Request: 0x1
Value: 0x300
Get 0x7 bytes from the device

00 00 00 00 00 00 00 .......

000044: Control Transfer (UP), 01.08.2006 16:27:35.4531250 +0.0
Pipe Handle: 0xfdfc0c28
00 01 03 04 05 06 08 .......

Setup Packet
A1 01 00 03 00 00 07 00 Ў.......

Recipient: Inrterface
Request Type: Class
Direction: Device->Host
Request: 0x1 (Unknown)
Value: 0x300
Index: 0x0
Length: 0x7


повторная запись нового репорта
Цитата
000045: Class-Specific Request (DOWN), 01.08.2006 16:27:38.7187500 +3.2656250
Destination: Inrterface, Index 0
Reserved Bits: 34
Request: 0x9
Value: 0x300
Send 0x7 bytes to the device

00 01 AA 04 BB 06 FF ..Є.».я

000046: Control Transfer (UP), 01.08.2006 16:27:38.7343750 +0.0156250
Pipe Handle: 0xfdfc0c28
00 01 AA 04 BB 06 FF ..Є.».я

Setup Packet
21 09 00 03 00 00 07 00 !.......

Recipient: Inrterface
Request Type: Class
Direction: Host->Device
Request: 0x9 (Unknown)
Value: 0x300
Index: 0x0
Length: 0x7


запрос данных. они изменились после повторной записи репорта
Цитата
000047: Class-Specific Request (DOWN), 01.08.2006 16:27:40.2812500 +1.5468750
Destination: Inrterface, Index 0
Reserved Bits: 34
Request: 0x1
Value: 0x300
Get 0x7 bytes from the device

00 00 00 00 00 00 00 .......

000048: Control Transfer (UP), 01.08.2006 16:27:40.2812500 +0.0
Pipe Handle: 0xfdfc0c28
00 01 AA 04 BB 06 FF ..Є.».я

Setup Packet
A1 01 00 03 00 00 07 00 Ў.......

Recipient: Inrterface
Request Type: Class
Direction: Device->Host
Request: 0x1 (Unknown)
Value: 0x300
Index: 0x0
Length: 0x7


Сообщение отредактировал Rius - Aug 1 2006, 12:57
Go to the top of the page
 
+Quote Post



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

 


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


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