Open FFBoard
Open source force feedback firmware
ShifterAnalog.h
Go to the documentation of this file.
1/*
2 * ShifterG29.h
3 *
4 * Created on: 27.02.2020
5 * Author: Yannick
6 */
7
8#ifndef SHIFTERANALOG_H_
9#define SHIFTERANALOG_H_
10
11#include <vector>
12
13#include "ButtonSource.h"
14#include "CommandHandler.h"
15#include "PersistentStorage.h"
16#include "SPI.h"
17
28
29enum class ShifterMode : uint8_t {G29_H=0,G29_seq=1,G27_H=2,G27_seq=3};
30
31enum class ShifterAnalog_commands : uint32_t{
33};
34
35public:
36 static constexpr int number_of_modes{4};
37 const std::array<std::string, number_of_modes> mode_names {"G29-H","G29 Sequential","G27-H","G27 Sequential"};
38 static constexpr std::array<bool, number_of_modes> mode_uses_spi {false, false, true, true};
39 static constexpr std::array<bool, number_of_modes> mode_uses_local_reverse {true, true, false, false};
40
42 virtual ~ShifterAnalog();
43
46 static bool isCreatable() {return true;};
47
48 uint8_t readButtons(uint64_t* buf) override;
49 uint16_t getBtnNum(); // Amount of readable buttons
50
51 void saveFlash() override;
52 void restoreFlash() override;
53
54 std::string printModes();
55
56 CommandStatus command(const ParsedCommand& cmd,std::vector<CommandReply>& replies) override;
57 void registerCommands();
58 virtual std::string getHelpstring(){return "Analog 6+1 gear shifter button source";}
60private:
62 public:
64
65 static constexpr int numUserButtons{12};
66
67 uint16_t getUserButtons();
68 bool getReverseButton();
69 private:
70 uint16_t buttonStates{0};
71
72 };
73
75
76 uint8_t x_chan{6};
77 uint8_t y_chan{5};
78 uint8_t reverseButtonNum{1};
79 uint8_t cs_pin_num{1};
80
81 // H-Shifter axis values (Measured for G29)
82 uint16_t X_12{25600};
83 uint16_t X_56{40000};
84 uint16_t Y_135{51200};
85 uint16_t Y_246{13600};
86
87 uint16_t x_val{0};
88 uint16_t y_val{0};
89 bool reverseButtonState{false};
90 uint8_t gear{0};
91
92 uint8_t bitshift = 0;
93
94 std::unique_ptr<G27ShifterButtonClient> g27ShifterButtonClient;
95
96 static bool isG27Mode(ShifterMode m);
97
98 void updateAdc();
99 void setMode(ShifterMode newMode);
100 void setCSPin(uint8_t new_cs_pin_num);
101 void calculateGear();
102 void updateReverseState();
103 int getUserButtons(uint64_t* buf);
104};
105
106#endif /* SHIFTERANALOG_H_ */
ClassType
Definition: ClassIDs.h:12
CommandStatus
Definition: SPI.h:100
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies) override
const std::array< std::string, number_of_modes > mode_names
Definition: ShifterAnalog.h:37
virtual ~ShifterAnalog()
std::unique_ptr< G27ShifterButtonClient > g27ShifterButtonClient
Definition: ShifterAnalog.h:94
uint16_t X_56
Definition: ShifterAnalog.h:83
uint16_t x_val
Definition: ShifterAnalog.h:87
uint16_t y_val
Definition: ShifterAnalog.h:88
const ClassType getClassType() override
returns the used classchooser selection id of this instance
Definition: ShifterAnalog.h:59
static ClassIdentifier info
Definition: ShifterAnalog.h:45
void calculateGear()
uint8_t cs_pin_num
Definition: ShifterAnalog.h:79
uint8_t y_chan
Definition: ShifterAnalog.h:77
uint16_t Y_246
Definition: ShifterAnalog.h:85
uint8_t bitshift
Definition: ShifterAnalog.h:92
uint8_t reverseButtonNum
Definition: ShifterAnalog.h:78
int getUserButtons(uint64_t *buf)
void updateReverseState()
void saveFlash() override
uint16_t getBtnNum()
static constexpr std::array< bool, number_of_modes > mode_uses_local_reverse
Definition: ShifterAnalog.h:39
void registerCommands()
uint16_t X_12
Definition: ShifterAnalog.h:82
uint16_t Y_135
Definition: ShifterAnalog.h:84
virtual std::string getHelpstring()
Definition: ShifterAnalog.h:58
void restoreFlash() override
std::string printModes()
uint8_t x_chan
Definition: ShifterAnalog.h:76
void setCSPin(uint8_t new_cs_pin_num)
static bool isG27Mode(ShifterMode m)
static constexpr int number_of_modes
Definition: ShifterAnalog.h:36
const ClassIdentifier getInfo()
static bool isCreatable()
Definition: ShifterAnalog.h:46
uint8_t readButtons(uint64_t *buf) override
bool reverseButtonState
Definition: ShifterAnalog.h:89
ShifterMode mode
Definition: ShifterAnalog.h:74
void setMode(ShifterMode newMode)
static constexpr std::array< bool, number_of_modes > mode_uses_spi
Definition: ShifterAnalog.h:38