Auf Knopfdruck reagieren



  • Hallo zusammen,

    ich hab folgendes Problem/Programm

    ...
    while ( true )
    {
        data = usbInterface.read( );
        if ( data[0] == 1 )
        {
            ...
        }
    }
    ...
    

    das geht auch ohne Probleme, immer wenn das USB Interface was schreibt, dann bekomm ich ne Meldung.

    Jetzt würde ich aber z.B. gerne auch an das USB Gerät schreiben. also wenn z.B. die Taste 1 gedrückt wird soll

    usbInterface.write ( LED_1_ON );
    

    geschrieben werden. Wie mach ich das denn? VOn Multithreading oder sowas hab ich noch keine Ahnung 🙂

    Grüße Nils



  • Lies die doku des usbInterface.



  • dann müsste ich ne doku schreiben, denn das ding kommt von mir 🙂 ... es geht ja cuh anicht ums interface, sondern wie ich gelichzeitig dieses while true haben kann aber trotzdem irgendwo auf tastatureingaben reagieren kann.



  • Normale Eingabe über Standard-Methoden ist gepuffert - das heißt erst beim ENTER wird die Eingabe an dein Programm weitergeleitet (das mußt du dann selber per cin entgegennehmen).

    Wenn du sofort auf Tastendrücke reagieren willst, müsstest du auf Systemfunktionen zurückgreifen, z.B kbhit()/getch() oder GetAsyncKeyState().



  • wie funktioniert dein read intern ?

    kannst du es nicht blockend bauen (ist es ueberhaupt blockend ? ), also das es drueberlauft und dir die info gibt das nix im "puffer" war ?

    dann kommst du unter umstaenden um multithreading (im hauptprogramm) drumherum.
    Wenn das nicht willst / geht, dann kommst um multithreading eh ned herum ...

    ciao ...



  • Also mein Read() sieht so aus:

    unsigned long usbInterface::read( BYTE* input ) 
    {     
    	unsigned long BytesRead;
        if ( connected ) 
        { 
    		if ( ReadFile( DeviceHandle, input, Capabilities.InputReportByteLength, &BytesRead, NULL ) )
    		{
    			return BytesRead;
    		}
        } 
        return 0; 
    }
    

    und gibt die Anzahl der gelesenen Bytes zurück. Hatte es im oberen Beispiel ein wenig vereinfacht dargstellt.


Anmelden zum Antworten