WDK Probleme bei HID USB Kommunikation



  • Hallo,

    Ich habe Probleme mit der Kommunikation eines USB HID-Gerätes.

    Unter anderem habe ich das hier: http://www.c-plusplus.net/forum/viewtopic-var-p-is-446917.html schon versucht.

    Allerdings bekomme ich immer nur den ersten Buchstaben von Device-Description und Name des CreateFiles...

    Kann mir jemand sagen woran das liegt?



  • Ich hab jetzt einfach mal das Projekt auf Release gestellt und statt printf cout genommen.

    Jetzt bekomme ich nicht mehr nur das erste Zeichen, sondern Zahlen wie 0x002F7DBC sowohl in der Device-Description als auch in dem Namen der Createfile... Ist das normal?

    Welche lib-Datei muss ich denn unter Vista einbinden? Vielleicht liegt es ja auch daran.

    PS: Ich benutze VC2008 und wenn ich das Projekt unter Debug kompilieren kommen RTC-Linkerfehler, wenn ich diese ignoriere, kompiliert er mir zwar das Projekt, aber ich bekomme dann beim Ausführen einen Fehler, dass die msvcirtd.dll nicht gefunden wurde!

    Mit den libcp*.lib und libc*.lib habe ich schon rumgespielt, aber leider ohne Erfolg!



  • diese zahlen sehen so aus als versuchtest du einen pointer auszugeben anstatt dessen inhalt.

    char *test="abcdefg";
    cout<<test<<endl;
    

    entweder du erstellst ein anderes objekt (z.B. einen std::string für char*) oder du gehst alles in einer schleife durch.



  • Wenn ich aber den Mauszeiger beim Debuggen über die Variable lege, dann sehe ich zwar den kompletten String, allerdings ist auf dem kleinen Plus dann auch nur ein Index und zwar das des ersten Zeichens zu sehen...



  • Kann mir wirklich niemand helfen?

    Anbei der Code:

    #include <iostream.h>
    //#include <stdio.h>
    #include <windows.h>
    #include <setupapi.h>
    extern "C" {
    #include <hidsdi.h>
    }
    
    int main()
    {
        PSP_DEVICE_INTERFACE_DETAIL_DATA pspdidd;
        SP_DEVICE_INTERFACE_DATA         spdid;
        SP_DEVINFO_DATA                  spdd;
        HDEVINFO                         hDevInfo;
        DWORD                            dwIndex, dwSize, dwType;
        TCHAR                            szProperty[256];
        GUID                             guid;
    
        ZeroMemory(&spdid, sizeof(spdid));
        spdid.cbSize = sizeof(spdid);
        HidD_GetHidGuid(&guid);
        hDevInfo = SetupDiGetClassDevs(&guid,
                                       NULL,
                                       NULL,
                                       DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
    
        if(hDevInfo == INVALID_HANDLE_VALUE)
        {
            cout << "SetupDiGetClassDevs failed, Error " << GetLastError() << endl;
            return(FALSE);
        }
    
        for(dwIndex = 0; (SetupDiEnumDeviceInterfaces(hDevInfo,
                                                      NULL,
                                                      &guid,
                                                      dwIndex,
                                                      &spdid)); dwIndex++)
        {
            cout << "Geraete-Index: " << dwIndex << endl << endl;
            dwSize = 0;
    
            SetupDiGetDeviceInterfaceDetail(hDevInfo,
                                            &spdid,
                                            NULL,
                                            0,
                                            &dwSize,
                                            NULL);
    
            if(dwSize)
            {
                if(NULL == (pspdidd = (PSP_DEVICE_INTERFACE_DETAIL_DATA)HeapAlloc(GetProcessHeap(),
                                                                                  HEAP_ZERO_MEMORY,
                                                                                  dwSize)))
                    continue;
    
                pspdidd->cbSize = sizeof(*pspdidd);
    
                ZeroMemory((PVOID)&spdd, sizeof(spdd));
                spdd.cbSize = sizeof(spdd);
    
                if(SetupDiGetDeviceInterfaceDetail(hDevInfo,
                                                   &spdid,
                                                   pspdidd,
                                                   dwSize,
                                                   &dwSize,
                                                   &spdd))
                {
                    cout  << "Name fuer CreateFile(): " << pspdidd->DevicePath << endl << endl;
                    if(SetupDiGetDeviceRegistryProperty(hDevInfo,
                                                        &spdd,
                                                        SPDRP_FRIENDLYNAME,
                                                        &dwType,
                                                        (PBYTE)szProperty,
                                                        sizeof(szProperty),
                                                        NULL))
                    {
                        if(dwType == REG_SZ)
                        {
                            cout << "FriendlyName: " << szProperty << endl << endl;
                        }
                    }
                    if(SetupDiGetDeviceRegistryProperty(hDevInfo,
                                                        &spdd,
                                                        SPDRP_DEVICEDESC,
                                                        &dwType,
                                                        (PBYTE)szProperty,
                                                        sizeof(szProperty),
                                                        NULL))
                    {
                        if(dwType == REG_SZ)
                        {
                            cout << "DeviceDescription: " << szProperty << endl << endl;
                        } } }
                HeapFree(GetProcessHeap(), 0, pspdidd);
           } }
        SetupDiDestroyDeviceInfoList(hDevInfo);
    	system("pause");
        return(TRUE);
    }
    

    Das Projekt muss ich unter Release kompilieren, da ich sonst RTC-Linkerfehler bekomme...
    Wenn ich aber unter Release mit dem Mauszeiger über eine Variable gehe bekomme ich keine Informationen mehr, aber ich glaube das ist klar oder?



  • Kann mir denn wirklich niemand helfen?

    Bin ich der einzige, der das Problem hat?


Anmelden zum Antworten