/// <summary> /// [Native] Get the state of an NXT motor port. /// </summary> /// <param name="port">The port of the selected motor.</param> /// <returns>Returns a MotorStateOut package.</returns> public MotorStateOut GetMotorState(MotorPortSingle port) { byte[] request = new byte[] { 0x00, (byte) DirectCommand.GetOutputState, (byte) port }; byte[] reply = CompleteRequest(request); byte motorportout = reply[3]; if (reply[3] != (byte)port) { throw new NXTReplyIncorrect(); } MotorStateOut result = new MotorStateOut(); result.power = reply[4]; result.tachocount = GetInt32(reply, 13); result.blocktachocount = GetInt32(reply, 17); result.rotationcount = GetInt32(reply, 21); return result; /* NxtGetOutputStateReply result; result.power = (sbyte)reply[4]; result.mode = (NxtMotorMode)reply[5]; result.regulationMode = (NxtMotorRegulationMode)reply[6]; result.turnRatio = (sbyte)reply[7]; result.runState = (NxtMotorRunState)reply[8]; result.tachoLimit = Util.GetUInt32(reply, 9); result.tachoCount = Util.GetInt32(reply, 13); result.blockTachoCount = Util.GetInt32(reply, 17); result.rotationCount = Util.GetInt32(reply, 21); return result;*/ }
/// <summary> /// [Native] Reset the motor rotation sensor. /// </summary> /// <param name="port">The port of the selected motor.</param> /// <param name="relative">If set to true, the reset's position will be relative to the last /// movement. Otherwise, it is set at an absolute position.</param> public void ResetMotorPosition(MotorPortSingle port, bool relative) { byte[] request = new byte[] { (byte) (0x00), (byte) (DirectCommand.ResetMotorPosition), (byte) port, (byte) (relative ? 0xFF : 0x00) }; CompleteRequest(request); return; }