Open FFBoard
Open source force feedback firmware
FFBHIDMain.h
Go to the documentation of this file.
1/*
2 * FFBWheel.h
3 *
4 * Created on: 31.01.2020
5 * Author: Yannick
6 */
7
8#ifndef SRC_FFBWHEEL_H_
9#define SRC_FFBWHEEL_H_
10//#include <CmdParser.h>
11#include <CanAnalog.h>
12#include <FFBoardMain.h>
13#include <MotorPWM.h>
14
15#include "TMC4671.h"
16#include "flash_helpers.h"
17#include "ButtonSource.h"
18#include "EncoderLocal.h"
19
20#include "Axis.h"
21#include "cppmain.h"
22#include "HidFFB.h"
23#include "TimerHandler.h"
24#include "ClassChooser.h"
25#include "ExtiHandler.h"
26#include "AxesManager.h"
27#include "EffectsCalculator.h"
28#include "ffb_defs.h"
29#include "UsbHidHandler.h"
30#include "ErrorHandler.h"
31#include "memory"
32#include "HidCommandInterface.h"
33#include "SelectableInputs.h"
34#include "thread.hpp"
35
37 enum class FFBWheel_commands : uint32_t{
39 };
40
41public:
42 FFBHIDMain(uint8_t axisCount);
43 virtual ~FFBHIDMain();
44 void setFFBEffectsCalc(std::shared_ptr<EffectsControlItf> ffb,std::shared_ptr<EffectsCalculator> effects_calc);
45
46 //static ClassIdentifier info;
48 static bool isCreatable() {return true;};
49
50 CommandStatus command(const ParsedCommand& cmd,std::vector<CommandReply>& replies);
51 void registerCommands();
52 virtual std::string getHelpstring(){
53 return "Force feedback HID game controller";
54 }
55
56
57 virtual void usbInit() = 0; // initialize a composite usb device
58 void usbSuspend(); // Called on usb disconnect and suspend
59 void usbResume(); // Called on usb resume
60
61 void saveFlash();
62 void restoreFlash();
63
64 void Run();
65 void updateControl();
66
67 void emergencyStop(bool reset);
68 uint32_t getRate();
69 bool getFfbActive();
70
71 //void timerElapsed(TIM_HandleTypeDef* htim);
72 void exti(uint16_t GPIO_Pin);
73
74 void errorCallback(const Error &error, bool cleared);
75
76 void systick();
77
78protected:
79 std::shared_ptr<EffectsControlItf> ffb;
80 std::shared_ptr<EffectsCalculator> effects_calc;
81 uint8_t axisCount=0;
82
83private:
85 void send_report();
86 const bool allowEstopReset = true; // Resets the Estop when the pin is released
87 //bool lastEstopState = false;
88 const Error estopError = Error(ErrorCode::emergencyStop, ErrorType::critical, "Emergency stop button triggered");
89
90 /* USB Report rate
91 * Warning: Report rate initialized by bInterval is overridden by saved speed preset at startup!
92 */
93 void setReportRate(uint8_t rateidx);
94 uint8_t usb_report_rate = HID_BINTERVAL; //1 = 1000hz, 2 = 500hz, 3 = 333hz 4 = 250hz, 5 = 200hz 6 = 166hz, 8 = 125hz etc...
96 const uint8_t usb_report_rates[4] = {1,2,4,8}; // Maps stored hid speed to report rates
97
98 std::string usb_report_rates_names();
99
100 uint8_t report_rate_cnt = 0;
101
102 std::unique_ptr<AxesManager> axes_manager;
103 //TIM_HandleTypeDef* timer_update;
104
105 std::vector<std::unique_ptr<ButtonSource>> btns;
106 std::vector<std::unique_ptr<AnalogSource>> analog_inputs;
107
108 reportHID_t reportHID;
109 reportHID_t lastReportHID;
110 uint8_t reportSendCounter = 0;
111
112 const uint8_t analogAxisCount = 8;
113 //HID_CommandInterface hidCommands; // Enables full HID control
114 std::unique_ptr<HID_CommandInterface> hidCommands = std::make_unique<HID_CommandInterface>();
115
116 uint32_t lastUsbReportTick = 0;
117
118 volatile uint32_t lastEstop = 0;
119};
120
121#endif /* SRC_FFBWHEEL_H_ */
CommandStatus
std::shared_ptr< EffectsControlItf > ffb
Definition: FFBHIDMain.h:79
uint32_t getRate()
Definition: FFBHIDMain.cpp:137
void setReportRate(uint8_t rateidx)
Definition: FFBHIDMain.cpp:205
void Run()
Definition: FFBHIDMain.cpp:85
void usbResume()
Definition: FFBHIDMain.cpp:250
void usbSuspend()
Definition: FFBHIDMain.cpp:238
std::string usb_report_rates_names()
Definition: FFBHIDMain.cpp:214
void exti(uint16_t GPIO_Pin)
Definition: FFBHIDMain.cpp:262
static bool isCreatable()
Definition: FFBHIDMain.h:48
volatile Control_t control
Definition: FFBHIDMain.h:84
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies)
void systick()
uint8_t usb_report_rate
Definition: FFBHIDMain.h:94
void restoreFlash()
Definition: FFBHIDMain.cpp:55
const Error estopError
Definition: FFBHIDMain.h:88
uint8_t axisCount
Definition: FFBHIDMain.h:81
std::vector< std::unique_ptr< ButtonSource > > btns
Definition: FFBHIDMain.h:105
reportHID_t lastReportHID
Definition: FFBHIDMain.h:109
void saveFlash()
Definition: FFBHIDMain.cpp:73
volatile uint32_t lastEstop
Definition: FFBHIDMain.h:118
uint8_t usb_report_rate_idx
Definition: FFBHIDMain.h:95
virtual std::string getHelpstring()
Definition: FFBHIDMain.h:52
std::unique_ptr< AxesManager > axes_manager
Definition: FFBHIDMain.h:102
const bool allowEstopReset
Definition: FFBHIDMain.h:86
void setFFBEffectsCalc(std::shared_ptr< EffectsControlItf > ffb, std::shared_ptr< EffectsCalculator > effects_calc)
Definition: FFBHIDMain.cpp:39
bool getFfbActive()
Definition: FFBHIDMain.cpp:141
const uint8_t analogAxisCount
Definition: FFBHIDMain.h:112
reportHID_t reportHID
Definition: FFBHIDMain.h:108
FFBHIDMain(uint8_t axisCount)
Definition: FFBHIDMain.cpp:23
virtual ~FFBHIDMain()
Definition: FFBHIDMain.cpp:48
void send_report()
Definition: FFBHIDMain.cpp:148
std::vector< std::unique_ptr< AnalogSource > > analog_inputs
Definition: FFBHIDMain.h:106
std::shared_ptr< EffectsCalculator > effects_calc
Definition: FFBHIDMain.h:80
uint8_t report_rate_cnt
Definition: FFBHIDMain.h:100
void updateControl()
Definition: FFBHIDMain.cpp:103
const ClassIdentifier getInfo()=0
void errorCallback(const Error &error, bool cleared)
Definition: FFBHIDMain.cpp:290
void emergencyStop(bool reset)
Definition: FFBHIDMain.cpp:224
const uint8_t usb_report_rates[4]
Definition: FFBHIDMain.h:96
std::unique_ptr< HID_CommandInterface > hidCommands
Definition: FFBHIDMain.h:114
uint32_t lastUsbReportTick
Definition: FFBHIDMain.h:116
virtual void usbInit()=0
uint8_t reportSendCounter
Definition: FFBHIDMain.h:110
Definition: Axis.h:38