From 4b3a9e71b3656c24dfc82266665210738369ed45 Mon Sep 17 00:00:00 2001 From: redphx <96280+redphx@users.noreply.github.com> Date: Thu, 28 Apr 2022 17:36:05 +0700 Subject: [PATCH] Prevent sending duplicate movement --- joydance/__init__.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/joydance/__init__.py b/joydance/__init__.py index 7acdac5..82580ba 100644 --- a/joydance/__init__.py +++ b/joydance/__init__.py @@ -69,6 +69,7 @@ class JoyDance: self.available_shortcuts = set() self.accel_data = [] + self.last_accel = (0, 0, 0) self.ws = None self.disconnected = False @@ -265,11 +266,10 @@ class JoyDance: await asyncio.gather( asyncio.sleep(sleep_duration), - self.collect_accelerometer_data(), - self.send_accelerometer_data(frames), + self.collect_accelerometer_data(frames), ) - async def collect_accelerometer_data(self): + async def collect_accelerometer_data(self, frames): if self.disconnected: return @@ -278,19 +278,23 @@ class JoyDance: return try: - accel = { - 'x': self.joycon.get_accel_x(), - 'y': self.joycon.get_accel_y(), - 'z': self.joycon.get_accel_z(), - } + start = time.time() + max_runtime = FRAME_DURATION * 0.5 + while time.time() - start < max_runtime: + # Make sure accelerometer axes are changed + accel = self.joycon.get_accels() # (x, y, z) + if accel != self.last_accel: + self.last_accel = accel + break # Accelerator axes on phone & Joy-Con are different so we need to swap some axes # https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering/blob/master/imu_sensor_notes.md - x = accel['y'] * -1 - y = accel['x'] - z = accel['z'] + x = accel[1] * -1 + y = accel[0] + z = accel[2] self.accel_data.append([x, y, z]) + await self.send_accelerometer_data(frames), except OSError: self.disconnect() return