[?]ConsoleApp sendet text zu avr mit cap/num/scroll und soll Antwort über keystrokes empfangen



  • Hallo,
    ich habe folgendes Problem:
    Eine ConsoleApp liest eine Zeile mit getline ein und sendet den Text zu einem AVR über die Capslock,Numlock und Scrollock Keyboard flags. (Grund: com port auf Projekt Rechner gsperrt).
    Das funktioniert soweit ausreichend.

    Numlock = Data 1
    Capslock = Data 2
    Scrolllock = CLK

    Nun bräuchte ich aber vom avr auch eine Antwort. Dieser kann zZ entwerder Seriell (geht eben nicht, da COM port gesperrt), oder als HID Keyboard antworten.

    Wie würdet ihr das realisieren?
    Die Antwort endet ebenfalls mit '\n' und jetzt soll die Antwort vom avr nicht wieder zu diesem geschickt werden 😉

    Hier das Programm, das ich zZ habe:

    #include <iostream>
    #include <string>
    #include <bitset>
    #include <Windows.h>
    
    const int ClockSpeed = 10;
    const int Delay = 1000 / ClockSpeed;
    
    void SetCapsLock(BOOL bState)
    {
     GetKeyState(0);
     Sleep(8);
     GetKeyState(0);
     Sleep(8);
     BYTE keyState[256];
     GetKeyboardState((LPBYTE)&keyState);
     if((bState&&!(keyState[VK_CAPITAL]&1)) || (!bState && (keyState[VK_CAPITAL]&1)))
     {
     keybd_event(VK_CAPITAL,
     0,
     KEYEVENTF_EXTENDEDKEY | 0,
     0);
    
     keybd_event(VK_CAPITAL,
     0,
     KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
     0);
     }
    }
    
    void SetNumLock(BOOL bState)
    {
     GetKeyState(0);
     Sleep(8);
     GetKeyState(0);
     Sleep(8);
     BYTE keyState[256];
    
     GetKeyboardState((LPBYTE)&keyState);
     if((bState&&!(keyState[VK_NUMLOCK]&1)) || (!bState && (keyState[VK_NUMLOCK]&1)))
     {
     keybd_event(VK_NUMLOCK,
     0,
     KEYEVENTF_EXTENDEDKEY | 0,
     0);
    
     keybd_event(VK_NUMLOCK,
     0,
     KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
     0);
     }
    }
    
    void SetScrollLock(BOOL bState)
    {
     GetKeyState(0);
     Sleep(8);
     GetKeyState(0);
     Sleep(8);
     BYTE keyState[256];
    
     GetKeyboardState((LPBYTE)&keyState);
     if((bState&&!(keyState[VK_SCROLL]&1)) || (!bState && (keyState[VK_SCROLL]&1)))
     {
     keybd_event(VK_SCROLL,
     0,
     KEYEVENTF_EXTENDEDKEY | 0,
     0);
    
     keybd_event(VK_SCROLL,
     0,
     KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
     0);
     }
    }
    
    std::bitset<8> ToBits(unsigned char byte)
    {
     return std::bitset<8>(byte);
    }
    
    int main(int argc, char** argv) 
    {
     bool loopflag = true;
    
     while(loopflag) {
    
     SetCapsLock(false);
     SetNumLock(false);
     SetScrollLock(false);
    
     std::cout << "Enter string:";
     std::string s;
     std::getline(std::cin, s);
    
     s = s + '\n';
    
     if (s=="-q") {
     loopflag=false;
     break;
     }
    
     for (std::size_t i=0; i< s.size(); i++)
     {
     std::bitset<8> v8 = std::bitset<8>(s.c_str()[i]);
     for (int j=0; j<8; j+= 2)
     {
     //Set data lines
     SetNumLock(v8[j]);
     SetCapsLock(v8[j+1]);
    
     //Cycle Clock
     Sleep(Delay/3);
     SetScrollLock(true);
     Sleep(Delay/3);
     SetScrollLock(false);
     Sleep(Delay/3);
    
     }
    } 
    
     SetCapsLock(false);
     SetNumLock(false);
     SetScrollLock(false);
    
     }
    
    }
    

    Dank für Eure Hilfe schon mal.


Log in to reply