internal void EngageMotor(OutputPort port, byte bitmaskUp, byte bitmaskDown, MotorEngagement engagement) { lock (this) { byte maskoff = (byte)~(bitmaskUp | bitmaskDown); byte newmask = engagement == MotorEngagement.Down ? bitmaskDown : engagement == MotorEngagement.Up ? bitmaskUp : (byte)0; byte newstate = (byte)((_latchState & maskoff) | newmask); UpdateLatchState(newstate); // Write non-0 value if motor should be engaged port.Write(engagement != MotorEngagement.Off); } }
private void Engage(MotorEngagement engagement) { _shield.EngageMotor(_port, _bitmaskUp, _bitmaskDown, engagement); }