Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с HID Устройствами  (Прочитано 20679 раз)
0 Пользователей и 1 Гость смотрят эту тему.
volkov75
Гость
« : 30-12-2007 11:16 » 

Подскажите кто-нибудь работал с HID Устройствами и как это делается, у меня такая проблема приобрели HID устройство с 8 реле, я не пойму как обратиться к ней и заставить работать. Помогите!!!!
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 30-12-2007 16:47 » 

сначала бы определиться что такое HID устройство.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
volkov75
Гость
« Ответ #2 : 30-12-2007 16:59 » 

Плата USB HID 8 система умного дома - системы домашней автоматизации
http://techno.viteprom.ru/usb8.shtml
Записан
Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 30-12-2007 17:08 » 

HID - это судя по всему human input device. Тип USB устройств такой, не требует драйверов, кстати, все уже реализовано в ОС.

Если для Windows, то вот тема на исходниках по этому поводу. Я у них спионерю табличку по типичным вызовам функций для HID Улыбаюсь

Цитата
Типичная процедура общения с custom USB device из юзер-моды
[font=Courier New]---------------------------------------------------
АПИ                             DLL          Смысл
---------------------------------------------------
HidD_GetHidGuid                 hid.dll      Получить GUID для HID класса
SetupDiGetClassDevs             setupapi.dll Получить информацию о классе устройства
SetupDiEnumDeviceInterfaces     setupapi.dll Получить информацию об устройстве
SetupDiGetDeviceInterfaceDetail setupapi.dll Получить путь к устройству
SetupDiDestroyDeviceInfoList    setupapi.dll Освободить ресурсы используемые SetupDiGetClassDevs
CreateFile                      kernel32.dll Открываем коммуникационный файл
HidD_GetAttributes              hid.dll      Получаем Vendor ID, Product ID, Version Number.
HidD_GetPreparsedData           hid.dll      Получаем хэндл к буферу с инфой о возможностях устройства
HidP_GetCaps                    hid.dll      Получаем структуру объясняющую возможности устройства
HidD_FreePreparsedData          hid.dll      Освобождаем ресурсы используемые HidD_GetPreparsedData   
WriteFile                       kernel32.dll Пишем выходной репорт в девайс
ReadFile                        kernel32.dll Читаем входной репорт из девайса
HidD_SetFeature                 hid.dll      Передаем фичи-репорт в девайс
HidD_GetFeature                 hid.dll      Читаем фичи-репорт из девайса
CloseHandle                     kernel32.dll Освобождаем хэндл
---------------------------------------------------------------
[/font]
« Последнее редактирование: 30-12-2007 17:15 от Scorp__) » Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 30-12-2007 17:13 » 

а службу для HID нужно запускать?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
EDDI
Гость
« Ответ #5 : 05-01-2008 21:58 » 

вот написал а не получается
Код:
////////////////////////////////////////////////////////////
// Hello2.cpp
#include <windows.h>
#include "KWnd.h"
#include <stdio.h>
#include <wtypes.h>
extern "C" {
#include "hidsdi.h"
#include "setupapi.h"
}
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int i = 0;
////////////////////////////////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    MSG msg;
    KWnd mainWnd("A Hello2 application", hInstance, nCmdShow, WndProc);

    while (GetMessage(&msg, NULL, 0, 0))  {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

HRGN hRgn;

////////////////////////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT ps;
    RECT rect;
    char buffer [30];
    char buffer1 [30];
    int userReply;
    HANDLE DeviceHandle;
    GUID
        HidGuid;
    ULONG
        Length;
    HANDLE hDevInfo;
    ULONG
        Required;
    HIDP_CAPS Capabilities;
    HANDLE ReadHandle;
    HANDLE hEventObject;
    OVERLAPPED HIDOverlapped;
    BYTE
        InputReport[21];
    BYTE
        OutputReport[21];
    DWORD
        NumberOfBytesRead;
    PSP_DEVICE_INTERFACE_DETAIL_DATA detailData;
    bool
        DeviceDetected;
    //CHANNELS Channels;
    DWORD WINAPI ReadThread();
    HIDD_ATTRIBUTES Attributes;
    SP_DEVICE_INTERFACE_DATA devInfoData;
    bool
        LastDevice = FALSE;
    int
        MemberIndex = 0;
    bool
        MyDeviceDetected = FALSE;
    LONG
        Result;

    //These are the vendor and product IDs to look for.

    const unsigned int VendorID = 0x3208;
    const unsigned int ProductID = 0x4840;

    Length = 0;
    detailData = NULL;
    DeviceHandle=NULL;
    ULONG inputBuffer;
    /*
    API function: HidD_GetHidGuid
    Get the GUID for all system HIDs.
    Returns: the GUID in HidGuid.
    */

    switch (uMsg)
    {
    case WM_CREATE:

        HidD_GetHidGuid(&HidGuid);
        hDevInfo=SetupDiGetClassDevs
            (&HidGuid, NULL, NULL, DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);

        devInfoData.cbSize = sizeof(devInfoData);
        MemberIndex = 0;
        LastDevice = FALSE;

        //do
        //{
        for(0;i<2;i++){
            MyDeviceDetected=FALSE;
            Result=SetupDiEnumDeviceInterfaces (hDevInfo,
                0, &HidGuid, MemberIndex, &devInfoData);
            if (Result != 0)
            {

                Result = SetupDiGetDeviceInterfaceDetail
                    (hDevInfo, &devInfoData, NULL, 0, &Length, NULL);
                detailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length);
                detailData -> cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
                Result = SetupDiGetDeviceInterfaceDetail
                    (hDevInfo, &devInfoData, detailData, Length, &Required, NULL);

                DeviceHandle=CreateFile
                    (detailData->DevicePath,
                    GENERIC_READ|GENERIC_WRITE,
                    FILE_SHARE_READ|FILE_SHARE_WRITE,
                    NULL,
                    OPEN_EXISTING,
                    0,
                    NULL);


                Attributes.Size = sizeof(Attributes);
                Result = HidD_GetAttributes
                    (DeviceHandle,
                    &Attributes);
                MyDeviceDetected = FALSE;

                HidD_GetNumInputBuffers(DeviceHandle,&inputBuffer);
                MemberIndex++;

            }
        }
        //} //do
        //while ((LastDevice != FALSE) && (MyDeviceDetected == FALSE));

        break;
    case WM_PAINT:
        hDC = BeginPaint(hWnd, &ps);


        GetClientRect(hWnd, &rect);
        // DrawText(hDC, "Hello, World!", -1, &rect,
        // DT_SINGLELINE | DT_CENTER | DT_VCENTER );

        sprintf(buffer,"HidName= %d",detailData->DevicePath);
        TextOut(hDC, 10,10, buffer,10 );

        sprintf(buffer1,"VendorID= %d,    ProductID=%d,   VersionNumber=%d\0",Attributes.VendorID,Attributes.ProductID,Attributes.VersionNumber);
        TextOut(hDC, 10,30, buffer1,59 );

        sprintf(buffer,"×èñëî âõîäíûõ áóôåðîâ= %d",&inputBuffer);
        TextOut(hDC, 10,50, buffer,40 );

        EndPaint(hWnd, &ps);
        break;

    case WM_CLOSE:
        SetupDiDestroyDeviceInfoList(hDevInfo);
        userReply = MessageBox(hWnd, "À âû óâåðåíû â ñâîåì æåëàíèè çàêðûòü ïðèëîæåíèå?",
            "", MB_YESNO | MB_ICONQUESTION);
        if (IDYES == userReply)
            DestroyWindow(hWnd);
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }

    return 0;
}
« Последнее редактирование: 15-02-2008 14:38 от Вад » Записан
EDDI
Гость
« Ответ #6 : 05-01-2008 22:00 » new

дошел до определения VendorID,    ProductID,   VersionNumber
а все равно выводит какуюту туфту не пойму что я написал не так
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines