USB-WriteFile



  • Hi,

    weiß jmd von euch, warum mein Write-Request zu einem USB-HID überhaupt keinen Etrag bringt?

    Als Returnwert wird 0 zurückgegeben, kein Fehler oder ähnliches. Mit einem USB-Sniffer sehe ich zwar dass Kommunikation während der Initialisierung vorhanden ist und das Device auch richtig im Device-Manager erkannt und initialisiert wurde, aber beim WriteFile() Request passiert gar nichts 😞

    ok = WriteFile(devhandle, &OutReport[0], 3, &cnt, NULL);
    

    Das Handle bekomme ich ohne Probleme (VID etc. stimmen überein). Als Outputbuffer-Größe wird 2Bytes angegeben und unsigned char OutReport[3]; sollte dann ja eigentlich richtig sein, oder?

    /* Create File for Device Write */
    	devhandle = CreateFile(DevDetailData[number]->DevicePath, 
                             GENERIC_WRITE, 
                             FILE_SHARE_READ | FILE_SHARE_WRITE, 
                             (LPSECURITY_ATTRIBUTES)NULL,
                             OPEN_EXISTING, 
                             0, 
                             NULL
                             );
    
    	if (devhandle == INVALID_HANDLE_VALUE) 
    		return (FALSE);
    

    Vielleicht hat jmd von euch noch ein paar Infos für mich oder einen Tipp!

    Gruß
    Steffen



  • ok hab grad gefunden, dass es anscheinend unter Windows nicht möglich ist auf ein System-Keyboard mit WriteFile() ReadFile() zuzugreifen, auch wenn man ein Handle bekommt mit meinem obigen Aufruf.

    D.h. ich muss einen weiteren Report Descriptor anlegen, "custom-made" über den ich dann Daten senden und empfangen kann? Und nur Windows selbst kann bei einem Keyboard z.B. Daten an dieses schicken, so dass die LEDs leuchten???

    Steffen



  • Hallo.

    Die LED für NUM kannst Du wie folgt einschalten:

    INPUT daten[2];
    
    	daten[0].type = INPUT_KEYBOARD;
    	daten[0].ki.dwFlags = 0;
    	daten[0].ki.wVk = 144;
    	daten[0].ki.wScan = 144;
    	daten[0].ki.dwExtraInfo = GetMessageExtraInfo();
    	daten[0].ki.time = GetMessageTime();
    
    	daten[1].type = INPUT_KEYBOARD;
    	daten[1].ki.dwFlags = KEYEVENTF_KEYUP;
    	daten[1].ki.wVk = 144;
    	daten[1].ki.wScan = 144;
    	daten[1].ki.dwExtraInfo = GetMessageExtraInfo();
    	daten[1].ki.time = GetMessageTime();
    	SendInput(2,daten,sizeof(INPUT));
    

    144 ist Num-Taste
    20 ist CAB-Look
    145 Rollen

    Gruß

    Oli_1977


Anmelden zum Antworten