gerade auf dem Raspi (Raspbian Jessie) hab ich einiges (!!!) an source codes durchgetestet, bis was funktionierendes dabei war.
Letztlich funktioniert hat dieses hier:
Code:
/*
* rpiconio.h
* mimics kbhit(), getch()
*/
#ifndef RPICONIO_H
#define RPICONIO_H
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <termio.h>
#include <unistd.h>
bool kbhit(void) {
struct termios original;
tcgetattr(STDIN_FILENO, &original);
struct termios term;
memcpy(&term, &original, sizeof(term));
term.c_lflag &= ~ICANON;
tcsetattr(STDIN_FILENO, TCSANOW, &term);
int characters_buffered = 0;
ioctl(STDIN_FILENO, FIONREAD, &characters_buffered);
tcsetattr(STDIN_FILENO, TCSANOW, &original);
bool pressed = (characters_buffered != 0);
return pressed;
}
void echoOff(void) {
struct termios term;
tcgetattr(STDIN_FILENO, &term);
term.c_lflag &= ~ECHO;
tcsetattr(STDIN_FILENO, TCSANOW, &term);
}
void echoOn(void) {
struct termios term;
tcgetattr(STDIN_FILENO, &term);
term.c_lflag |= ECHO;
tcsetattr(STDIN_FILENO, TCSANOW, &term);
}
#endif
Testcode:
Code:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <wiringPi.h>
#include "rpiconio.h"
int main(void)
{
long i=0;
echoOff();
int c = '\0';
while (c != 'q') {
if (kbhit())
{
c = getchar();
printf("(hier ggf. auskommentieren:) got key \'%c\'\n", c);
if(c==27) { printf("\nuser break\n"); return 1; }
}
printf("%ld\n", ++i);
delay(100);
}
echoOn();
return 0;
}
Lesezeichen