1 /*
2  *  Copyright (C) 2017-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 "JoystickUtils.h"
10 
11 #include "JoystickTranslator.h"
12 #include "utils/StringUtils.h"
13 
14 using namespace KODI;
15 using namespace JOYSTICK;
16 
MakeKeyName(const FeatureName & feature)17 std::string CJoystickUtils::MakeKeyName(const FeatureName& feature)
18 {
19   return feature;
20 }
21 
MakeKeyName(const FeatureName & feature,ANALOG_STICK_DIRECTION dir)22 std::string CJoystickUtils::MakeKeyName(const FeatureName& feature, ANALOG_STICK_DIRECTION dir)
23 {
24   std::string keyName = feature;
25 
26   if (dir != ANALOG_STICK_DIRECTION::NONE)
27     keyName += CJoystickTranslator::TranslateAnalogStickDirection(dir);
28 
29   return keyName;
30 }
31 
MakeKeyName(const FeatureName & feature,WHEEL_DIRECTION dir)32 std::string CJoystickUtils::MakeKeyName(const FeatureName& feature, WHEEL_DIRECTION dir)
33 {
34   ANALOG_STICK_DIRECTION stickDir = ANALOG_STICK_DIRECTION::NONE;
35 
36   switch (dir)
37   {
38     case WHEEL_DIRECTION::LEFT:
39       stickDir = ANALOG_STICK_DIRECTION::LEFT;
40       break;
41     case WHEEL_DIRECTION::RIGHT:
42       stickDir = ANALOG_STICK_DIRECTION::RIGHT;
43       break;
44     default:
45       break;
46   }
47 
48   return MakeKeyName(feature, stickDir);
49 }
50 
MakeKeyName(const FeatureName & feature,THROTTLE_DIRECTION dir)51 std::string CJoystickUtils::MakeKeyName(const FeatureName& feature, THROTTLE_DIRECTION dir)
52 {
53   ANALOG_STICK_DIRECTION stickDir = ANALOG_STICK_DIRECTION::NONE;
54 
55   switch (dir)
56   {
57     case THROTTLE_DIRECTION::UP:
58       stickDir = ANALOG_STICK_DIRECTION::UP;
59       break;
60     case THROTTLE_DIRECTION::DOWN:
61       stickDir = ANALOG_STICK_DIRECTION::DOWN;
62       break;
63     default:
64       break;
65   }
66 
67   return MakeKeyName(feature, stickDir);
68 }
69 
GetAnalogStickDirections()70 const std::vector<ANALOG_STICK_DIRECTION>& CJoystickUtils::GetAnalogStickDirections()
71 {
72   static std::vector<ANALOG_STICK_DIRECTION> directions;
73   if (directions.empty())
74   {
75     directions.push_back(ANALOG_STICK_DIRECTION::UP);
76     directions.push_back(ANALOG_STICK_DIRECTION::DOWN);
77     directions.push_back(ANALOG_STICK_DIRECTION::RIGHT);
78     directions.push_back(ANALOG_STICK_DIRECTION::LEFT);
79   }
80   return directions;
81 }
82 
GetWheelDirections()83 const std::vector<WHEEL_DIRECTION>& CJoystickUtils::GetWheelDirections()
84 {
85   static std::vector<WHEEL_DIRECTION> directions;
86   if (directions.empty())
87   {
88     directions.push_back(WHEEL_DIRECTION::RIGHT);
89     directions.push_back(WHEEL_DIRECTION::LEFT);
90   }
91   return directions;
92 }
93 
GetThrottleDirections()94 const std::vector<THROTTLE_DIRECTION>& CJoystickUtils::GetThrottleDirections()
95 {
96   static std::vector<THROTTLE_DIRECTION> directions;
97   if (directions.empty())
98   {
99     directions.push_back(THROTTLE_DIRECTION::UP);
100     directions.push_back(THROTTLE_DIRECTION::DOWN);
101   }
102   return directions;
103 }
104