Open FFBoard
Open source force feedback firmware
Loading...
Searching...
No Matches
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
20
28
29enum class ShifterMode : uint8_t {G29_H=0,G29_seq=1,G27_H=2,G27_seq=3};
30
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
45 static ClassIdentifier info;
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
@ Buttonsource
Definition ClassIDs.h:17
CommandStatus
CommandHandler(const char *clsname, uint16_t clsid, uint8_t instance=0)
SPIDevice(SPIPort &port, OutputPin csPin)
Definition SPI.cpp:332
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies) override
const std::array< std::string, number_of_modes > mode_names
virtual ~ShifterAnalog()
std::unique_ptr< G27ShifterButtonClient > g27ShifterButtonClient
const ClassType getClassType() override
returns the used classchooser selection id of this instance
uint8_t cs_pin_num
uint8_t reverseButtonNum
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
void registerCommands()
virtual std::string getHelpstring()
void restoreFlash() override
std::string printModes()
void setCSPin(uint8_t new_cs_pin_num)
static bool isG27Mode(ShifterMode m)
static constexpr int number_of_modes
const ClassIdentifier getInfo()
static bool isCreatable()
uint8_t readButtons(uint64_t *buf) override
bool reverseButtonState
ShifterMode mode
void setMode(ShifterMode newMode)
static constexpr std::array< bool, number_of_modes > mode_uses_spi