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

 
 
 
Reply to this topicStart new topic
> Удалось ли кому-то использовать обертку, для hidapi (например hidapi-0.7.0), нужна помощь
smk
сообщение Sep 24 2012, 13:40
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



По ссылке https://github.com/signal11/hidapi/downloads можно скачать библиотечку. Внутри архива есть проект под Visual Studio, но скомпилировать файлик (например консолдьное приложение) не получается. Попытка бороться с сообщениями об ошибке дает новые ошибки. Подскажите как заставить работать пример или может поможет кто сделать новый проект на этой основе? Спасибо.

Прикрепленный файл  hidapi_0.7.0.zip ( 1.56 мегабайт ) Кол-во скачиваний: 77


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Pat
сообщение Sep 24 2012, 14:28
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Цитата(smk @ Sep 24 2012, 15:40) *
Подскажите как заставить работать пример или может поможет кто сделать новый проект на этой основе? Спасибо.

Прикрепленный файл  hidapi_0.7.0.zip ( 1.56 мегабайт ) Кол-во скачиваний: 77


Скачал зпустил, проект собрался вообще без вопросов.
Использовал VS 2008 WinXpSP3 с уже установленным Win DDK.

Сам использовал вот это чудо http://www.pjrc.com/teensy/rawhid.html
Просто и со вкусом, для него нужно установить Win DDK.

Что то мне подсказывает, что и Вашем случае не хватает DDK.
Go to the top of the page
 
+Quote Post
smk
сообщение Sep 24 2012, 16:09
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Не могу найти DDK чтоб под 2000 и под ХР тоже. Можно конечно скачать с сайта мелкософта, но там без 2000-ки.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Sep 25 2012, 07:58
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Поставил WDK 7.1, все собралось. Спасибо. Вопрос в том, будет ли программа для общения с HID, изготовленная под ХР работать под 2000?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
Pat
сообщение Sep 27 2012, 15:50
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Цитата(smk @ Sep 25 2012, 09:58) *
Поставил WDK 7.1, все собралось. Спасибо. Вопрос в том, будет ли программа для общения с HID, изготовленная под ХР работать под 2000?

Должно работать, но надо пробовать.
Если принять во внимание, что Хиду уже сто лет в обед, то врядли там поменяли интерфейс.

Go to the top of the page
 
+Quote Post
Lotor
сообщение Oct 1 2012, 12:14
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(smk @ Sep 25 2012, 11:58) *
Вопрос в том, будет ли программа для общения с HID, изготовленная под ХР работать под 2000?

Смотря какие api функции Вы будете использовать:
w2k не поддерживает HidD_GetInputReport/HidD_SetOutputReport/HidD_GetMsGenreDescriptor


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 12 2013, 17:07
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(Pat @ Sep 24 2012, 16:28) *
Скачал зпустил, проект собрался вообще без вопросов.
Использовал VS 2008 WinXpSP3 с уже установленным Win DDK.

Сам использовал вот это чудо http://www.pjrc.com/teensy/rawhid.html
Просто и со вкусом, для него нужно установить Win DDK.

Что то мне подсказывает, что и Вашем случае не хватает DDK.

А как Вы его используете? Там же под АВРки исходники или я что-то не увидел? Попробовал http://embedded24.net/index.html Получается, но как я понимаю это нужно покупать иначе жди подвоха. В связи с моими симпатиями к VS2010 C# можно узнать кто чем пользуется для работы с USB HID в приложениях Windows Form? Буду благодарен за пример.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Jan 14 2013, 04:52
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Для C# я перерыл штук 5 библиотек. Остановился на вот этой: https://github.com/mikeobrien/HidLibrary. hidapi тоже используется, но под linux.
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 15 2013, 17:20
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(andrewlekar @ Jan 14 2013, 06:52) *
Для C# я перерыл штук 5 библиотек. Остановился на вот этой: https://github.com/mikeobrien/HidLibrary. hidapi тоже используется, но под linux.

Да, мне тоже он попадался. Но не все решения удается построить. В частности удается построить и запустить GriffinPowerMateWindowsForms, но 21 ошибка (хоть и запускается) пугает. Как у Вас с этим?


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Jan 16 2013, 04:50
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Я все решения и не пытался построить. Погонял TestHarness (если не ошибаюсь), понял, что всё работает как надо, собрал библиотку HidLibrary и перетащил в свой проект.
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 16 2013, 16:48
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(andrewlekar @ Jan 16 2013, 06:50) *
Я все решения и не пытался построить. Погонял TestHarness (если не ошибаюсь), понял, что всё работает как надо, собрал библиотку HidLibrary и перетащил в свой проект.

А можно подробней? Желательно ткнуть носом как обмениваться репортами и какими буферами пользоваться? В целом мне достаточно найти свое устройство и получить указатель на него, открыть его для обращения. Отправить InReport, Feature Report. Запросить OutReport и Feature Report. Буду рад примерам. Спасибо.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Jan 17 2013, 05:14
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Feature Report я не использую, а примеров хватает в этом самом проекте.
Вот так у меня делается енумерация:

Код
private void RefreshDevices()
        {
            devices.Clear();

            if ((selectedDevice != null) && selectedDevice.IsOpen)
                selectedDevice.CloseDevice();

            foreach (HidDevice dev in HidDevices.Enumerate(0x1FC9, 0x204F))
            {
                MyUsbDevice newDevice = new MyUsbDevice();
                newDevice.device = dev;
                newDevice.hasSerial = false;
                newDevice.serialId = "";

                devices.Add(newDevice);
            }

            foreach (MyUsbDevice dev in devices)
            {
                if (!dev.hasSerial)
                {
                    dev.device.OpenDevice();
                    DeviceReadSerial(dev);
                    dev.device.CloseDevice();
                }
            }

            comboBox1.Items.Clear();
            int index = 0;
            foreach (MyUsbDevice dev in devices)
            {
                if (dev.hasSerial)
                {
                    UsbDeviceInfo inf = new UsbDeviceInfo();
                    inf.index = index;
                    inf.info = "Redut RS-232 #" + dev.serialId;
                    comboBox1.Items.Add(inf);
                }
                
                index++;
            }

            if (comboBox1.Items.Count > 0) comboBox1.SelectedIndex = 0;
        }


Как видно, енумерация непростая: на одном VID/PID могут сидеть несколько девайсов, поэтому дополнительно запрашивается инфа о номере устройства.

Вот примерно так по мнению автора проекта обслуживается устройство:

Код
private void Devices_SelectedIndexChanged(object sender, EventArgs e)
        {
            UsbDeviceInfo item = (UsbDeviceInfo)comboBox1.SelectedItem;

            int index = item.index;

            try
            {
                MyUsbDevice dev = devices[index];
                selectedDevice = dev.device;
                selectedDevice.OpenDevice();

                Output.AppendText(">USB device opened\r\n");

                selectedDevice.MonitorDeviceEvents = true;
                selectedDevice.Inserted += Device_Inserted;
                selectedDevice.Removed += Device_Removed;

                selectedDevice.ReadReport(ReadProcess);
            }
            catch (Exception)
            {
                RefreshDevices();
            }
        }

        private void ReadProcess(HidReport report)
        {
            BeginInvoke(new ReadHandlerDelegate(ReadHandler), new object[] { report });
        }

        private void ReadHandler(HidReport report)
        {
            if(selectedDevice == null)
                return;

            if(!selectedDevice.IsOpen)
                return;

            if(!selectedDevice.IsConnected)
                return;

            //configuration packet
            if (report.Data[0] == 2)
            {
                int length = report.Data[1];

                Output.AppendText("<data: 02 " + length);

                for (int i = 0; i < length; i++)
                {
                    Output.AppendText("" + (char)(report.Data[i + 2]));
                }

                Output.AppendText("\r\n");
            }

            //virtual UART packet
            if (report.Data[0] == 0)
            {
                int length = report.Data[1];

                Output.AppendText("<data: 00 " + length);
                String data = "";

                for (int i = 0; i < length; i++)
                {
                    data += (char)(report.Data[i + 2]);
                }

                Output.AppendText(data);
                Output.AppendText("\r\n");

                if(Linked)
                    serialPort1.Write(report.Data, 2, length);
            }

            //Redut packet
            if (report.Data[0] == 1)
            {
                int length = report.Data[1];

                Output.AppendText("<data: 01 " + length);

                for (int i = 0; i < length; i++)
                {
                    Output.AppendText(String.Format("{0:X2}", report.Data[i + 2]));
                }

                Output.AppendText("\r\n");

                if (Linked)
                {
                    serialPort1.Write(report.Data, 2, length);

                    Output.AppendText(">port: ");

                    for (int i = 0; i < length; i++)
                    {
                        Output.AppendText(String.Format("{0:X2}", report.Data[i + 2]));
                    }

                    Output.AppendText("\r\n");
                }
            }

            selectedDevice.ReadReport(ReadProcess);
        }

        private void Device_Inserted()
        {
            if (InvokeRequired)
            {
                BeginInvoke(new Action(Device_Inserted));
                return;
            }

            if (selectedDevice == null)
                return;

            if (!selectedDevice.IsOpen)
                selectedDevice.OpenDevice();

            selectedDevice.ReadReport(ReadProcess);

            if (Linked)
            {
                if (!serialPort1.IsOpen)
                {
                    serialPort1.Open();
                    //serialPort1.DiscardInBuffer();
                    //serialPort1.DiscardOutBuffer();
                    Output.AppendText(">Serial port opened\r\n");
                }
            }

            Output.AppendText(">Connected\r\n");
        }

        private void Device_Removed()
        {
            if (InvokeRequired)
            {
                BeginInvoke(new Action(Device_Removed));
                return;
            }

            if (Linked)
            {
                serialPort1.Close();
            }

            Output.AppendText(">Disconnected\r\n");

            if (selectedDevice != null)
            {
                selectedDevice.CloseDevice();
                Output.AppendText(">Serial port closed\r\n");
            }
        }


Не очень удобно, но вполне работоспособно.
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 19 2013, 12:25
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Код
            //virtual UART packet
            if (report.Data[0] == 0)
            {
                int length = report.Data[1];

                Output.AppendText("<data: 00 " + length);
                String data = "";

                for (int i = 0; i < length; i++)
                {
                    data += (char)(report.Data[i + 2]);
                }

                Output.AppendText(data);
                Output.AppendText("\r\n");

                if(Linked)
                    serialPort1.Write(report.Data, 2, length);
            }

            //Redut packet
            if (report.Data[0] == 1)
            {
                int length = report.Data[1];

                Output.AppendText("<data: 01 " + length);

                for (int i = 0; i < length; i++)
                {
                    Output.AppendText(String.Format("{0:X2}", report.Data[i + 2]));
                }

                Output.AppendText("\r\n");

                if (Linked)
                {
                    serialPort1.Write(report.Data, 2, length);

                    Output.AppendText(">port: ");

                    for (int i = 0; i < length; i++)
                    {
                        Output.AppendText(String.Format("{0:X2}", report.Data[i + 2]));
                    }

                    Output.AppendText("\r\n");
                }
            }


Эти части кода как я понимаю, не являются необходимыми?

А вот такая штука Вам не попадалась? Прикрепленный файл  USB_Generic_HID_reference_application_3_0_0_0.zip ( 99.36 килобайт ) Кол-во скачиваний: 73




--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 20 2013, 08:26
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Вот еше нашел проектик. Однако часто там выскакивают окошки об ошибках. Ошибка всегда одна - как я понимаю либо закрывается устройство раньше чем нужно либо как-то теряется указатель на него. Но в любом случае думаю стоит внимания. Может кто уже разбирался в нем и может что подсказать? Спасибо.
Прикрепленный файл  generic_hid_cs_50.zip ( 121.24 килобайт ) Кол-во скачиваний: 72


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 04:08
Рейтинг@Mail.ru


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