Open FFBoard
Open source force feedback firmware
HidFFB.h
Go to the documentation of this file.
1/*
2 * HidFFB.h
3 *
4 * Created on: 12.02.2020
5 * Author: Yannick
6 */
7
8#ifndef HIDFFB_H_
9#define HIDFFB_H_
10
11#include <UsbHidHandler.h>
12#include "ffb_defs.h"
13#include "PersistentStorage.h"
14#include "Filters.h"
15#include "EffectsCalculator.h"
16#include "FastAvg.h"
17
18#define X_AXIS_ENABLE 1
19#define Y_AXIS_ENABLE 2
20#define Z_AXIS_ENABLE 4
21#define DIRECTION_ENABLE(AXES) (1 << AXES)
22
23class HidFFB: public UsbHidHandler, public EffectsControlItf {
24public:
25 HidFFB(std::shared_ptr<EffectsCalculator> ec,uint8_t axisCount);
26 virtual ~HidFFB();
27
28 void hidOut(uint8_t report_id, hid_report_type_t report_type,const uint8_t* buffer, uint16_t bufsize) override;
29 uint16_t hidGet(uint8_t report_id, hid_report_type_t report_type,uint8_t* buffer, uint16_t reqlen) override;
30
31 bool getFfbActive();
32 static bool HID_SendReport(uint8_t *report,uint16_t len);
33
34 void reset_ffb();
35 void start_FFB();
36 void stop_FFB();
37 void set_FFB(bool state);
38 void set_gain(uint8_t gain);
39
40 void sendStatusReport(uint8_t effect);
41 void setDirectionEnableMask(uint8_t mask);
42
43private:
44 // HID
45 std::shared_ptr<EffectsCalculator> effects_calc;
46 std::array<FFB_Effect,EffectsCalculator::max_effects>& effects; // Must be passed in constructor
47 void new_effect(FFB_CreateNewEffect_Feature_Data_t* effect);
48 void free_effect(uint16_t id);
49 void ffb_control(uint8_t cmd);
50 void set_effect(FFB_SetEffect_t* effect);
51 void set_condition(FFB_SetCondition_Data_t* cond);
52 void set_envelope(FFB_SetEnvelope_Data_t* report);
53 void set_ramp(FFB_SetRamp_Data_t* report);
54 void set_constant_effect(FFB_SetConstantForce_Data_t* effect);
55 void set_periodic(FFB_SetPeriodic_Data_t* report);
56 void set_effect_operation(FFB_EffOp_Data_t* report);
57
58
59 void set_filters(FFB_Effect* effect);
60
61 uint8_t directionEnableMask; // Has to be adjusted if bit is not last bit after axis enable bits
62 uint16_t used_effects = 0;
63 bool ffb_active = false;
64 FFB_BlockLoad_Feature_Data_t blockLoad_report;
65 FFB_PIDPool_Feature_Data_t pool_report;
66
67 reportFFB_status_t reportFFBStatus;
68
69 uint8_t axisCount;
70};
71
72#endif /* HIDFFB_H_ */
Definition: HidFFB.h:23
std::array< FFB_Effect, EffectsCalculator::max_effects > & effects
Definition: HidFFB.h:46
reportFFB_status_t reportFFBStatus
Definition: HidFFB.h:67
void set_effect_operation(FFB_EffOp_Data_t *report)
Definition: HidFFB.cpp:383
void set_FFB(bool state)
Definition: HidFFB.cpp:188
void set_constant_effect(FFB_SetConstantForce_Data_t *effect)
Definition: HidFFB.cpp:227
void start_FFB()
Definition: HidFFB.cpp:174
uint16_t hidGet(uint8_t report_id, hid_report_type_t report_type, uint8_t *buffer, uint16_t reqlen) override
Definition: HidFFB.cpp:151
FFB_BlockLoad_Feature_Data_t blockLoad_report
Definition: HidFFB.h:64
void setDirectionEnableMask(uint8_t mask)
Definition: HidFFB.cpp:38
uint16_t used_effects
Definition: HidFFB.h:62
void free_effect(uint16_t id)
std::shared_ptr< EffectsCalculator > effects_calc
Definition: HidFFB.h:45
uint8_t directionEnableMask
Definition: HidFFB.h:61
void set_gain(uint8_t gain)
Definition: HidFFB.cpp:195
void sendStatusReport(uint8_t effect)
Definition: HidFFB.cpp:55
virtual ~HidFFB()
Definition: HidFFB.cpp:31
void set_condition(FFB_SetCondition_Data_t *cond)
Definition: HidFFB.cpp:350
FFB_PIDPool_Feature_Data_t pool_report
Definition: HidFFB.h:65
void set_envelope(FFB_SetEnvelope_Data_t *report)
Definition: HidFFB.cpp:422
bool getFfbActive()
Definition: HidFFB.cpp:43
void ffb_control(uint8_t cmd)
Definition: HidFFB.cpp:205
static bool HID_SendReport(uint8_t *report, uint16_t len)
Definition: HidFFB.cpp:47
void new_effect(FFB_CreateNewEffect_Feature_Data_t *effect)
Definition: HidFFB.cpp:240
void reset_ffb()
Definition: HidFFB.cpp:459
bool ffb_active
Definition: HidFFB.h:63
void hidOut(uint8_t report_id, hid_report_type_t report_type, const uint8_t *buffer, uint16_t bufsize) override
Definition: HidFFB.cpp:76
HidFFB(std::shared_ptr< EffectsCalculator > ec, uint8_t axisCount)
Definition: HidFFB.cpp:15
void set_ramp(FFB_SetRamp_Data_t *report)
Definition: HidFFB.cpp:435
void stop_FFB()
Definition: HidFFB.cpp:181
void set_effect(FFB_SetEffect_t *effect)
Definition: HidFFB.cpp:277
uint8_t axisCount
Definition: HidFFB.h:69
void set_filters(FFB_Effect *effect)
Definition: HidFFB.cpp:200
void set_periodic(FFB_SetPeriodic_Data_t *report)
Definition: HidFFB.cpp:445
hid_report_type_t
HID Request Report Type.
Definition: hid.h:85
uint8_t const * buffer
Definition: midi_device.h:100
uint32_t bufsize
Definition: midi_device.h:95