7#include <hidapi/hidapi.h>
11#include <condition_variable>
14#include <unordered_map>
17#include <hidapi/hidapi_darwin.h>
20#include "MRPch/MRWinapi.h"
21#include <hidapi/hidapi_winapi.h>
28 typedef std::array<unsigned char, 13> DataPacketRaw;
29 typedef short unsigned int VendorId;
30 typedef short unsigned int ProductId;
31 struct SpaceMouseAction {
32 bool isButtonStateChanged =
false;
33 std::bitset<SMB_BUTTON_COUNT> buttons = 0;
34 Vector3f translate = { 0.0f, 0.0f, 0.0f };
35 Vector3f rotate = { 0.0f, 0.0f, 0.0f };
41 bool initialize( std::function<
void(
const std::string&)> deviceSignal )
override;
49 return activeMouseScrollZoom_;
53 void initListenerThread_();
54 void setButtonsMap_( VendorId vendorId, ProductId productId );
55 virtual void postFocus_(
bool focused )
override;
57 void processAction_(
const SpaceMouseAction& action );
58 float convertCoord_(
int coord_byte_low,
int coord_byte_high );
61 void updateActionWithInput_(
const DataPacketRaw& packet,
int packet_length, SpaceMouseAction& action );
63 bool findAndAttachDevice_(
bool verbose );
66 std::function<void(
const std::string&)> deviceSignal_;
67 hid_device* device_ =
nullptr;
68 bool anyAction_ =
false;
69 const std::vector<std::vector<SpaceMouseButtons>>* buttonsMapPtr_ =
nullptr;
70 std::bitset<SMB_BUTTON_COUNT> buttonsState_;
71 std::thread listenerThread_;
72 std::atomic_bool terminateListenerThread_{
false };
73 std::mutex syncThreadMutex_;
74 std::condition_variable cv_;
75 DataPacketRaw dataPacket_;
76 int packetLength_ = 0;
77 std::atomic_bool active_{
false };
78 bool activeMouseScrollZoom_ =
false;
81 const std::unordered_map<VendorId, std::vector<ProductId>> vendor2device_ = {
116 std::vector<std::vector<SpaceMouseButtons>> buttonMapCompact = {
130 std::vector<std::vector<SpaceMouseButtons>> buttonMapPro = {
140 std::vector<std::vector<SpaceMouseButtons>> buttonMapEnterprise = {
Definition MRSpaceMouseHandlerHidapi.h:27
MRVIEWER_API bool isMouseScrollZoomActive()
Definition MRSpaceMouseHandlerHidapi.h:47
MRVIEWER_API void activateMouseScrollZoom(bool activeMouseScrollZoom)
SpaceMouseHandlerHidapi()
void handle() override
handle device state and call Viewer signals
~SpaceMouseHandlerHidapi() override
bool initialize(std::function< void(const std::string &)> deviceSignal) override
base class for handler of spacemouse devices
Definition MRSpaceMouseHandler.h:56
Definition MRCameraOrientationPlugin.h:8
@ SMB_SHIFT
Definition MRSpaceMouseHandler.h:19
@ SMB_ALT
Definition MRSpaceMouseHandler.h:21
@ SMB_FIT
Definition MRSpaceMouseHandler.h:38
@ SMB_RIGHT
Definition MRSpaceMouseHandler.h:40
@ SMB_MENU
Definition MRSpaceMouseHandler.h:14
@ SMB_ROLL_CW
Definition MRSpaceMouseHandler.h:42
@ SMB_NO
Definition MRSpaceMouseHandler.h:13
@ SMB_CUSTOM_1
Definition MRSpaceMouseHandler.h:25
@ SMB_CUSTOM_3
Definition MRSpaceMouseHandler.h:27
@ SMB_CUSTOM_2
Definition MRSpaceMouseHandler.h:26
@ SMB_FRONT
Definition MRSpaceMouseHandler.h:41
@ SMB_ESC
Definition MRSpaceMouseHandler.h:16
@ SMB_TOP
Definition MRSpaceMouseHandler.h:39
@ SMB_CUSTOM_4
Definition MRSpaceMouseHandler.h:28
@ SMB_LOCK_ROT
Definition MRSpaceMouseHandler.h:43
@ SMB_CTRL
Definition MRSpaceMouseHandler.h:20
class to subscribe on PostFocusSingal
Definition MRViewerEventsListener.h:388