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

 
 
> Задерживаются данные при записи 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



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

 


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


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