public void SetupLeds(JoyConSingleLed firstLed, JoyConSingleLed secondLed, JoyConSingleLed thirdLed, JoyConSingleLed fourthLed) { if (IsDisposed) { throw new InvalidOperationException("Already disposed"); } Logger.Debug($"Set LEDs {firstLed}, {secondLed}, {thirdLed}, {fourthLed} to JoyCon {Guid}"); byte light = 0; CalculateLight(ref light, firstLed, 1); CalculateLight(ref light, secondLed, 2); CalculateLight(ref light, thirdLed, 4); CalculateLight(ref light, fourthLed, 8); bool autoClose = !IsAcquired; _device.Write(1, 0x30, new[] { light }); if (autoClose) { _device.CloseDevice(); } }
private void CalculateLight(ref byte light, JoyConSingleLed led, byte number) { var flashNumber = (byte)(number * 0x10); switch (led) { case JoyConSingleLed.On: light |= number; if ((light & flashNumber) != 0) { light ^= flashNumber; } break; case JoyConSingleLed.Off: if ((light & number) != 0) { light ^= number; } if ((light & flashNumber) != 0) { light ^= flashNumber; } break; case JoyConSingleLed.Flash: if ((light & number) != 0) { light ^= number; } light |= flashNumber; break; default: throw new NotImplementedException(); } }
public void SetupLeds(JoyConSingleLed firstLed, JoyConSingleLed secondLed, JoyConSingleLed thirdLed, JoyConSingleLed fourthLed) { LeftJoyCon.SetupLeds(firstLed, secondLed, thirdLed, fourthLed); RightJoyCon.SetupLeds(firstLed, secondLed, thirdLed, fourthLed); }