ENABLE_3DCONNEXION_DEVICES -> Reworked parsing of data coming from device
This commit is contained in:
parent
589e003de0
commit
b41a0656b9
1 changed files with 15 additions and 42 deletions
|
@ -14,6 +14,8 @@
|
||||||
#include <boost/log/trivial.hpp>
|
#include <boost/log/trivial.hpp>
|
||||||
#include "I18N.hpp"
|
#include "I18N.hpp"
|
||||||
|
|
||||||
|
#include <bitset>
|
||||||
|
|
||||||
// WARN: If updating these lists, please also update resources/udev/90-3dconnexion.rules
|
// WARN: If updating these lists, please also update resources/udev/90-3dconnexion.rules
|
||||||
|
|
||||||
static const std::vector<int> _3DCONNEXION_VENDORS =
|
static const std::vector<int> _3DCONNEXION_VENDORS =
|
||||||
|
@ -36,12 +38,12 @@ static const std::vector<int> _3DCONNEXION_DEVICES =
|
||||||
0xc628, /* 50728 space navigator for notebooks*/
|
0xc628, /* 50728 space navigator for notebooks*/
|
||||||
0xc629, /* 50729 space pilot pro*/
|
0xc629, /* 50729 space pilot pro*/
|
||||||
0xc62b, /* 50731 space mouse pro*/
|
0xc62b, /* 50731 space mouse pro*/
|
||||||
0xc62e, /* 50734 spacemouse wireless (USB cable) */
|
0xc62e, /* 50734 spacemouse wireless (USB cable) *TESTED* */
|
||||||
0xc62f, /* 50735 spacemouse wireless receiver */
|
0xc62f, /* 50735 spacemouse wireless receiver */
|
||||||
0xc631, /* 50737 spacemouse pro wireless *TESTED* */
|
0xc631, /* 50737 spacemouse pro wireless *TESTED* */
|
||||||
0xc632, /* 50738 spacemouse pro wireless receiver */
|
0xc632, /* 50738 spacemouse pro wireless receiver */
|
||||||
0xc633, /* 50739 spacemouse enterprise */
|
0xc633, /* 50739 spacemouse enterprise */
|
||||||
0xc635, /* 50741 spacemouse compact */
|
0xc635, /* 50741 spacemouse compact *TESTED* */
|
||||||
0xc636, /* 50742 spacemouse module */
|
0xc636, /* 50742 spacemouse module */
|
||||||
0xc640, /* 50752 nulooq */
|
0xc640, /* 50752 nulooq */
|
||||||
|
|
||||||
|
@ -254,26 +256,6 @@ bool Mouse3DController::connect_device()
|
||||||
unsigned short vendor_id = 0;
|
unsigned short vendor_id = 0;
|
||||||
unsigned short product_id = 0;
|
unsigned short product_id = 0;
|
||||||
|
|
||||||
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
|
||||||
hid_device_info* cur = devices;
|
|
||||||
while (cur != nullptr)
|
|
||||||
{
|
|
||||||
std::cout << "Detected device '";
|
|
||||||
|
|
||||||
if (cur->manufacturer_string != nullptr)
|
|
||||||
std::wcout << cur->manufacturer_string << L" ";
|
|
||||||
else
|
|
||||||
std::wcout << "MMM ";
|
|
||||||
if (cur->product_string != nullptr)
|
|
||||||
std::wcout << cur->product_string;
|
|
||||||
else
|
|
||||||
std::wcout << "PPP";
|
|
||||||
std::cout << "' code: " << cur->product_id << " (" << std::hex << cur->product_id << std::dec << ")" << std::endl;
|
|
||||||
|
|
||||||
cur = cur->next;
|
|
||||||
}
|
|
||||||
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
|
||||||
|
|
||||||
hid_device_info* current = devices;
|
hid_device_info* current = devices;
|
||||||
while (current != nullptr)
|
while (current != nullptr)
|
||||||
{
|
{
|
||||||
|
@ -481,17 +463,9 @@ bool Mouse3DController::handle_wireless_packet(const DataPacket& packet)
|
||||||
|
|
||||||
double convert_input(unsigned char first, unsigned char second)
|
double convert_input(unsigned char first, unsigned char second)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
short value = first | second << 8;
|
||||||
switch (second)
|
return (double)value / 350.0;
|
||||||
{
|
|
||||||
case 0: { ret = (int)first; break; }
|
|
||||||
case 1: { ret = (int)first + 255; break; }
|
|
||||||
case 254: { ret = -511 + (int)first; break; }
|
|
||||||
case 255: { ret = -255 + (int)first; break; }
|
|
||||||
default: { break; }
|
|
||||||
}
|
}
|
||||||
return (double)ret / 349.0;
|
|
||||||
};
|
|
||||||
|
|
||||||
bool Mouse3DController::handle_packet_translation(const DataPacket& packet)
|
bool Mouse3DController::handle_packet_translation(const DataPacket& packet)
|
||||||
{
|
{
|
||||||
|
@ -527,17 +501,16 @@ bool Mouse3DController::handle_packet_rotation(const DataPacket& packet, unsigne
|
||||||
|
|
||||||
bool Mouse3DController::handle_packet_button(const DataPacket& packet, unsigned int packet_size)
|
bool Mouse3DController::handle_packet_button(const DataPacket& packet, unsigned int packet_size)
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0, base = 0; i < packet_size; ++i, base += 8)
|
unsigned int data = packet[1] | packet[2] << 8 | packet[3] << 16 | packet[4] << 24;
|
||||||
|
const std::bitset<32> data_bits{ data };
|
||||||
|
for (size_t i = 0; i < data_bits.size(); ++i)
|
||||||
{
|
{
|
||||||
for (unsigned int j = 0; j < 8; ++j)
|
if (data_bits.test(i))
|
||||||
{
|
{
|
||||||
if (packet[i + 1] & (0x1 << j))
|
m_state.append_button((unsigned int)i);
|
||||||
{
|
|
||||||
m_state.append_button(base + j);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue