From c4aec144256e3f27fedd8f8de03e10cc08eecab8 Mon Sep 17 00:00:00 2001 From: Mateusz Zalega Date: Thu, 22 Oct 2015 22:41:18 +0200 Subject: Initial --- include/device.h | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 include/device.h (limited to 'include/device.h') diff --git a/include/device.h b/include/device.h new file mode 100644 index 0000000..b2d83b5 --- /dev/null +++ b/include/device.h @@ -0,0 +1,65 @@ +#ifndef DEVICE_H +#define DEVICE_H +#include +#include +#include "inttypes.h" + +#define HID_REPORT_SIZE 65 + +// TODO !! SEMAPHORE + +namespace device { +enum class CommError +{ + ERR_NO_ERROR = 0, + ERR_NOT_CONNECTED = -1, + ERR_WRONG_RESPONSE_CRC = -2, + ERR_SENDING = -3, + ERR_STATUS_NOT_OK = -4 +}; + +class Device { +public: + Device(); + + // lack of device is not actually an error, + // so it doesn't throw + virtual bool connect(); + + /* + * Sends packet of HID_REPORT_SIZE. + */ + virtual CommError send(const void *packet); + + /* + * Gets packet of HID_REPORT_SIZE. + * Can sleep. See below. + */ + virtual CommError recv(void *packet); + +protected: + uint16_t m_vid; + uint16_t m_pid; + + /* + * While the project uses Signal11 portable HIDAPI + * library, there's no way of doing it asynchronously, + * hence polling. + */ + int m_retry_count; + std::chrono::milliseconds m_retry_timeout; + + hid_device *mp_devhandle; +}; + +class Stick10 : public Device { +public: + Stick10(); +}; + +class Stick20 : public Device { +public: + Stick20(); +}; +} +#endif -- cgit v1.2.1