Merge pull request #8033 from SamGondelman/xboxFix

Game pads work after falling asleep and being reactivated
This commit is contained in:
Brad Hefta-Gaub 2016-06-08 16:27:26 -07:00
commit fc5214c938
5 changed files with 63 additions and 63 deletions

View file

@ -1,14 +1,14 @@
{ {
"name": "XBox to Standard", "name": "XBox to Standard",
"channels": [ "channels": [
{ "from": "GamePad.LY", "to": "Standard.LY" }, { "from": "GamePad.LY", "filters": { "type": "deadZone", "min": 0.05 }, "to": "Standard.LY" },
{ "from": "GamePad.LX", "to": "Standard.LX" }, { "from": "GamePad.LX", "filters": { "type": "deadZone", "min": 0.05 }, "to": "Standard.LX" },
{ "from": "GamePad.LT", "to": "Standard.LT" }, { "from": "GamePad.LT", "to": "Standard.LT" },
{ "from": "GamePad.LB", "to": "Standard.LB" }, { "from": "GamePad.LB", "to": "Standard.LB" },
{ "from": "GamePad.LS", "to": "Standard.LS" }, { "from": "GamePad.LS", "to": "Standard.LS" },
{ "from": "GamePad.RY", "to": "Standard.RY" }, { "from": "GamePad.RY", "filters": { "type": "deadZone", "min": 0.05 }, "to": "Standard.RY" },
{ "from": "GamePad.RX", "to": "Standard.RX" }, { "from": "GamePad.RX", "filters": { "type": "deadZone", "min": 0.05 }, "to": "Standard.RX" },
{ "from": "GamePad.RT", "to": "Standard.RT" }, { "from": "GamePad.RT", "to": "Standard.RT" },
{ "from": "GamePad.RB", "to": "Standard.RB" }, { "from": "GamePad.RB", "to": "Standard.RB" },
{ "from": "GamePad.RS", "to": "Standard.RS" }, { "from": "GamePad.RS", "to": "Standard.RS" },

View file

@ -62,14 +62,6 @@ namespace controller {
UserInputMapper::~UserInputMapper() { UserInputMapper::~UserInputMapper() {
} }
int UserInputMapper::recordDeviceOfType(const QString& deviceName) {
if (!_deviceCounts.contains(deviceName)) {
_deviceCounts[deviceName] = 0;
}
_deviceCounts[deviceName] += 1;
return _deviceCounts[deviceName];
}
void UserInputMapper::registerDevice(InputDevice::Pointer device) { void UserInputMapper::registerDevice(InputDevice::Pointer device) {
Locker locker(_lock); Locker locker(_lock);
if (device->_deviceID == Input::INVALID_DEVICE) { if (device->_deviceID == Input::INVALID_DEVICE) {
@ -77,8 +69,6 @@ void UserInputMapper::registerDevice(InputDevice::Pointer device) {
} }
const auto& deviceID = device->_deviceID; const auto& deviceID = device->_deviceID;
recordDeviceOfType(device->getName());
qCDebug(controllers) << "Registered input device <" << device->getName() << "> deviceID = " << deviceID; qCDebug(controllers) << "Registered input device <" << device->getName() << "> deviceID = " << deviceID;
for (const auto& inputMapping : device->getAvailableInputs()) { for (const auto& inputMapping : device->getAvailableInputs()) {
@ -134,6 +124,15 @@ void UserInputMapper::removeDevice(int deviceID) {
_mappingsByDevice.erase(mappingsEntry); _mappingsByDevice.erase(mappingsEntry);
} }
for (const auto& inputMapping : device->getAvailableInputs()) {
const auto& input = inputMapping.first;
auto endpoint = _endpointsByInput.find(input);
if (endpoint != _endpointsByInput.end()) {
_inputsByEndpoint.erase((*endpoint).second);
_endpointsByInput.erase(input);
}
}
_registeredDevices.erase(proxyEntry); _registeredDevices.erase(proxyEntry);
emit hardwareChanged(); emit hardwareChanged();

View file

@ -143,9 +143,6 @@ namespace controller {
std::vector<Pose> _poseStates = std::vector<Pose>(toInt(Action::NUM_ACTIONS)); std::vector<Pose> _poseStates = std::vector<Pose>(toInt(Action::NUM_ACTIONS));
std::vector<float> _lastStandardStates = std::vector<float>(); std::vector<float> _lastStandardStates = std::vector<float>();
int recordDeviceOfType(const QString& deviceName);
QHash<const QString&, int> _deviceCounts;
static float getValue(const EndpointPointer& endpoint, bool peek = false); static float getValue(const EndpointPointer& endpoint, bool peek = false);
static Pose getPose(const EndpointPointer& endpoint, bool peek = false); static Pose getPose(const EndpointPointer& endpoint, bool peek = false);

View file

@ -81,7 +81,8 @@ bool Joystick::triggerHapticPulse(float strength, float duration, controller::Ha
controller::Input::NamedVector Joystick::getAvailableInputs() const { controller::Input::NamedVector Joystick::getAvailableInputs() const {
using namespace controller; using namespace controller;
static const Input::NamedVector availableInputs{ if (_availableInputs.length() == 0) {
_availableInputs = {
makePair(A, "A"), makePair(A, "A"),
makePair(B, "B"), makePair(B, "B"),
makePair(X, "X"), makePair(X, "X"),
@ -127,7 +128,8 @@ controller::Input::NamedVector Joystick::getAvailableInputs() const {
makePair(DL, "Left"), makePair(DL, "Left"),
makePair(DR, "Right"), makePair(DR, "Right"),
}; };
return availableInputs; }
return _availableInputs;
} }
QString Joystick::getDefaultMappingConfig() const { QString Joystick::getDefaultMappingConfig() const {

View file

@ -56,6 +56,8 @@ private:
SDL_Joystick* _sdlJoystick; SDL_Joystick* _sdlJoystick;
SDL_Haptic* _sdlHaptic; SDL_Haptic* _sdlHaptic;
SDL_JoystickID _instanceId; SDL_JoystickID _instanceId;
mutable controller::Input::NamedVector _availableInputs;
}; };
#endif // hifi_Joystick_h #endif // hifi_Joystick_h