1 /* 2 * Copyright (C) 2015-2018 Team Kodi 3 * This file is part of Kodi - https://kodi.tv 4 * 5 * SPDX-License-Identifier: GPL-2.0-or-later 6 * See LICENSES/README.md for more information. 7 */ 8 9 #include "JoystickTranslator.h" 10 11 #include "guilib/LocalizeStrings.h" 12 #include "input/joysticks/DriverPrimitive.h" 13 #include "utils/StringUtils.h" 14 15 using namespace KODI; 16 using namespace JOYSTICK; 17 HatStateToString(HAT_STATE state)18const char* CJoystickTranslator::HatStateToString(HAT_STATE state) 19 { 20 switch (state) 21 { 22 case HAT_STATE::UP: 23 return "UP"; 24 case HAT_STATE::DOWN: 25 return "DOWN"; 26 case HAT_STATE::RIGHT: 27 return "RIGHT"; 28 case HAT_STATE::LEFT: 29 return "LEFT"; 30 case HAT_STATE::RIGHTUP: 31 return "UP RIGHT"; 32 case HAT_STATE::RIGHTDOWN: 33 return "DOWN RIGHT"; 34 case HAT_STATE::LEFTUP: 35 return "UP LEFT"; 36 case HAT_STATE::LEFTDOWN: 37 return "DOWN LEFT"; 38 default: 39 break; 40 } 41 42 return "RELEASED"; 43 } 44 TranslateAnalogStickDirection(ANALOG_STICK_DIRECTION dir)45const char* CJoystickTranslator::TranslateAnalogStickDirection(ANALOG_STICK_DIRECTION dir) 46 { 47 switch (dir) 48 { 49 case ANALOG_STICK_DIRECTION::UP: 50 return "up"; 51 case ANALOG_STICK_DIRECTION::DOWN: 52 return "down"; 53 case ANALOG_STICK_DIRECTION::RIGHT: 54 return "right"; 55 case ANALOG_STICK_DIRECTION::LEFT: 56 return "left"; 57 default: 58 break; 59 } 60 61 return ""; 62 } 63 TranslateAnalogStickDirection(const std::string & dir)64ANALOG_STICK_DIRECTION CJoystickTranslator::TranslateAnalogStickDirection(const std::string& dir) 65 { 66 if (dir == "up") 67 return ANALOG_STICK_DIRECTION::UP; 68 if (dir == "down") 69 return ANALOG_STICK_DIRECTION::DOWN; 70 if (dir == "right") 71 return ANALOG_STICK_DIRECTION::RIGHT; 72 if (dir == "left") 73 return ANALOG_STICK_DIRECTION::LEFT; 74 75 return ANALOG_STICK_DIRECTION::NONE; 76 } 77 TranslateWheelDirection(WHEEL_DIRECTION dir)78const char* CJoystickTranslator::TranslateWheelDirection(WHEEL_DIRECTION dir) 79 { 80 switch (dir) 81 { 82 case WHEEL_DIRECTION::RIGHT: 83 return "right"; 84 case WHEEL_DIRECTION::LEFT: 85 return "left"; 86 default: 87 break; 88 } 89 90 return ""; 91 } 92 TranslateWheelDirection(const std::string & dir)93WHEEL_DIRECTION CJoystickTranslator::TranslateWheelDirection(const std::string& dir) 94 { 95 if (dir == "right") 96 return WHEEL_DIRECTION::RIGHT; 97 if (dir == "left") 98 return WHEEL_DIRECTION::LEFT; 99 100 return WHEEL_DIRECTION::NONE; 101 } 102 TranslateThrottleDirection(THROTTLE_DIRECTION dir)103const char* CJoystickTranslator::TranslateThrottleDirection(THROTTLE_DIRECTION dir) 104 { 105 switch (dir) 106 { 107 case THROTTLE_DIRECTION::UP: 108 return "up"; 109 case THROTTLE_DIRECTION::DOWN: 110 return "down"; 111 default: 112 break; 113 } 114 115 return ""; 116 } 117 TranslateThrottleDirection(const std::string & dir)118THROTTLE_DIRECTION CJoystickTranslator::TranslateThrottleDirection(const std::string& dir) 119 { 120 if (dir == "up") 121 return THROTTLE_DIRECTION::UP; 122 if (dir == "down") 123 return THROTTLE_DIRECTION::DOWN; 124 125 return THROTTLE_DIRECTION::NONE; 126 } 127 PositionToSemiAxisDirection(float position)128SEMIAXIS_DIRECTION CJoystickTranslator::PositionToSemiAxisDirection(float position) 129 { 130 if (position > 0) 131 return SEMIAXIS_DIRECTION::POSITIVE; 132 else if (position < 0) 133 return SEMIAXIS_DIRECTION::NEGATIVE; 134 135 return SEMIAXIS_DIRECTION::ZERO; 136 } 137 PositionToWheelDirection(float position)138WHEEL_DIRECTION CJoystickTranslator::PositionToWheelDirection(float position) 139 { 140 if (position > 0.0f) 141 return WHEEL_DIRECTION::RIGHT; 142 else if (position < 0.0f) 143 return WHEEL_DIRECTION::LEFT; 144 145 return WHEEL_DIRECTION::NONE; 146 } 147 PositionToThrottleDirection(float position)148THROTTLE_DIRECTION CJoystickTranslator::PositionToThrottleDirection(float position) 149 { 150 if (position > 0.0f) 151 return THROTTLE_DIRECTION::UP; 152 else if (position < 0.0f) 153 return THROTTLE_DIRECTION::DOWN; 154 155 return THROTTLE_DIRECTION::NONE; 156 } 157 GetPrimitiveName(const CDriverPrimitive & primitive)158std::string CJoystickTranslator::GetPrimitiveName(const CDriverPrimitive& primitive) 159 { 160 std::string primitiveTemplate; 161 162 switch (primitive.Type()) 163 { 164 case PRIMITIVE_TYPE::BUTTON: 165 primitiveTemplate = g_localizeStrings.Get(35015); // "Button %d" 166 break; 167 case PRIMITIVE_TYPE::SEMIAXIS: 168 primitiveTemplate = g_localizeStrings.Get(35016); // "Axis %d" 169 break; 170 default: 171 break; 172 } 173 174 return StringUtils::Format(primitiveTemplate.c_str(), primitive.Index()); 175 } 176