Форум программистов, компьютерный форум CyberForum.ru

Отправка команда на HID - C++

Восстановить пароль Регистрация
 
Daemon2017
 Аватар для Daemon2017
4 / 4 / 0
Регистрация: 07.01.2013
Сообщений: 99
11.07.2016, 18:58     Отправка команда на HID #1
Здравствуйте!

Столкнулся с проблемой: нужно работать с устройством через HID репорты.

В документации сказано:
Описание HID репортов.

- Vendor ID 8352 (= 0x20A0 hex).
- Product ID 16738 (= 0x4162 hex).

Все репорты длиной 2 байта.
За исключением репорта 22 используется битовая адресация портов: LowByte – порты с 1 по 8, HighByte – порты с 9 по 16.

Тип ReportID 1 байт 2 байт Описание
Чтение 11 LowByte HighByte Состояние выходов
Чтение 15 LowByte HighByte Состояние входов
Запись 22 0/1 Port № Установка одного выхода (первый байт 0–выключить, 1 –включить)
Сперва пытался написать на C#, но дело не сдвинулось с мертвой точки.

В итоге, используя библиотеку HIDAPI отсюда (https://github.com/signal11/hidapi), мне удалось выполнить задачу - установить порт #1 во включенное состояние, отправив "22 1 1" вот таким образом -

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <wchar.h>
#include <string.h>
#include <stdlib.h>
#include "hidapi.h"
 
int main(int argc, char* argv[])
{
    int res;
    unsigned char buf[256];
    hid_device *handle;
 
    handle = hid_open(0x20A0, 0x4162, NULL); //PID, VID. серийный номер
 
    buf[0] = 0x15; //Номер репорта
    buf[1] = 0x01; //Младший байт
    buf[2] = 0x01; //Старший байт
    res = hid_write(handle, buf, 2); //Куда шлем, что шлем и сколько байт шлем
 
    hid_close(handle);
    hid_exit();
    return 0;
}
Но эта библиотека х32, а мой проект, ввиду зависимости от других х64 библиотек, может быть только х64.

Пожалуйста, подскажите, какими еще путями можно послать эту команду?
Быть может, можно обойтись без библиотеки, или эту библиотеку под х64 собрать, ну или есть другие библиотеки, но под х64?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2016, 18:58     Отправка команда на HID
Посмотрите здесь:

C++ Команда выбора
где найти hid.lib C++
Консольная команда и С++ C++
C++ Команда Make
C++ /C# .Net для работы с USB HID C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
11.07.2016, 21:35     Отправка команда на HID #2
Так ты пробовал собрать x64 вариант? Не получается или что?
Daemon2017
 Аватар для Daemon2017
4 / 4 / 0
Регистрация: 07.01.2013
Сообщений: 99
12.07.2016, 14:46  [ТС]     Отправка команда на HID #3
Пробовал, но ошибок становится неприлично много

Добавлено через 15 часов 57 минут
Проблема решена - использовал библиотеку usbHidCommunication.h
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,476
12.07.2016, 20:28     Отправка команда на HID #4
Попробовал у себя. Сборка отдельно hidapi проходит без ошибок- хоть 32, хоть 64. Только предупреждения. dll создаётся.
Daemon2017
 Аватар для Daemon2017
4 / 4 / 0
Регистрация: 07.01.2013
Сообщений: 99
13.07.2016, 01:52  [ТС]     Отправка команда на HID #5
Хм, а ведь правда - под х64 эта dll создается.

А когда переключаю исполняемый проект на hidtest - пишет, что
Ошибка LNK1104 не удается открыть файл "hidapi.lib"

Заглянул в Ссылки - там hidapi указан по адресу:
C:\Users\Daemon\Downloads\hidapi-master\windows\x64\Debug\hidapi.dll

И он действительно там находится. В чем может быть дело?

Добавлено через 10 минут
Нашел, в чем дело: раньше, для х32, он искал библиотеки в ..\windows\Debug;%(AdditionalLibraryDirectories), а теперь надо искать их в ..\windows\x64\Debug;%(AdditionalLibraryDirectories)

Завтра опробую
Сейчас пишет
Необработанное исключение по адресу 0x00007FFD39E120C8 (hidapi.dll) в hidtest.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x000000000000000C.
Но это вызвано, я так полагаю, отсутствием устройства, VID и PID которого я указал.
Yandex
Объявления
13.07.2016, 01:52     Отправка команда на HID
Ответ Создать тему
Опции темы

Текущее время: 03:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru