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
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 void setBtnTypes(uint16_t btntypes);
56 void addBtnType(uint16_t id);
57 void clearBtnTypes();
58
59 void setAinTypes(uint16_t aintypes);
60 void addAinType(uint16_t id);
61 void clearAinTypes();
62
63
64 virtual void usbInit() = 0; // initialize a composite usb device
65 void usbSuspend(); // Called on usb disconnect and suspend
66 void usbResume(); // Called on usb resume
67
68 void saveFlash();
69 void restoreFlash();
70
71 void Run();
72 void updateControl();
73
74 void emergencyStop(bool reset);
75 uint32_t getRate();
76 bool getFfbActive();
77
78 //void timerElapsed(TIM_HandleTypeDef* htim);
79 void exti(uint16_t GPIO_Pin);
80
81 void errorCallback(const Error &error, bool cleared);
82
83 void systick();
84
85protected:
86 std::shared_ptr<EffectsControlItf> ffb;
87 std::shared_ptr<EffectsCalculator> effects_calc;
88 uint8_t axisCount=0;
89
90private:
92 void send_report();
93 const bool allowEstopReset = true; // Resets the Estop when the pin is released
94 //bool lastEstopState = false;
95 const Error estopError = Error(ErrorCode::emergencyStop, ErrorType::critical, "Emergency stop button triggered");
96
97 /* USB Report rate
98 * Warning: Report rate initialized by bInterval is overridden by saved speed preset at startup!
99 */
100 void setReportRate(uint8_t rateidx);
101 uint8_t usb_report_rate = HID_BINTERVAL; //1 = 1000hz, 2 = 500hz, 3 = 333hz 4 = 250hz, 5 = 200hz 6 = 166hz, 8 = 125hz etc...
103 const uint8_t usb_report_rates[4] = {1,2,4,8}; // Maps stored hid speed to report rates
104
105 std::string usb_report_rates_names();
106
107 uint8_t report_rate_cnt = 0;
108
109 std::unique_ptr<AxesManager> axes_manager;
110 //TIM_HandleTypeDef* timer_update;
111
112 std::vector<std::unique_ptr<ButtonSource>> btns;
113 std::vector<std::unique_ptr<AnalogSource>> analog_inputs;
114
115 reportHID_t reportHID;
116 reportHID_t lastReportHID;
117 uint8_t reportSendCounter = 0;
118
119 const uint8_t analogAxisCount = 8;
120 uint16_t btnsources = 0; // Disabled by default
121 uint16_t ainsources = 0;
122
123
126
127 //HID_CommandInterface hidCommands; // Enables full HID control
128 std::unique_ptr<HID_CommandInterface> hidCommands = std::make_unique<HID_CommandInterface>();
129
130 uint32_t lastUsbReportTick = 0;
132
133 volatile uint32_t lastEstop = 0;
134};
135
136#endif /* SRC_FFBWHEEL_H_ */
CommandStatus
std::shared_ptr< EffectsControlItf > ffb
Definition: FFBHIDMain.h:86
uint32_t getRate()
Definition: FFBHIDMain.cpp:201
void setReportRate(uint8_t rateidx)
Definition: FFBHIDMain.cpp:277
void Run()
Definition: FFBHIDMain.cpp:84
void clearBtnTypes()
Definition: FFBHIDMain.cpp:137
void usbResume()
Definition: FFBHIDMain.cpp:322
void usbSuspend()
Definition: FFBHIDMain.cpp:310
std::string usb_report_rates_names()
Definition: FFBHIDMain.cpp:286
void clearAinTypes()
Definition: FFBHIDMain.cpp:170
void setAinTypes(uint16_t aintypes)
Definition: FFBHIDMain.cpp:176
void exti(uint16_t GPIO_Pin)
Definition: FFBHIDMain.cpp:334
static bool isCreatable()
Definition: FFBHIDMain.h:48
volatile Control_t control
Definition: FFBHIDMain.h:91
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies)
void systick()
uint16_t ainsources
Definition: FFBHIDMain.h:121
uint8_t usb_report_rate
Definition: FFBHIDMain.h:101
void restoreFlash()
Definition: FFBHIDMain.cpp:54
const Error estopError
Definition: FFBHIDMain.h:95
uint8_t axisCount
Definition: FFBHIDMain.h:88
std::vector< std::unique_ptr< ButtonSource > > btns
Definition: FFBHIDMain.h:112
reportHID_t lastReportHID
Definition: FFBHIDMain.h:116
cpp_freertos::BinarySemaphore sourcesSem
Definition: FFBHIDMain.h:131
void saveFlash()
Definition: FFBHIDMain.cpp:72
volatile uint32_t lastEstop
Definition: FFBHIDMain.h:133
uint8_t usb_report_rate_idx
Definition: FFBHIDMain.h:102
virtual std::string getHelpstring()
Definition: FFBHIDMain.h:52
std::unique_ptr< AxesManager > axes_manager
Definition: FFBHIDMain.h:109
const bool allowEstopReset
Definition: FFBHIDMain.h:93
ClassChooser< AnalogSource > analog_chooser
Definition: FFBHIDMain.h:125
void setFFBEffectsCalc(std::shared_ptr< EffectsControlItf > ffb, std::shared_ptr< EffectsCalculator > effects_calc)
Definition: FFBHIDMain.cpp:38
uint16_t btnsources
Definition: FFBHIDMain.h:120
bool getFfbActive()
Definition: FFBHIDMain.cpp:205
const uint8_t analogAxisCount
Definition: FFBHIDMain.h:119
reportHID_t reportHID
Definition: FFBHIDMain.h:115
FFBHIDMain(uint8_t axisCount)
Definition: FFBHIDMain.cpp:23
virtual ~FFBHIDMain()
Definition: FFBHIDMain.cpp:47
void send_report()
Definition: FFBHIDMain.cpp:212
std::vector< std::unique_ptr< AnalogSource > > analog_inputs
Definition: FFBHIDMain.h:113
std::shared_ptr< EffectsCalculator > effects_calc
Definition: FFBHIDMain.h:87
uint8_t report_rate_cnt
Definition: FFBHIDMain.h:107
void addBtnType(uint16_t id)
Definition: FFBHIDMain.cpp:158
void updateControl()
Definition: FFBHIDMain.cpp:102
void addAinType(uint16_t id)
Definition: FFBHIDMain.cpp:190
void setBtnTypes(uint16_t btntypes)
Definition: FFBHIDMain.cpp:143
const ClassIdentifier getInfo()=0
ClassChooser< ButtonSource > btn_chooser
Definition: FFBHIDMain.h:124
void errorCallback(const Error &error, bool cleared)
Definition: FFBHIDMain.cpp:362
void emergencyStop(bool reset)
Definition: FFBHIDMain.cpp:296
const uint8_t usb_report_rates[4]
Definition: FFBHIDMain.h:103
std::unique_ptr< HID_CommandInterface > hidCommands
Definition: FFBHIDMain.h:128
uint32_t lastUsbReportTick
Definition: FFBHIDMain.h:130
virtual void usbInit()=0
uint8_t reportSendCounter
Definition: FFBHIDMain.h:117
Definition: Axis.h:38