попытки сделать crsf, не взлетела часть с пультом
This commit is contained in:
54
lib/port/poller.h
Normal file
54
lib/port/poller.h
Normal file
@@ -0,0 +1,54 @@
|
||||
#ifndef SDRPI_FPV_CONTROL_GROUND_PORT_POLLER_H
|
||||
#define SDRPI_FPV_CONTROL_GROUND_PORT_POLLER_H
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
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<std::shared_ptr<PollObject>> objects;
|
||||
|
||||
/**
|
||||
* Функция, которую нужно вызывать в бесконечном цикле. Вызывает `poll`, после чего выполняет обработчики событий, если нужно.
|
||||
* @param timeoutMs
|
||||
*/
|
||||
void loop(int timeoutMs = -1);
|
||||
|
||||
~PollWrapper();
|
||||
};
|
||||
|
||||
} // namespace poller
|
||||
|
||||
#endif //SDRPI_FPV_CONTROL_GROUND_PORT_POLLER_H
|
||||
Reference in New Issue
Block a user