#ifndef SDRPI_FPV_CONTROL_GROUND_PORT_POLLER_H #define SDRPI_FPV_CONTROL_GROUND_PORT_POLLER_H #include #include namespace poller { /** * PollObject - базовый объект для мониторинга I/O. * Платформенно-специфичные дескрипторы хранятся в защищённых полях. */ class PollObject { public: bool isPollIn() const; bool isPollOut() const; bool isPollHup() const; virtual ~PollObject(); protected: #ifdef _WIN32 // UART HANDLE или UDP событие HANDLE hCom{INVALID_HANDLE_VALUE}; SOCKET sock{INVALID_SOCKET}; WSAEVENT winHandle{nullptr}; short revents{0}; // событие произошло #else int fd{0}; short events{0}; short revents{0}; #endif friend class PollWrapper; }; /** * Класс-обертка для мониторинга файловых дискрипторов. Использует стек для хранения массива структур мониторинга. */ class PollWrapper { public: PollWrapper(); std::vector> objects; /** * Функция, которую нужно вызывать в бесконечном цикле. Вызывает `poll`, после чего выполняет обработчики событий, если нужно. * @param timeoutMs */ void loop(int timeoutMs = -1); ~PollWrapper(); }; } // namespace poller #endif //SDRPI_FPV_CONTROL_GROUND_PORT_POLLER_H