private PowerMateState ParseState(byte[] data) { if (data.Length >= 6) { PowerMateButtonState buttonState = data[0] == 0 ? PowerMateButtonState.Up : PowerMateButtonState.Down; int knobDisplacement = data[1] < 128 ? data[1] : -256 + data[1]; int ledBrightness = data[2]; bool ledPulseEnabled = (data[4] & 0x01) == 0x01; bool ledPulseDuringSleepEnabled = (data[4] & 0x04) == 0x04; int ledPulseSpeedFlags = (data[4] & 0x30) >> 4; int ledPulseSpeed = 0; switch (ledPulseSpeedFlags) { case 0: ledPulseSpeed = -data[5]; break; case 1: ledPulseSpeed = 0; break; case 2: ledPulseSpeed = data[5]; break; } return(new PowerMateState(buttonState, knobDisplacement, ledBrightness, ledPulseEnabled, ledPulseDuringSleepEnabled, ledPulseSpeed)); } else { return(new PowerMateState()); // PowerMateState.Invalid() will return false } }
/// <summary> /// Initializes a new instance (valid) of the PowerMate class. /// </summary> /// <param name="buttonState"></param> /// <param name="knobDisplacement"></param> /// <param name="ledBrightness"></param> /// <param name="ledPulseEnabled"></param> /// <param name="ledPulseDuringSleepEnabled"></param> /// <param name="ledPulseSpeed"></param> public PowerMateState(PowerMateButtonState buttonState, int knobDisplacement, int ledBrightness, bool ledPulseEnabled, bool ledPulseDuringSleepEnabled, int ledPulseSpeed) { this.buttonState = buttonState; this.knobDisplacement = knobDisplacement; this.ledBrightness = ledBrightness; this.ledPulseEnabled = ledPulseEnabled; this.ledPulseDuringSleepEnabled = ledPulseDuringSleepEnabled; this.ledPulseSpeed = ledPulseSpeed; this.valid = true; }