bool CPeripheralAddon::MapFeature(const CPeripheral* device, const std::string& strControllerId, const ADDON::JoystickFeature& feature) { if (!m_bProvidesButtonMaps) return false; PERIPHERAL_ERROR retVal; ADDON::Joystick joystickInfo; GetJoystickInfo(device, joystickInfo); JOYSTICK_INFO joystickStruct; joystickInfo.ToStruct(joystickStruct); JOYSTICK_FEATURE addonFeature; feature.ToStruct(addonFeature); try { LogError(retVal = m_pStruct->MapFeatures(&joystickStruct, strControllerId.c_str(), 1, &addonFeature), "MapFeatures()"); } catch (std::exception &e) { LogException(e, "MapFeatures()"); return false; } if (retVal == PERIPHERAL_NO_ERROR) { // Notify observing button maps RefreshButtonMaps(device->DeviceName()); } return retVal == PERIPHERAL_NO_ERROR; }
bool CPeripheralAddon::GetIgnoredPrimitives(const CPeripheral* device, PrimitiveVector& primitives) { if (!m_bProvidesButtonMaps) return false; PERIPHERAL_ERROR retVal; ADDON::Joystick joystickInfo; GetJoystickInfo(device, joystickInfo); JOYSTICK_INFO joystickStruct; joystickInfo.ToStruct(joystickStruct); unsigned int primitiveCount = 0; JOYSTICK_DRIVER_PRIMITIVE* pPrimitives = nullptr; LogError(retVal = m_pStruct->GetIgnoredPrimitives(&joystickStruct, &primitiveCount, &pPrimitives), "GetIgnoredPrimitives()"); if (retVal == PERIPHERAL_NO_ERROR) { for (unsigned int i = 0; i < primitiveCount; i++) primitives.emplace_back(pPrimitives[i]); m_pStruct->FreePrimitives(primitiveCount, pPrimitives); return true; } return false; }
bool CPeripheralAddon::SetIgnoredPrimitives(const CPeripheral* device, const PrimitiveVector& primitives) { if (!m_bProvidesButtonMaps) return false; PERIPHERAL_ERROR retVal; ADDON::Joystick joystickInfo; GetJoystickInfo(device, joystickInfo); JOYSTICK_INFO joystickStruct; joystickInfo.ToStruct(joystickStruct); JOYSTICK_DRIVER_PRIMITIVE* addonPrimitives = nullptr; ADDON::DriverPrimitives::ToStructs(primitives, &addonPrimitives); try { LogError(retVal = m_pStruct->SetIgnoredPrimitives(&joystickStruct, primitives.size(), addonPrimitives), "SetIgnoredPrimitives()"); } catch (std::exception &e) { LogException(e, "SetIgnoredPrimitives()"); return false; } ADDON::DriverPrimitives::FreeStructs(primitives.size(), addonPrimitives); return retVal == PERIPHERAL_NO_ERROR; }
void CPeripheralAddon::RevertButtonMap(const CPeripheral* device) { if (!m_bProvidesButtonMaps) return; ADDON::Joystick joystickInfo; GetJoystickInfo(device, joystickInfo); JOYSTICK_INFO joystickStruct; joystickInfo.ToStruct(joystickStruct); m_pStruct->RevertButtonMap(&joystickStruct); }
void CPeripheralAddon::SaveButtonMap(const CPeripheral* device) { if (!m_bProvidesButtonMaps) return; ADDON::Joystick joystickInfo; GetJoystickInfo(device, joystickInfo); JOYSTICK_INFO joystickStruct; joystickInfo.ToStruct(joystickStruct); try { m_pStruct->SaveButtonMap(&joystickStruct); } catch (std::exception &e) { LogException(e, "SaveMap()"); return; } }
void CPeripheralAddon::ResetButtonMap(const CPeripheral* device, const std::string& strControllerId) { if (!m_bProvidesButtonMaps) return; ADDON::Joystick joystickInfo; GetJoystickInfo(device, joystickInfo); JOYSTICK_INFO joystickStruct; joystickInfo.ToStruct(joystickStruct); m_pStruct->ResetButtonMap(&joystickStruct, strControllerId.c_str()); // Notify observing button maps RefreshButtonMaps(device->DeviceName()); }
void CPeripheralAddon::SaveButtonMap(const CPeripheral* device) { if (!m_bProvidesButtonMaps) return; ADDON::Joystick joystickInfo; GetJoystickInfo(device, joystickInfo); JOYSTICK_INFO joystickStruct; joystickInfo.ToStruct(joystickStruct); m_pStruct->SaveButtonMap(&joystickStruct); // Notify observing button maps RefreshButtonMaps(device->DeviceName()); }
CDevice::CDevice(const ADDON::Joystick& joystick) : m_strName(joystick.Name()), m_strProvider(joystick.Provider()), m_vid(joystick.VendorID()), m_pid(joystick.ProductID()), m_buttonCount(joystick.ButtonCount()), m_hatCount(joystick.HatCount()), m_axisCount(joystick.AxisCount()) { }
void CPeripheralAddon::SetJoystickInfo(CPeripheralJoystick& joystick, const ADDON::Joystick& joystickInfo) { joystick.SetProvider(joystickInfo.Provider()); joystick.SetRequestedPort(joystickInfo.RequestedPort()); joystick.SetButtonCount(joystickInfo.ButtonCount()); joystick.SetHatCount(joystickInfo.HatCount()); joystick.SetAxisCount(joystickInfo.AxisCount()); joystick.SetMotorCount(joystickInfo.MotorCount()); joystick.SetSupportsPowerOff(joystickInfo.SupportsPowerOff()); }
bool CPeripheralAddon::MapFeature(const CPeripheral* device, const std::string& strControllerId, const ADDON::JoystickFeature& feature) { if (!m_bProvidesButtonMaps) return false; PERIPHERAL_ERROR retVal; ADDON::Joystick joystickInfo; GetJoystickInfo(device, joystickInfo); JOYSTICK_INFO joystickStruct; joystickInfo.ToStruct(joystickStruct); JOYSTICK_FEATURE addonFeature; feature.ToStruct(addonFeature); LogError(retVal = m_pStruct->MapFeatures(&joystickStruct, strControllerId.c_str(), 1, &addonFeature), "MapFeatures()"); return retVal == PERIPHERAL_NO_ERROR; }
bool CPeripheralAddon::GetFeatures(const CPeripheral* device, const std::string& strControllerId, FeatureMap& features) { if (!m_bProvidesButtonMaps) return false; PERIPHERAL_ERROR retVal; ADDON::Joystick joystickInfo; GetJoystickInfo(device, joystickInfo); JOYSTICK_INFO joystickStruct; joystickInfo.ToStruct(joystickStruct); unsigned int featureCount = 0; JOYSTICK_FEATURE* pFeatures = NULL; try { LogError(retVal = m_pStruct->GetFeatures(&joystickStruct, strControllerId.c_str(), &featureCount, &pFeatures), "GetFeatures()"); } catch (std::exception &e) { LogException(e, "GetFeatures()"); return false; } if (retVal == PERIPHERAL_NO_ERROR) { for (unsigned int i = 0; i < featureCount; i++) { ADDON::JoystickFeature feature(pFeatures[i]); if (feature.Type() != JOYSTICK_FEATURE_TYPE_UNKNOWN) features[feature.Name()] = std::move(feature); } try { m_pStruct->FreeFeatures(featureCount, pFeatures); } catch (std::exception &e) { LogException(e, "FreeFeatures()"); } return true; } return false; }
void CPeripheralAddon::GetJoystickInfo(const CPeripheral* device, ADDON::Joystick& joystickInfo) { GetPeripheralInfo(device, joystickInfo); if (device->Type() == PERIPHERAL_JOYSTICK) { const CPeripheralJoystick* joystick = static_cast<const CPeripheralJoystick*>(device); joystickInfo.SetProvider(joystick->Provider()); joystickInfo.SetButtonCount(joystick->ButtonCount()); joystickInfo.SetHatCount(joystick->HatCount()); joystickInfo.SetAxisCount(joystick->AxisCount()); joystickInfo.SetMotorCount(joystick->MotorCount()); joystickInfo.SetSupportsPowerOff(joystick->SupportsPowerOff()); } else if (device->Type() == PERIPHERAL_JOYSTICK_EMULATION) { const CPeripheralJoystickEmulation* joystick = static_cast<const CPeripheralJoystickEmulation*>(device); joystickInfo.SetName(JOYSTICK_EMULATION_BUTTON_MAP_NAME); // Override name with non-localized version joystickInfo.SetProvider(JOYSTICK_EMULATION_PROVIDER); joystickInfo.SetIndex(joystick->ControllerNumber()); } }
void CPeripheralAddon::GetJoystickInfo(const CPeripheral* device, ADDON::Joystick& joystickInfo) { GetPeripheralInfo(device, joystickInfo); if (device->Type() == PERIPHERAL_JOYSTICK) { const CPeripheralJoystick* joystick = static_cast<const CPeripheralJoystick*>(device); joystickInfo.SetProvider(joystick->Provider()); joystickInfo.SetButtonCount(joystick->ButtonCount()); joystickInfo.SetHatCount(joystick->HatCount()); joystickInfo.SetAxisCount(joystick->AxisCount()); joystickInfo.SetMotorCount(joystick->MotorCount()); joystickInfo.SetSupportsPowerOff(joystick->SupportsPowerOff()); } }