forked from mirror/joycontrol
parse imu data from input report
This commit is contained in:
@@ -112,6 +112,33 @@ class InputReport:
|
|||||||
for i in range(14, 50):
|
for i in range(14, 50):
|
||||||
self.data[i] = 0x00
|
self.data[i] = 0x00
|
||||||
|
|
||||||
|
def _parse_16_bit_le_triplet(self, offset):
|
||||||
|
"""
|
||||||
|
:param offset: in the data list
|
||||||
|
:returns three int values each packed into two bytes in little endian
|
||||||
|
"""
|
||||||
|
return (self.data[offset] << 8) + self.data[offset + 1], \
|
||||||
|
(self.data[offset + 2] << 8) + self.data[offset + 3], \
|
||||||
|
(self.data[offset + 4] << 8) + self.data[offset + 5]
|
||||||
|
|
||||||
|
def get_imu_data(self):
|
||||||
|
if not 0x30 <= self.get_input_report_id() <= 0x33:
|
||||||
|
raise ValueError('No IMU data!')
|
||||||
|
|
||||||
|
acc, gyro = [], []
|
||||||
|
|
||||||
|
offset = 14
|
||||||
|
for i in range(3):
|
||||||
|
x, y, z = self._parse_16_bit_le_triplet(offset)
|
||||||
|
acc.append((x, y, z))
|
||||||
|
offset += 6
|
||||||
|
|
||||||
|
roll, pitch, yaw = self._parse_16_bit_le_triplet(offset)
|
||||||
|
gyro.append((roll, pitch, yaw))
|
||||||
|
offset += 6
|
||||||
|
|
||||||
|
return acc, gyro
|
||||||
|
|
||||||
def set_ir_nfc_data(self, data):
|
def set_ir_nfc_data(self, data):
|
||||||
if 50 + len(data) > len(self.data):
|
if 50 + len(data) > len(self.data):
|
||||||
raise ValueError('Too much data.')
|
raise ValueError('Too much data.')
|
||||||
|
|||||||
Reference in New Issue
Block a user