Jump to content
  • Advertisement
Sign in to follow this  
cozzie

XInput rumble not stopping...

This topic is 543 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi all,

I've started to play around with a XBone controller using the XInput API.
​So far I've managed to retrieve all buttons and sticks input without a problem.

The only thing I don't understand, is how the rumble function works.
​I know how to enable it with XINPUT_VIBRATION and the motor speeds (0 to 65xxx).
​But if I try to disable rumbling by setting the motor speeds to 0, the rumbling doesn't stop.

Do you have any idea what I'm doing wrong?
​Below is the code of the simple test application.

Any input is appreciated.

	while(!done)
	{
		XINPUT_STATE state;
		ZeroMemory(&state, sizeof(XINPUT_STATE));
		dwResult = XInputGetState(controllerId, &state);

		if(dwResult != ERROR_SUCCESS)		// controller NOT connected?
		{
			MessageBox(NULL, L"XBox controller error - state not retrieved", L"Whoops...", MB_ICONERROR);
		}

		// DIGITAL BUTTONS
		if(((state.Gamepad.wButtons & XINPUT_GAMEPAD_A) != 0))				MessageBox(NULL, L"A", L"XBone", MB_OK);			// A button
		if(((state.Gamepad.wButtons & XINPUT_GAMEPAD_B) != 0))				MessageBox(NULL, L"B", L"XBone", MB_OK);			// B button
		if(((state.Gamepad.wButtons & XINPUT_GAMEPAD_X) != 0))																	// X button + RUMBLE
		{
			XINPUT_VIBRATION rumbler;
			rumbler.wLeftMotorSpeed = 25000;
			rumbler.wRightMotorSpeed = 25000;
			XInputSetState(controllerId, &rumbler);
			//MessageBox(NULL, L"X - rumble ON", L"XBone", MB_OK);			
		}
		
		if(((state.Gamepad.wButtons & XINPUT_GAMEPAD_Y) != 0))																	// Y button + RUMBLE OFF
		{
			XINPUT_VIBRATION rumblerOff;
			rumblerOff.wLeftMotorSpeed = 0;
			rumblerOff.wRightMotorSpeed = 0;
			XInputSetState(controllerId, &rumblerOff);
			//MessageBox(NULL, L"Y - rumble OFF", L"XBone", MB_OK);
		}

		// Escape
		if(GetAsyncKeyState(VkKeyScan(VK_ESCAPE)) & 0x8000) done = true;
	}

Another question, do I need to use XInputEnable(true/false) when my application goes in/ out of scope?
​It doesn't seem to work with all XInput versions.

I'm currently including <xinput.h> and linking Xinput9_1_0.lib

Share this post


Link to post
Share on other sites
Advertisement

Thanks, I gave it a shot right away:

XInputSetState(controllerId, FALSE);

Unfortunately the same result.
I'll try to check the result that XInputSetState returns, maybe it's something else that's going wrong. I assume 'false' should give the same result as 0 and 0 for the left and right motor speeds.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!