ArPiRobot-CoreLib C++
C++ library for ArPiRobot robots
Gamepad.hpp
1 /*
2  * Copyright 2021 Marcus Behel
3  *
4  * This file is part of ArPiRobot-CoreLib.
5  *
6  * ArPiRobot-CoreLib is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * ArPiRobot-CoreLib is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with ArPiRobot-CoreLib. If not, see <https://www.gnu.org/licenses/>.
18  */
19 
20 #pragma once
21 
22 #include <arpirobot/core/device/BaseDevice.hpp>
23 #include <arpirobot/core/drive/BaseAxisTransform.hpp>
24 #include <arpirobot/core/action/BaseActionTrigger.hpp>
25 
26 #include <unordered_map>
27 
28 namespace arpirobot{
29 
34  class Gamepad : public BaseDevice{
35  public:
39  Gamepad(int controllerNum);
40 
41  Gamepad(const Gamepad &other) = delete;
42  Gamepad &operator=(const Gamepad &other) = delete;
43 
49 
56  double getAxis(int axisNum, double deadband = 0);
57 
63  bool getButton(int buttonNum);
64 
70  int getDpad(int dpadNum);
71 
77  void setAxisTransform(int axisNum, BaseAxisTransform &transform);
78 
84  void setAxisTransform(int axisNum, std::shared_ptr<BaseAxisTransform> transform);
85 
90  void clearAxisTransform(int axisNum);
91 
92  protected:
93  void begin() override;
94 
95  bool isEnabled() override;
96 
97  bool shouldMatchRobotState() override;
98 
99  bool shouldDisableWithWatchdog() override;
100 
101  void enable() override;
102 
103  void disable() override;
104 
105  private:
106  int controllerNum;
107  std::unordered_map<int, std::shared_ptr<BaseAxisTransform>> axisTransforms;
108  };
109 
110 }
Definition: BaseAxisTransform.hpp:36
Definition: BaseDevice.hpp:35
Definition: Gamepad.hpp:34
void setAxisTransform(int axisNum, std::shared_ptr< BaseAxisTransform > transform)
Gamepad(int controllerNum)
int getDpad(int dpadNum)
void clearAxisTransform(int axisNum)
double getAxis(int axisNum, double deadband=0)
void setAxisTransform(int axisNum, BaseAxisTransform &transform)
bool getButton(int buttonNum)
Definition: ArduinoDevice.hpp:27