Я написал getSample (DevicePath) функция, которая читает необработанные события ввода с клавиатуры, однако после запуска этой функции, Ncurses ничего не отображает
включает в себя
#include <linux/input.h>
#include <unistd.h>
#include <fcntl.h>
#include <ncurses.h>
#include <vector>
#include <string>
getSample
const int KEY_PRESSED = 1;
const int KEY_RELEASED = 0;
std::vector<input_event> getSample(std::string devicePath) {
std::vector<input_event> events;
int fileDescriptor = open(devicePath.c_str(), O_RDONLY);
while (true) {
struct input_event event;
read(fileDescriptor, &event, sizeof(struct input_event));
if (event.type == EV_KEY)
if (event.value == KEY_PRESSED || event.value == KEY_RELEASED) {
if (event.code == 28 && event.value == KEY_PRESSED)
break;
events.push_back(event);
}
}
close(fileDescriptor);
return events;
}
главный
int main() {
std::string devicePath = "/dev/input/by-id/""usb-Microsft_Microsoft_Wireless_Desktop_Receiver_3.""1-event-kbd";
std::vector<input_event> sample = getSample(devicePath);
initscr();
printw("Hello World!");
refresh();
getch();
endwin();
return 0;
}
Есть ли способ это исправить?
Совет
функция getSample работает правильно, потому что когда я заменяю Ncurses код с простым Е (), все отлично работает
int main() {
std::string devicePath = "/dev/input/by-id/""usb-Microsft_Microsoft_Wireless_Desktop_Receiver_3.""1-event-kbd";
std::vector<input_event> sample = getSample(devicePath);
for (unsigned int i = 0; i < sample.size(); i++)
printf("%d | %3d | %ld.%06ld\n", sample[i].value, sample[i].code,
(long)sample[i].time.tv_sec, (long)sample[i].time.tv_usec);
return 0;
}
Задача ещё не решена.