private void OnReport(HidReport report) { var status = report.Data[0]; Console.WriteLine(status); var initialLeftState = LeftState; var initialMiddleState = MiddleState; var initialRightState = RightState; if ((status & LEFT_MASK) != 0) { if (initialLeftState == PedalState.UP) { LeftState = PedalState.DOWN; HandlePedalEvent(Pedal.LEFT, LeftState); } } else { var sendPedalUp = initialLeftState == PedalState.DOWN; LeftState = PedalState.UP; if (sendPedalUp) { HandlePedalEvent(Pedal.LEFT, LeftState); } } if ((status & MIDDLE_MASK) != 0) { if (MiddleState == PedalState.UP) { MiddleState = PedalState.DOWN; HandlePedalEvent(Pedal.MIDDLE, MiddleState); } } else { var sendPedalUp = initialMiddleState == PedalState.DOWN; MiddleState = PedalState.UP; if (sendPedalUp) { HandlePedalEvent(Pedal.MIDDLE, MiddleState); } } if ((status & RIGHT_MASK) != 0) { if (RightState == PedalState.UP) { RightState = PedalState.DOWN; HandlePedalEvent(Pedal.RIGHT, RightState); } } else { var sendPedalUp = initialRightState == PedalState.DOWN; RightState = PedalState.UP; if (sendPedalUp) { HandlePedalEvent(Pedal.RIGHT, RightState); } } device.ReadReport(OnReport); }