MCPcopy Create free account
hub / github.com/MeshInspector/MeshLib / parseRawEvent

Method parseRawEvent

source/MRViewer/MRSpaceMouseDevice.cpp:65–115  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

63}
64
65void Device::parseRawEvent( const DataPacketRaw& raw, int numBytes, Action& action ) const
66{
67 if ( !valid() )
68 return;
69 // button update package
70 if ( raw[0] == 3 && buttonsMapPtr_ != nullptr )
71 {
72 action.btnStateChanged = true;
73 // for all bytes in packet
74 for ( int column = 1; column < buttonsMapPtr_->size(); ++column )
75 {
76 for ( int i = 0; i < ( *buttonsMapPtr_ )[column].size(); ++i )
77 {
78 if ( raw[column] & ( 1 << i ) )
79 action.buttons.set( int( ( *buttonsMapPtr_ )[column][i] ) );
80 }
81 }
82 return;
83 }
84
85 auto convertCoord = [] ( int coord_byte_low, int coord_byte_high )
86 {
87 int value = coord_byte_low | ( coord_byte_high << 8 );
88 if ( value > SHRT_MAX )
89 {
90 value = value - 65536;
91 }
92 float ret = ( float )value / 350.0f;
93 return ( std::abs( ret ) > 0.01f ) ? ret : 0.0f;
94 };
95
96 Vector3f matrix = { 0.0f, 0.0f, 0.0f };
97 if ( numBytes >= 7 )
98 {
99 matrix = { convertCoord( raw[1], raw[2] ),
100 convertCoord( raw[3], raw[4] ),
101 convertCoord( raw[5], raw[6] ) };
102
103 if ( raw[0] == 1 )
104 action.translate = matrix;
105 else if ( raw[0] == 2 )
106 action.rotate = matrix;
107 }
108 if ( numBytes == 13 )
109 {
110 action.translate = matrix;
111 action.rotate = { convertCoord( raw[7], raw[8] ),
112 convertCoord( raw[9], raw[10] ),
113 convertCoord( raw[11], raw[12] ) };
114 }
115}
116
117}

Callers 2

parseRawMethod · 0.80
initializeMethod · 0.80

Calls 3

absFunction · 0.85
sizeMethod · 0.45
setMethod · 0.45

Tested by

no test coverage detected