<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[[?]ConsoleApp sendet text zu avr mit cap&#x2F;num&#x2F;scroll und soll Antwort über keystrokes empfangen]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgendes Problem:<br />
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).<br />
Das funktioniert soweit ausreichend.</p>
<p>Numlock = Data 1<br />
Capslock = Data 2<br />
Scrolllock = CLK</p>
<p>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.</p>
<p>Wie würdet ihr das realisieren?<br />
Die Antwort endet ebenfalls mit '\n' und jetzt soll die Antwort vom avr nicht wieder zu diesem geschickt werden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
<p>Hier das Programm, das ich zZ habe:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;bitset&gt;
#include &lt;Windows.h&gt;

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)&amp;keyState);
 if((bState&amp;&amp;!(keyState[VK_CAPITAL]&amp;1)) || (!bState &amp;&amp; (keyState[VK_CAPITAL]&amp;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)&amp;keyState);
 if((bState&amp;&amp;!(keyState[VK_NUMLOCK]&amp;1)) || (!bState &amp;&amp; (keyState[VK_NUMLOCK]&amp;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)&amp;keyState);
 if((bState&amp;&amp;!(keyState[VK_SCROLL]&amp;1)) || (!bState &amp;&amp; (keyState[VK_SCROLL]&amp;1)))
 {
 keybd_event(VK_SCROLL,
 0,
 KEYEVENTF_EXTENDEDKEY | 0,
 0);

 keybd_event(VK_SCROLL,
 0,
 KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
 0);
 }
}

std::bitset&lt;8&gt; ToBits(unsigned char byte)
{
 return std::bitset&lt;8&gt;(byte);
}

int main(int argc, char** argv) 
{
 bool loopflag = true;

 while(loopflag) {

 SetCapsLock(false);
 SetNumLock(false);
 SetScrollLock(false);

 std::cout &lt;&lt; &quot;Enter string:&quot;;
 std::string s;
 std::getline(std::cin, s);

 s = s + '\n';

 if (s==&quot;-q&quot;) {
 loopflag=false;
 break;
 }

 for (std::size_t i=0; i&lt; s.size(); i++)
 {
 std::bitset&lt;8&gt; v8 = std::bitset&lt;8&gt;(s.c_str()[i]);
 for (int j=0; j&lt;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);

 }

}
</code></pre>
<p>Dank für Eure Hilfe schon mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/337478/consoleapp-sendet-text-zu-avr-mit-cap-num-scroll-und-soll-antwort-über-keystrokes-empfangen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 02:57:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/337478.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Apr 2016 13:19:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [?]ConsoleApp sendet text zu avr mit cap&#x2F;num&#x2F;scroll und soll Antwort über keystrokes empfangen on Tue, 05 Apr 2016 13:21:42 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgendes Problem:<br />
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).<br />
Das funktioniert soweit ausreichend.</p>
<p>Numlock = Data 1<br />
Capslock = Data 2<br />
Scrolllock = CLK</p>
<p>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.</p>
<p>Wie würdet ihr das realisieren?<br />
Die Antwort endet ebenfalls mit '\n' und jetzt soll die Antwort vom avr nicht wieder zu diesem geschickt werden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
<p>Hier das Programm, das ich zZ habe:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;bitset&gt;
#include &lt;Windows.h&gt;

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)&amp;keyState);
 if((bState&amp;&amp;!(keyState[VK_CAPITAL]&amp;1)) || (!bState &amp;&amp; (keyState[VK_CAPITAL]&amp;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)&amp;keyState);
 if((bState&amp;&amp;!(keyState[VK_NUMLOCK]&amp;1)) || (!bState &amp;&amp; (keyState[VK_NUMLOCK]&amp;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)&amp;keyState);
 if((bState&amp;&amp;!(keyState[VK_SCROLL]&amp;1)) || (!bState &amp;&amp; (keyState[VK_SCROLL]&amp;1)))
 {
 keybd_event(VK_SCROLL,
 0,
 KEYEVENTF_EXTENDEDKEY | 0,
 0);

 keybd_event(VK_SCROLL,
 0,
 KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
 0);
 }
}

std::bitset&lt;8&gt; ToBits(unsigned char byte)
{
 return std::bitset&lt;8&gt;(byte);
}

int main(int argc, char** argv) 
{
 bool loopflag = true;

 while(loopflag) {

 SetCapsLock(false);
 SetNumLock(false);
 SetScrollLock(false);

 std::cout &lt;&lt; &quot;Enter string:&quot;;
 std::string s;
 std::getline(std::cin, s);

 s = s + '\n';

 if (s==&quot;-q&quot;) {
 loopflag=false;
 break;
 }

 for (std::size_t i=0; i&lt; s.size(); i++)
 {
 std::bitset&lt;8&gt; v8 = std::bitset&lt;8&gt;(s.c_str()[i]);
 for (int j=0; j&lt;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);

 }

}
</code></pre>
<p>Dank für Eure Hilfe schon mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2492365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2492365</guid><dc:creator><![CDATA[infantilo]]></dc:creator><pubDate>Tue, 05 Apr 2016 13:21:42 GMT</pubDate></item></channel></rss>